@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.
@@ -4,7 +4,7 @@ import React3__default from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import { useFileUpload, FormEngine } from '@page-speed/forms/integration';
7
+ import { FormEngine } from '@page-speed/forms/integration';
8
8
 
9
9
  // components/blocks/hero/hero-newsletter-minimal.tsx
10
10
  function cn(...inputs) {
@@ -385,6 +385,14 @@ var Section = React3__default.forwardRef(
385
385
  }
386
386
  );
387
387
  Section.displayName = "Section";
388
+ var DEFAULT_STYLE_RULES = {
389
+ formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
390
+ fieldsContainer: "",
391
+ fieldClassName: "",
392
+ formClassName: "",
393
+ successMessageClassName: "text-primary-foreground mt-4 p-3 rounded-md bg-primary",
394
+ errorMessageClassName: "text-destructive-foreground mt-4 p-3 rounded-md bg-destructive"
395
+ };
388
396
  var DEFAULT_FORM_FIELDS = [
389
397
  {
390
398
  name: "email",
@@ -398,12 +406,7 @@ var DEFAULT_FORM_FIELDS = [
398
406
  function HeroNewsletterMinimal({
399
407
  heading,
400
408
  description,
401
- formFields = DEFAULT_FORM_FIELDS,
402
- formConfig,
403
- onSubmit,
404
- onSuccess,
405
- onError,
406
- successMessage,
409
+ formEngineSetup,
407
410
  buttonAction,
408
411
  helperText,
409
412
  formSlot,
@@ -412,25 +415,33 @@ function HeroNewsletterMinimal({
412
415
  patternClassName,
413
416
  statsSlot,
414
417
  background,
415
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
418
+ containerClassName = "pmx-auto w-full max-w-7xl relative z-10 px-6 sm:px-6 md:px-8 lg:px-8 flex flex-col items-center justify-center",
416
419
  spacing = "xl",
417
420
  pattern,
418
421
  patternOpacity,
419
422
  className,
420
423
  headingClassName,
421
424
  descriptionClassName,
422
- formClassName,
423
425
  disclaimerClassName,
424
426
  statsClassName
425
427
  }) {
426
- const {
427
- uploadTokens,
428
- uploadProgress,
429
- isUploading,
430
- uploadFiles,
431
- removeFile,
432
- resetUpload
433
- } = useFileUpload({ onError });
428
+ const formStyleRules = React3.useMemo(() => {
429
+ return {
430
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES.formContainer,
431
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES.fieldsContainer,
432
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES.fieldClassName,
433
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES.formClassName,
434
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES.successMessageClassName,
435
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES.errorMessageClassName
436
+ };
437
+ }, [formEngineSetup?.formLayoutSettings?.styleRules]);
438
+ const formFields = React3.useMemo(() => {
439
+ if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
440
+ return formEngineSetup.fields;
441
+ } else {
442
+ return DEFAULT_FORM_FIELDS;
443
+ }
444
+ }, [formEngineSetup?.fields]);
434
445
  const renderStats = React3.useMemo(() => {
435
446
  if (statsSlot) return statsSlot;
436
447
  if (!stats || stats.length === 0) return null;
@@ -459,6 +470,7 @@ function HeroNewsletterMinimal({
459
470
  }, [statsSlot, stats]);
460
471
  const renderForm = React3.useMemo(() => {
461
472
  if (formSlot) return formSlot;
473
+ if (!formEngineSetup) return null;
462
474
  const defaultButtonAction = {
463
475
  label: "Subscribe",
464
476
  variant: "default"
@@ -468,51 +480,33 @@ function HeroNewsletterMinimal({
468
480
  /* @__PURE__ */ jsx(
469
481
  FormEngine,
470
482
  {
471
- api: formConfig,
472
- fields: formFields,
483
+ ...formEngineSetup,
473
484
  formLayoutSettings: {
485
+ ...formEngineSetup.formLayoutSettings,
474
486
  formLayout: "button-group",
475
487
  buttonGroupSetup: {
488
+ ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
476
489
  size: "lg",
477
490
  submitLabel: /* @__PURE__ */ jsxs(Fragment, { children: [
478
491
  action.label,
479
492
  action.iconAfter
480
493
  ] }),
481
494
  submitVariant: action.variant || "default"
482
- }
495
+ },
496
+ styleRules: formStyleRules
483
497
  },
484
- successMessage,
485
- onSubmit,
486
- onSuccess: (data) => {
487
- resetUpload();
488
- onSuccess?.(data);
489
- },
490
- onError,
491
- uploadTokens,
492
- uploadProgress,
493
- onFileUpload: uploadFiles,
494
- onFileRemove: removeFile,
495
- isUploading
498
+ fields: formFields
496
499
  }
497
500
  ),
498
501
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
499
502
  ] });
500
503
  }, [
501
504
  formSlot,
502
- formFields,
503
- formConfig,
505
+ formEngineSetup,
504
506
  buttonAction,
505
- uploadTokens,
506
- uploadProgress,
507
- uploadFiles,
508
- removeFile,
509
- isUploading,
510
- successMessage,
511
- onSubmit,
512
- onSuccess,
513
- onError,
514
- helperText,
515
- resetUpload
507
+ formFields,
508
+ formStyleRules,
509
+ helperText
516
510
  ]);
517
511
  return /* @__PURE__ */ jsx(
518
512
  Section,
@@ -524,58 +518,40 @@ function HeroNewsletterMinimal({
524
518
  patternClassName,
525
519
  className,
526
520
  containerClassName,
527
- children: /* @__PURE__ */ jsxs(
528
- "div",
529
- {
530
- className: cn(
531
- "container flex flex-col items-center justify-center text-center",
532
- containerClassName
533
- ),
534
- children: [
535
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
536
- "h1",
537
- {
538
- className: cn(
539
- "max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-pretty",
540
- headingClassName
541
- ),
542
- children: heading
543
- }
544
- ) : heading),
545
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
546
- "p",
547
- {
548
- className: cn(
549
- "mt-6 max-w-full md:max-w-lg text-lg md:text-xl text-balance",
550
- descriptionClassName
551
- ),
552
- children: description
553
- }
554
- ) : description),
555
- /* @__PURE__ */ jsx(
556
- "div",
557
- {
558
- className: cn(
559
- "mt-10 flex w-full max-w-md flex-col gap-4 sm:flex-row",
560
- formClassName
561
- ),
562
- children: renderForm
563
- }
521
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center", children: [
522
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
523
+ "h1",
524
+ {
525
+ className: cn(
526
+ "max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-pretty text-center",
527
+ headingClassName
564
528
  ),
565
- disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm", disclaimerClassName), children: disclaimer }) : disclaimer),
566
- (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx(
567
- "div",
568
- {
569
- className: cn(
570
- "mt-16 flex flex-wrap items-center justify-center gap-8 md:gap-12",
571
- statsClassName
572
- ),
573
- children: renderStats
574
- }
575
- )
576
- ]
577
- }
578
- )
529
+ children: heading
530
+ }
531
+ ) : heading),
532
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
533
+ "p",
534
+ {
535
+ className: cn(
536
+ "mt-6 max-w-full md:max-w-lg text-lg md:text-xl text-balance text-center",
537
+ descriptionClassName
538
+ ),
539
+ children: description
540
+ }
541
+ ) : description),
542
+ renderForm,
543
+ disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm", disclaimerClassName), children: disclaimer }) : disclaimer),
544
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx(
545
+ "div",
546
+ {
547
+ className: cn(
548
+ "mt-16 flex flex-wrap items-center justify-center gap-8 md:gap-12",
549
+ statsClassName
550
+ ),
551
+ children: renderStats
552
+ }
553
+ )
554
+ ] })
579
555
  }
580
556
  );
581
557
  }
@@ -913,7 +913,7 @@ function HeroSaasDashboardPreview({
913
913
  className: "h-12"
914
914
  };
915
915
  const action = buttonAction || defaultButtonAction;
916
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-12 w-full flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
916
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 md:mt-6 w-full flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
917
917
  forms.Form,
918
918
  {
919
919
  form,
@@ -983,7 +983,7 @@ function HeroSaasDashboardPreview({
983
983
  const renderBrowserPreview = React__namespace.useMemo(() => {
984
984
  if (browserPreviewSlot) return browserPreviewSlot;
985
985
  if (!browserPreview) return null;
986
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative mt-20", previewClassName), children: [
986
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative mt-12 md:mt-20", previewClassName), children: [
987
987
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 z-10 pointer-events-none" }),
988
988
  /* @__PURE__ */ jsxRuntime.jsxs(
989
989
  "div",
@@ -1031,12 +1031,12 @@ function HeroSaasDashboardPreview({
1031
1031
  patternOpacity,
1032
1032
  className: cn(className),
1033
1033
  containerClassName,
1034
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-10 md:pt-0", children: [
1034
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-10 md:pt-0 flex flex-col items-center justify-center", children: [
1035
1035
  /* @__PURE__ */ jsxRuntime.jsxs(
1036
1036
  "div",
1037
1037
  {
1038
1038
  className: cn(
1039
- "mmx-auto text-center flex flex-col items-center gap-6 md:gap-8 max-w-full md:max-w-md",
1039
+ "mx-auto text-center flex flex-col items-center gap-4 md:gap-6 max-w-full md:max-w-md",
1040
1040
  headerClassName
1041
1041
  ),
1042
1042
  children: [
@@ -892,7 +892,7 @@ function HeroSaasDashboardPreview({
892
892
  className: "h-12"
893
893
  };
894
894
  const action = buttonAction || defaultButtonAction;
895
- return /* @__PURE__ */ jsx("div", { className: "mt-12 w-full flex items-center justify-center", children: /* @__PURE__ */ jsxs(
895
+ return /* @__PURE__ */ jsx("div", { className: "mt-4 md:mt-6 w-full flex items-center justify-center", children: /* @__PURE__ */ jsxs(
896
896
  Form,
897
897
  {
898
898
  form,
@@ -962,7 +962,7 @@ function HeroSaasDashboardPreview({
962
962
  const renderBrowserPreview = React.useMemo(() => {
963
963
  if (browserPreviewSlot) return browserPreviewSlot;
964
964
  if (!browserPreview) return null;
965
- return /* @__PURE__ */ jsxs("div", { className: cn("relative mt-20", previewClassName), children: [
965
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative mt-12 md:mt-20", previewClassName), children: [
966
966
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 pointer-events-none" }),
967
967
  /* @__PURE__ */ jsxs(
968
968
  "div",
@@ -1010,12 +1010,12 @@ function HeroSaasDashboardPreview({
1010
1010
  patternOpacity,
1011
1011
  className: cn(className),
1012
1012
  containerClassName,
1013
- children: /* @__PURE__ */ jsxs("div", { className: "pt-10 md:pt-0", children: [
1013
+ children: /* @__PURE__ */ jsxs("div", { className: "pt-10 md:pt-0 flex flex-col items-center justify-center", children: [
1014
1014
  /* @__PURE__ */ jsxs(
1015
1015
  "div",
1016
1016
  {
1017
1017
  className: cn(
1018
- "mmx-auto text-center flex flex-col items-center gap-6 md:gap-8 max-w-full md:max-w-md",
1018
+ "mx-auto text-center flex flex-col items-center gap-4 md:gap-6 max-w-full md:max-w-md",
1019
1019
  headerClassName
1020
1020
  ),
1021
1021
  children: [
package/dist/index.cjs CHANGED
@@ -2633,6 +2633,70 @@ function CommunityInitiatives({
2633
2633
  }
2634
2634
  );
2635
2635
  }
2636
+ var MOBILE_CLASSES = {
2637
+ "fit-left": "items-start md:items-center",
2638
+ "fit-center": "items-center",
2639
+ "fit-right": "items-end md:items-center",
2640
+ "full-left": "items-stretch md:items-center",
2641
+ "full-center": "items-stretch md:items-center",
2642
+ "full-right": "items-stretch md:items-center"
2643
+ };
2644
+ function BlockActions({
2645
+ mobileConfig,
2646
+ actionsClassName,
2647
+ verticalSpacing = "mt-4 md:mt-8",
2648
+ actions,
2649
+ actionsSlot
2650
+ }) {
2651
+ const width = mobileConfig?.width ?? "full";
2652
+ const position = mobileConfig?.position ?? "center";
2653
+ const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
2654
+ if (actionsSlot) {
2655
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: actionsSlot });
2656
+ } else if (actions && actions?.length > 0) {
2657
+ return /* @__PURE__ */ jsxRuntime.jsx(
2658
+ "div",
2659
+ {
2660
+ className: cn(
2661
+ "flex flex-col md:flex-row flex-wrap gap-4",
2662
+ mobileLayoutClass,
2663
+ actionsClassName,
2664
+ verticalSpacing
2665
+ ),
2666
+ children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(ActionComponent, { action }, index))
2667
+ }
2668
+ );
2669
+ } else {
2670
+ return null;
2671
+ }
2672
+ }
2673
+ function ActionComponent({ action }) {
2674
+ const {
2675
+ label,
2676
+ icon,
2677
+ iconAfter,
2678
+ children,
2679
+ href,
2680
+ onClick,
2681
+ className: actionClassName,
2682
+ ...pressableProps
2683
+ } = action;
2684
+ return /* @__PURE__ */ jsxRuntime.jsx(
2685
+ Pressable,
2686
+ {
2687
+ href,
2688
+ onClick,
2689
+ asButton: action.asButton ?? true,
2690
+ className: actionClassName,
2691
+ ...pressableProps,
2692
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2693
+ icon,
2694
+ label,
2695
+ iconAfter
2696
+ ] })
2697
+ }
2698
+ );
2699
+ }
2636
2700
  function AboutCultureTabs({
2637
2701
  badgeText,
2638
2702
  heading,
@@ -2646,7 +2710,7 @@ function AboutCultureTabs({
2646
2710
  ctaImages,
2647
2711
  ctaImagesSlot,
2648
2712
  className,
2649
- containerClassName,
2713
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
2650
2714
  headerClassName,
2651
2715
  badgeClassName,
2652
2716
  headingClassName,
@@ -2658,45 +2722,33 @@ function AboutCultureTabs({
2658
2722
  actionsClassName,
2659
2723
  optixFlowConfig,
2660
2724
  background,
2661
- spacing,
2725
+ spacing = "xl",
2662
2726
  pattern,
2663
2727
  patternOpacity
2664
2728
  }) {
2665
2729
  const resolvedAspects = aspects ?? [];
2666
- const [activeTab, setActiveTab] = React4__namespace.useState(resolvedAspects[0]?.id || "");
2667
- const actionsContent = React4.useMemo(() => {
2668
- if (actionsSlot) return actionsSlot;
2669
- if (!actions || actions.length === 0) return null;
2670
- return actions.map((action, index) => {
2671
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
2672
- return /* @__PURE__ */ jsxRuntime.jsx(
2673
- Pressable,
2674
- {
2675
- asButton: true,
2676
- className: actionClassName,
2677
- ...pressableProps,
2678
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2679
- icon,
2680
- label,
2681
- iconAfter
2682
- ] })
2683
- },
2684
- index
2685
- );
2686
- });
2687
- }, [actionsSlot, actions]);
2730
+ const [activeTab, setActiveTab] = React4__namespace.useState(
2731
+ resolvedAspects[0]?.id || ""
2732
+ );
2688
2733
  const ctaImagesContent = React4.useMemo(() => {
2689
2734
  if (ctaImagesSlot) return ctaImagesSlot;
2690
2735
  if (!ctaImages || ctaImages.length === 0) return null;
2691
- return ctaImages.map((src, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative aspect-square overflow-hidden rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(
2692
- img.Img,
2736
+ return ctaImages.map((src, i) => /* @__PURE__ */ jsxRuntime.jsx(
2737
+ "div",
2693
2738
  {
2694
- src,
2695
- alt: "Team culture",
2696
- className: "h-full w-full object-cover",
2697
- optixFlowConfig
2698
- }
2699
- ) }, i));
2739
+ className: "relative aspect-square overflow-hidden rounded-md",
2740
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2741
+ img.Img,
2742
+ {
2743
+ src,
2744
+ alt: "Team culture",
2745
+ className: "h-full w-full object-cover",
2746
+ optixFlowConfig
2747
+ }
2748
+ )
2749
+ },
2750
+ i
2751
+ ));
2700
2752
  }, [ctaImagesSlot, ctaImages, optixFlowConfig]);
2701
2753
  return /* @__PURE__ */ jsxRuntime.jsxs(
2702
2754
  Section,
@@ -2705,14 +2757,32 @@ function AboutCultureTabs({
2705
2757
  spacing,
2706
2758
  pattern,
2707
2759
  patternOpacity,
2708
- className: cn(className),
2760
+ className,
2709
2761
  containerClassName,
2710
2762
  children: [
2711
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto mb-12 max-w-3xl space-y-4 text-center", headerClassName), children: [
2712
- 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 })),
2713
- 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 })),
2714
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
2715
- ] }),
2763
+ /* @__PURE__ */ jsxRuntime.jsxs(
2764
+ "div",
2765
+ {
2766
+ className: cn(
2767
+ "mx-auto mb-12 max-w-full md:max-w-md space-y-4 text-center flex flex-col items-center justify-center",
2768
+ headerClassName
2769
+ ),
2770
+ children: [
2771
+ badgeText && (typeof badgeText === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn("px-3 py-1", badgeClassName), children: badgeText }) : badgeText),
2772
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
2773
+ "h2",
2774
+ {
2775
+ className: cn(
2776
+ "text-3xl font-bold tracking-tight md:text-4xl text-pretty",
2777
+ headingClassName
2778
+ ),
2779
+ children: heading
2780
+ }
2781
+ ) : heading),
2782
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-balance", descriptionClassName), children: description }) : description)
2783
+ ]
2784
+ }
2785
+ ),
2716
2786
  aspectsSlot ? aspectsSlot : resolvedAspects.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
2717
2787
  Tabs,
2718
2788
  {
@@ -2725,80 +2795,103 @@ function AboutCultureTabs({
2725
2795
  TabsTrigger,
2726
2796
  {
2727
2797
  value: aspect.id,
2728
- className: cn("px-3 py-2.5", `data-[state=active]:${getAccentColor(background)}`, "data-[state=active]:text-primary-foreground"),
2798
+ className: cn("px-3 py-2.5"),
2729
2799
  children: aspect.title
2730
2800
  },
2731
2801
  aspect.id
2732
2802
  )) }) }),
2733
- resolvedAspects.map((aspect) => /* @__PURE__ */ jsxRuntime.jsxs(TabsContent, { value: aspect.id, className: "space-y-8", children: [
2734
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
2735
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
2736
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold tracking-tight", children: aspect.title }),
2737
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("leading-relaxed", getTextColor(background, "muted")), children: aspect.description })
2738
- ] }),
2739
- /* @__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: [
2740
- /* @__PURE__ */ jsxRuntime.jsx(
2741
- DynamicIcon,
2742
- {
2743
- name: "lucide/quote",
2744
- size: 32,
2745
- className: cn(getAccentColor(background), "opacity-40")
2746
- }
2747
- ),
2748
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("italic", getTextColor(background, "muted")), children: [
2749
- '"',
2750
- aspect.testimonial.quote,
2751
- '"'
2803
+ resolvedAspects.map((aspect) => /* @__PURE__ */ jsxRuntime.jsxs(
2804
+ TabsContent,
2805
+ {
2806
+ value: aspect.id,
2807
+ className: "space-y-8",
2808
+ children: [
2809
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
2810
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
2811
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold tracking-tight", children: aspect.title }),
2812
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("leading-relaxed"), children: aspect.description })
2813
+ ] }),
2814
+ /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "border-0 p-0", children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-4 p-6 pt-6", children: [
2815
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/quote", size: 32 }),
2816
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "italic", children: [
2817
+ '"',
2818
+ aspect.testimonial.quote,
2819
+ '"'
2820
+ ] }),
2821
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2", children: [
2822
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-10 w-10 overflow-hidden rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(
2823
+ img.Img,
2824
+ {
2825
+ src: aspect.testimonial.avatar,
2826
+ alt: aspect.testimonial.author,
2827
+ className: "h-full w-full object-cover",
2828
+ optixFlowConfig
2829
+ }
2830
+ ) }),
2831
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2832
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: aspect.testimonial.author }),
2833
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: aspect.testimonial.role })
2834
+ ] })
2835
+ ] })
2836
+ ] }) })
2752
2837
  ] }),
2753
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2", children: [
2754
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-10 w-10 overflow-hidden rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(
2755
- img.Img,
2756
- {
2757
- src: aspect.testimonial.avatar,
2758
- alt: aspect.testimonial.author,
2759
- className: "h-full w-full object-cover",
2760
- optixFlowConfig
2761
- }
2762
- ) }),
2763
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2764
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: aspect.testimonial.author }),
2765
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-xs", getTextColor(background, "muted")), children: aspect.testimonial.role })
2766
- ] })
2767
- ] })
2768
- ] }) })
2769
- ] }),
2770
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: aspect.images.map((image, idx) => /* @__PURE__ */ jsxRuntime.jsx(
2771
- "div",
2772
- {
2773
- className: "relative aspect-[4/3] overflow-hidden rounded-lg",
2774
- children: /* @__PURE__ */ jsxRuntime.jsx(
2775
- img.Img,
2838
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: aspect.images.map((image, idx) => /* @__PURE__ */ jsxRuntime.jsx(
2839
+ "div",
2776
2840
  {
2777
- src: image,
2778
- alt: `${aspect.title} culture`,
2779
- className: "h-full w-full transform object-cover transition-transform duration-500 hover:scale-105",
2780
- optixFlowConfig
2781
- }
2782
- )
2783
- },
2784
- idx
2785
- )) })
2786
- ] }, aspect.id))
2841
+ className: "relative aspect-4/3 overflow-hidden rounded-lg",
2842
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2843
+ img.Img,
2844
+ {
2845
+ src: image,
2846
+ alt: `${aspect.title} culture`,
2847
+ className: "h-full w-full transform object-cover transition-transform duration-500 hover:scale-105",
2848
+ optixFlowConfig
2849
+ }
2850
+ )
2851
+ },
2852
+ idx
2853
+ )) })
2854
+ ]
2855
+ },
2856
+ aspect.id
2857
+ ))
2787
2858
  ]
2788
2859
  }
2789
2860
  ) : null,
2790
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative mt-16 rounded-xl border bg-background p-8 md:p-12", ctaClassName), children: [
2791
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-8 md:grid-cols-2", children: [
2792
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2793
- 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 })),
2794
- 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 })),
2795
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-4", actionsClassName), children: actionsContent })
2796
- ] }),
2797
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: ctaImagesContent })
2798
- ] }),
2799
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-5 -top-5 h-10 w-10 rounded-full bg-primary/10" }),
2800
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-5 -right-5 h-10 w-10 rounded-full bg-primary/10" })
2801
- ] })
2861
+ /* @__PURE__ */ jsxRuntime.jsxs(
2862
+ "div",
2863
+ {
2864
+ className: cn(
2865
+ "relative mt-16 rounded-xl border p-8 md:p-12",
2866
+ ctaClassName
2867
+ ),
2868
+ children: [
2869
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-8 md:grid-cols-2", children: [
2870
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2871
+ ctaHeading && (typeof ctaHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
2872
+ "h3",
2873
+ {
2874
+ className: cn("mb-4 text-2xl font-bold", ctaHeadingClassName),
2875
+ children: ctaHeading
2876
+ }
2877
+ ) : ctaHeading),
2878
+ ctaDescription && (typeof ctaDescription === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6", ctaDescriptionClassName), children: ctaDescription }) : ctaDescription),
2879
+ /* @__PURE__ */ jsxRuntime.jsx(
2880
+ BlockActions,
2881
+ {
2882
+ actions,
2883
+ actionsSlot,
2884
+ actionsClassName
2885
+ }
2886
+ )
2887
+ ] }),
2888
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: ctaImagesContent })
2889
+ ] }),
2890
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-5 -top-5 h-10 w-10 rounded-full bg-primary/10" }),
2891
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-5 -right-5 h-10 w-10 rounded-full bg-primary/10" })
2892
+ ]
2893
+ }
2894
+ )
2802
2895
  ]
2803
2896
  }
2804
2897
  );