@opensite/ui 2.0.5 → 2.0.7

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 (75) hide show
  1. package/dist/hero-adaptable-product-grid.cjs +11 -8
  2. package/dist/hero-adaptable-product-grid.d.cts +1 -1
  3. package/dist/hero-adaptable-product-grid.d.ts +1 -1
  4. package/dist/hero-adaptable-product-grid.js +11 -8
  5. package/dist/hero-business-operations-mosaic.cjs +542 -22
  6. package/dist/hero-business-operations-mosaic.d.cts +20 -8
  7. package/dist/hero-business-operations-mosaic.d.ts +20 -8
  8. package/dist/hero-business-operations-mosaic.js +542 -19
  9. package/dist/hero-centered-gradient-cta.cjs +3 -3
  10. package/dist/hero-centered-gradient-cta.js +3 -3
  11. package/dist/hero-community-survey-cta.cjs +3 -2
  12. package/dist/hero-community-survey-cta.js +3 -2
  13. package/dist/hero-conversion-video-play.cjs +1 -1
  14. package/dist/hero-conversion-video-play.js +1 -1
  15. package/dist/hero-crm-streamlined.cjs +4 -4
  16. package/dist/hero-crm-streamlined.js +4 -4
  17. package/dist/hero-design-showcase-logos.cjs +4 -1
  18. package/dist/hero-design-showcase-logos.js +4 -1
  19. package/dist/hero-design-system-3d.cjs +1 -1
  20. package/dist/hero-design-system-3d.js +1 -1
  21. package/dist/hero-feature-cards-grid.cjs +2 -2
  22. package/dist/hero-feature-cards-grid.js +2 -2
  23. package/dist/hero-fullscreen-background-image.cjs +4 -3
  24. package/dist/hero-fullscreen-background-image.js +4 -3
  25. package/dist/hero-fullscreen-logo-cta.cjs +7 -5
  26. package/dist/hero-fullscreen-logo-cta.js +7 -5
  27. package/dist/hero-gradient-avatars-rating.cjs +3 -3
  28. package/dist/hero-gradient-avatars-rating.js +3 -3
  29. package/dist/hero-gradient-client-focused.cjs +2 -2
  30. package/dist/hero-gradient-client-focused.js +2 -2
  31. package/dist/hero-grid-pattern-solutions.cjs +2 -2
  32. package/dist/hero-grid-pattern-solutions.d.cts +1 -1
  33. package/dist/hero-grid-pattern-solutions.d.ts +1 -1
  34. package/dist/hero-grid-pattern-solutions.js +2 -2
  35. package/dist/hero-innovation-image-grid.cjs +48 -42
  36. package/dist/hero-innovation-image-grid.js +48 -42
  37. package/dist/hero-mental-health-team.cjs +633 -89
  38. package/dist/hero-mental-health-team.d.cts +26 -6
  39. package/dist/hero-mental-health-team.d.ts +26 -6
  40. package/dist/hero-mental-health-team.js +614 -85
  41. package/dist/hero-minimal-centered-dark.cjs +841 -807
  42. package/dist/hero-minimal-centered-dark.d.cts +1 -1
  43. package/dist/hero-minimal-centered-dark.d.ts +1 -1
  44. package/dist/hero-minimal-centered-dark.js +840 -806
  45. package/dist/hero-presentation-platform-video.cjs +8 -2
  46. package/dist/hero-presentation-platform-video.js +8 -2
  47. package/dist/hero-product-showcase-floating.cjs +715 -612
  48. package/dist/hero-product-showcase-floating.d.cts +5 -1
  49. package/dist/hero-product-showcase-floating.d.ts +5 -1
  50. package/dist/hero-product-showcase-floating.js +712 -609
  51. package/dist/hero-saas-dashboard-preview.cjs +82 -107
  52. package/dist/hero-saas-dashboard-preview.d.cts +1 -1
  53. package/dist/hero-saas-dashboard-preview.d.ts +1 -1
  54. package/dist/hero-saas-dashboard-preview.js +82 -107
  55. package/dist/hero-software-growth-video-dialog.cjs +5 -5
  56. package/dist/hero-software-growth-video-dialog.js +5 -5
  57. package/dist/hero-split-image-newsletter.cjs +41 -32
  58. package/dist/hero-split-image-newsletter.js +41 -32
  59. package/dist/hero-stats-social-proof.cjs +1 -1
  60. package/dist/hero-stats-social-proof.js +1 -1
  61. package/dist/hero-testimonial-image-grid.cjs +2 -2
  62. package/dist/hero-testimonial-image-grid.js +2 -2
  63. package/dist/hero-therapy-testimonial-grid.cjs +682 -638
  64. package/dist/hero-therapy-testimonial-grid.d.cts +5 -1
  65. package/dist/hero-therapy-testimonial-grid.d.ts +5 -1
  66. package/dist/hero-therapy-testimonial-grid.js +671 -627
  67. package/dist/hero-ui-library-showcase.cjs +51 -42
  68. package/dist/hero-ui-library-showcase.js +51 -42
  69. package/dist/hero-video-dialog-gradient.cjs +2 -2
  70. package/dist/hero-video-dialog-gradient.js +2 -2
  71. package/dist/hero-video-overlay-stars.cjs +7 -15
  72. package/dist/hero-video-overlay-stars.js +7 -15
  73. package/dist/registry.cjs +608 -438
  74. package/dist/registry.js +608 -438
  75. package/package.json +1 -1
@@ -1,14 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React = require('react');
4
+ var React3 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var img = require('@page-speed/img');
8
8
  var AspectRatioPrimitive = require('@radix-ui/react-aspect-ratio');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
-
11
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+ var classVarianceAuthority = require('class-variance-authority');
12
11
 
13
12
  function _interopNamespace(e) {
14
13
  if (e && e.__esModule) return e;
@@ -28,7 +27,7 @@ function _interopNamespace(e) {
28
27
  return Object.freeze(n);
29
28
  }
30
29
 
31
- var React__default = /*#__PURE__*/_interopDefault(React);
30
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
32
31
  var AspectRatioPrimitive__namespace = /*#__PURE__*/_interopNamespace(AspectRatioPrimitive);
33
32
 
34
33
  // components/blocks/hero/hero-business-operations-mosaic.tsx
@@ -49,7 +48,7 @@ var maxWidthStyles = {
49
48
  "4xl": "max-w-[1536px]",
50
49
  full: "max-w-full"
51
50
  };
52
- var Container = React__default.default.forwardRef(
51
+ var Container = React3__namespace.default.forwardRef(
53
52
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
54
53
  const Component = as;
55
54
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -354,7 +353,7 @@ var spacingStyles = {
354
353
  };
355
354
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
356
355
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
357
- var Section = React__default.default.forwardRef(
356
+ var Section = React3__namespace.default.forwardRef(
358
357
  ({
359
358
  id,
360
359
  title,
@@ -415,51 +414,545 @@ var Section = React__default.default.forwardRef(
415
414
  }
416
415
  );
417
416
  Section.displayName = "Section";
417
+ var baseStyles = [
418
+ // Layout
419
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
420
+ // Typography - using CSS variables with sensible defaults
421
+ "font-[var(--button-font-family,inherit)]",
422
+ "font-[var(--button-font-weight,500)]",
423
+ "tracking-[var(--button-letter-spacing,0)]",
424
+ "leading-[var(--button-line-height,1.25)]",
425
+ "[text-transform:var(--button-text-transform,none)]",
426
+ "text-sm",
427
+ // Border radius
428
+ "rounded-[var(--button-radius,var(--radius,0.375rem))]",
429
+ // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)
430
+ "[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]",
431
+ // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows
432
+ "[box-shadow:var(--button-shadow,none)]",
433
+ "hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]",
434
+ // Disabled state
435
+ "disabled:pointer-events-none disabled:opacity-50",
436
+ // SVG handling
437
+ "[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
438
+ // Focus styles
439
+ "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
440
+ // Invalid state
441
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
442
+ ].join(" ");
443
+ var buttonVariants = classVarianceAuthority.cva(baseStyles, {
444
+ variants: {
445
+ variant: {
446
+ // Default (Primary) variant - full customization
447
+ default: [
448
+ "bg-[var(--button-default-bg,hsl(var(--primary)))]",
449
+ "text-[var(--button-default-fg,hsl(var(--primary-foreground)))]",
450
+ "border-[length:var(--button-default-border-width,0px)]",
451
+ "border-[color:var(--button-default-border,transparent)]",
452
+ "[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]",
453
+ "hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]",
454
+ "hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]",
455
+ "hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]",
456
+ "hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]"
457
+ ].join(" "),
458
+ // Destructive variant - full customization
459
+ destructive: [
460
+ "bg-[var(--button-destructive-bg,hsl(var(--destructive)))]",
461
+ "text-[var(--button-destructive-fg,white)]",
462
+ "border-[length:var(--button-destructive-border-width,0px)]",
463
+ "border-[color:var(--button-destructive-border,transparent)]",
464
+ "[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]",
465
+ "hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]",
466
+ "hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]",
467
+ "hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]",
468
+ "hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]",
469
+ "focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
470
+ "dark:bg-destructive/60"
471
+ ].join(" "),
472
+ // Outline variant - full customization with proper border handling
473
+ outline: [
474
+ "bg-[var(--button-outline-bg,hsl(var(--background)))]",
475
+ "text-[var(--button-outline-fg,inherit)]",
476
+ "border-[length:var(--button-outline-border-width,1px)]",
477
+ "border-[color:var(--button-outline-border,hsl(var(--border)))]",
478
+ "[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]",
479
+ "hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]",
480
+ "hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]",
481
+ "hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]",
482
+ "hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]",
483
+ "dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
484
+ ].join(" "),
485
+ // Secondary variant - full customization
486
+ secondary: [
487
+ "bg-[var(--button-secondary-bg,hsl(var(--secondary)))]",
488
+ "text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]",
489
+ "border-[length:var(--button-secondary-border-width,0px)]",
490
+ "border-[color:var(--button-secondary-border,transparent)]",
491
+ "[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]",
492
+ "hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]",
493
+ "hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]",
494
+ "hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]",
495
+ "hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]"
496
+ ].join(" "),
497
+ // Ghost variant - full customization
498
+ ghost: [
499
+ "bg-[var(--button-ghost-bg,transparent)]",
500
+ "text-[var(--button-ghost-fg,inherit)]",
501
+ "border-[length:var(--button-ghost-border-width,0px)]",
502
+ "border-[color:var(--button-ghost-border,transparent)]",
503
+ "[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]",
504
+ "hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]",
505
+ "hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]",
506
+ "hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]",
507
+ "hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]",
508
+ "dark:hover:bg-accent/50"
509
+ ].join(" "),
510
+ // Link variant - full customization
511
+ link: [
512
+ "bg-[var(--button-link-bg,transparent)]",
513
+ "text-[var(--button-link-fg,hsl(var(--primary)))]",
514
+ "border-[length:var(--button-link-border-width,0px)]",
515
+ "border-[color:var(--button-link-border,transparent)]",
516
+ "[box-shadow:var(--button-link-shadow,none)]",
517
+ "hover:bg-[var(--button-link-hover-bg,transparent)]",
518
+ "hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]",
519
+ "hover:[box-shadow:var(--button-link-shadow-hover,none)]",
520
+ "underline-offset-4 hover:underline"
521
+ ].join(" ")
522
+ },
523
+ size: {
524
+ default: [
525
+ "h-[var(--button-height-md,2.25rem)]",
526
+ "px-[var(--button-padding-x-md,1rem)]",
527
+ "py-[var(--button-padding-y-md,0.5rem)]",
528
+ "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
529
+ ].join(" "),
530
+ sm: [
531
+ "h-[var(--button-height-sm,2rem)]",
532
+ "px-[var(--button-padding-x-sm,0.75rem)]",
533
+ "py-[var(--button-padding-y-sm,0.25rem)]",
534
+ "gap-1.5",
535
+ "has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]"
536
+ ].join(" "),
537
+ md: [
538
+ "h-[var(--button-height-md,2.25rem)]",
539
+ "px-[var(--button-padding-x-md,1rem)]",
540
+ "py-[var(--button-padding-y-md,0.5rem)]",
541
+ "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
542
+ ].join(" "),
543
+ lg: [
544
+ "h-[var(--button-height-lg,2.5rem)]",
545
+ "px-[var(--button-padding-x-lg,1.5rem)]",
546
+ "py-[var(--button-padding-y-lg,0.5rem)]",
547
+ "has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]"
548
+ ].join(" "),
549
+ icon: "size-[var(--button-height-md,2.25rem)]",
550
+ "icon-sm": "size-[var(--button-height-sm,2rem)]",
551
+ "icon-lg": "size-[var(--button-height-lg,2.5rem)]"
552
+ }
553
+ },
554
+ defaultVariants: {
555
+ variant: "default",
556
+ size: "default"
557
+ }
558
+ });
559
+ function normalizePhoneNumber(input) {
560
+ const trimmed = input.trim();
561
+ if (trimmed.toLowerCase().startsWith("tel:")) {
562
+ return trimmed;
563
+ }
564
+ const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
565
+ if (match) {
566
+ const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
567
+ const extension = match[3];
568
+ const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
569
+ const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
570
+ return `tel:${withExtension}`;
571
+ }
572
+ const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
573
+ return `tel:${cleaned}`;
574
+ }
575
+ function normalizeEmail(input) {
576
+ const trimmed = input.trim();
577
+ if (trimmed.toLowerCase().startsWith("mailto:")) {
578
+ return trimmed;
579
+ }
580
+ return `mailto:${trimmed}`;
581
+ }
582
+ function isEmail(input) {
583
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
584
+ return emailRegex.test(input.trim());
585
+ }
586
+ function isPhoneNumber(input) {
587
+ const trimmed = input.trim();
588
+ if (trimmed.toLowerCase().startsWith("tel:")) {
589
+ return true;
590
+ }
591
+ const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
592
+ return phoneRegex.test(trimmed);
593
+ }
594
+ function isInternalUrl(href) {
595
+ if (typeof window === "undefined") {
596
+ return href.startsWith("/") && !href.startsWith("//");
597
+ }
598
+ const trimmed = href.trim();
599
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
600
+ return true;
601
+ }
602
+ try {
603
+ const url = new URL(trimmed, window.location.href);
604
+ const currentOrigin = window.location.origin;
605
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
606
+ return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
607
+ } catch {
608
+ return false;
609
+ }
610
+ }
611
+ function toRelativePath(href) {
612
+ if (typeof window === "undefined") {
613
+ return href;
614
+ }
615
+ const trimmed = href.trim();
616
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
617
+ return trimmed;
618
+ }
619
+ try {
620
+ const url = new URL(trimmed, window.location.href);
621
+ const currentOrigin = window.location.origin;
622
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
623
+ if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
624
+ return url.pathname + url.search + url.hash;
625
+ }
626
+ } catch {
627
+ }
628
+ return trimmed;
629
+ }
630
+ function useNavigation({
631
+ href,
632
+ onClick
633
+ } = {}) {
634
+ const linkType = React3__namespace.useMemo(() => {
635
+ if (!href || href.trim() === "") {
636
+ return onClick ? "none" : "none";
637
+ }
638
+ const trimmed = href.trim();
639
+ if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
640
+ return "mailto";
641
+ }
642
+ if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
643
+ return "tel";
644
+ }
645
+ if (isInternalUrl(trimmed)) {
646
+ return "internal";
647
+ }
648
+ try {
649
+ new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
650
+ return "external";
651
+ } catch {
652
+ return "internal";
653
+ }
654
+ }, [href, onClick]);
655
+ const normalizedHref = React3__namespace.useMemo(() => {
656
+ if (!href || href.trim() === "") {
657
+ return void 0;
658
+ }
659
+ const trimmed = href.trim();
660
+ switch (linkType) {
661
+ case "tel":
662
+ return normalizePhoneNumber(trimmed);
663
+ case "mailto":
664
+ return normalizeEmail(trimmed);
665
+ case "internal":
666
+ return toRelativePath(trimmed);
667
+ case "external":
668
+ return trimmed;
669
+ default:
670
+ return trimmed;
671
+ }
672
+ }, [href, linkType]);
673
+ const target = React3__namespace.useMemo(() => {
674
+ switch (linkType) {
675
+ case "external":
676
+ return "_blank";
677
+ case "internal":
678
+ return "_self";
679
+ case "mailto":
680
+ case "tel":
681
+ return void 0;
682
+ default:
683
+ return void 0;
684
+ }
685
+ }, [linkType]);
686
+ const rel = React3__namespace.useMemo(() => {
687
+ if (linkType === "external") {
688
+ return "noopener noreferrer";
689
+ }
690
+ return void 0;
691
+ }, [linkType]);
692
+ const isExternal = linkType === "external";
693
+ const isInternal = linkType === "internal";
694
+ const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
695
+ const handleClick = React3__namespace.useCallback(
696
+ (event) => {
697
+ if (onClick) {
698
+ try {
699
+ onClick(event);
700
+ } catch (error) {
701
+ console.error("Error in user onClick handler:", error);
702
+ }
703
+ }
704
+ if (event.defaultPrevented) {
705
+ return;
706
+ }
707
+ if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
708
+ !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
709
+ if (typeof window !== "undefined") {
710
+ const handler = window.__opensiteNavigationHandler;
711
+ if (typeof handler === "function") {
712
+ try {
713
+ const handled = handler(normalizedHref, event.nativeEvent || event);
714
+ if (handled !== false) {
715
+ event.preventDefault();
716
+ }
717
+ } catch (error) {
718
+ console.error("Error in navigation handler:", error);
719
+ }
720
+ }
721
+ }
722
+ }
723
+ },
724
+ [onClick, shouldUseRouter, normalizedHref]
725
+ );
726
+ return {
727
+ linkType,
728
+ normalizedHref,
729
+ target,
730
+ rel,
731
+ isExternal,
732
+ isInternal,
733
+ shouldUseRouter,
734
+ handleClick
735
+ };
736
+ }
737
+ var Pressable = React3__namespace.forwardRef(
738
+ ({
739
+ children,
740
+ className,
741
+ href,
742
+ onClick,
743
+ variant,
744
+ size,
745
+ asButton = false,
746
+ fallbackComponentType = "span",
747
+ componentType,
748
+ "aria-label": ariaLabel,
749
+ "aria-describedby": ariaDescribedby,
750
+ id,
751
+ ...props
752
+ }, ref) => {
753
+ const navigation = useNavigation({ href, onClick });
754
+ const {
755
+ normalizedHref,
756
+ target,
757
+ rel,
758
+ linkType,
759
+ isInternal,
760
+ handleClick
761
+ } = navigation;
762
+ const shouldRenderLink = normalizedHref && linkType !== "none";
763
+ const shouldRenderButton = !shouldRenderLink && onClick;
764
+ const effectiveComponentType = componentType || (shouldRenderLink ? "a" : shouldRenderButton ? "button" : fallbackComponentType);
765
+ const finalComponentType = isInternal && shouldRenderLink ? "a" : effectiveComponentType;
766
+ const shouldApplyButtonStyles = asButton || variant || size;
767
+ const combinedClassName = cn(
768
+ shouldApplyButtonStyles && buttonVariants({ variant, size }),
769
+ className
770
+ );
771
+ const dataProps = Object.fromEntries(
772
+ Object.entries(props).filter(([key]) => key.startsWith("data-"))
773
+ );
774
+ const buttonDataAttributes = shouldApplyButtonStyles ? {
775
+ "data-slot": "button",
776
+ "data-variant": variant ?? "default",
777
+ "data-size": size ?? "default"
778
+ } : {};
779
+ const commonProps = {
780
+ className: combinedClassName,
781
+ onClick: handleClick,
782
+ "aria-label": ariaLabel,
783
+ "aria-describedby": ariaDescribedby,
784
+ id,
785
+ ...dataProps,
786
+ ...buttonDataAttributes
787
+ };
788
+ if (finalComponentType === "a" && shouldRenderLink) {
789
+ return /* @__PURE__ */ jsxRuntime.jsx(
790
+ "a",
791
+ {
792
+ ref,
793
+ href: normalizedHref,
794
+ target,
795
+ rel,
796
+ ...commonProps,
797
+ ...props,
798
+ children
799
+ }
800
+ );
801
+ }
802
+ if (finalComponentType === "button") {
803
+ return /* @__PURE__ */ jsxRuntime.jsx(
804
+ "button",
805
+ {
806
+ ref,
807
+ type: props.type || "button",
808
+ ...commonProps,
809
+ ...props,
810
+ children
811
+ }
812
+ );
813
+ }
814
+ if (finalComponentType === "div") {
815
+ return /* @__PURE__ */ jsxRuntime.jsx(
816
+ "div",
817
+ {
818
+ ref,
819
+ ...commonProps,
820
+ children
821
+ }
822
+ );
823
+ }
824
+ return /* @__PURE__ */ jsxRuntime.jsx(
825
+ "span",
826
+ {
827
+ ref,
828
+ ...commonProps,
829
+ children
830
+ }
831
+ );
832
+ }
833
+ );
834
+ Pressable.displayName = "Pressable";
835
+ var MOBILE_CLASSES = {
836
+ "fit-left": "items-start md:items-center",
837
+ "fit-center": "items-center",
838
+ "fit-right": "items-end md:items-center",
839
+ "full-left": "items-stretch md:items-center",
840
+ "full-center": "items-stretch md:items-center",
841
+ "full-right": "items-stretch md:items-center"
842
+ };
843
+ function BlockActions({
844
+ mobileConfig,
845
+ actionsClassName,
846
+ verticalSpacing = "mt-4 md:mt-8",
847
+ actions,
848
+ actionsSlot
849
+ }) {
850
+ const width = mobileConfig?.width ?? "full";
851
+ const position = mobileConfig?.position ?? "center";
852
+ const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
853
+ if (actionsSlot) {
854
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: actionsSlot });
855
+ } else if (actions && actions?.length > 0) {
856
+ return /* @__PURE__ */ jsxRuntime.jsx(
857
+ "div",
858
+ {
859
+ className: cn(
860
+ "flex flex-col md:flex-row flex-wrap gap-4",
861
+ mobileLayoutClass,
862
+ actionsClassName,
863
+ verticalSpacing
864
+ ),
865
+ children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(ActionComponent, { action }, index))
866
+ }
867
+ );
868
+ } else {
869
+ return null;
870
+ }
871
+ }
872
+ function ActionComponent({ action }) {
873
+ const {
874
+ label,
875
+ icon,
876
+ iconAfter,
877
+ children,
878
+ href,
879
+ onClick,
880
+ className: actionClassName,
881
+ ...pressableProps
882
+ } = action;
883
+ return /* @__PURE__ */ jsxRuntime.jsx(
884
+ Pressable,
885
+ {
886
+ href,
887
+ onClick,
888
+ asButton: action.asButton ?? true,
889
+ className: actionClassName,
890
+ ...pressableProps,
891
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
892
+ icon,
893
+ label,
894
+ iconAfter
895
+ ] })
896
+ }
897
+ );
898
+ }
418
899
  function HeroBusinessOperationsMosaic({
419
900
  heading,
420
- subheading,
901
+ description,
902
+ descriptionClassName,
421
903
  images,
422
904
  imagesSlot,
905
+ actions,
906
+ actionsSlot,
907
+ actionsClassName,
423
908
  background,
424
- spacing,
909
+ spacing = "xl",
425
910
  pattern,
426
911
  patternOpacity,
427
912
  className,
428
- containerClassName,
913
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
429
914
  contentClassName,
430
915
  headingClassName,
431
- subheadingClassName,
432
916
  mosaicClassName,
433
917
  optixFlowConfig
434
918
  }) {
435
- const renderMosaic = React.useMemo(() => {
919
+ const renderMosaic = React3.useMemo(() => {
436
920
  if (imagesSlot) return imagesSlot;
437
921
  if (!images || images.length === 0) return null;
438
922
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto grid h-full w-full grid-cols-[14.7%_47.29%_14.7%_14.7%] grid-rows-[34.7%_26.28%_34.7%] gap-x-[2.85%] gap-y-[2.32%]", children: [
439
- images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[1/3] row-[1/3]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] bg-primary/10 lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
923
+ images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[1/3] row-[1/3]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
440
924
  img.Img,
441
925
  {
442
926
  src: images[0].src,
443
927
  alt: images[0].alt,
444
- className: cn("h-full w-full object-cover object-center", images[0].className),
928
+ className: cn(
929
+ "h-full w-full object-cover object-center",
930
+ images[0].className
931
+ ),
445
932
  optixFlowConfig
446
933
  }
447
934
  ) }) }),
448
- images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[3/5] row-[2/3]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] bg-success/10 lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
935
+ images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[3/5] row-[2/3]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
449
936
  img.Img,
450
937
  {
451
938
  src: images[1].src,
452
939
  alt: images[1].alt,
453
- className: cn("h-full w-full object-cover object-center", images[1].className),
940
+ className: cn(
941
+ "h-full w-full object-cover object-center",
942
+ images[1].className
943
+ ),
454
944
  optixFlowConfig
455
945
  }
456
946
  ) }) }),
457
- images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[2/4] row-[3/4]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] bg-pink-100 lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
947
+ images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-[2/4] row-[3/4]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-full overflow-hidden rounded-[2vw] lg:rounded-[1.2vw] xl:rounded-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
458
948
  img.Img,
459
949
  {
460
950
  src: images[2].src,
461
951
  alt: images[2].alt,
462
- className: cn("h-full w-full object-cover object-center", images[2].className),
952
+ className: cn(
953
+ "h-full w-full object-cover object-center",
954
+ images[2].className
955
+ ),
463
956
  optixFlowConfig
464
957
  }
465
958
  ) }) })
@@ -473,12 +966,39 @@ function HeroBusinessOperationsMosaic({
473
966
  pattern,
474
967
  patternOpacity,
475
968
  className,
476
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container max-w-392.5", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
969
+ containerClassName,
970
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
477
971
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full max-w-166.5", mosaicClassName), children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 0.815177479 / 1, children: renderMosaic }) }),
478
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full max-w-125 flex-col gap-14 lg:max-w-full", contentClassName), children: [
479
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("font-serif text-6xl lg:text-7xl xl:text-[5rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
480
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("font-montserrat text-2xl leading-snug lg:text-3xl xl:text-4xl", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading }))
481
- ] })
972
+ /* @__PURE__ */ jsxRuntime.jsxs(
973
+ "div",
974
+ {
975
+ className: cn(
976
+ "flex w-full max-w-125 flex-col gap-6 md:gap-14 lg:max-w-full",
977
+ contentClassName
978
+ ),
979
+ children: [
980
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
981
+ "h1",
982
+ {
983
+ className: cn(
984
+ "text-6xl lg:text-7xl xl:text-[5rem] font-semibold",
985
+ headingClassName
986
+ ),
987
+ children: heading
988
+ }
989
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
990
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
991
+ /* @__PURE__ */ jsxRuntime.jsx(
992
+ BlockActions,
993
+ {
994
+ actions,
995
+ actionsSlot,
996
+ actionsClassName
997
+ }
998
+ )
999
+ ]
1000
+ }
1001
+ )
482
1002
  ] }) })
483
1003
  }
484
1004
  );