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