@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.
Files changed (31) hide show
  1. package/dist/hero-billing-platform-logos.cjs +77 -52
  2. package/dist/hero-billing-platform-logos.js +77 -51
  3. package/dist/hero-conversion-video-play.cjs +240 -78
  4. package/dist/hero-conversion-video-play.js +233 -75
  5. package/dist/hero-customer-support-layered.cjs +1 -1
  6. package/dist/hero-customer-support-layered.js +1 -1
  7. package/dist/hero-dashed-border-features.cjs +33 -24
  8. package/dist/hero-dashed-border-features.js +33 -24
  9. package/dist/hero-design-showcase-logos.cjs +102 -38
  10. package/dist/hero-design-showcase-logos.js +102 -38
  11. package/dist/hero-grid-pattern-solutions.cjs +187 -49
  12. package/dist/hero-grid-pattern-solutions.d.cts +1 -4
  13. package/dist/hero-grid-pattern-solutions.d.ts +1 -4
  14. package/dist/hero-grid-pattern-solutions.js +188 -50
  15. package/dist/hero-marketplace-scattered-images.cjs +120 -79
  16. package/dist/hero-marketplace-scattered-images.js +120 -79
  17. package/dist/hero-mentorship-video-split.cjs +32 -13
  18. package/dist/hero-mentorship-video-split.js +32 -13
  19. package/dist/hero-premium-split-avatars.cjs +2 -2
  20. package/dist/hero-premium-split-avatars.js +2 -2
  21. package/dist/hero-productivity-launcher-video.cjs +45 -143
  22. package/dist/hero-productivity-launcher-video.d.cts +5 -23
  23. package/dist/hero-productivity-launcher-video.d.ts +5 -23
  24. package/dist/hero-productivity-launcher-video.js +45 -143
  25. package/dist/hero-split-spiral-shapes.cjs +47 -38
  26. package/dist/hero-split-spiral-shapes.js +47 -38
  27. package/dist/hero-task-timer-animated.cjs +59 -59
  28. package/dist/hero-task-timer-animated.js +59 -59
  29. package/dist/registry.cjs +772 -439
  30. package/dist/registry.js +772 -439
  31. package/package.json +1 -1
@@ -852,42 +852,70 @@ function HeroDesignShowcaseLogos({
852
852
  const renderActions = React.useMemo(() => {
853
853
  if (actionsSlot) return actionsSlot;
854
854
  if (!actions || actions.length === 0) return null;
855
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-3 flex items-center justify-center gap-3", actionsClassName), children: actions.map((action, index) => {
856
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
857
- return /* @__PURE__ */ jsxRuntime.jsx(
858
- Pressable,
859
- {
860
- asButton: true,
861
- className: actionClassName,
862
- ...pressableProps,
863
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
855
+ return /* @__PURE__ */ jsxRuntime.jsx(
856
+ "div",
857
+ {
858
+ className: cn(
859
+ "mt-6 md:mt-12 flex items-center justify-center gap-3",
860
+ actionsClassName
861
+ ),
862
+ children: actions.map((action, index) => {
863
+ const {
864
+ label,
864
865
  icon,
865
- label && /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }),
866
- iconAfter
867
- ] })
868
- },
869
- index
870
- );
871
- }) });
866
+ iconAfter,
867
+ children,
868
+ className: actionClassName,
869
+ ...pressableProps
870
+ } = action;
871
+ return /* @__PURE__ */ jsxRuntime.jsx(
872
+ Pressable,
873
+ {
874
+ asButton: true,
875
+ className: actionClassName,
876
+ ...pressableProps,
877
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
878
+ icon,
879
+ label && /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }),
880
+ iconAfter
881
+ ] })
882
+ },
883
+ index
884
+ );
885
+ })
886
+ }
887
+ );
872
888
  }, [actionsSlot, actions, actionsClassName]);
873
889
  const renderLogos = React.useMemo(() => {
874
890
  if (logosSlot) return logosSlot;
875
891
  if (!logos || logos.length === 0) return null;
876
892
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-10 md:py-16", children: [
877
893
  logosLabel && (typeof logosLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-foreground/60", children: logosLabel }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-sm text-foreground/60", children: logosLabel })),
878
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex flex-wrap items-center justify-center gap-5 sm:flex-nowrap", logosClassName), children: logos.map((logo, index) => {
879
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
880
- return /* @__PURE__ */ jsxRuntime.jsx(
881
- img.Img,
882
- {
883
- src: logoSrc,
884
- alt: logo.alt,
885
- className: cn("block h-3.5 w-auto opacity-50 md:h-5", logo.className),
886
- optixFlowConfig
887
- },
888
- index
889
- );
890
- }) })
894
+ /* @__PURE__ */ jsxRuntime.jsx(
895
+ "div",
896
+ {
897
+ className: cn(
898
+ "mt-8 flex flex-wrap items-center justify-center gap-5 sm:flex-nowrap",
899
+ logosClassName
900
+ ),
901
+ children: logos.map((logo, index) => {
902
+ const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
903
+ return /* @__PURE__ */ jsxRuntime.jsx(
904
+ img.Img,
905
+ {
906
+ src: logoSrc,
907
+ alt: logo.alt,
908
+ className: cn(
909
+ "block h-3.5 w-auto opacity-50 md:h-5",
910
+ logo.className
911
+ ),
912
+ optixFlowConfig
913
+ },
914
+ index
915
+ );
916
+ })
917
+ }
918
+ )
891
919
  ] });
892
920
  }, [logosSlot, logos, logosLabel, logosClassName, optixFlowConfig]);
893
921
  const renderShowcase = React.useMemo(() => {
@@ -898,7 +926,10 @@ function HeroDesignShowcaseLogos({
898
926
  {
899
927
  src: showcaseImage.src,
900
928
  alt: showcaseImage.alt,
901
- className: cn("w-full object-cover object-top-left", showcaseImage.className),
929
+ className: cn(
930
+ "w-full object-cover object-top-left",
931
+ showcaseImage.className
932
+ ),
902
933
  optixFlowConfig
903
934
  }
904
935
  ) }) }) });
@@ -913,14 +944,47 @@ function HeroDesignShowcaseLogos({
913
944
  className: cn("relative flex items-center justify-center", className),
914
945
  containerClassName,
915
946
  children: [
916
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center gap-8", contentClassName), children: [
917
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex max-w-[920px] flex-col items-center gap-6", children: [
918
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem]", headingClassName), children: heading })),
919
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-xl text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
920
- ] }),
921
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderActions }),
922
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderLogos })
923
- ] }) }),
947
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
948
+ "div",
949
+ {
950
+ className: cn("flex flex-col items-center gap-8", contentClassName),
951
+ children: [
952
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex max-w-[920px] flex-col items-center gap-6", children: [
953
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
954
+ "h1",
955
+ {
956
+ className: cn(
957
+ "mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem] text-balance",
958
+ headingClassName
959
+ ),
960
+ children: heading
961
+ }
962
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
963
+ "h1",
964
+ {
965
+ className: cn(
966
+ "mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem] text-balance",
967
+ headingClassName
968
+ ),
969
+ children: heading
970
+ }
971
+ )),
972
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
973
+ "p",
974
+ {
975
+ className: cn(
976
+ "text-center text-xl text-balance",
977
+ descriptionClassName
978
+ ),
979
+ children: description
980
+ }
981
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
982
+ ] }),
983
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderActions }),
984
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderLogos })
985
+ ]
986
+ }
987
+ ) }),
924
988
  renderShowcase
925
989
  ]
926
990
  }
@@ -831,42 +831,70 @@ function HeroDesignShowcaseLogos({
831
831
  const renderActions = useMemo(() => {
832
832
  if (actionsSlot) return actionsSlot;
833
833
  if (!actions || actions.length === 0) return null;
834
- return /* @__PURE__ */ jsx("div", { className: cn("mt-3 flex items-center justify-center gap-3", actionsClassName), children: actions.map((action, index) => {
835
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
836
- return /* @__PURE__ */ jsx(
837
- Pressable,
838
- {
839
- asButton: true,
840
- className: actionClassName,
841
- ...pressableProps,
842
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
834
+ return /* @__PURE__ */ jsx(
835
+ "div",
836
+ {
837
+ className: cn(
838
+ "mt-6 md:mt-12 flex items-center justify-center gap-3",
839
+ actionsClassName
840
+ ),
841
+ children: actions.map((action, index) => {
842
+ const {
843
+ label,
843
844
  icon,
844
- label && /* @__PURE__ */ jsx("div", { children: label }),
845
- iconAfter
846
- ] })
847
- },
848
- index
849
- );
850
- }) });
845
+ iconAfter,
846
+ children,
847
+ className: actionClassName,
848
+ ...pressableProps
849
+ } = action;
850
+ return /* @__PURE__ */ jsx(
851
+ Pressable,
852
+ {
853
+ asButton: true,
854
+ className: actionClassName,
855
+ ...pressableProps,
856
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
857
+ icon,
858
+ label && /* @__PURE__ */ jsx("div", { children: label }),
859
+ iconAfter
860
+ ] })
861
+ },
862
+ index
863
+ );
864
+ })
865
+ }
866
+ );
851
867
  }, [actionsSlot, actions, actionsClassName]);
852
868
  const renderLogos = useMemo(() => {
853
869
  if (logosSlot) return logosSlot;
854
870
  if (!logos || logos.length === 0) return null;
855
871
  return /* @__PURE__ */ jsxs("div", { className: "py-10 md:py-16", children: [
856
872
  logosLabel && (typeof logosLabel === "string" ? /* @__PURE__ */ jsx("p", { className: "text-center text-sm text-foreground/60", children: logosLabel }) : /* @__PURE__ */ jsx("div", { className: "text-center text-sm text-foreground/60", children: logosLabel })),
857
- /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap items-center justify-center gap-5 sm:flex-nowrap", logosClassName), children: logos.map((logo, index) => {
858
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
859
- return /* @__PURE__ */ jsx(
860
- Img,
861
- {
862
- src: logoSrc,
863
- alt: logo.alt,
864
- className: cn("block h-3.5 w-auto opacity-50 md:h-5", logo.className),
865
- optixFlowConfig
866
- },
867
- index
868
- );
869
- }) })
873
+ /* @__PURE__ */ jsx(
874
+ "div",
875
+ {
876
+ className: cn(
877
+ "mt-8 flex flex-wrap items-center justify-center gap-5 sm:flex-nowrap",
878
+ logosClassName
879
+ ),
880
+ children: logos.map((logo, index) => {
881
+ const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
882
+ return /* @__PURE__ */ jsx(
883
+ Img,
884
+ {
885
+ src: logoSrc,
886
+ alt: logo.alt,
887
+ className: cn(
888
+ "block h-3.5 w-auto opacity-50 md:h-5",
889
+ logo.className
890
+ ),
891
+ optixFlowConfig
892
+ },
893
+ index
894
+ );
895
+ })
896
+ }
897
+ )
870
898
  ] });
871
899
  }, [logosSlot, logos, logosLabel, logosClassName, optixFlowConfig]);
872
900
  const renderShowcase = useMemo(() => {
@@ -877,7 +905,10 @@ function HeroDesignShowcaseLogos({
877
905
  {
878
906
  src: showcaseImage.src,
879
907
  alt: showcaseImage.alt,
880
- className: cn("w-full object-cover object-top-left", showcaseImage.className),
908
+ className: cn(
909
+ "w-full object-cover object-top-left",
910
+ showcaseImage.className
911
+ ),
881
912
  optixFlowConfig
882
913
  }
883
914
  ) }) }) });
@@ -892,14 +923,47 @@ function HeroDesignShowcaseLogos({
892
923
  className: cn("relative flex items-center justify-center", className),
893
924
  containerClassName,
894
925
  children: [
895
- /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center gap-8", contentClassName), children: [
896
- /* @__PURE__ */ jsxs("div", { className: "flex max-w-[920px] flex-col items-center gap-6", children: [
897
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem]", headingClassName), children: heading })),
898
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-xl text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
899
- ] }),
900
- /* @__PURE__ */ jsx("div", { children: renderActions }),
901
- /* @__PURE__ */ jsx("div", { children: renderLogos })
902
- ] }) }),
926
+ /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
927
+ "div",
928
+ {
929
+ className: cn("flex flex-col items-center gap-8", contentClassName),
930
+ children: [
931
+ /* @__PURE__ */ jsxs("div", { className: "flex max-w-[920px] flex-col items-center gap-6", children: [
932
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
933
+ "h1",
934
+ {
935
+ className: cn(
936
+ "mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem] text-balance",
937
+ headingClassName
938
+ ),
939
+ children: heading
940
+ }
941
+ ) : /* @__PURE__ */ jsx(
942
+ "h1",
943
+ {
944
+ className: cn(
945
+ "mb-6 text-center text-[2.75rem] leading-tight font-semibold md:text-[3.5rem] lg:text-[4.375rem] text-balance",
946
+ headingClassName
947
+ ),
948
+ children: heading
949
+ }
950
+ )),
951
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
952
+ "p",
953
+ {
954
+ className: cn(
955
+ "text-center text-xl text-balance",
956
+ descriptionClassName
957
+ ),
958
+ children: description
959
+ }
960
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
961
+ ] }),
962
+ /* @__PURE__ */ jsx("div", { children: renderActions }),
963
+ /* @__PURE__ */ jsx("div", { children: renderLogos })
964
+ ]
965
+ }
966
+ ) }),
903
967
  renderShowcase
904
968
  ]
905
969
  }
@@ -7,6 +7,8 @@ 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 lightbox = require('@page-speed/lightbox');
11
+ var reactSlot = require('@radix-ui/react-slot');
10
12
 
11
13
  function _interopNamespace(e) {
12
14
  if (e && e.__esModule) return e;
@@ -930,9 +932,41 @@ var Section = React__namespace.default.forwardRef(
930
932
  }
931
933
  );
932
934
  Section.displayName = "Section";
935
+ var badgeVariants = classVarianceAuthority.cva(
936
+ "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",
937
+ {
938
+ variants: {
939
+ variant: {
940
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
941
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
942
+ 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",
943
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
944
+ }
945
+ },
946
+ defaultVariants: {
947
+ variant: "default"
948
+ }
949
+ }
950
+ );
951
+ function Badge({
952
+ className,
953
+ variant,
954
+ asChild = false,
955
+ ...props
956
+ }) {
957
+ const Comp = asChild ? reactSlot.Slot : "span";
958
+ return /* @__PURE__ */ jsxRuntime.jsx(
959
+ Comp,
960
+ {
961
+ "data-slot": "badge",
962
+ className: cn(badgeVariants({ variant }), className),
963
+ ...props
964
+ }
965
+ );
966
+ }
933
967
  function HeroGridPatternSolutions({
934
968
  badgeText,
935
- badgeHref = "#",
969
+ badgeHref,
936
970
  badgeSlot,
937
971
  heading,
938
972
  description,
@@ -940,7 +974,6 @@ function HeroGridPatternSolutions({
940
974
  actionsSlot,
941
975
  images,
942
976
  imagesSlot,
943
- showGridPattern = true,
944
977
  background,
945
978
  spacing = "py-32 md:py-32",
946
979
  pattern,
@@ -954,56 +987,114 @@ function HeroGridPatternSolutions({
954
987
  imagesClassName,
955
988
  optixFlowConfig
956
989
  }) {
990
+ const [lightboxOpen, setLightboxOpen] = React.useState(false);
991
+ const [lightboxIndex, setLightboxIndex] = React.useState(0);
992
+ const lightboxItems = React.useMemo(
993
+ () => (images ?? []).map((img, index) => ({
994
+ id: `hero-grid-image-${index}`,
995
+ type: "image",
996
+ src: img.src,
997
+ alt: img.alt,
998
+ download: true,
999
+ share: true
1000
+ })),
1001
+ [images]
1002
+ );
1003
+ const handleImageClick = React.useCallback((index) => {
1004
+ setLightboxIndex(index);
1005
+ setLightboxOpen(true);
1006
+ }, []);
1007
+ const handleLightboxClose = React.useCallback(() => {
1008
+ setLightboxOpen(false);
1009
+ }, []);
957
1010
  const renderBadge = React.useMemo(() => {
958
1011
  if (badgeSlot) return badgeSlot;
959
- return /* @__PURE__ */ jsxRuntime.jsxs(
960
- Pressable,
961
- {
962
- href: badgeHref,
963
- className: "mx-auto mb-4 flex w-fit items-center gap-2 rounded-full px-4 py-2 text-sm bg-card",
964
- children: [
965
- badgeText,
966
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
967
- ]
968
- }
969
- );
1012
+ if (!badgeText) return null;
1013
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: badgeHref, children: /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-2", children: [
1014
+ badgeText,
1015
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right" })
1016
+ ] }) });
970
1017
  }, [badgeSlot, badgeHref, badgeText]);
971
1018
  const renderActions = React.useMemo(() => {
972
1019
  if (actionsSlot) return actionsSlot;
973
1020
  if (!actions || actions.length === 0) return null;
974
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col justify-center gap-x-2 gap-y-3 sm:flex-row", actionsClassName), children: actions.map((action, index) => {
975
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
976
- return /* @__PURE__ */ jsxRuntime.jsx(
977
- Pressable,
978
- {
979
- asButton: true,
980
- className: actionClassName,
981
- ...pressableProps,
982
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
983
- icon,
1021
+ return /* @__PURE__ */ jsxRuntime.jsx(
1022
+ "div",
1023
+ {
1024
+ className: cn(
1025
+ "flex flex-col justify-center gap-x-2 gap-y-3 sm:flex-row",
1026
+ actionsClassName
1027
+ ),
1028
+ children: actions.map((action, index) => {
1029
+ const {
984
1030
  label,
985
- iconAfter
986
- ] })
987
- },
988
- index
989
- );
990
- }) });
1031
+ icon,
1032
+ iconAfter,
1033
+ children,
1034
+ className: actionClassName,
1035
+ ...pressableProps
1036
+ } = action;
1037
+ return /* @__PURE__ */ jsxRuntime.jsx(
1038
+ Pressable,
1039
+ {
1040
+ asButton: true,
1041
+ className: actionClassName,
1042
+ ...pressableProps,
1043
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1044
+ icon,
1045
+ label,
1046
+ iconAfter
1047
+ ] })
1048
+ },
1049
+ index
1050
+ );
1051
+ })
1052
+ }
1053
+ );
991
1054
  }, [actionsSlot, actions, actionsClassName]);
992
1055
  const renderImages = React.useMemo(() => {
993
1056
  if (imagesSlot) return imagesSlot;
994
1057
  if (!images || images.length === 0) return null;
995
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-20 grid gap-6 md:grid-cols-10", imagesClassName), children: images.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(
996
- img.Img,
1058
+ return /* @__PURE__ */ jsxRuntime.jsx(
1059
+ "div",
997
1060
  {
998
- src: image.src,
999
- alt: image.alt,
1000
- className: cn("h-full max-h-[500px] w-full rounded-xl object-cover", image.className),
1001
- optixFlowConfig
1002
- },
1003
- index
1004
- )) });
1005
- }, [imagesSlot, images, imagesClassName, optixFlowConfig]);
1006
- return /* @__PURE__ */ jsxRuntime.jsx(
1061
+ className: cn(
1062
+ "mt-8 md:mt-20 grid grid-cols-2 gap-4 md:flex md:flex-row md:items-center md:justify-center md:gap-6",
1063
+ imagesClassName
1064
+ ),
1065
+ children: images.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(
1066
+ "div",
1067
+ {
1068
+ className: "cursor-pointer overflow-hidden rounded-xl transition-transform hover:scale-[1.02] hover:shadow-lg",
1069
+ onClick: () => handleImageClick(index),
1070
+ role: "button",
1071
+ tabIndex: 0,
1072
+ onKeyDown: (e) => {
1073
+ if (e.key === "Enter" || e.key === " ") {
1074
+ e.preventDefault();
1075
+ handleImageClick(index);
1076
+ }
1077
+ },
1078
+ "aria-label": `View ${image.alt} in lightbox`,
1079
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1080
+ img.Img,
1081
+ {
1082
+ src: image.src,
1083
+ alt: image.alt,
1084
+ className: cn(
1085
+ "h-full max-h-[200px] max-w-[200px] w-full rounded-xl object-cover shadow-xl",
1086
+ image.className
1087
+ ),
1088
+ optixFlowConfig
1089
+ }
1090
+ )
1091
+ },
1092
+ index
1093
+ ))
1094
+ }
1095
+ );
1096
+ }, [imagesSlot, images, imagesClassName, optixFlowConfig, handleImageClick]);
1097
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1007
1098
  Section,
1008
1099
  {
1009
1100
  background,
@@ -1012,18 +1103,65 @@ function HeroGridPatternSolutions({
1012
1103
  patternOpacity,
1013
1104
  className: cn("relative flex items-center justify-center", className),
1014
1105
  containerClassName,
1015
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
1016
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden", children: [
1017
- showGridPattern && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 -top-1 -left-1 -z-10 h-full w-full bg-[linear-gradient(to_right,hsl(var(--muted-foreground))_1px,transparent_1px),linear-gradient(to_bottom,hsl(var(--muted-foreground))_1px,transparent_1px)] mask-[radial-gradient(ellipse_50%_100%_at_50%_50%,transparent_60%,#000_100%)] bg-size-[92px_92px] opacity-15" }),
1018
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl", contentClassName), children: [
1106
+ children: [
1107
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
1108
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl", contentClassName), children: [
1019
1109
  renderBadge,
1020
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("my-4 mb-6 text-center text-3xl font-semibold lg:text-8xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("my-4 mb-6 text-center text-3xl font-semibold lg:text-8xl", headingClassName), children: heading })),
1021
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto mb-8 max-w-2xl text-center lg:text-xl text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1110
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1111
+ "h1",
1112
+ {
1113
+ className: cn(
1114
+ "my-4 mb-6 text-center text-3xl font-semibold lg:text-8xl text-balance",
1115
+ headingClassName
1116
+ ),
1117
+ children: heading
1118
+ }
1119
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1120
+ "h1",
1121
+ {
1122
+ className: cn(
1123
+ "my-4 mb-6 text-center text-3xl font-semibold lg:text-8xl text-balance",
1124
+ headingClassName
1125
+ ),
1126
+ children: heading
1127
+ }
1128
+ )),
1129
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1130
+ "p",
1131
+ {
1132
+ className: cn(
1133
+ "mx-auto mb-8 max-w-2xl text-center lg:text-xl text-balance",
1134
+ descriptionClassName
1135
+ ),
1136
+ children: description
1137
+ }
1138
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1022
1139
  renderActions
1023
- ] })
1140
+ ] }) }),
1141
+ renderImages
1024
1142
  ] }),
1025
- renderImages
1026
- ] })
1143
+ lightboxOpen && /* @__PURE__ */ jsxRuntime.jsx(
1144
+ lightbox.Lightbox,
1145
+ {
1146
+ items: lightboxItems,
1147
+ initialIndex: lightboxIndex,
1148
+ layout: "horizontal",
1149
+ controls: {
1150
+ navigation: true,
1151
+ thumbnails: true,
1152
+ download: true,
1153
+ share: true,
1154
+ fullscreen: true,
1155
+ captions: true,
1156
+ counter: true
1157
+ },
1158
+ onClose: handleLightboxClose,
1159
+ enableKeyboardShortcuts: true,
1160
+ closeOnEscape: true,
1161
+ closeOnBackdropClick: true
1162
+ }
1163
+ )
1164
+ ]
1027
1165
  }
1028
1166
  );
1029
1167
  }
@@ -44,9 +44,6 @@ interface HeroGridPatternSolutionsProps {
44
44
  */
45
45
  imagesSlot?: React.ReactNode;
46
46
  /**
47
- * Whether to show the grid pattern background
48
- */
49
- showGridPattern?: boolean; /**
50
47
  * Background style for the section
51
48
  */
52
49
  background?: SectionBackground;
@@ -95,6 +92,6 @@ interface HeroGridPatternSolutionsProps {
95
92
  */
96
93
  optixFlowConfig?: OptixFlowConfig;
97
94
  }
98
- declare function HeroGridPatternSolutions({ badgeText, badgeHref, badgeSlot, heading, description, actions, actionsSlot, images, imagesSlot, showGridPattern, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, actionsClassName, imagesClassName, optixFlowConfig, }: HeroGridPatternSolutionsProps): React.JSX.Element;
95
+ declare function HeroGridPatternSolutions({ badgeText, badgeHref, badgeSlot, heading, description, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, actionsClassName, imagesClassName, optixFlowConfig, }: HeroGridPatternSolutionsProps): React.JSX.Element;
99
96
 
100
97
  export { HeroGridPatternSolutions, type HeroGridPatternSolutionsProps };
@@ -44,9 +44,6 @@ interface HeroGridPatternSolutionsProps {
44
44
  */
45
45
  imagesSlot?: React.ReactNode;
46
46
  /**
47
- * Whether to show the grid pattern background
48
- */
49
- showGridPattern?: boolean; /**
50
47
  * Background style for the section
51
48
  */
52
49
  background?: SectionBackground;
@@ -95,6 +92,6 @@ interface HeroGridPatternSolutionsProps {
95
92
  */
96
93
  optixFlowConfig?: OptixFlowConfig;
97
94
  }
98
- declare function HeroGridPatternSolutions({ badgeText, badgeHref, badgeSlot, heading, description, actions, actionsSlot, images, imagesSlot, showGridPattern, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, actionsClassName, imagesClassName, optixFlowConfig, }: HeroGridPatternSolutionsProps): React.JSX.Element;
95
+ declare function HeroGridPatternSolutions({ badgeText, badgeHref, badgeSlot, heading, description, actions, actionsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, actionsClassName, imagesClassName, optixFlowConfig, }: HeroGridPatternSolutionsProps): React.JSX.Element;
99
96
 
100
97
  export { HeroGridPatternSolutions, type HeroGridPatternSolutionsProps };