@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.
Files changed (69) hide show
  1. package/dist/hero-architecture-fullscreen.cjs +7 -54
  2. package/dist/hero-architecture-fullscreen.js +7 -54
  3. package/dist/hero-badge-shadow-overlay.cjs +42 -45
  4. package/dist/hero-badge-shadow-overlay.d.cts +14 -2
  5. package/dist/hero-badge-shadow-overlay.d.ts +14 -2
  6. package/dist/hero-badge-shadow-overlay.js +42 -45
  7. package/dist/hero-billing-platform-logos.cjs +5 -9
  8. package/dist/hero-billing-platform-logos.d.cts +1 -5
  9. package/dist/hero-billing-platform-logos.d.ts +1 -5
  10. package/dist/hero-billing-platform-logos.js +5 -9
  11. package/dist/hero-centered-gradient-cta.cjs +12 -68
  12. package/dist/hero-centered-gradient-cta.js +12 -68
  13. package/dist/hero-conversion-video-play.cjs +13 -64
  14. package/dist/hero-conversion-video-play.js +13 -64
  15. package/dist/hero-customer-support-layered.cjs +1 -1
  16. package/dist/hero-customer-support-layered.js +1 -1
  17. package/dist/hero-dashed-border-features.cjs +8 -71
  18. package/dist/hero-dashed-border-features.js +8 -71
  19. package/dist/hero-design-showcase-logos.cjs +7 -32
  20. package/dist/hero-design-showcase-logos.js +7 -32
  21. package/dist/hero-floating-images.cjs +1 -1
  22. package/dist/hero-floating-images.js +1 -1
  23. package/dist/hero-grid-pattern-solutions.cjs +7 -66
  24. package/dist/hero-grid-pattern-solutions.js +7 -66
  25. package/dist/hero-hiring-animated-text.cjs +10 -5
  26. package/dist/hero-hiring-animated-text.js +10 -5
  27. package/dist/hero-marketplace-scattered-images.cjs +7 -32
  28. package/dist/hero-marketplace-scattered-images.js +7 -32
  29. package/dist/hero-mentorship-video-split.cjs +11 -14
  30. package/dist/hero-mentorship-video-split.js +11 -14
  31. package/dist/hero-mobile-app-download.cjs +2 -2
  32. package/dist/hero-mobile-app-download.d.cts +1 -1
  33. package/dist/hero-mobile-app-download.d.ts +1 -1
  34. package/dist/hero-mobile-app-download.js +2 -2
  35. package/dist/hero-premium-split-avatars.cjs +11 -9
  36. package/dist/hero-premium-split-avatars.d.cts +5 -1
  37. package/dist/hero-premium-split-avatars.d.ts +5 -1
  38. package/dist/hero-premium-split-avatars.js +11 -9
  39. package/dist/hero-presentation-platform-video.cjs +12 -9
  40. package/dist/hero-presentation-platform-video.d.cts +5 -1
  41. package/dist/hero-presentation-platform-video.d.ts +5 -1
  42. package/dist/hero-presentation-platform-video.js +12 -9
  43. package/dist/hero-productivity-launcher-video.cjs +11 -35
  44. package/dist/hero-productivity-launcher-video.js +11 -35
  45. package/dist/hero-spiral-pattern-cards.cjs +49 -92
  46. package/dist/hero-spiral-pattern-cards.d.cts +20 -3
  47. package/dist/hero-spiral-pattern-cards.d.ts +20 -3
  48. package/dist/hero-spiral-pattern-cards.js +49 -92
  49. package/dist/hero-split-spiral-shapes.cjs +43 -90
  50. package/dist/hero-split-spiral-shapes.d.cts +17 -4
  51. package/dist/hero-split-spiral-shapes.d.ts +17 -4
  52. package/dist/hero-split-spiral-shapes.js +43 -90
  53. package/dist/hero-startup-launch-cta.cjs +2 -2
  54. package/dist/hero-startup-launch-cta.js +2 -2
  55. package/dist/hero-task-timer-animated.cjs +64 -156
  56. package/dist/hero-task-timer-animated.d.cts +13 -1
  57. package/dist/hero-task-timer-animated.d.ts +13 -1
  58. package/dist/hero-task-timer-animated.js +64 -156
  59. package/dist/hero-testimonial-image-grid.cjs +10 -38
  60. package/dist/hero-testimonial-image-grid.js +10 -38
  61. package/dist/hero-therapy-testimonial-grid.cjs +11 -40
  62. package/dist/hero-therapy-testimonial-grid.js +11 -40
  63. package/dist/hero-video-background-dark.cjs +10 -34
  64. package/dist/hero-video-background-dark.d.cts +5 -1
  65. package/dist/hero-video-background-dark.d.ts +5 -1
  66. package/dist/hero-video-background-dark.js +10 -34
  67. package/dist/registry.cjs +353 -302
  68. package/dist/registry.js +353 -302
  69. 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
- const actionsToRender = actions || defaultActions;
975
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children: actionsToRender.map((action, index) => {
976
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
977
- const isPrimaryAction = index === 0 && !actions;
978
- if (isPrimaryAction) {
979
- return /* @__PURE__ */ jsxRuntime.jsx(
980
- Pressable,
981
- {
982
- asButton: true,
983
- className: actionClassName,
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, defaultActions]);
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("block size-full object-cover object-top-left", images[0].className),
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("block size-full object-cover object-top-left", images[1].className),
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.jsxs(
912
+ return /* @__PURE__ */ jsxRuntime.jsx(
1035
913
  Section,
1036
914
  {
1037
- className: cn(
1038
- "container flex flex-col gap-10 bg-background py-20 sm:gap-20",
1039
- className
1040
- ),
1041
- children: [
1042
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-10 lg:w-[80%] lg:self-center", headerClassName), children: [
1043
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl", headingClassName), children: heading })),
1044
- renderActions
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
- const actionsToRender = actions || defaultActions;
953
- return /* @__PURE__ */ jsx("div", { className: "flex flex-col items-start gap-4 sm:flex-row sm:items-center", children: actionsToRender.map((action, index) => {
954
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
955
- const isPrimaryAction = index === 0 && !actions;
956
- if (isPrimaryAction) {
957
- return /* @__PURE__ */ jsx(
958
- Pressable,
959
- {
960
- asButton: true,
961
- className: actionClassName,
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, defaultActions]);
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("block size-full object-cover object-top-left", images[0].className),
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("block size-full object-cover object-top-left", images[1].className),
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__ */ jsxs(
890
+ return /* @__PURE__ */ jsx(
1013
891
  Section,
1014
892
  {
1015
- className: cn(
1016
- "container flex flex-col gap-10 bg-background py-20 sm:gap-20",
1017
- className
1018
- ),
1019
- children: [
1020
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-10 lg:w-[80%] lg:self-center", headerClassName), children: [
1021
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("max-w-2xl text-6xl font-bold tracking-tight md:text-7xl lg:text-8xl", headingClassName), children: heading })),
1022
- renderActions
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
  }