@opensite/ui 1.6.7 → 1.6.8
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-architecture-fullscreen.cjs +7 -54
- package/dist/hero-architecture-fullscreen.js +7 -54
- package/dist/hero-badge-shadow-overlay.cjs +42 -45
- package/dist/hero-badge-shadow-overlay.d.cts +14 -2
- package/dist/hero-badge-shadow-overlay.d.ts +14 -2
- package/dist/hero-badge-shadow-overlay.js +42 -45
- package/dist/hero-billing-platform-logos.cjs +5 -9
- package/dist/hero-billing-platform-logos.d.cts +1 -5
- package/dist/hero-billing-platform-logos.d.ts +1 -5
- package/dist/hero-billing-platform-logos.js +5 -9
- package/dist/hero-centered-gradient-cta.cjs +12 -68
- package/dist/hero-centered-gradient-cta.js +12 -68
- package/dist/hero-conversion-video-play.cjs +13 -64
- package/dist/hero-conversion-video-play.js +13 -64
- 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 +8 -71
- package/dist/hero-dashed-border-features.js +8 -71
- package/dist/hero-design-showcase-logos.cjs +7 -32
- package/dist/hero-design-showcase-logos.js +7 -32
- package/dist/hero-floating-images.cjs +1 -1
- package/dist/hero-floating-images.js +1 -1
- package/dist/hero-grid-pattern-solutions.cjs +7 -66
- package/dist/hero-grid-pattern-solutions.js +7 -66
- package/dist/hero-hiring-animated-text.cjs +10 -5
- package/dist/hero-hiring-animated-text.js +10 -5
- package/dist/hero-marketplace-scattered-images.cjs +7 -32
- package/dist/hero-marketplace-scattered-images.js +7 -32
- package/dist/hero-mentorship-video-split.cjs +11 -14
- package/dist/hero-mentorship-video-split.js +11 -14
- package/dist/hero-mobile-app-download.cjs +2 -2
- package/dist/hero-mobile-app-download.d.cts +1 -1
- package/dist/hero-mobile-app-download.d.ts +1 -1
- package/dist/hero-mobile-app-download.js +2 -2
- package/dist/hero-premium-split-avatars.cjs +11 -9
- package/dist/hero-premium-split-avatars.d.cts +5 -1
- package/dist/hero-premium-split-avatars.d.ts +5 -1
- package/dist/hero-premium-split-avatars.js +11 -9
- package/dist/hero-presentation-platform-video.cjs +12 -9
- package/dist/hero-presentation-platform-video.d.cts +5 -1
- package/dist/hero-presentation-platform-video.d.ts +5 -1
- package/dist/hero-presentation-platform-video.js +12 -9
- package/dist/hero-productivity-launcher-video.cjs +11 -35
- package/dist/hero-productivity-launcher-video.js +11 -35
- package/dist/hero-spiral-pattern-cards.cjs +49 -92
- package/dist/hero-spiral-pattern-cards.d.cts +20 -3
- package/dist/hero-spiral-pattern-cards.d.ts +20 -3
- package/dist/hero-spiral-pattern-cards.js +49 -92
- package/dist/hero-split-spiral-shapes.cjs +43 -90
- package/dist/hero-split-spiral-shapes.d.cts +17 -4
- package/dist/hero-split-spiral-shapes.d.ts +17 -4
- package/dist/hero-split-spiral-shapes.js +43 -90
- package/dist/hero-startup-launch-cta.cjs +2 -2
- package/dist/hero-startup-launch-cta.js +2 -2
- package/dist/hero-task-timer-animated.cjs +64 -156
- package/dist/hero-task-timer-animated.d.cts +13 -1
- package/dist/hero-task-timer-animated.d.ts +13 -1
- package/dist/hero-task-timer-animated.js +64 -156
- package/dist/hero-testimonial-image-grid.cjs +10 -38
- package/dist/hero-testimonial-image-grid.js +10 -38
- package/dist/hero-therapy-testimonial-grid.cjs +11 -40
- package/dist/hero-therapy-testimonial-grid.js +11 -40
- package/dist/hero-video-background-dark.cjs +10 -34
- package/dist/hero-video-background-dark.d.cts +5 -1
- package/dist/hero-video-background-dark.d.ts +5 -1
- package/dist/hero-video-background-dark.js +10 -34
- package/dist/registry.cjs +353 -302
- package/dist/registry.js +353 -302
- package/package.json +1 -1
|
@@ -452,111 +452,6 @@ var Pressable = React__namespace.forwardRef(
|
|
|
452
452
|
}
|
|
453
453
|
);
|
|
454
454
|
Pressable.displayName = "Pressable";
|
|
455
|
-
var svgCache = /* @__PURE__ */ new Map();
|
|
456
|
-
function DynamicIcon({
|
|
457
|
-
name,
|
|
458
|
-
size = 28,
|
|
459
|
-
color,
|
|
460
|
-
className,
|
|
461
|
-
alt
|
|
462
|
-
}) {
|
|
463
|
-
const [svgContent, setSvgContent] = React__namespace.useState(null);
|
|
464
|
-
const [isLoading, setIsLoading] = React__namespace.useState(true);
|
|
465
|
-
const [error, setError] = React__namespace.useState(null);
|
|
466
|
-
const { url, iconName } = React__namespace.useMemo(() => {
|
|
467
|
-
const separator = name.includes("/") ? "/" : ":";
|
|
468
|
-
const [prefix, iconName2] = name.split(separator);
|
|
469
|
-
const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
|
|
470
|
-
return {
|
|
471
|
-
url: baseUrl,
|
|
472
|
-
iconName: iconName2
|
|
473
|
-
};
|
|
474
|
-
}, [name, size]);
|
|
475
|
-
React__namespace.useEffect(() => {
|
|
476
|
-
let isMounted = true;
|
|
477
|
-
const fetchSvg = async () => {
|
|
478
|
-
const cached = svgCache.get(url);
|
|
479
|
-
if (cached) {
|
|
480
|
-
if (isMounted) {
|
|
481
|
-
setSvgContent(cached);
|
|
482
|
-
setIsLoading(false);
|
|
483
|
-
}
|
|
484
|
-
return;
|
|
485
|
-
}
|
|
486
|
-
try {
|
|
487
|
-
setIsLoading(true);
|
|
488
|
-
setError(null);
|
|
489
|
-
const response = await fetch(url);
|
|
490
|
-
if (!response.ok) {
|
|
491
|
-
throw new Error(`Failed to fetch icon: ${response.status}`);
|
|
492
|
-
}
|
|
493
|
-
let svg = await response.text();
|
|
494
|
-
svg = processSvgForCurrentColor(svg);
|
|
495
|
-
svgCache.set(url, svg);
|
|
496
|
-
if (isMounted) {
|
|
497
|
-
setSvgContent(svg);
|
|
498
|
-
setIsLoading(false);
|
|
499
|
-
}
|
|
500
|
-
} catch (err) {
|
|
501
|
-
if (isMounted) {
|
|
502
|
-
setError(err instanceof Error ? err.message : "Failed to load icon");
|
|
503
|
-
setIsLoading(false);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
};
|
|
507
|
-
fetchSvg();
|
|
508
|
-
return () => {
|
|
509
|
-
isMounted = false;
|
|
510
|
-
};
|
|
511
|
-
}, [url]);
|
|
512
|
-
if (isLoading) {
|
|
513
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
514
|
-
"span",
|
|
515
|
-
{
|
|
516
|
-
className: cn("inline-block", className),
|
|
517
|
-
style: { width: size, height: size },
|
|
518
|
-
"aria-hidden": "true"
|
|
519
|
-
}
|
|
520
|
-
);
|
|
521
|
-
}
|
|
522
|
-
if (error || !svgContent) {
|
|
523
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
524
|
-
"span",
|
|
525
|
-
{
|
|
526
|
-
className: cn("inline-block", className),
|
|
527
|
-
style: { width: size, height: size },
|
|
528
|
-
role: "img",
|
|
529
|
-
"aria-label": alt || iconName
|
|
530
|
-
}
|
|
531
|
-
);
|
|
532
|
-
}
|
|
533
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
534
|
-
"span",
|
|
535
|
-
{
|
|
536
|
-
className: cn("inline-flex items-center justify-center", className),
|
|
537
|
-
style: {
|
|
538
|
-
width: size,
|
|
539
|
-
height: size,
|
|
540
|
-
color: color || "inherit"
|
|
541
|
-
},
|
|
542
|
-
role: "img",
|
|
543
|
-
"aria-label": alt || iconName,
|
|
544
|
-
dangerouslySetInnerHTML: { __html: svgContent }
|
|
545
|
-
}
|
|
546
|
-
);
|
|
547
|
-
}
|
|
548
|
-
function processSvgForCurrentColor(svg) {
|
|
549
|
-
let processed = svg;
|
|
550
|
-
processed = processed.replace(
|
|
551
|
-
/stroke=["'](#000000|#000|black)["']/gi,
|
|
552
|
-
'stroke="currentColor"'
|
|
553
|
-
);
|
|
554
|
-
processed = processed.replace(
|
|
555
|
-
/fill=["'](#000000|#000|black)["']/gi,
|
|
556
|
-
'fill="currentColor"'
|
|
557
|
-
);
|
|
558
|
-
return processed;
|
|
559
|
-
}
|
|
560
455
|
function AspectRatio({
|
|
561
456
|
...props
|
|
562
457
|
}) {
|
|
@@ -939,58 +834,35 @@ var Section = React__namespace.default.forwardRef(
|
|
|
939
834
|
Section.displayName = "Section";
|
|
940
835
|
function HeroTaskTimerAnimated({
|
|
941
836
|
heading,
|
|
837
|
+
description,
|
|
838
|
+
descriptionClassName,
|
|
942
839
|
actions,
|
|
943
840
|
actionsSlot,
|
|
944
841
|
images,
|
|
945
842
|
imagesSlot,
|
|
946
843
|
background,
|
|
947
|
-
spacing,
|
|
844
|
+
spacing = "py-32 md:py-32",
|
|
948
845
|
pattern,
|
|
949
846
|
patternOpacity,
|
|
950
847
|
className,
|
|
848
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
951
849
|
headerClassName,
|
|
952
850
|
headingClassName,
|
|
953
851
|
imagesClassName,
|
|
954
852
|
optixFlowConfig
|
|
955
853
|
}) {
|
|
956
|
-
const defaultActions = [
|
|
957
|
-
{
|
|
958
|
-
label: "Download for Mac",
|
|
959
|
-
href: "#",
|
|
960
|
-
variant: "default",
|
|
961
|
-
className: "group h-fit rounded-xl p-4 text-xl font-semibold shadow-xl",
|
|
962
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/apple", size: 20, className: "mr-2" })
|
|
963
|
-
},
|
|
964
|
-
{
|
|
965
|
-
label: "Download for Windows",
|
|
966
|
-
href: "#",
|
|
967
|
-
variant: "link",
|
|
968
|
-
className: "flex items-center gap-2 text-lg font-semibold ",
|
|
969
|
-
iconAfter: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right", size: 20 })
|
|
970
|
-
}
|
|
971
|
-
];
|
|
972
854
|
const renderActions = React.useMemo(() => {
|
|
973
855
|
if (actionsSlot) return actionsSlot;
|
|
974
|
-
|
|
975
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children:
|
|
976
|
-
const {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
...pressableProps,
|
|
985
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center transition-all group-hover:-translate-x-5", children: [
|
|
986
|
-
icon,
|
|
987
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
|
|
988
|
-
/* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right", size: 20, className: "ml-2 opacity-0 transition-opacity group-hover:opacity-100" })
|
|
989
|
-
] }) })
|
|
990
|
-
},
|
|
991
|
-
index
|
|
992
|
-
);
|
|
993
|
-
}
|
|
856
|
+
if (!actions || actions.length === 0) return null;
|
|
857
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children: actions.map((action, index) => {
|
|
858
|
+
const {
|
|
859
|
+
label,
|
|
860
|
+
icon,
|
|
861
|
+
iconAfter,
|
|
862
|
+
children,
|
|
863
|
+
className: actionClassName,
|
|
864
|
+
...pressableProps
|
|
865
|
+
} = action;
|
|
994
866
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
995
867
|
Pressable,
|
|
996
868
|
{
|
|
@@ -1006,7 +878,7 @@ function HeroTaskTimerAnimated({
|
|
|
1006
878
|
index
|
|
1007
879
|
);
|
|
1008
880
|
}) });
|
|
1009
|
-
}, [actionsSlot, actions
|
|
881
|
+
}, [actionsSlot, actions]);
|
|
1010
882
|
const renderImages = React.useMemo(() => {
|
|
1011
883
|
if (imagesSlot) return imagesSlot;
|
|
1012
884
|
if (!images || images.length < 2) return null;
|
|
@@ -1016,7 +888,10 @@ function HeroTaskTimerAnimated({
|
|
|
1016
888
|
{
|
|
1017
889
|
src: images[0].src,
|
|
1018
890
|
alt: images[0].alt,
|
|
1019
|
-
className: cn(
|
|
891
|
+
className: cn(
|
|
892
|
+
"block size-full object-cover object-top-left",
|
|
893
|
+
images[0].className
|
|
894
|
+
),
|
|
1020
895
|
optixFlowConfig
|
|
1021
896
|
}
|
|
1022
897
|
) }) }) }),
|
|
@@ -1025,26 +900,59 @@ function HeroTaskTimerAnimated({
|
|
|
1025
900
|
{
|
|
1026
901
|
src: images[1].src,
|
|
1027
902
|
alt: images[1].alt,
|
|
1028
|
-
className: cn(
|
|
903
|
+
className: cn(
|
|
904
|
+
"block size-full object-cover object-top-left",
|
|
905
|
+
images[1].className
|
|
906
|
+
),
|
|
1029
907
|
optixFlowConfig
|
|
1030
908
|
}
|
|
1031
909
|
) }) }) })
|
|
1032
910
|
] });
|
|
1033
911
|
}, [imagesSlot, images, imagesClassName, optixFlowConfig]);
|
|
1034
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
912
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1035
913
|
Section,
|
|
1036
914
|
{
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
915
|
+
background,
|
|
916
|
+
spacing,
|
|
917
|
+
pattern,
|
|
918
|
+
patternOpacity,
|
|
919
|
+
className,
|
|
920
|
+
containerClassName,
|
|
921
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-6 md:gap-16", children: [
|
|
922
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
923
|
+
"div",
|
|
924
|
+
{
|
|
925
|
+
className: cn(
|
|
926
|
+
"flex flex-col gap-10 lg:w-[80%] lg:self-center",
|
|
927
|
+
headerClassName
|
|
928
|
+
),
|
|
929
|
+
children: [
|
|
930
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
931
|
+
"h1",
|
|
932
|
+
{
|
|
933
|
+
className: cn(
|
|
934
|
+
"max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl text-balance",
|
|
935
|
+
headingClassName
|
|
936
|
+
),
|
|
937
|
+
children: heading
|
|
938
|
+
}
|
|
939
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
940
|
+
"h1",
|
|
941
|
+
{
|
|
942
|
+
className: cn(
|
|
943
|
+
"max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl text-balance",
|
|
944
|
+
headingClassName
|
|
945
|
+
),
|
|
946
|
+
children: heading
|
|
947
|
+
}
|
|
948
|
+
)),
|
|
949
|
+
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 })),
|
|
950
|
+
renderActions
|
|
951
|
+
]
|
|
952
|
+
}
|
|
953
|
+
),
|
|
1046
954
|
renderImages
|
|
1047
|
-
]
|
|
955
|
+
] })
|
|
1048
956
|
}
|
|
1049
957
|
);
|
|
1050
958
|
}
|
|
@@ -46,6 +46,10 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
46
46
|
* Additional CSS classes for the section
|
|
47
47
|
*/
|
|
48
48
|
className?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Additional CSS classes for the container
|
|
51
|
+
*/
|
|
52
|
+
containerClassName?: string;
|
|
49
53
|
/**
|
|
50
54
|
* Additional CSS classes for the header area
|
|
51
55
|
*/
|
|
@@ -62,7 +66,15 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
62
66
|
* OptixFlow image optimization configuration
|
|
63
67
|
*/
|
|
64
68
|
optixFlowConfig?: OptixFlowConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Description text below heading
|
|
71
|
+
*/
|
|
72
|
+
description?: React.ReactNode;
|
|
73
|
+
/**
|
|
74
|
+
* Additional CSS classes for the description
|
|
75
|
+
*/
|
|
76
|
+
descriptionClassName?: string;
|
|
65
77
|
}
|
|
66
|
-
declare function HeroTaskTimerAnimated({ heading, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, imagesClassName, optixFlowConfig, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
78
|
+
declare function HeroTaskTimerAnimated({ heading, description, descriptionClassName, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, containerClassName, headerClassName, headingClassName, imagesClassName, optixFlowConfig, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
67
79
|
|
|
68
80
|
export { HeroTaskTimerAnimated, type HeroTaskTimerAnimatedProps };
|
|
@@ -46,6 +46,10 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
46
46
|
* Additional CSS classes for the section
|
|
47
47
|
*/
|
|
48
48
|
className?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Additional CSS classes for the container
|
|
51
|
+
*/
|
|
52
|
+
containerClassName?: string;
|
|
49
53
|
/**
|
|
50
54
|
* Additional CSS classes for the header area
|
|
51
55
|
*/
|
|
@@ -62,7 +66,15 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
62
66
|
* OptixFlow image optimization configuration
|
|
63
67
|
*/
|
|
64
68
|
optixFlowConfig?: OptixFlowConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Description text below heading
|
|
71
|
+
*/
|
|
72
|
+
description?: React.ReactNode;
|
|
73
|
+
/**
|
|
74
|
+
* Additional CSS classes for the description
|
|
75
|
+
*/
|
|
76
|
+
descriptionClassName?: string;
|
|
65
77
|
}
|
|
66
|
-
declare function HeroTaskTimerAnimated({ heading, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, imagesClassName, optixFlowConfig, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
78
|
+
declare function HeroTaskTimerAnimated({ heading, description, descriptionClassName, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, containerClassName, headerClassName, headingClassName, imagesClassName, optixFlowConfig, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
67
79
|
|
|
68
80
|
export { HeroTaskTimerAnimated, type HeroTaskTimerAnimatedProps };
|
|
@@ -430,111 +430,6 @@ var Pressable = React.forwardRef(
|
|
|
430
430
|
}
|
|
431
431
|
);
|
|
432
432
|
Pressable.displayName = "Pressable";
|
|
433
|
-
var svgCache = /* @__PURE__ */ new Map();
|
|
434
|
-
function DynamicIcon({
|
|
435
|
-
name,
|
|
436
|
-
size = 28,
|
|
437
|
-
color,
|
|
438
|
-
className,
|
|
439
|
-
alt
|
|
440
|
-
}) {
|
|
441
|
-
const [svgContent, setSvgContent] = React.useState(null);
|
|
442
|
-
const [isLoading, setIsLoading] = React.useState(true);
|
|
443
|
-
const [error, setError] = React.useState(null);
|
|
444
|
-
const { url, iconName } = React.useMemo(() => {
|
|
445
|
-
const separator = name.includes("/") ? "/" : ":";
|
|
446
|
-
const [prefix, iconName2] = name.split(separator);
|
|
447
|
-
const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
|
|
448
|
-
return {
|
|
449
|
-
url: baseUrl,
|
|
450
|
-
iconName: iconName2
|
|
451
|
-
};
|
|
452
|
-
}, [name, size]);
|
|
453
|
-
React.useEffect(() => {
|
|
454
|
-
let isMounted = true;
|
|
455
|
-
const fetchSvg = async () => {
|
|
456
|
-
const cached = svgCache.get(url);
|
|
457
|
-
if (cached) {
|
|
458
|
-
if (isMounted) {
|
|
459
|
-
setSvgContent(cached);
|
|
460
|
-
setIsLoading(false);
|
|
461
|
-
}
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
try {
|
|
465
|
-
setIsLoading(true);
|
|
466
|
-
setError(null);
|
|
467
|
-
const response = await fetch(url);
|
|
468
|
-
if (!response.ok) {
|
|
469
|
-
throw new Error(`Failed to fetch icon: ${response.status}`);
|
|
470
|
-
}
|
|
471
|
-
let svg = await response.text();
|
|
472
|
-
svg = processSvgForCurrentColor(svg);
|
|
473
|
-
svgCache.set(url, svg);
|
|
474
|
-
if (isMounted) {
|
|
475
|
-
setSvgContent(svg);
|
|
476
|
-
setIsLoading(false);
|
|
477
|
-
}
|
|
478
|
-
} catch (err) {
|
|
479
|
-
if (isMounted) {
|
|
480
|
-
setError(err instanceof Error ? err.message : "Failed to load icon");
|
|
481
|
-
setIsLoading(false);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
};
|
|
485
|
-
fetchSvg();
|
|
486
|
-
return () => {
|
|
487
|
-
isMounted = false;
|
|
488
|
-
};
|
|
489
|
-
}, [url]);
|
|
490
|
-
if (isLoading) {
|
|
491
|
-
return /* @__PURE__ */ jsx(
|
|
492
|
-
"span",
|
|
493
|
-
{
|
|
494
|
-
className: cn("inline-block", className),
|
|
495
|
-
style: { width: size, height: size },
|
|
496
|
-
"aria-hidden": "true"
|
|
497
|
-
}
|
|
498
|
-
);
|
|
499
|
-
}
|
|
500
|
-
if (error || !svgContent) {
|
|
501
|
-
return /* @__PURE__ */ jsx(
|
|
502
|
-
"span",
|
|
503
|
-
{
|
|
504
|
-
className: cn("inline-block", className),
|
|
505
|
-
style: { width: size, height: size },
|
|
506
|
-
role: "img",
|
|
507
|
-
"aria-label": alt || iconName
|
|
508
|
-
}
|
|
509
|
-
);
|
|
510
|
-
}
|
|
511
|
-
return /* @__PURE__ */ jsx(
|
|
512
|
-
"span",
|
|
513
|
-
{
|
|
514
|
-
className: cn("inline-flex items-center justify-center", className),
|
|
515
|
-
style: {
|
|
516
|
-
width: size,
|
|
517
|
-
height: size,
|
|
518
|
-
color: color || "inherit"
|
|
519
|
-
},
|
|
520
|
-
role: "img",
|
|
521
|
-
"aria-label": alt || iconName,
|
|
522
|
-
dangerouslySetInnerHTML: { __html: svgContent }
|
|
523
|
-
}
|
|
524
|
-
);
|
|
525
|
-
}
|
|
526
|
-
function processSvgForCurrentColor(svg) {
|
|
527
|
-
let processed = svg;
|
|
528
|
-
processed = processed.replace(
|
|
529
|
-
/stroke=["'](#000000|#000|black)["']/gi,
|
|
530
|
-
'stroke="currentColor"'
|
|
531
|
-
);
|
|
532
|
-
processed = processed.replace(
|
|
533
|
-
/fill=["'](#000000|#000|black)["']/gi,
|
|
534
|
-
'fill="currentColor"'
|
|
535
|
-
);
|
|
536
|
-
return processed;
|
|
537
|
-
}
|
|
538
433
|
function AspectRatio({
|
|
539
434
|
...props
|
|
540
435
|
}) {
|
|
@@ -917,58 +812,35 @@ var Section = React__default.forwardRef(
|
|
|
917
812
|
Section.displayName = "Section";
|
|
918
813
|
function HeroTaskTimerAnimated({
|
|
919
814
|
heading,
|
|
815
|
+
description,
|
|
816
|
+
descriptionClassName,
|
|
920
817
|
actions,
|
|
921
818
|
actionsSlot,
|
|
922
819
|
images,
|
|
923
820
|
imagesSlot,
|
|
924
821
|
background,
|
|
925
|
-
spacing,
|
|
822
|
+
spacing = "py-32 md:py-32",
|
|
926
823
|
pattern,
|
|
927
824
|
patternOpacity,
|
|
928
825
|
className,
|
|
826
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
929
827
|
headerClassName,
|
|
930
828
|
headingClassName,
|
|
931
829
|
imagesClassName,
|
|
932
830
|
optixFlowConfig
|
|
933
831
|
}) {
|
|
934
|
-
const defaultActions = [
|
|
935
|
-
{
|
|
936
|
-
label: "Download for Mac",
|
|
937
|
-
href: "#",
|
|
938
|
-
variant: "default",
|
|
939
|
-
className: "group h-fit rounded-xl p-4 text-xl font-semibold shadow-xl",
|
|
940
|
-
icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/apple", size: 20, className: "mr-2" })
|
|
941
|
-
},
|
|
942
|
-
{
|
|
943
|
-
label: "Download for Windows",
|
|
944
|
-
href: "#",
|
|
945
|
-
variant: "link",
|
|
946
|
-
className: "flex items-center gap-2 text-lg font-semibold ",
|
|
947
|
-
iconAfter: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 20 })
|
|
948
|
-
}
|
|
949
|
-
];
|
|
950
832
|
const renderActions = useMemo(() => {
|
|
951
833
|
if (actionsSlot) return actionsSlot;
|
|
952
|
-
|
|
953
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children:
|
|
954
|
-
const {
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
...pressableProps,
|
|
963
|
-
children: /* @__PURE__ */ jsx("div", { className: "size-full overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center transition-all group-hover:-translate-x-5", children: [
|
|
964
|
-
icon,
|
|
965
|
-
/* @__PURE__ */ jsx("span", { children: label }),
|
|
966
|
-
/* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 20, className: "ml-2 opacity-0 transition-opacity group-hover:opacity-100" })
|
|
967
|
-
] }) })
|
|
968
|
-
},
|
|
969
|
-
index
|
|
970
|
-
);
|
|
971
|
-
}
|
|
834
|
+
if (!actions || actions.length === 0) return null;
|
|
835
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children: actions.map((action, index) => {
|
|
836
|
+
const {
|
|
837
|
+
label,
|
|
838
|
+
icon,
|
|
839
|
+
iconAfter,
|
|
840
|
+
children,
|
|
841
|
+
className: actionClassName,
|
|
842
|
+
...pressableProps
|
|
843
|
+
} = action;
|
|
972
844
|
return /* @__PURE__ */ jsx(
|
|
973
845
|
Pressable,
|
|
974
846
|
{
|
|
@@ -984,7 +856,7 @@ function HeroTaskTimerAnimated({
|
|
|
984
856
|
index
|
|
985
857
|
);
|
|
986
858
|
}) });
|
|
987
|
-
}, [actionsSlot, actions
|
|
859
|
+
}, [actionsSlot, actions]);
|
|
988
860
|
const renderImages = useMemo(() => {
|
|
989
861
|
if (imagesSlot) return imagesSlot;
|
|
990
862
|
if (!images || images.length < 2) return null;
|
|
@@ -994,7 +866,10 @@ function HeroTaskTimerAnimated({
|
|
|
994
866
|
{
|
|
995
867
|
src: images[0].src,
|
|
996
868
|
alt: images[0].alt,
|
|
997
|
-
className: cn(
|
|
869
|
+
className: cn(
|
|
870
|
+
"block size-full object-cover object-top-left",
|
|
871
|
+
images[0].className
|
|
872
|
+
),
|
|
998
873
|
optixFlowConfig
|
|
999
874
|
}
|
|
1000
875
|
) }) }) }),
|
|
@@ -1003,26 +878,59 @@ function HeroTaskTimerAnimated({
|
|
|
1003
878
|
{
|
|
1004
879
|
src: images[1].src,
|
|
1005
880
|
alt: images[1].alt,
|
|
1006
|
-
className: cn(
|
|
881
|
+
className: cn(
|
|
882
|
+
"block size-full object-cover object-top-left",
|
|
883
|
+
images[1].className
|
|
884
|
+
),
|
|
1007
885
|
optixFlowConfig
|
|
1008
886
|
}
|
|
1009
887
|
) }) }) })
|
|
1010
888
|
] });
|
|
1011
889
|
}, [imagesSlot, images, imagesClassName, optixFlowConfig]);
|
|
1012
|
-
return /* @__PURE__ */
|
|
890
|
+
return /* @__PURE__ */ jsx(
|
|
1013
891
|
Section,
|
|
1014
892
|
{
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
893
|
+
background,
|
|
894
|
+
spacing,
|
|
895
|
+
pattern,
|
|
896
|
+
patternOpacity,
|
|
897
|
+
className,
|
|
898
|
+
containerClassName,
|
|
899
|
+
children: /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col gap-6 md:gap-16", children: [
|
|
900
|
+
/* @__PURE__ */ jsxs(
|
|
901
|
+
"div",
|
|
902
|
+
{
|
|
903
|
+
className: cn(
|
|
904
|
+
"flex flex-col gap-10 lg:w-[80%] lg:self-center",
|
|
905
|
+
headerClassName
|
|
906
|
+
),
|
|
907
|
+
children: [
|
|
908
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
909
|
+
"h1",
|
|
910
|
+
{
|
|
911
|
+
className: cn(
|
|
912
|
+
"max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl text-balance",
|
|
913
|
+
headingClassName
|
|
914
|
+
),
|
|
915
|
+
children: heading
|
|
916
|
+
}
|
|
917
|
+
) : /* @__PURE__ */ jsx(
|
|
918
|
+
"h1",
|
|
919
|
+
{
|
|
920
|
+
className: cn(
|
|
921
|
+
"max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl text-balance",
|
|
922
|
+
headingClassName
|
|
923
|
+
),
|
|
924
|
+
children: heading
|
|
925
|
+
}
|
|
926
|
+
)),
|
|
927
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
928
|
+
renderActions
|
|
929
|
+
]
|
|
930
|
+
}
|
|
931
|
+
),
|
|
1024
932
|
renderImages
|
|
1025
|
-
]
|
|
933
|
+
] })
|
|
1026
934
|
}
|
|
1027
935
|
);
|
|
1028
936
|
}
|