@opensite/ui 2.4.8 → 2.4.9

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 (91) hide show
  1. package/dist/about-developer-profile.cjs +1 -1
  2. package/dist/about-developer-profile.js +1 -1
  3. package/dist/about-stats-sidebar.cjs +5 -3
  4. package/dist/about-stats-sidebar.js +5 -3
  5. package/dist/about-story-hero.cjs +119 -105
  6. package/dist/about-story-hero.js +101 -102
  7. package/dist/components.cjs +1 -1
  8. package/dist/components.js +1 -1
  9. package/dist/cta-accent-background.cjs +8 -69
  10. package/dist/cta-accent-background.d.cts +1 -1
  11. package/dist/cta-accent-background.d.ts +1 -1
  12. package/dist/cta-accent-background.js +8 -69
  13. package/dist/cta-app-download-newsletter.cjs +4 -81
  14. package/dist/cta-app-download-newsletter.js +4 -81
  15. package/dist/faq-badge-support.cjs +97 -84
  16. package/dist/faq-badge-support.d.cts +1 -1
  17. package/dist/faq-badge-support.d.ts +1 -1
  18. package/dist/faq-badge-support.js +97 -83
  19. package/dist/faq-sidebar-navigation.cjs +106 -72
  20. package/dist/faq-sidebar-navigation.d.cts +1 -1
  21. package/dist/faq-sidebar-navigation.d.ts +1 -1
  22. package/dist/faq-sidebar-navigation.js +104 -70
  23. package/dist/faq-simple-accordion.cjs +83 -50
  24. package/dist/faq-simple-accordion.d.cts +13 -1
  25. package/dist/faq-simple-accordion.d.ts +13 -1
  26. package/dist/faq-simple-accordion.js +82 -46
  27. package/dist/feature-accordion-image.cjs +115 -85
  28. package/dist/feature-accordion-image.js +113 -83
  29. package/dist/feature-animated-carousel.cjs +2 -2
  30. package/dist/feature-animated-carousel.js +2 -2
  31. package/dist/feature-image-cards-three-column.cjs +2 -2
  32. package/dist/feature-image-cards-three-column.js +2 -2
  33. package/dist/footer-accordion-social.cjs +1 -1
  34. package/dist/footer-accordion-social.js +1 -1
  35. package/dist/footer-animated-social.cjs +1 -1
  36. package/dist/footer-animated-social.js +1 -1
  37. package/dist/footer-brand-description.cjs +1 -1
  38. package/dist/footer-brand-description.js +1 -1
  39. package/dist/footer-brand-links-contact.cjs +1 -1
  40. package/dist/footer-brand-links-contact.js +1 -1
  41. package/dist/footer-comprehensive-links.cjs +1 -1
  42. package/dist/footer-comprehensive-links.js +1 -1
  43. package/dist/footer-contact-card.cjs +1 -1
  44. package/dist/footer-contact-card.js +1 -1
  45. package/dist/footer-cta-banner.cjs +1 -1
  46. package/dist/footer-cta-banner.js +1 -1
  47. package/dist/footer-cta-social.cjs +1 -1
  48. package/dist/footer-cta-social.js +1 -1
  49. package/dist/footer-info-cards-accordion.cjs +1 -1
  50. package/dist/footer-info-cards-accordion.js +1 -1
  51. package/dist/footer-nav-social.cjs +1 -1
  52. package/dist/footer-nav-social.js +1 -1
  53. package/dist/footer-newsletter-contact.cjs +1 -1
  54. package/dist/footer-newsletter-contact.js +1 -1
  55. package/dist/footer-newsletter-grid.cjs +1 -1
  56. package/dist/footer-newsletter-grid.js +1 -1
  57. package/dist/footer-newsletter-minimal.cjs +1 -1
  58. package/dist/footer-newsletter-minimal.js +1 -1
  59. package/dist/footer-social-apps.cjs +1 -1
  60. package/dist/footer-social-apps.js +1 -1
  61. package/dist/footer-social-newsletter.cjs +1 -1
  62. package/dist/footer-social-newsletter.js +1 -1
  63. package/dist/footer-split-image-accordion.cjs +1 -1
  64. package/dist/footer-split-image-accordion.js +1 -1
  65. package/dist/hero-coming-soon-countdown.cjs +1 -1
  66. package/dist/hero-coming-soon-countdown.js +1 -1
  67. package/dist/hero-product-showcase-floating.cjs +120 -90
  68. package/dist/hero-product-showcase-floating.d.cts +5 -1
  69. package/dist/hero-product-showcase-floating.d.ts +5 -1
  70. package/dist/hero-product-showcase-floating.js +120 -90
  71. package/dist/index.cjs +1 -1
  72. package/dist/index.js +1 -1
  73. package/dist/link-page-bento-layout.cjs +1 -1
  74. package/dist/link-page-bento-layout.js +1 -1
  75. package/dist/link-page-grid-cards.cjs +1 -1
  76. package/dist/link-page-grid-cards.js +1 -1
  77. package/dist/link-page-minimal-profile.cjs +1 -1
  78. package/dist/link-page-minimal-profile.js +1 -1
  79. package/dist/link-page-newsletter-social.cjs +1 -1
  80. package/dist/link-page-newsletter-social.js +1 -1
  81. package/dist/link-tree-block.cjs +1 -1
  82. package/dist/link-tree-block.js +1 -1
  83. package/dist/navbar-fullscreen-menu.cjs +1 -1
  84. package/dist/navbar-fullscreen-menu.js +1 -1
  85. package/dist/navbar-transparent-overlay.cjs +1 -1
  86. package/dist/navbar-transparent-overlay.js +1 -1
  87. package/dist/registry.cjs +396 -289
  88. package/dist/registry.js +396 -289
  89. package/dist/social-link-icon.cjs +1 -1
  90. package/dist/social-link-icon.js +1 -1
  91. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React = require('react');
4
+ var React4 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var img = require('@page-speed/img');
@@ -27,39 +27,13 @@ function _interopNamespace(e) {
27
27
  return Object.freeze(n);
28
28
  }
29
29
 
30
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+ var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
31
31
  var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
32
32
 
33
33
  // components/blocks/features/feature-accordion-image.tsx
34
34
  function cn(...inputs) {
35
35
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
36
  }
37
- function getTextColor(parentBg, variant = "default", options) {
38
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
39
- if (isDark) {
40
- switch (variant) {
41
- case "default":
42
- return "text-foreground";
43
- case "muted":
44
- return "text-foreground/80";
45
- case "subtle":
46
- return "text-foreground/60";
47
- case "accent":
48
- return "text-accent-foreground";
49
- }
50
- } else {
51
- switch (variant) {
52
- case "default":
53
- return "text-foreground";
54
- case "muted":
55
- return "text-muted-foreground";
56
- case "subtle":
57
- return "text-muted-foreground/70";
58
- case "accent":
59
- return "text-primary";
60
- }
61
- }
62
- }
63
37
  var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
64
38
  function DynamicIcon({ apiKey, ...props }) {
65
39
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
@@ -133,7 +107,7 @@ var maxWidthStyles = {
133
107
  "4xl": "max-w-[1536px]",
134
108
  full: "max-w-full"
135
109
  };
136
- var Container = React__namespace.default.forwardRef(
110
+ var Container = React4__namespace.default.forwardRef(
137
111
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
138
112
  const Component = as;
139
113
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -438,7 +412,7 @@ var spacingStyles = {
438
412
  };
439
413
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
440
414
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
441
- var Section = React__namespace.default.forwardRef(
415
+ var Section = React4__namespace.default.forwardRef(
442
416
  ({
443
417
  id,
444
418
  title,
@@ -499,6 +473,38 @@ var Section = React__namespace.default.forwardRef(
499
473
  }
500
474
  );
501
475
  Section.displayName = "Section";
476
+ function TextInner({ as, className, children, ...props }, ref) {
477
+ const Component = as || "span";
478
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cn(className), ...props, children });
479
+ }
480
+ var Text = React4__namespace.forwardRef(TextInner);
481
+ Text.displayName = "Text";
482
+ function isContentTextItem(item) {
483
+ return item !== null && typeof item === "object" && !React4__namespace.isValidElement(item) && "_type" in item && item._type === "text";
484
+ }
485
+ var ContentGroup = React4__namespace.forwardRef(
486
+ ({ items, className, children, ...props }, ref) => {
487
+ const hasContent = items && items.length > 0;
488
+ if (!hasContent) {
489
+ return null;
490
+ }
491
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn(className), ...props, children: [
492
+ items.map((item, idx) => {
493
+ if (isContentTextItem(item)) {
494
+ const { _type, ...textProps } = item;
495
+ return /* @__PURE__ */ jsxRuntime.jsx(Text, { ...textProps }, idx);
496
+ }
497
+ const reactNode = item;
498
+ if (React4__namespace.isValidElement(reactNode)) {
499
+ return React4__namespace.cloneElement(reactNode, { key: reactNode.key ?? idx });
500
+ }
501
+ return /* @__PURE__ */ jsxRuntime.jsx(React4__namespace.Fragment, { children: reactNode }, idx);
502
+ }),
503
+ children
504
+ ] });
505
+ }
506
+ );
507
+ ContentGroup.displayName = "ContentGroup";
502
508
  function FeatureAccordionImage({
503
509
  title,
504
510
  description,
@@ -521,10 +527,9 @@ function FeatureAccordionImage({
521
527
  patternOpacity,
522
528
  patternClassName
523
529
  }) {
524
- const [activeItem, setActiveItem] = React__namespace.useState(defaultValue || "item-0");
530
+ const [activeItem, setActiveItem] = React4__namespace.useState(defaultValue || "item-0");
525
531
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
526
- const currentImage = items?.[activeIndex] || items?.[0];
527
- const accordionItemsContent = React.useMemo(() => {
532
+ const accordionItemsContent = React4.useMemo(() => {
528
533
  if (itemsSlot) return itemsSlot;
529
534
  if (!items || items.length === 0) return null;
530
535
  return items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -537,44 +542,90 @@ function FeatureAccordionImage({
537
542
  AccordionTrigger,
538
543
  {
539
544
  className: cn(
540
- "text-left text-md md:text-lg font-medium",
545
+ "text-left md:text-lg font-medium",
541
546
  item.triggerClassName
542
547
  ),
543
548
  children: item.title
544
549
  }
545
550
  ),
546
- item.content && /* @__PURE__ */ jsxRuntime.jsx(
547
- AccordionContent,
548
- {
549
- className: cn(
550
- getTextColor(background, "muted"),
551
- item.contentClassName
552
- ),
553
- children: item.content
554
- }
555
- )
551
+ item.content && /* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: cn(item.contentClassName), children: item.content })
556
552
  ]
557
553
  },
558
554
  index
559
555
  ));
560
556
  }, [itemsSlot, items]);
561
- const imageContent = React.useMemo(() => {
562
- if (currentImage?.imageSlot) return currentImage.imageSlot;
563
- if (!currentImage?.imageSrc) return null;
564
- return /* @__PURE__ */ jsxRuntime.jsx(
565
- img.Img,
566
- {
567
- src: currentImage.imageSrc,
568
- alt: currentImage.imageAlt || "",
569
- className: cn(
570
- "h-full w-full object-cover transition-opacity duration-300",
571
- imageClassName
572
- ),
573
- loading: "lazy",
574
- optixFlowConfig
557
+ const imageContent = React4.useMemo(() => {
558
+ if (!items || items.length === 0) return null;
559
+ const hasImageSlot = items.some((item) => item.imageSlot);
560
+ if (hasImageSlot) {
561
+ const current = items[activeIndex] || items[0];
562
+ if (current?.imageSlot) return current.imageSlot;
563
+ if (!current?.imageSrc) return null;
564
+ return /* @__PURE__ */ jsxRuntime.jsx(
565
+ img.Img,
566
+ {
567
+ src: current.imageSrc,
568
+ alt: current.imageAlt || "Feature Image",
569
+ className: cn(
570
+ "h-full w-full object-cover transition-opacity duration-500",
571
+ imageClassName
572
+ ),
573
+ loading: "eager",
574
+ optixFlowConfig
575
+ }
576
+ );
577
+ }
578
+ return items.map((item, index) => {
579
+ if (!item.imageSrc) return null;
580
+ const isActive = index === activeIndex;
581
+ return /* @__PURE__ */ jsxRuntime.jsx(
582
+ img.Img,
583
+ {
584
+ src: item.imageSrc,
585
+ alt: item.imageAlt || "Feature Image",
586
+ className: cn(
587
+ "absolute inset-0 h-full w-full object-cover transition-opacity duration-500 ease-in-out",
588
+ isActive ? "opacity-100" : "opacity-0",
589
+ imageClassName
590
+ ),
591
+ loading: "eager",
592
+ optixFlowConfig
593
+ },
594
+ index
595
+ );
596
+ });
597
+ }, [items, activeIndex, imageClassName, optixFlowConfig]);
598
+ const contentItems = React4.useMemo(() => {
599
+ const items2 = [];
600
+ if (title) {
601
+ if (typeof title === "string") {
602
+ items2.push({
603
+ _type: "text",
604
+ as: "h2",
605
+ className: cn(
606
+ "text-2xl font-semibold md:text-3xl lg:text-4xl",
607
+ titleClassName
608
+ ),
609
+ children: title
610
+ });
611
+ } else {
612
+ items2.push(title);
575
613
  }
576
- );
577
- }, [currentImage, imageClassName, optixFlowConfig]);
614
+ }
615
+ if (description) {
616
+ if (typeof description === "string") {
617
+ items2.push({
618
+ _type: "text",
619
+ as: "p",
620
+ className: cn("text-lg opacity-70", descriptionClassName),
621
+ children: description
622
+ });
623
+ } else {
624
+ items2.push(description);
625
+ }
626
+ }
627
+ return items2;
628
+ }, [title, titleClassName, description, descriptionClassName]);
578
629
  return /* @__PURE__ */ jsxRuntime.jsx(
579
630
  Section,
580
631
  {
@@ -586,35 +637,14 @@ function FeatureAccordionImage({
586
637
  className,
587
638
  containerClassName,
588
639
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center space-y-6 md:space-y-16", children: [
589
- (title || description) && /* @__PURE__ */ jsxRuntime.jsxs(
590
- "div",
640
+ /* @__PURE__ */ jsxRuntime.jsx(
641
+ ContentGroup,
591
642
  {
643
+ items: contentItems,
592
644
  className: cn(
593
645
  "text-left md:text-center max-w-full md:max-w-md text-balance",
594
646
  headerClassName
595
- ),
596
- children: [
597
- title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
598
- "h2",
599
- {
600
- className: cn(
601
- "text-2xl font-semibold md:text-3xl lg:text-4xl",
602
- titleClassName
603
- ),
604
- children: title
605
- }
606
- ) : /* @__PURE__ */ jsxRuntime.jsx(
607
- "div",
608
- {
609
- className: cn(
610
- "text-xl font-semibold md:text-2xl lg:text-3xl",
611
- titleClassName
612
- ),
613
- children: title
614
- }
615
- )),
616
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4 lg:text-lg", descriptionClassName), children: description }))
617
- ]
647
+ )
618
648
  }
619
649
  ),
620
650
  (itemsSlot || items && items.length > 0) && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import * as React from 'react';
3
- import React__default, { useMemo } from 'react';
2
+ import * as React4 from 'react';
3
+ import React4__default, { useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { Img } from '@page-speed/img';
@@ -12,32 +12,6 @@ import { jsx, jsxs } from 'react/jsx-runtime';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
- function getTextColor(parentBg, variant = "default", options) {
16
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
- if (isDark) {
18
- switch (variant) {
19
- case "default":
20
- return "text-foreground";
21
- case "muted":
22
- return "text-foreground/80";
23
- case "subtle":
24
- return "text-foreground/60";
25
- case "accent":
26
- return "text-accent-foreground";
27
- }
28
- } else {
29
- switch (variant) {
30
- case "default":
31
- return "text-foreground";
32
- case "muted":
33
- return "text-muted-foreground";
34
- case "subtle":
35
- return "text-muted-foreground/70";
36
- case "accent":
37
- return "text-primary";
38
- }
39
- }
40
- }
41
15
  var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
42
16
  function DynamicIcon({ apiKey, ...props }) {
43
17
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
@@ -111,7 +85,7 @@ var maxWidthStyles = {
111
85
  "4xl": "max-w-[1536px]",
112
86
  full: "max-w-full"
113
87
  };
114
- var Container = React__default.forwardRef(
88
+ var Container = React4__default.forwardRef(
115
89
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
116
90
  const Component = as;
117
91
  return /* @__PURE__ */ jsx(
@@ -416,7 +390,7 @@ var spacingStyles = {
416
390
  };
417
391
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
418
392
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
419
- var Section = React__default.forwardRef(
393
+ var Section = React4__default.forwardRef(
420
394
  ({
421
395
  id,
422
396
  title,
@@ -477,6 +451,38 @@ var Section = React__default.forwardRef(
477
451
  }
478
452
  );
479
453
  Section.displayName = "Section";
454
+ function TextInner({ as, className, children, ...props }, ref) {
455
+ const Component = as || "span";
456
+ return /* @__PURE__ */ jsx(Component, { ref, className: cn(className), ...props, children });
457
+ }
458
+ var Text = React4.forwardRef(TextInner);
459
+ Text.displayName = "Text";
460
+ function isContentTextItem(item) {
461
+ return item !== null && typeof item === "object" && !React4.isValidElement(item) && "_type" in item && item._type === "text";
462
+ }
463
+ var ContentGroup = React4.forwardRef(
464
+ ({ items, className, children, ...props }, ref) => {
465
+ const hasContent = items && items.length > 0;
466
+ if (!hasContent) {
467
+ return null;
468
+ }
469
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(className), ...props, children: [
470
+ items.map((item, idx) => {
471
+ if (isContentTextItem(item)) {
472
+ const { _type, ...textProps } = item;
473
+ return /* @__PURE__ */ jsx(Text, { ...textProps }, idx);
474
+ }
475
+ const reactNode = item;
476
+ if (React4.isValidElement(reactNode)) {
477
+ return React4.cloneElement(reactNode, { key: reactNode.key ?? idx });
478
+ }
479
+ return /* @__PURE__ */ jsx(React4.Fragment, { children: reactNode }, idx);
480
+ }),
481
+ children
482
+ ] });
483
+ }
484
+ );
485
+ ContentGroup.displayName = "ContentGroup";
480
486
  function FeatureAccordionImage({
481
487
  title,
482
488
  description,
@@ -499,9 +505,8 @@ function FeatureAccordionImage({
499
505
  patternOpacity,
500
506
  patternClassName
501
507
  }) {
502
- const [activeItem, setActiveItem] = React.useState(defaultValue || "item-0");
508
+ const [activeItem, setActiveItem] = React4.useState(defaultValue || "item-0");
503
509
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
504
- const currentImage = items?.[activeIndex] || items?.[0];
505
510
  const accordionItemsContent = useMemo(() => {
506
511
  if (itemsSlot) return itemsSlot;
507
512
  if (!items || items.length === 0) return null;
@@ -515,44 +520,90 @@ function FeatureAccordionImage({
515
520
  AccordionTrigger,
516
521
  {
517
522
  className: cn(
518
- "text-left text-md md:text-lg font-medium",
523
+ "text-left md:text-lg font-medium",
519
524
  item.triggerClassName
520
525
  ),
521
526
  children: item.title
522
527
  }
523
528
  ),
524
- item.content && /* @__PURE__ */ jsx(
525
- AccordionContent,
526
- {
527
- className: cn(
528
- getTextColor(background, "muted"),
529
- item.contentClassName
530
- ),
531
- children: item.content
532
- }
533
- )
529
+ item.content && /* @__PURE__ */ jsx(AccordionContent, { className: cn(item.contentClassName), children: item.content })
534
530
  ]
535
531
  },
536
532
  index
537
533
  ));
538
534
  }, [itemsSlot, items]);
539
535
  const imageContent = useMemo(() => {
540
- if (currentImage?.imageSlot) return currentImage.imageSlot;
541
- if (!currentImage?.imageSrc) return null;
542
- return /* @__PURE__ */ jsx(
543
- Img,
544
- {
545
- src: currentImage.imageSrc,
546
- alt: currentImage.imageAlt || "",
547
- className: cn(
548
- "h-full w-full object-cover transition-opacity duration-300",
549
- imageClassName
550
- ),
551
- loading: "lazy",
552
- optixFlowConfig
536
+ if (!items || items.length === 0) return null;
537
+ const hasImageSlot = items.some((item) => item.imageSlot);
538
+ if (hasImageSlot) {
539
+ const current = items[activeIndex] || items[0];
540
+ if (current?.imageSlot) return current.imageSlot;
541
+ if (!current?.imageSrc) return null;
542
+ return /* @__PURE__ */ jsx(
543
+ Img,
544
+ {
545
+ src: current.imageSrc,
546
+ alt: current.imageAlt || "Feature Image",
547
+ className: cn(
548
+ "h-full w-full object-cover transition-opacity duration-500",
549
+ imageClassName
550
+ ),
551
+ loading: "eager",
552
+ optixFlowConfig
553
+ }
554
+ );
555
+ }
556
+ return items.map((item, index) => {
557
+ if (!item.imageSrc) return null;
558
+ const isActive = index === activeIndex;
559
+ return /* @__PURE__ */ jsx(
560
+ Img,
561
+ {
562
+ src: item.imageSrc,
563
+ alt: item.imageAlt || "Feature Image",
564
+ className: cn(
565
+ "absolute inset-0 h-full w-full object-cover transition-opacity duration-500 ease-in-out",
566
+ isActive ? "opacity-100" : "opacity-0",
567
+ imageClassName
568
+ ),
569
+ loading: "eager",
570
+ optixFlowConfig
571
+ },
572
+ index
573
+ );
574
+ });
575
+ }, [items, activeIndex, imageClassName, optixFlowConfig]);
576
+ const contentItems = useMemo(() => {
577
+ const items2 = [];
578
+ if (title) {
579
+ if (typeof title === "string") {
580
+ items2.push({
581
+ _type: "text",
582
+ as: "h2",
583
+ className: cn(
584
+ "text-2xl font-semibold md:text-3xl lg:text-4xl",
585
+ titleClassName
586
+ ),
587
+ children: title
588
+ });
589
+ } else {
590
+ items2.push(title);
553
591
  }
554
- );
555
- }, [currentImage, imageClassName, optixFlowConfig]);
592
+ }
593
+ if (description) {
594
+ if (typeof description === "string") {
595
+ items2.push({
596
+ _type: "text",
597
+ as: "p",
598
+ className: cn("text-lg opacity-70", descriptionClassName),
599
+ children: description
600
+ });
601
+ } else {
602
+ items2.push(description);
603
+ }
604
+ }
605
+ return items2;
606
+ }, [title, titleClassName, description, descriptionClassName]);
556
607
  return /* @__PURE__ */ jsx(
557
608
  Section,
558
609
  {
@@ -564,35 +615,14 @@ function FeatureAccordionImage({
564
615
  className,
565
616
  containerClassName,
566
617
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center space-y-6 md:space-y-16", children: [
567
- (title || description) && /* @__PURE__ */ jsxs(
568
- "div",
618
+ /* @__PURE__ */ jsx(
619
+ ContentGroup,
569
620
  {
621
+ items: contentItems,
570
622
  className: cn(
571
623
  "text-left md:text-center max-w-full md:max-w-md text-balance",
572
624
  headerClassName
573
- ),
574
- children: [
575
- title && (typeof title === "string" ? /* @__PURE__ */ jsx(
576
- "h2",
577
- {
578
- className: cn(
579
- "text-2xl font-semibold md:text-3xl lg:text-4xl",
580
- titleClassName
581
- ),
582
- children: title
583
- }
584
- ) : /* @__PURE__ */ jsx(
585
- "div",
586
- {
587
- className: cn(
588
- "text-xl font-semibold md:text-2xl lg:text-3xl",
589
- titleClassName
590
- ),
591
- children: title
592
- }
593
- )),
594
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mt-4 lg:text-lg", descriptionClassName), children: description }))
595
- ]
625
+ )
596
626
  }
597
627
  ),
598
628
  (itemsSlot || items && items.length > 0) && /* @__PURE__ */ jsxs(
@@ -951,7 +951,7 @@ var FeatureCard = React7__namespace.memo(
951
951
  delay: 0.3,
952
952
  ease: "easeOut"
953
953
  },
954
- className: "p-6 text-sm md:p-8 md:text-base",
954
+ className: "p-6 text-sm md:p-8 md:text-base text-balance",
955
955
  children: (feature.title || feature.description) && /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
956
956
  feature.title && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
957
957
  feature.title,
@@ -1199,7 +1199,7 @@ function FeatureAnimatedCarousel({
1199
1199
  as: "h2",
1200
1200
  className: cn(
1201
1201
  "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
1202
- title
1202
+ titleClassName
1203
1203
  ),
1204
1204
  children: title
1205
1205
  });
@@ -930,7 +930,7 @@ var FeatureCard = React7.memo(
930
930
  delay: 0.3,
931
931
  ease: "easeOut"
932
932
  },
933
- className: "p-6 text-sm md:p-8 md:text-base",
933
+ className: "p-6 text-sm md:p-8 md:text-base text-balance",
934
934
  children: (feature.title || feature.description) && /* @__PURE__ */ jsxs("p", { children: [
935
935
  feature.title && /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
936
936
  feature.title,
@@ -1178,7 +1178,7 @@ function FeatureAnimatedCarousel({
1178
1178
  as: "h2",
1179
1179
  className: cn(
1180
1180
  "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
1181
- title
1181
+ titleClassName
1182
1182
  ),
1183
1183
  children: title
1184
1184
  });
@@ -1068,7 +1068,7 @@ function FeatureImageCardsThreeColumn({
1068
1068
  style: aspectRatioStyle,
1069
1069
  className: cn(
1070
1070
  "group relative overflow-hidden rounded-2xl shadow-xl",
1071
- "aspect-[var(--aspect-mobile)] md:aspect-[var(--aspect-desktop)]",
1071
+ "aspect-(--aspect-mobile) `md:aspect-(--aspect-desktop)",
1072
1072
  cardClassName,
1073
1073
  card.className
1074
1074
  ),
@@ -1099,7 +1099,7 @@ function FeatureImageCardsThreeColumn({
1099
1099
  as: "h2",
1100
1100
  className: cn(
1101
1101
  "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
1102
- title
1102
+ titleClassName
1103
1103
  ),
1104
1104
  children: title
1105
1105
  });
@@ -1046,7 +1046,7 @@ function FeatureImageCardsThreeColumn({
1046
1046
  style: aspectRatioStyle,
1047
1047
  className: cn(
1048
1048
  "group relative overflow-hidden rounded-2xl shadow-xl",
1049
- "aspect-[var(--aspect-mobile)] md:aspect-[var(--aspect-desktop)]",
1049
+ "aspect-(--aspect-mobile) `md:aspect-(--aspect-desktop)",
1050
1050
  cardClassName,
1051
1051
  card.className
1052
1052
  ),
@@ -1077,7 +1077,7 @@ function FeatureImageCardsThreeColumn({
1077
1077
  as: "h2",
1078
1078
  className: cn(
1079
1079
  "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
1080
- title
1080
+ titleClassName
1081
1081
  ),
1082
1082
  children: title
1083
1083
  });
@@ -1451,7 +1451,7 @@ var platformIconMap = {
1451
1451
  yelp: "cib/yelp",
1452
1452
  spotify: "cib/spotify",
1453
1453
  apple: "cib/apple",
1454
- x: "line-md/twitter-x-alt",
1454
+ x: "prime/twitter",
1455
1455
  github: "cib/github",
1456
1456
  snapchat: "cib/snapchat",
1457
1457
  discord: "cib/discord",
@@ -1430,7 +1430,7 @@ var platformIconMap = {
1430
1430
  yelp: "cib/yelp",
1431
1431
  spotify: "cib/spotify",
1432
1432
  apple: "cib/apple",
1433
- x: "line-md/twitter-x-alt",
1433
+ x: "prime/twitter",
1434
1434
  github: "cib/github",
1435
1435
  snapchat: "cib/snapchat",
1436
1436
  discord: "cib/discord",
@@ -1001,7 +1001,7 @@ var platformIconMap = {
1001
1001
  yelp: "cib/yelp",
1002
1002
  spotify: "cib/spotify",
1003
1003
  apple: "cib/apple",
1004
- x: "line-md/twitter-x-alt",
1004
+ x: "prime/twitter",
1005
1005
  github: "cib/github",
1006
1006
  snapchat: "cib/snapchat",
1007
1007
  discord: "cib/discord",
@@ -980,7 +980,7 @@ var platformIconMap = {
980
980
  yelp: "cib/yelp",
981
981
  spotify: "cib/spotify",
982
982
  apple: "cib/apple",
983
- x: "line-md/twitter-x-alt",
983
+ x: "prime/twitter",
984
984
  github: "cib/github",
985
985
  snapchat: "cib/snapchat",
986
986
  discord: "cib/discord",
@@ -1447,7 +1447,7 @@ var platformIconMap = {
1447
1447
  yelp: "cib/yelp",
1448
1448
  spotify: "cib/spotify",
1449
1449
  apple: "cib/apple",
1450
- x: "line-md/twitter-x-alt",
1450
+ x: "prime/twitter",
1451
1451
  github: "cib/github",
1452
1452
  snapchat: "cib/snapchat",
1453
1453
  discord: "cib/discord",
@@ -1426,7 +1426,7 @@ var platformIconMap = {
1426
1426
  yelp: "cib/yelp",
1427
1427
  spotify: "cib/spotify",
1428
1428
  apple: "cib/apple",
1429
- x: "line-md/twitter-x-alt",
1429
+ x: "prime/twitter",
1430
1430
  github: "cib/github",
1431
1431
  snapchat: "cib/snapchat",
1432
1432
  discord: "cib/discord",