@opensite/ui 2.1.3 → 2.1.5

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.
@@ -15,8 +15,8 @@ var PopoverPrimitive = require('@radix-ui/react-popover');
15
15
  var icon = require('@page-speed/icon');
16
16
  var usePlatformFromUrl = require('@opensite/hooks/usePlatformFromUrl');
17
17
  var TabsPrimitive = require('@radix-ui/react-tabs');
18
- var forms = require('@page-speed/forms');
19
18
  var integration = require('@page-speed/forms/integration');
19
+ var forms = require('@page-speed/forms');
20
20
  var inputs = require('@page-speed/forms/inputs');
21
21
 
22
22
  function _interopNamespace(e) {
@@ -2602,6 +2602,70 @@ function CommunityInitiatives({
2602
2602
  }
2603
2603
  );
2604
2604
  }
2605
+ var MOBILE_CLASSES = {
2606
+ "fit-left": "items-start md:items-center",
2607
+ "fit-center": "items-center",
2608
+ "fit-right": "items-end md:items-center",
2609
+ "full-left": "items-stretch md:items-center",
2610
+ "full-center": "items-stretch md:items-center",
2611
+ "full-right": "items-stretch md:items-center"
2612
+ };
2613
+ function BlockActions({
2614
+ mobileConfig,
2615
+ actionsClassName,
2616
+ verticalSpacing = "mt-4 md:mt-8",
2617
+ actions,
2618
+ actionsSlot
2619
+ }) {
2620
+ const width = mobileConfig?.width ?? "full";
2621
+ const position = mobileConfig?.position ?? "center";
2622
+ const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
2623
+ if (actionsSlot) {
2624
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: actionsSlot });
2625
+ } else if (actions && actions?.length > 0) {
2626
+ return /* @__PURE__ */ jsxRuntime.jsx(
2627
+ "div",
2628
+ {
2629
+ className: cn(
2630
+ "flex flex-col md:flex-row flex-wrap gap-4",
2631
+ mobileLayoutClass,
2632
+ actionsClassName,
2633
+ verticalSpacing
2634
+ ),
2635
+ children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(ActionComponent, { action }, index))
2636
+ }
2637
+ );
2638
+ } else {
2639
+ return null;
2640
+ }
2641
+ }
2642
+ function ActionComponent({ action }) {
2643
+ const {
2644
+ label,
2645
+ icon,
2646
+ iconAfter,
2647
+ children,
2648
+ href,
2649
+ onClick,
2650
+ className: actionClassName,
2651
+ ...pressableProps
2652
+ } = action;
2653
+ return /* @__PURE__ */ jsxRuntime.jsx(
2654
+ Pressable,
2655
+ {
2656
+ href,
2657
+ onClick,
2658
+ asButton: action.asButton ?? true,
2659
+ className: actionClassName,
2660
+ ...pressableProps,
2661
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2662
+ icon,
2663
+ label,
2664
+ iconAfter
2665
+ ] })
2666
+ }
2667
+ );
2668
+ }
2605
2669
  function AboutCultureTabs({
2606
2670
  badgeText,
2607
2671
  heading,
@@ -2615,7 +2679,7 @@ function AboutCultureTabs({
2615
2679
  ctaImages,
2616
2680
  ctaImagesSlot,
2617
2681
  className,
2618
- containerClassName,
2682
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
2619
2683
  headerClassName,
2620
2684
  badgeClassName,
2621
2685
  headingClassName,
@@ -2627,45 +2691,33 @@ function AboutCultureTabs({
2627
2691
  actionsClassName,
2628
2692
  optixFlowConfig,
2629
2693
  background,
2630
- spacing,
2694
+ spacing = "xl",
2631
2695
  pattern,
2632
2696
  patternOpacity
2633
2697
  }) {
2634
2698
  const resolvedAspects = aspects ?? [];
2635
- const [activeTab, setActiveTab] = React4__namespace.useState(resolvedAspects[0]?.id || "");
2636
- const actionsContent = React4.useMemo(() => {
2637
- if (actionsSlot) return actionsSlot;
2638
- if (!actions || actions.length === 0) return null;
2639
- return actions.map((action, index) => {
2640
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
2641
- return /* @__PURE__ */ jsxRuntime.jsx(
2642
- Pressable,
2643
- {
2644
- asButton: true,
2645
- className: actionClassName,
2646
- ...pressableProps,
2647
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2648
- icon,
2649
- label,
2650
- iconAfter
2651
- ] })
2652
- },
2653
- index
2654
- );
2655
- });
2656
- }, [actionsSlot, actions]);
2699
+ const [activeTab, setActiveTab] = React4__namespace.useState(
2700
+ resolvedAspects[0]?.id || ""
2701
+ );
2657
2702
  const ctaImagesContent = React4.useMemo(() => {
2658
2703
  if (ctaImagesSlot) return ctaImagesSlot;
2659
2704
  if (!ctaImages || ctaImages.length === 0) return null;
2660
- return ctaImages.map((src, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative aspect-square overflow-hidden rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(
2661
- img.Img,
2705
+ return ctaImages.map((src, i) => /* @__PURE__ */ jsxRuntime.jsx(
2706
+ "div",
2662
2707
  {
2663
- src,
2664
- alt: "Team culture",
2665
- className: "h-full w-full object-cover",
2666
- optixFlowConfig
2667
- }
2668
- ) }, i));
2708
+ className: "relative aspect-square overflow-hidden rounded-md",
2709
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2710
+ img.Img,
2711
+ {
2712
+ src,
2713
+ alt: "Team culture",
2714
+ className: "h-full w-full object-cover",
2715
+ optixFlowConfig
2716
+ }
2717
+ )
2718
+ },
2719
+ i
2720
+ ));
2669
2721
  }, [ctaImagesSlot, ctaImages, optixFlowConfig]);
2670
2722
  return /* @__PURE__ */ jsxRuntime.jsxs(
2671
2723
  Section,
@@ -2674,14 +2726,32 @@ function AboutCultureTabs({
2674
2726
  spacing,
2675
2727
  pattern,
2676
2728
  patternOpacity,
2677
- className: cn(className),
2729
+ className,
2678
2730
  containerClassName,
2679
2731
  children: [
2680
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto mb-12 max-w-3xl space-y-4 text-center", headerClassName), children: [
2681
- badgeText && (typeof badgeText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("inline-block rounded-lg bg-primary/10 px-3 py-1 text-sm", getAccentColor(background), badgeClassName), children: badgeText }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: badgeClassName, children: badgeText })),
2682
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-bold tracking-tight md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
2683
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
2684
- ] }),
2732
+ /* @__PURE__ */ jsxRuntime.jsxs(
2733
+ "div",
2734
+ {
2735
+ className: cn(
2736
+ "mx-auto mb-12 max-w-full md:max-w-md space-y-4 text-center flex flex-col items-center justify-center",
2737
+ headerClassName
2738
+ ),
2739
+ children: [
2740
+ badgeText && (typeof badgeText === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn("px-3 py-1", badgeClassName), children: badgeText }) : badgeText),
2741
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
2742
+ "h2",
2743
+ {
2744
+ className: cn(
2745
+ "text-3xl font-bold tracking-tight md:text-4xl text-pretty",
2746
+ headingClassName
2747
+ ),
2748
+ children: heading
2749
+ }
2750
+ ) : heading),
2751
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-balance", descriptionClassName), children: description }) : description)
2752
+ ]
2753
+ }
2754
+ ),
2685
2755
  aspectsSlot ? aspectsSlot : resolvedAspects.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
2686
2756
  Tabs,
2687
2757
  {
@@ -2694,80 +2764,103 @@ function AboutCultureTabs({
2694
2764
  TabsTrigger,
2695
2765
  {
2696
2766
  value: aspect.id,
2697
- className: cn("px-3 py-2.5", `data-[state=active]:${getAccentColor(background)}`, "data-[state=active]:text-primary-foreground"),
2767
+ className: cn("px-3 py-2.5"),
2698
2768
  children: aspect.title
2699
2769
  },
2700
2770
  aspect.id
2701
2771
  )) }) }),
2702
- resolvedAspects.map((aspect) => /* @__PURE__ */ jsxRuntime.jsxs(TabsContent, { value: aspect.id, className: "space-y-8", children: [
2703
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
2704
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
2705
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold tracking-tight", children: aspect.title }),
2706
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("leading-relaxed", getTextColor(background, "muted")), children: aspect.description })
2707
- ] }),
2708
- /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "border-0 bg-gradient-to-br from-primary/5 to-primary/10 p-0", children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-4 p-6 pt-6", children: [
2709
- /* @__PURE__ */ jsxRuntime.jsx(
2710
- DynamicIcon,
2711
- {
2712
- name: "lucide/quote",
2713
- size: 32,
2714
- className: cn(getAccentColor(background), "opacity-40")
2715
- }
2716
- ),
2717
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("italic", getTextColor(background, "muted")), children: [
2718
- '"',
2719
- aspect.testimonial.quote,
2720
- '"'
2772
+ resolvedAspects.map((aspect) => /* @__PURE__ */ jsxRuntime.jsxs(
2773
+ TabsContent,
2774
+ {
2775
+ value: aspect.id,
2776
+ className: "space-y-8",
2777
+ children: [
2778
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
2779
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
2780
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold tracking-tight", children: aspect.title }),
2781
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("leading-relaxed"), children: aspect.description })
2782
+ ] }),
2783
+ /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "border-0 p-0", children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-4 p-6 pt-6", children: [
2784
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/quote", size: 32 }),
2785
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "italic", children: [
2786
+ '"',
2787
+ aspect.testimonial.quote,
2788
+ '"'
2789
+ ] }),
2790
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2", children: [
2791
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-10 w-10 overflow-hidden rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(
2792
+ img.Img,
2793
+ {
2794
+ src: aspect.testimonial.avatar,
2795
+ alt: aspect.testimonial.author,
2796
+ className: "h-full w-full object-cover",
2797
+ optixFlowConfig
2798
+ }
2799
+ ) }),
2800
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2801
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: aspect.testimonial.author }),
2802
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: aspect.testimonial.role })
2803
+ ] })
2804
+ ] })
2805
+ ] }) })
2721
2806
  ] }),
2722
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2", children: [
2723
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-10 w-10 overflow-hidden rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(
2724
- img.Img,
2725
- {
2726
- src: aspect.testimonial.avatar,
2727
- alt: aspect.testimonial.author,
2728
- className: "h-full w-full object-cover",
2729
- optixFlowConfig
2730
- }
2731
- ) }),
2732
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2733
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: aspect.testimonial.author }),
2734
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-xs", getTextColor(background, "muted")), children: aspect.testimonial.role })
2735
- ] })
2736
- ] })
2737
- ] }) })
2738
- ] }),
2739
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: aspect.images.map((image, idx) => /* @__PURE__ */ jsxRuntime.jsx(
2740
- "div",
2741
- {
2742
- className: "relative aspect-[4/3] overflow-hidden rounded-lg",
2743
- children: /* @__PURE__ */ jsxRuntime.jsx(
2744
- img.Img,
2807
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: aspect.images.map((image, idx) => /* @__PURE__ */ jsxRuntime.jsx(
2808
+ "div",
2745
2809
  {
2746
- src: image,
2747
- alt: `${aspect.title} culture`,
2748
- className: "h-full w-full transform object-cover transition-transform duration-500 hover:scale-105",
2749
- optixFlowConfig
2750
- }
2751
- )
2752
- },
2753
- idx
2754
- )) })
2755
- ] }, aspect.id))
2810
+ className: "relative aspect-4/3 overflow-hidden rounded-lg",
2811
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2812
+ img.Img,
2813
+ {
2814
+ src: image,
2815
+ alt: `${aspect.title} culture`,
2816
+ className: "h-full w-full transform object-cover transition-transform duration-500 hover:scale-105",
2817
+ optixFlowConfig
2818
+ }
2819
+ )
2820
+ },
2821
+ idx
2822
+ )) })
2823
+ ]
2824
+ },
2825
+ aspect.id
2826
+ ))
2756
2827
  ]
2757
2828
  }
2758
2829
  ) : null,
2759
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative mt-16 rounded-xl border bg-background p-8 md:p-12", ctaClassName), children: [
2760
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-8 md:grid-cols-2", children: [
2761
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2762
- ctaHeading && (typeof ctaHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mb-4 text-2xl font-bold", ctaHeadingClassName), children: ctaHeading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", ctaHeadingClassName), children: ctaHeading })),
2763
- ctaDescription && (typeof ctaDescription === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6", getTextColor(background, "muted"), ctaDescriptionClassName), children: ctaDescription }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-6", ctaDescriptionClassName), children: ctaDescription })),
2764
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-4", actionsClassName), children: actionsContent })
2765
- ] }),
2766
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: ctaImagesContent })
2767
- ] }),
2768
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-5 -top-5 h-10 w-10 rounded-full bg-primary/10" }),
2769
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-5 -right-5 h-10 w-10 rounded-full bg-primary/10" })
2770
- ] })
2830
+ /* @__PURE__ */ jsxRuntime.jsxs(
2831
+ "div",
2832
+ {
2833
+ className: cn(
2834
+ "relative mt-16 rounded-xl border p-8 md:p-12",
2835
+ ctaClassName
2836
+ ),
2837
+ children: [
2838
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-8 md:grid-cols-2", children: [
2839
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2840
+ ctaHeading && (typeof ctaHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
2841
+ "h3",
2842
+ {
2843
+ className: cn("mb-4 text-2xl font-bold", ctaHeadingClassName),
2844
+ children: ctaHeading
2845
+ }
2846
+ ) : ctaHeading),
2847
+ ctaDescription && (typeof ctaDescription === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6", ctaDescriptionClassName), children: ctaDescription }) : ctaDescription),
2848
+ /* @__PURE__ */ jsxRuntime.jsx(
2849
+ BlockActions,
2850
+ {
2851
+ actions,
2852
+ actionsSlot,
2853
+ actionsClassName
2854
+ }
2855
+ )
2856
+ ] }),
2857
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: ctaImagesContent })
2858
+ ] }),
2859
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-5 -top-5 h-10 w-10 rounded-full bg-primary/10" }),
2860
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-5 -right-5 h-10 w-10 rounded-full bg-primary/10" })
2861
+ ]
2862
+ }
2863
+ )
2771
2864
  ]
2772
2865
  }
2773
2866
  );