@opensite/ui 0.8.9 → 0.9.1
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.
- package/dist/about-company-profile.cjs +32 -4
- package/dist/about-company-profile.js +32 -4
- package/dist/about-culture-tabs.cjs +38 -8
- package/dist/about-culture-tabs.js +38 -8
- package/dist/about-developer-profile.cjs +37 -5
- package/dist/about-developer-profile.js +37 -5
- package/dist/about-developer-story.cjs +31 -3
- package/dist/about-developer-story.js +31 -3
- package/dist/about-expandable-values.cjs +43 -9
- package/dist/about-expandable-values.js +43 -9
- package/dist/about-interactive-tabs.cjs +63 -4
- package/dist/about-interactive-tabs.js +63 -4
- package/dist/about-location-info-hero.cjs +28 -2
- package/dist/about-location-info-hero.js +28 -2
- package/dist/about-minimal-story.cjs +35 -4
- package/dist/about-minimal-story.js +35 -4
- package/dist/about-mission-dual-image.cjs +30 -2
- package/dist/about-mission-dual-image.js +30 -2
- package/dist/about-mission-features.cjs +36 -4
- package/dist/about-mission-features.js +36 -4
- package/dist/about-mission-principles.cjs +39 -6
- package/dist/about-mission-principles.js +39 -6
- package/dist/about-network-spotlight.cjs +33 -5
- package/dist/about-network-spotlight.js +33 -5
- package/dist/about-startup-team.cjs +47 -6
- package/dist/about-startup-team.js +47 -6
- package/dist/about-stats-showcase.cjs +31 -4
- package/dist/about-stats-showcase.js +31 -4
- package/dist/about-stats-sidebar.cjs +29 -3
- package/dist/about-stats-sidebar.js +29 -3
- package/dist/about-story-expertise.cjs +44 -8
- package/dist/about-story-expertise.js +44 -8
- package/dist/about-story-gallery.cjs +28 -1
- package/dist/about-story-gallery.js +28 -1
- package/dist/about-story-hero.cjs +36 -4
- package/dist/about-story-hero.js +36 -4
- package/dist/about-streamline-team.cjs +32 -4
- package/dist/about-streamline-team.js +32 -4
- package/dist/about-vision-gallery.cjs +32 -3
- package/dist/about-vision-gallery.js +32 -3
- package/dist/alternating-blocks.cjs +5 -1
- package/dist/alternating-blocks.js +5 -1
- package/dist/banner-announcement-dismissible.cjs +377 -1
- package/dist/banner-announcement-dismissible.d.cts +7 -1
- package/dist/banner-announcement-dismissible.d.ts +7 -1
- package/dist/banner-announcement-dismissible.js +378 -2
- package/dist/banner-countdown-sale.cjs +388 -8
- package/dist/banner-countdown-sale.d.cts +11 -1
- package/dist/banner-countdown-sale.d.ts +11 -1
- package/dist/banner-countdown-sale.js +379 -3
- package/dist/banner-delivery-countdown.cjs +377 -1
- package/dist/banner-delivery-countdown.d.cts +11 -1
- package/dist/banner-delivery-countdown.d.ts +11 -1
- package/dist/banner-delivery-countdown.js +378 -2
- package/dist/banner-event-promo.cjs +377 -1
- package/dist/banner-event-promo.d.cts +7 -1
- package/dist/banner-event-promo.d.ts +7 -1
- package/dist/banner-event-promo.js +378 -2
- package/dist/banner-floating-offer.cjs +379 -3
- package/dist/banner-floating-offer.d.cts +7 -1
- package/dist/banner-floating-offer.d.ts +7 -1
- package/dist/banner-floating-offer.js +380 -4
- package/dist/banner-gdpr-rights.cjs +398 -31
- package/dist/banner-gdpr-rights.d.cts +7 -1
- package/dist/banner-gdpr-rights.d.ts +7 -1
- package/dist/banner-gdpr-rights.js +399 -32
- package/dist/banner-privacy-notice.cjs +399 -32
- package/dist/banner-privacy-notice.d.cts +7 -1
- package/dist/banner-privacy-notice.d.ts +7 -1
- package/dist/banner-privacy-notice.js +400 -33
- package/dist/banner-promo-cta.cjs +382 -12
- package/dist/banner-promo-cta.d.cts +7 -1
- package/dist/banner-promo-cta.d.ts +7 -1
- package/dist/banner-promo-cta.js +383 -13
- package/dist/banner-social-follow.cjs +395 -28
- package/dist/banner-social-follow.d.cts +7 -1
- package/dist/banner-social-follow.d.ts +7 -1
- package/dist/banner-social-follow.js +396 -29
- package/dist/banner-survey-incentive.cjs +377 -1
- package/dist/banner-survey-incentive.d.cts +7 -1
- package/dist/banner-survey-incentive.d.ts +7 -1
- package/dist/banner-survey-incentive.js +378 -2
- package/dist/community-initiatives.cjs +43 -10
- package/dist/community-initiatives.js +43 -10
- package/dist/components.cjs +76 -36
- package/dist/components.js +76 -36
- package/dist/contact-floating-banner.cjs +378 -2
- package/dist/contact-floating-banner.d.cts +7 -1
- package/dist/contact-floating-banner.d.ts +7 -1
- package/dist/contact-floating-banner.js +379 -2
- package/dist/cta-accent-background.cjs +28 -1
- package/dist/cta-accent-background.js +28 -1
- package/dist/cta-app-download-newsletter.cjs +30 -2
- package/dist/cta-app-download-newsletter.js +30 -2
- package/dist/cta-documentation-links.cjs +28 -2
- package/dist/cta-documentation-links.js +28 -2
- package/dist/cta-feature-cards-grid.cjs +34 -3
- package/dist/cta-feature-cards-grid.js +34 -3
- package/dist/cta-feature-checklist.cjs +27 -1
- package/dist/cta-feature-checklist.js +27 -1
- package/dist/cta-feature-list.cjs +33 -2
- package/dist/cta-feature-list.js +33 -2
- package/dist/cta-gradient-logos-floating.cjs +28 -1
- package/dist/cta-gradient-logos-floating.js +28 -1
- package/dist/cta-minimal-separator.cjs +27 -1
- package/dist/cta-minimal-separator.js +27 -1
- package/dist/cta-platform-demo.cjs +28 -1
- package/dist/cta-platform-demo.js +28 -1
- package/dist/cta-simple-centered.cjs +28 -1
- package/dist/cta-simple-centered.js +28 -1
- package/dist/cta-split-gradient-image.cjs +28 -1
- package/dist/cta-split-gradient-image.js +28 -1
- package/dist/cta-split-image-logos.cjs +29 -2
- package/dist/cta-split-image-logos.js +29 -2
- package/dist/cta-split-image.cjs +29 -2
- package/dist/cta-split-image.js +29 -2
- package/dist/cta-stacked-cards.cjs +28 -1
- package/dist/cta-stacked-cards.js +28 -1
- package/dist/faq-badge-support.cjs +33 -5
- package/dist/faq-badge-support.js +33 -5
- package/dist/faq-bordered-badge.cjs +31 -3
- package/dist/faq-bordered-badge.js +31 -3
- package/dist/faq-card-categories.cjs +60 -4
- package/dist/faq-card-categories.js +60 -4
- package/dist/faq-categorized-sections.cjs +31 -3
- package/dist/faq-categorized-sections.js +31 -3
- package/dist/faq-centered-accordion.cjs +31 -3
- package/dist/faq-centered-accordion.js +31 -3
- package/dist/faq-gradient-categories.cjs +31 -3
- package/dist/faq-gradient-categories.js +31 -3
- package/dist/faq-icon-benefits.cjs +40 -5
- package/dist/faq-icon-benefits.js +40 -5
- package/dist/faq-muted-cards.cjs +29 -2
- package/dist/faq-muted-cards.js +29 -2
- package/dist/faq-numbered-grid.cjs +32 -3
- package/dist/faq-numbered-grid.js +32 -3
- package/dist/faq-numbered-list.cjs +32 -3
- package/dist/faq-numbered-list.js +32 -3
- package/dist/faq-profile-sidebar.cjs +36 -6
- package/dist/faq-profile-sidebar.js +36 -6
- package/dist/faq-sidebar-navigation.cjs +30 -3
- package/dist/faq-sidebar-navigation.js +30 -3
- package/dist/faq-simple-accordion.cjs +29 -2
- package/dist/faq-simple-accordion.js +29 -2
- package/dist/feature-accordion-image.cjs +28 -2
- package/dist/feature-accordion-image.js +28 -2
- package/dist/feature-badge-grid-six.cjs +27 -1
- package/dist/feature-badge-grid-six.js +27 -1
- package/dist/feature-bento-image-grid.cjs +27 -1
- package/dist/feature-bento-image-grid.js +27 -1
- package/dist/feature-bento-utilities.cjs +56 -4
- package/dist/feature-bento-utilities.js +56 -4
- package/dist/feature-capabilities-grid.cjs +29 -3
- package/dist/feature-capabilities-grid.js +29 -3
- package/dist/feature-card-grid-linked.cjs +29 -2
- package/dist/feature-card-grid-linked.js +29 -2
- package/dist/feature-carousel-progress.cjs +28 -2
- package/dist/feature-carousel-progress.js +28 -2
- package/dist/feature-category-image-cards.cjs +28 -2
- package/dist/feature-category-image-cards.js +28 -2
- package/dist/feature-checklist-image.cjs +30 -2
- package/dist/feature-checklist-image.js +30 -2
- package/dist/feature-checklist-three-column.cjs +35 -5
- package/dist/feature-checklist-three-column.js +35 -5
- package/dist/feature-icon-grid-accent.cjs +28 -2
- package/dist/feature-icon-grid-accent.js +28 -2
- package/dist/feature-icon-grid-bordered.cjs +9 -4
- package/dist/feature-icon-grid-bordered.js +9 -4
- package/dist/feature-icon-grid-muted.cjs +28 -2
- package/dist/feature-icon-grid-muted.js +28 -2
- package/dist/feature-icon-tabs-content.cjs +56 -5
- package/dist/feature-icon-tabs-content.js +56 -5
- package/dist/feature-image-cards-three-column.cjs +27 -1
- package/dist/feature-image-cards-three-column.js +27 -1
- package/dist/feature-integration-cards.cjs +28 -2
- package/dist/feature-integration-cards.js +28 -2
- package/dist/feature-pattern-grid-links.cjs +28 -2
- package/dist/feature-pattern-grid-links.js +28 -2
- package/dist/feature-utility-cards-grid.cjs +9 -4
- package/dist/feature-utility-cards-grid.js +9 -4
- package/dist/footer-comprehensive-links.cjs +231 -151
- package/dist/footer-comprehensive-links.js +231 -151
- package/dist/hero-ad-campaign-expert.cjs +24 -2
- package/dist/hero-ad-campaign-expert.js +24 -2
- package/dist/hero-adaptable-product-grid.cjs +27 -1
- package/dist/hero-adaptable-product-grid.js +27 -1
- package/dist/hero-ai-powered-carousel.cjs +27 -1
- package/dist/hero-ai-powered-carousel.js +27 -1
- package/dist/hero-announcement-badge.cjs +27 -1
- package/dist/hero-announcement-badge.js +27 -1
- package/dist/hero-architecture-fullscreen.cjs +50 -2
- package/dist/hero-architecture-fullscreen.js +50 -2
- package/dist/hero-badge-image-split.cjs +27 -1
- package/dist/hero-badge-image-split.js +27 -1
- package/dist/hero-business-carousel-dots.cjs +27 -1
- package/dist/hero-business-carousel-dots.js +27 -1
- package/dist/hero-centered-gradient-cta.cjs +28 -2
- package/dist/hero-centered-gradient-cta.js +28 -2
- package/dist/hero-centered-image-grid.cjs +27 -1
- package/dist/hero-centered-image-grid.js +27 -1
- package/dist/hero-centered-screenshot.cjs +50 -2
- package/dist/hero-centered-screenshot.js +50 -2
- package/dist/hero-coming-soon-countdown.cjs +37 -7
- package/dist/hero-coming-soon-countdown.js +37 -7
- package/dist/hero-community-survey-cta.cjs +27 -1
- package/dist/hero-community-survey-cta.js +27 -1
- package/dist/hero-conversation-intelligence.cjs +50 -2
- package/dist/hero-conversation-intelligence.js +50 -2
- package/dist/hero-conversion-video-play.cjs +55 -3
- package/dist/hero-conversion-video-play.js +55 -3
- package/dist/hero-creative-studio-stacked.cjs +28 -2
- package/dist/hero-creative-studio-stacked.js +28 -2
- package/dist/hero-crm-streamlined.cjs +27 -1
- package/dist/hero-crm-streamlined.js +27 -1
- package/dist/hero-customer-support-layered.cjs +51 -3
- package/dist/hero-customer-support-layered.js +51 -3
- package/dist/hero-dashed-border-features.cjs +27 -1
- package/dist/hero-dashed-border-features.js +27 -1
- package/dist/hero-design-showcase-logos.cjs +27 -1
- package/dist/hero-design-showcase-logos.js +27 -1
- package/dist/hero-design-system-3d.cjs +32 -2
- package/dist/hero-design-system-3d.js +32 -2
- package/dist/hero-developer-tools-code.cjs +27 -1
- package/dist/hero-developer-tools-code.js +27 -1
- package/dist/hero-digital-agency-fullscreen.cjs +33 -3
- package/dist/hero-digital-agency-fullscreen.js +33 -3
- package/dist/hero-ecommerce-product-showcase.cjs +32 -6
- package/dist/hero-ecommerce-product-showcase.js +32 -6
- package/dist/hero-enterprise-security.cjs +34 -4
- package/dist/hero-enterprise-security.js +34 -4
- package/dist/hero-event-registration.cjs +35 -5
- package/dist/hero-event-registration.js +35 -5
- package/dist/hero-feature-cards-grid.cjs +82 -4
- package/dist/hero-feature-cards-grid.js +82 -4
- package/dist/hero-gradient-avatars-rating.cjs +30 -4
- package/dist/hero-gradient-avatars-rating.js +30 -4
- package/dist/hero-gradient-client-focused.cjs +27 -1
- package/dist/hero-gradient-client-focused.js +27 -1
- package/dist/hero-grid-pattern-efficiency.cjs +28 -2
- package/dist/hero-grid-pattern-efficiency.js +28 -2
- package/dist/hero-grid-pattern-solutions.cjs +27 -1
- package/dist/hero-grid-pattern-solutions.js +27 -1
- package/dist/hero-image-left-content.cjs +27 -1
- package/dist/hero-image-left-content.js +27 -1
- package/dist/hero-innovation-image-grid.cjs +27 -1
- package/dist/hero-innovation-image-grid.js +27 -1
- package/dist/hero-logo-centered-screenshot.cjs +27 -1
- package/dist/hero-logo-centered-screenshot.js +27 -1
- package/dist/hero-marketplace-scattered-images.cjs +27 -1
- package/dist/hero-marketplace-scattered-images.js +27 -1
- package/dist/hero-mentorship-video-split.cjs +7 -3
- package/dist/hero-mentorship-video-split.js +7 -3
- package/dist/hero-minimal-centered-dark.cjs +55 -3
- package/dist/hero-minimal-centered-dark.js +55 -3
- package/dist/hero-mobile-app-download.cjs +34 -4
- package/dist/hero-mobile-app-download.js +34 -4
- package/dist/hero-newsletter-minimal.cjs +29 -3
- package/dist/hero-newsletter-minimal.js +29 -3
- package/dist/hero-overlay-cta-grid.cjs +33 -3
- package/dist/hero-overlay-cta-grid.js +33 -3
- package/dist/hero-pattern-badge-logos.cjs +28 -2
- package/dist/hero-pattern-badge-logos.js +28 -2
- package/dist/hero-pattern-logo-tech-stack.cjs +33 -3
- package/dist/hero-pattern-logo-tech-stack.js +33 -3
- package/dist/hero-platform-features-grid.cjs +28 -2
- package/dist/hero-platform-features-grid.js +28 -2
- package/dist/hero-portfolio-creative.cjs +29 -3
- package/dist/hero-portfolio-creative.js +29 -3
- package/dist/hero-pricing-comparison.cjs +52 -4
- package/dist/hero-pricing-comparison.js +52 -4
- package/dist/hero-product-showcase-floating.cjs +34 -4
- package/dist/hero-product-showcase-floating.js +34 -4
- package/dist/hero-productivity-launcher-video.cjs +29 -3
- package/dist/hero-productivity-launcher-video.js +29 -3
- package/dist/hero-saas-dashboard-preview.cjs +34 -4
- package/dist/hero-saas-dashboard-preview.js +34 -4
- package/dist/hero-shared-inbox-layered.cjs +51 -3
- package/dist/hero-shared-inbox-layered.js +51 -3
- package/dist/hero-simple-centered-image.cjs +27 -1
- package/dist/hero-simple-centered-image.js +27 -1
- package/dist/hero-software-growth-video-dialog.cjs +50 -2
- package/dist/hero-software-growth-video-dialog.js +50 -2
- package/dist/hero-spiral-pattern-cards.cjs +28 -2
- package/dist/hero-spiral-pattern-cards.js +28 -2
- package/dist/hero-split-icon-cards.cjs +34 -4
- package/dist/hero-split-icon-cards.js +34 -4
- package/dist/hero-split-image-newsletter.cjs +28 -2
- package/dist/hero-split-image-newsletter.js +28 -2
- package/dist/hero-split-spiral-shapes.cjs +28 -2
- package/dist/hero-split-spiral-shapes.js +28 -2
- package/dist/hero-startup-launch-cta.cjs +28 -2
- package/dist/hero-startup-launch-cta.js +28 -2
- package/dist/hero-stats-social-proof.cjs +34 -4
- package/dist/hero-stats-social-proof.js +34 -4
- package/dist/hero-tech-carousel.cjs +27 -1
- package/dist/hero-tech-carousel.js +27 -1
- package/dist/hero-ui-library-showcase.cjs +27 -1
- package/dist/hero-ui-library-showcase.js +27 -1
- package/dist/hero-video-background-dark.cjs +28 -2
- package/dist/hero-video-background-dark.js +28 -2
- package/dist/hero-video-dialog-gradient.cjs +27 -1
- package/dist/hero-video-dialog-gradient.js +27 -1
- package/dist/hero-welcome-asymmetric-images.cjs +30 -2
- package/dist/hero-welcome-asymmetric-images.js +30 -2
- package/dist/index.cjs +104 -36
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +102 -37
- package/dist/link-page-bento-layout.cjs +57 -28
- package/dist/link-page-bento-layout.d.cts +1 -5
- package/dist/link-page-bento-layout.d.ts +1 -5
- package/dist/link-page-bento-layout.js +57 -28
- package/dist/link-page-grid-cards.cjs +52 -23
- package/dist/link-page-grid-cards.d.cts +1 -5
- package/dist/link-page-grid-cards.d.ts +1 -5
- package/dist/link-page-grid-cards.js +52 -23
- package/dist/link-page-minimal-profile.cjs +46 -18
- package/dist/link-page-minimal-profile.d.cts +1 -5
- package/dist/link-page-minimal-profile.d.ts +1 -5
- package/dist/link-page-minimal-profile.js +46 -18
- package/dist/link-page-newsletter-social.cjs +53 -28
- package/dist/link-page-newsletter-social.d.cts +1 -5
- package/dist/link-page-newsletter-social.d.ts +1 -5
- package/dist/link-page-newsletter-social.js +53 -28
- package/dist/link-tree-block.cjs +122 -34
- package/dist/link-tree-block.d.cts +1 -8
- package/dist/link-tree-block.d.ts +1 -8
- package/dist/link-tree-block.js +122 -34
- package/dist/media-hover-ctas.cjs +28 -2
- package/dist/media-hover-ctas.js +28 -2
- package/dist/process-expandable-timeline.cjs +66 -10
- package/dist/process-expandable-timeline.js +66 -10
- package/dist/process-hover-cards.cjs +39 -6
- package/dist/process-hover-cards.js +39 -6
- package/dist/process-icon-timeline.cjs +53 -3
- package/dist/process-icon-timeline.js +53 -3
- package/dist/process-mission-principles.cjs +44 -6
- package/dist/process-mission-principles.js +44 -6
- package/dist/process-numbered-services.cjs +76 -22
- package/dist/process-numbered-services.js +76 -22
- package/dist/process-roadmap-timeline.cjs +63 -9
- package/dist/process-roadmap-timeline.js +63 -9
- package/dist/process-scroll-image.cjs +71 -32
- package/dist/process-scroll-image.js +71 -32
- package/dist/process-steps-grid.cjs +61 -5
- package/dist/process-steps-grid.js +61 -5
- package/dist/process-sticky-steps.cjs +49 -69
- package/dist/process-sticky-steps.d.cts +1 -13
- package/dist/process-sticky-steps.d.ts +1 -13
- package/dist/process-sticky-steps.js +49 -69
- package/dist/project-zigzag-layout.cjs +379 -3
- package/dist/project-zigzag-layout.d.cts +8 -1
- package/dist/project-zigzag-layout.d.ts +8 -1
- package/dist/project-zigzag-layout.js +380 -3
- package/dist/registry.cjs +2759 -2476
- package/dist/registry.js +2759 -2476
- package/dist/team-media-showcase.cjs +59 -4
- package/dist/team-media-showcase.d.cts +4 -0
- package/dist/team-media-showcase.d.ts +4 -0
- package/dist/team-media-showcase.js +59 -4
- package/dist/testimonials-carousel-image.d.cts +6 -0
- package/dist/testimonials-carousel-image.d.ts +6 -0
- package/dist/utils.cjs +58 -0
- package/dist/utils.d.cts +113 -1
- package/dist/utils.d.ts +113 -1
- package/dist/utils.js +56 -1
- package/package.json +1 -1
|
@@ -32,6 +32,32 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
32
32
|
function cn(...inputs) {
|
|
33
33
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
34
34
|
}
|
|
35
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
36
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
37
|
+
if (isDark) {
|
|
38
|
+
switch (variant) {
|
|
39
|
+
case "default":
|
|
40
|
+
return "text-foreground";
|
|
41
|
+
case "muted":
|
|
42
|
+
return "text-foreground/80";
|
|
43
|
+
case "subtle":
|
|
44
|
+
return "text-foreground/60";
|
|
45
|
+
case "accent":
|
|
46
|
+
return "text-accent-foreground";
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
switch (variant) {
|
|
50
|
+
case "default":
|
|
51
|
+
return "text-foreground";
|
|
52
|
+
case "muted":
|
|
53
|
+
return "text-muted-foreground";
|
|
54
|
+
case "subtle":
|
|
55
|
+
return "text-muted-foreground/70";
|
|
56
|
+
case "accent":
|
|
57
|
+
return "text-primary";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
35
61
|
function normalizePhoneNumber(input) {
|
|
36
62
|
const trimmed = input.trim();
|
|
37
63
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -1077,7 +1103,8 @@ function FeatureChecklistImage({
|
|
|
1077
1103
|
"p",
|
|
1078
1104
|
{
|
|
1079
1105
|
className: cn(
|
|
1080
|
-
"mt-1
|
|
1106
|
+
"mt-1 md:mt-6",
|
|
1107
|
+
getTextColor(background, "muted"),
|
|
1081
1108
|
descriptionClassName
|
|
1082
1109
|
),
|
|
1083
1110
|
children: description
|
|
@@ -1086,7 +1113,8 @@ function FeatureChecklistImage({
|
|
|
1086
1113
|
"div",
|
|
1087
1114
|
{
|
|
1088
1115
|
className: cn(
|
|
1089
|
-
"mt-1
|
|
1116
|
+
"mt-1 md:mt-6",
|
|
1117
|
+
getTextColor(background, "muted"),
|
|
1090
1118
|
descriptionClassName
|
|
1091
1119
|
),
|
|
1092
1120
|
children: description
|
|
@@ -11,6 +11,32 @@ import { Img } from '@page-speed/img';
|
|
|
11
11
|
function cn(...inputs) {
|
|
12
12
|
return twMerge(clsx(inputs));
|
|
13
13
|
}
|
|
14
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
15
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
16
|
+
if (isDark) {
|
|
17
|
+
switch (variant) {
|
|
18
|
+
case "default":
|
|
19
|
+
return "text-foreground";
|
|
20
|
+
case "muted":
|
|
21
|
+
return "text-foreground/80";
|
|
22
|
+
case "subtle":
|
|
23
|
+
return "text-foreground/60";
|
|
24
|
+
case "accent":
|
|
25
|
+
return "text-accent-foreground";
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
switch (variant) {
|
|
29
|
+
case "default":
|
|
30
|
+
return "text-foreground";
|
|
31
|
+
case "muted":
|
|
32
|
+
return "text-muted-foreground";
|
|
33
|
+
case "subtle":
|
|
34
|
+
return "text-muted-foreground/70";
|
|
35
|
+
case "accent":
|
|
36
|
+
return "text-primary";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
14
40
|
function normalizePhoneNumber(input) {
|
|
15
41
|
const trimmed = input.trim();
|
|
16
42
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -1056,7 +1082,8 @@ function FeatureChecklistImage({
|
|
|
1056
1082
|
"p",
|
|
1057
1083
|
{
|
|
1058
1084
|
className: cn(
|
|
1059
|
-
"mt-1
|
|
1085
|
+
"mt-1 md:mt-6",
|
|
1086
|
+
getTextColor(background, "muted"),
|
|
1060
1087
|
descriptionClassName
|
|
1061
1088
|
),
|
|
1062
1089
|
children: description
|
|
@@ -1065,7 +1092,8 @@ function FeatureChecklistImage({
|
|
|
1065
1092
|
"div",
|
|
1066
1093
|
{
|
|
1067
1094
|
className: cn(
|
|
1068
|
-
"mt-1
|
|
1095
|
+
"mt-1 md:mt-6",
|
|
1096
|
+
getTextColor(background, "muted"),
|
|
1069
1097
|
descriptionClassName
|
|
1070
1098
|
),
|
|
1071
1099
|
children: description
|
|
@@ -33,6 +33,36 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
33
33
|
function cn(...inputs) {
|
|
34
34
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
35
35
|
}
|
|
36
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
37
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
38
|
+
if (isDark) {
|
|
39
|
+
switch (variant) {
|
|
40
|
+
case "default":
|
|
41
|
+
return "text-foreground";
|
|
42
|
+
case "muted":
|
|
43
|
+
return "text-foreground/80";
|
|
44
|
+
case "subtle":
|
|
45
|
+
return "text-foreground/60";
|
|
46
|
+
case "accent":
|
|
47
|
+
return "text-accent-foreground";
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
switch (variant) {
|
|
51
|
+
case "default":
|
|
52
|
+
return "text-foreground";
|
|
53
|
+
case "muted":
|
|
54
|
+
return "text-muted-foreground";
|
|
55
|
+
case "subtle":
|
|
56
|
+
return "text-muted-foreground/70";
|
|
57
|
+
case "accent":
|
|
58
|
+
return "text-primary";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function getAccentColor(parentBg, options) {
|
|
63
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
64
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
65
|
+
}
|
|
36
66
|
var svgCache = /* @__PURE__ */ new Map();
|
|
37
67
|
function DynamicIcon({
|
|
38
68
|
name,
|
|
@@ -996,8 +1026,8 @@ function FeatureChecklistThreeColumn({
|
|
|
996
1026
|
const renderChecklistColumn = React.useCallback((items, slot, gapClass) => {
|
|
997
1027
|
if (slot) return slot;
|
|
998
1028
|
if (!items || items.length === 0) return null;
|
|
999
|
-
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("flex flex-col
|
|
1000
|
-
/* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/check", size: 16, className:
|
|
1029
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("flex flex-col", getTextColor(background, "muted"), gapClass, checklistClassName), children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex items-center gap-2", getCheckItemClassName(item)), children: [
|
|
1030
|
+
/* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/check", size: 16, className: getAccentColor(background) }),
|
|
1001
1031
|
getCheckItemContent(item)
|
|
1002
1032
|
] }, index)) });
|
|
1003
1033
|
}, [checklistClassName, getCheckItemContent, getCheckItemClassName]);
|
|
@@ -1050,17 +1080,17 @@ function FeatureChecklistThreeColumn({
|
|
|
1050
1080
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1051
1081
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 px-4 pt-5 sm:px-5 md:px-6 md:pt-6", children: [
|
|
1052
1082
|
card.title && (typeof card.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-medium", card.titleClassName), children: card.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium", card.titleClassName), children: card.title })),
|
|
1053
|
-
card.description && (typeof card.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("
|
|
1083
|
+
card.description && (typeof card.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), card.descriptionClassName), children: card.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(getTextColor(background, "muted"), card.descriptionClassName), children: card.description }))
|
|
1054
1084
|
] }),
|
|
1055
1085
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px border-t border-dashed" }),
|
|
1056
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "
|
|
1086
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: getTextColor(background, "muted"), children: card.checklistItems?.map((item, itemIndex) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
|
1057
1087
|
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex items-start gap-2 px-4 py-3 sm:px-5 md:px-6", getCheckItemClassName(item)), children: [
|
|
1058
1088
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1059
1089
|
DynamicIcon,
|
|
1060
1090
|
{
|
|
1061
1091
|
name: "lucide/check",
|
|
1062
1092
|
size: 16,
|
|
1063
|
-
className: "mt-1 shrink-0
|
|
1093
|
+
className: cn("mt-1 shrink-0", getAccentColor(background))
|
|
1064
1094
|
}
|
|
1065
1095
|
),
|
|
1066
1096
|
getCheckItemContent(item)
|
|
@@ -12,6 +12,36 @@ import { Img } from '@page-speed/img';
|
|
|
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
|
+
function getAccentColor(parentBg, options) {
|
|
42
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
43
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
44
|
+
}
|
|
15
45
|
var svgCache = /* @__PURE__ */ new Map();
|
|
16
46
|
function DynamicIcon({
|
|
17
47
|
name,
|
|
@@ -975,8 +1005,8 @@ function FeatureChecklistThreeColumn({
|
|
|
975
1005
|
const renderChecklistColumn = useCallback((items, slot, gapClass) => {
|
|
976
1006
|
if (slot) return slot;
|
|
977
1007
|
if (!items || items.length === 0) return null;
|
|
978
|
-
return /* @__PURE__ */ jsx("ul", { className: cn("flex flex-col
|
|
979
|
-
/* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check", size: 16, className:
|
|
1008
|
+
return /* @__PURE__ */ jsx("ul", { className: cn("flex flex-col", getTextColor(background, "muted"), gapClass, checklistClassName), children: items.map((item, index) => /* @__PURE__ */ jsxs("li", { className: cn("flex items-center gap-2", getCheckItemClassName(item)), children: [
|
|
1009
|
+
/* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check", size: 16, className: getAccentColor(background) }),
|
|
980
1010
|
getCheckItemContent(item)
|
|
981
1011
|
] }, index)) });
|
|
982
1012
|
}, [checklistClassName, getCheckItemContent, getCheckItemClassName]);
|
|
@@ -1029,17 +1059,17 @@ function FeatureChecklistThreeColumn({
|
|
|
1029
1059
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
1030
1060
|
/* @__PURE__ */ jsxs("div", { className: "mb-3 px-4 pt-5 sm:px-5 md:px-6 md:pt-6", children: [
|
|
1031
1061
|
card.title && (typeof card.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium", card.titleClassName), children: card.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium", card.titleClassName), children: card.title })),
|
|
1032
|
-
card.description && (typeof card.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("
|
|
1062
|
+
card.description && (typeof card.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn(getTextColor(background, "muted"), card.descriptionClassName), children: card.description }) : /* @__PURE__ */ jsx("div", { className: cn(getTextColor(background, "muted"), card.descriptionClassName), children: card.description }))
|
|
1033
1063
|
] }),
|
|
1034
1064
|
/* @__PURE__ */ jsx("div", { className: "h-px border-t border-dashed" }),
|
|
1035
|
-
/* @__PURE__ */ jsx("ul", { className: "
|
|
1065
|
+
/* @__PURE__ */ jsx("ul", { className: getTextColor(background, "muted"), children: card.checklistItems?.map((item, itemIndex) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
1036
1066
|
/* @__PURE__ */ jsxs("li", { className: cn("flex items-start gap-2 px-4 py-3 sm:px-5 md:px-6", getCheckItemClassName(item)), children: [
|
|
1037
1067
|
/* @__PURE__ */ jsx(
|
|
1038
1068
|
DynamicIcon,
|
|
1039
1069
|
{
|
|
1040
1070
|
name: "lucide/check",
|
|
1041
1071
|
size: 16,
|
|
1042
|
-
className: "mt-1 shrink-0
|
|
1072
|
+
className: cn("mt-1 shrink-0", getAccentColor(background))
|
|
1043
1073
|
}
|
|
1044
1074
|
),
|
|
1045
1075
|
getCheckItemContent(item)
|
|
@@ -30,6 +30,32 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
30
30
|
function cn(...inputs) {
|
|
31
31
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
32
32
|
}
|
|
33
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
34
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
35
|
+
if (isDark) {
|
|
36
|
+
switch (variant) {
|
|
37
|
+
case "default":
|
|
38
|
+
return "text-foreground";
|
|
39
|
+
case "muted":
|
|
40
|
+
return "text-foreground/80";
|
|
41
|
+
case "subtle":
|
|
42
|
+
return "text-foreground/60";
|
|
43
|
+
case "accent":
|
|
44
|
+
return "text-accent-foreground";
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
switch (variant) {
|
|
48
|
+
case "default":
|
|
49
|
+
return "text-foreground";
|
|
50
|
+
case "muted":
|
|
51
|
+
return "text-muted-foreground";
|
|
52
|
+
case "subtle":
|
|
53
|
+
return "text-muted-foreground/70";
|
|
54
|
+
case "accent":
|
|
55
|
+
return "text-primary";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
33
59
|
var svgCache = /* @__PURE__ */ new Map();
|
|
34
60
|
function DynamicIcon({
|
|
35
61
|
name,
|
|
@@ -556,14 +582,14 @@ function FeatureIconGridAccent({
|
|
|
556
582
|
),
|
|
557
583
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
558
584
|
feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-medium md:text-2xl", children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-lg font-medium md:text-2xl", children: feature.title })),
|
|
559
|
-
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2
|
|
585
|
+
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2", getTextColor(background, "muted")), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-2", getTextColor(background, "muted")), children: feature.description }))
|
|
560
586
|
] })
|
|
561
587
|
]
|
|
562
588
|
},
|
|
563
589
|
index
|
|
564
590
|
);
|
|
565
591
|
});
|
|
566
|
-
}, [featuresSlot, features, cardClassName]);
|
|
592
|
+
}, [featuresSlot, features, cardClassName, background]);
|
|
567
593
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
568
594
|
Section,
|
|
569
595
|
{
|
|
@@ -9,6 +9,32 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
9
9
|
function cn(...inputs) {
|
|
10
10
|
return twMerge(clsx(inputs));
|
|
11
11
|
}
|
|
12
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
13
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
14
|
+
if (isDark) {
|
|
15
|
+
switch (variant) {
|
|
16
|
+
case "default":
|
|
17
|
+
return "text-foreground";
|
|
18
|
+
case "muted":
|
|
19
|
+
return "text-foreground/80";
|
|
20
|
+
case "subtle":
|
|
21
|
+
return "text-foreground/60";
|
|
22
|
+
case "accent":
|
|
23
|
+
return "text-accent-foreground";
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
switch (variant) {
|
|
27
|
+
case "default":
|
|
28
|
+
return "text-foreground";
|
|
29
|
+
case "muted":
|
|
30
|
+
return "text-muted-foreground";
|
|
31
|
+
case "subtle":
|
|
32
|
+
return "text-muted-foreground/70";
|
|
33
|
+
case "accent":
|
|
34
|
+
return "text-primary";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
12
38
|
var svgCache = /* @__PURE__ */ new Map();
|
|
13
39
|
function DynamicIcon({
|
|
14
40
|
name,
|
|
@@ -535,14 +561,14 @@ function FeatureIconGridAccent({
|
|
|
535
561
|
),
|
|
536
562
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
537
563
|
feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-lg font-medium md:text-2xl", children: feature.title }) : /* @__PURE__ */ jsx("div", { className: "text-lg font-medium md:text-2xl", children: feature.title })),
|
|
538
|
-
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-2
|
|
564
|
+
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-2", getTextColor(background, "muted")), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("mt-2", getTextColor(background, "muted")), children: feature.description }))
|
|
539
565
|
] })
|
|
540
566
|
]
|
|
541
567
|
},
|
|
542
568
|
index
|
|
543
569
|
);
|
|
544
570
|
});
|
|
545
|
-
}, [featuresSlot, features, cardClassName]);
|
|
571
|
+
}, [featuresSlot, features, cardClassName, background]);
|
|
546
572
|
return /* @__PURE__ */ jsxs(
|
|
547
573
|
Section,
|
|
548
574
|
{
|
|
@@ -30,6 +30,10 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
30
30
|
function cn(...inputs) {
|
|
31
31
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
32
32
|
}
|
|
33
|
+
function getAccentColor(parentBg, options) {
|
|
34
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
35
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
36
|
+
}
|
|
33
37
|
var svgCache = /* @__PURE__ */ new Map();
|
|
34
38
|
function DynamicIcon({
|
|
35
39
|
name,
|
|
@@ -550,7 +554,8 @@ function FeatureIconGridBordered({
|
|
|
550
554
|
"span",
|
|
551
555
|
{
|
|
552
556
|
className: cn(
|
|
553
|
-
"mb-8 flex size-10 shrink-0 items-center justify-center rounded-full
|
|
557
|
+
"mb-8 flex size-10 shrink-0 items-center justify-center rounded-full text-primary-foreground md:size-12",
|
|
558
|
+
getAccentColor(background),
|
|
554
559
|
feature.iconClassName
|
|
555
560
|
),
|
|
556
561
|
children: renderIcon(feature)
|
|
@@ -566,7 +571,7 @@ function FeatureIconGridBordered({
|
|
|
566
571
|
),
|
|
567
572
|
children: [
|
|
568
573
|
feature.title,
|
|
569
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px
|
|
574
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("absolute -left-px hidden h-6 w-px md:inline-block", getAccentColor(background)) })
|
|
570
575
|
]
|
|
571
576
|
}
|
|
572
577
|
) : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -578,7 +583,7 @@ function FeatureIconGridBordered({
|
|
|
578
583
|
),
|
|
579
584
|
children: [
|
|
580
585
|
feature.title,
|
|
581
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px
|
|
586
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("absolute -left-px hidden h-6 w-px md:inline-block", getAccentColor(background)) })
|
|
582
587
|
]
|
|
583
588
|
}
|
|
584
589
|
)),
|
|
@@ -606,7 +611,7 @@ function FeatureIconGridBordered({
|
|
|
606
611
|
},
|
|
607
612
|
index
|
|
608
613
|
));
|
|
609
|
-
}, [featuresSlot, features, cardClassName, renderIcon]);
|
|
614
|
+
}, [featuresSlot, features, cardClassName, renderIcon, background]);
|
|
610
615
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
611
616
|
Section,
|
|
612
617
|
{
|
|
@@ -9,6 +9,10 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
9
9
|
function cn(...inputs) {
|
|
10
10
|
return twMerge(clsx(inputs));
|
|
11
11
|
}
|
|
12
|
+
function getAccentColor(parentBg, options) {
|
|
13
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
14
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
15
|
+
}
|
|
12
16
|
var svgCache = /* @__PURE__ */ new Map();
|
|
13
17
|
function DynamicIcon({
|
|
14
18
|
name,
|
|
@@ -529,7 +533,8 @@ function FeatureIconGridBordered({
|
|
|
529
533
|
"span",
|
|
530
534
|
{
|
|
531
535
|
className: cn(
|
|
532
|
-
"mb-8 flex size-10 shrink-0 items-center justify-center rounded-full
|
|
536
|
+
"mb-8 flex size-10 shrink-0 items-center justify-center rounded-full text-primary-foreground md:size-12",
|
|
537
|
+
getAccentColor(background),
|
|
533
538
|
feature.iconClassName
|
|
534
539
|
),
|
|
535
540
|
children: renderIcon(feature)
|
|
@@ -545,7 +550,7 @@ function FeatureIconGridBordered({
|
|
|
545
550
|
),
|
|
546
551
|
children: [
|
|
547
552
|
feature.title,
|
|
548
|
-
/* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px
|
|
553
|
+
/* @__PURE__ */ jsx("span", { className: cn("absolute -left-px hidden h-6 w-px md:inline-block", getAccentColor(background)) })
|
|
549
554
|
]
|
|
550
555
|
}
|
|
551
556
|
) : /* @__PURE__ */ jsxs(
|
|
@@ -557,7 +562,7 @@ function FeatureIconGridBordered({
|
|
|
557
562
|
),
|
|
558
563
|
children: [
|
|
559
564
|
feature.title,
|
|
560
|
-
/* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px
|
|
565
|
+
/* @__PURE__ */ jsx("span", { className: cn("absolute -left-px hidden h-6 w-px md:inline-block", getAccentColor(background)) })
|
|
561
566
|
]
|
|
562
567
|
}
|
|
563
568
|
)),
|
|
@@ -585,7 +590,7 @@ function FeatureIconGridBordered({
|
|
|
585
590
|
},
|
|
586
591
|
index
|
|
587
592
|
));
|
|
588
|
-
}, [featuresSlot, features, cardClassName, renderIcon]);
|
|
593
|
+
}, [featuresSlot, features, cardClassName, renderIcon, background]);
|
|
589
594
|
return /* @__PURE__ */ jsxs(
|
|
590
595
|
Section,
|
|
591
596
|
{
|
|
@@ -30,6 +30,32 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
30
30
|
function cn(...inputs) {
|
|
31
31
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
32
32
|
}
|
|
33
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
34
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
35
|
+
if (isDark) {
|
|
36
|
+
switch (variant) {
|
|
37
|
+
case "default":
|
|
38
|
+
return "text-foreground";
|
|
39
|
+
case "muted":
|
|
40
|
+
return "text-foreground/80";
|
|
41
|
+
case "subtle":
|
|
42
|
+
return "text-foreground/60";
|
|
43
|
+
case "accent":
|
|
44
|
+
return "text-accent-foreground";
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
switch (variant) {
|
|
48
|
+
case "default":
|
|
49
|
+
return "text-foreground";
|
|
50
|
+
case "muted":
|
|
51
|
+
return "text-muted-foreground";
|
|
52
|
+
case "subtle":
|
|
53
|
+
return "text-muted-foreground/70";
|
|
54
|
+
case "accent":
|
|
55
|
+
return "text-primary";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
33
59
|
var svgCache = /* @__PURE__ */ new Map();
|
|
34
60
|
function DynamicIcon({
|
|
35
61
|
name,
|
|
@@ -543,7 +569,7 @@ function FeatureIconGridMuted({
|
|
|
543
569
|
children: [
|
|
544
570
|
(feature.icon || feature.iconName) && renderFeatureIcon(feature),
|
|
545
571
|
feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-semibold", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-semibold", feature.titleClassName), children: feature.title })),
|
|
546
|
-
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm
|
|
572
|
+
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }))
|
|
547
573
|
]
|
|
548
574
|
},
|
|
549
575
|
index
|
|
@@ -562,7 +588,7 @@ function FeatureIconGridMuted({
|
|
|
562
588
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-10", children: [
|
|
563
589
|
(title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
|
|
564
590
|
title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title })),
|
|
565
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("
|
|
591
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }))
|
|
566
592
|
] }),
|
|
567
593
|
(featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto grid max-w-7xl gap-7 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5", gridClassName), children: featuresContent })
|
|
568
594
|
] })
|
|
@@ -9,6 +9,32 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
9
9
|
function cn(...inputs) {
|
|
10
10
|
return twMerge(clsx(inputs));
|
|
11
11
|
}
|
|
12
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
13
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
14
|
+
if (isDark) {
|
|
15
|
+
switch (variant) {
|
|
16
|
+
case "default":
|
|
17
|
+
return "text-foreground";
|
|
18
|
+
case "muted":
|
|
19
|
+
return "text-foreground/80";
|
|
20
|
+
case "subtle":
|
|
21
|
+
return "text-foreground/60";
|
|
22
|
+
case "accent":
|
|
23
|
+
return "text-accent-foreground";
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
switch (variant) {
|
|
27
|
+
case "default":
|
|
28
|
+
return "text-foreground";
|
|
29
|
+
case "muted":
|
|
30
|
+
return "text-muted-foreground";
|
|
31
|
+
case "subtle":
|
|
32
|
+
return "text-muted-foreground/70";
|
|
33
|
+
case "accent":
|
|
34
|
+
return "text-primary";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
12
38
|
var svgCache = /* @__PURE__ */ new Map();
|
|
13
39
|
function DynamicIcon({
|
|
14
40
|
name,
|
|
@@ -522,7 +548,7 @@ function FeatureIconGridMuted({
|
|
|
522
548
|
children: [
|
|
523
549
|
(feature.icon || feature.iconName) && renderFeatureIcon(feature),
|
|
524
550
|
feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-semibold", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-semibold", feature.titleClassName), children: feature.title })),
|
|
525
|
-
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm
|
|
551
|
+
feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }))
|
|
526
552
|
]
|
|
527
553
|
},
|
|
528
554
|
index
|
|
@@ -541,7 +567,7 @@ function FeatureIconGridMuted({
|
|
|
541
567
|
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-10", children: [
|
|
542
568
|
(title || description) && /* @__PURE__ */ jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
|
|
543
569
|
title && (typeof title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title })),
|
|
544
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("
|
|
570
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }))
|
|
545
571
|
] }),
|
|
546
572
|
(featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mx-auto grid max-w-7xl gap-7 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5", gridClassName), children: featuresContent })
|
|
547
573
|
] })
|
|
@@ -35,6 +35,54 @@ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
|
|
|
35
35
|
function cn(...inputs) {
|
|
36
36
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
37
37
|
}
|
|
38
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
39
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
40
|
+
if (isDark) {
|
|
41
|
+
switch (variant) {
|
|
42
|
+
case "default":
|
|
43
|
+
return "text-foreground";
|
|
44
|
+
case "muted":
|
|
45
|
+
return "text-foreground/80";
|
|
46
|
+
case "subtle":
|
|
47
|
+
return "text-foreground/60";
|
|
48
|
+
case "accent":
|
|
49
|
+
return "text-accent-foreground";
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
switch (variant) {
|
|
53
|
+
case "default":
|
|
54
|
+
return "text-foreground";
|
|
55
|
+
case "muted":
|
|
56
|
+
return "text-muted-foreground";
|
|
57
|
+
case "subtle":
|
|
58
|
+
return "text-muted-foreground/70";
|
|
59
|
+
case "accent":
|
|
60
|
+
return "text-primary";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function getBorderColor(parentBg, variant = "default", options) {
|
|
65
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
66
|
+
if (isDark) {
|
|
67
|
+
switch (variant) {
|
|
68
|
+
case "default":
|
|
69
|
+
return "border-foreground/20";
|
|
70
|
+
case "muted":
|
|
71
|
+
return "border-foreground/10";
|
|
72
|
+
case "accent":
|
|
73
|
+
return "border-accent-foreground";
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
switch (variant) {
|
|
77
|
+
case "default":
|
|
78
|
+
return "border-border";
|
|
79
|
+
case "muted":
|
|
80
|
+
return "border-muted";
|
|
81
|
+
case "accent":
|
|
82
|
+
return "border-primary";
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
38
86
|
var svgCache = /* @__PURE__ */ new Map();
|
|
39
87
|
function DynamicIcon({
|
|
40
88
|
name,
|
|
@@ -1134,7 +1182,8 @@ function FeatureIconTabsContent({
|
|
|
1134
1182
|
{
|
|
1135
1183
|
value: tab.value,
|
|
1136
1184
|
className: cn(
|
|
1137
|
-
"flex shrink-0 items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:
|
|
1185
|
+
"flex shrink-0 items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
|
|
1186
|
+
`data-[state=active]:${getBorderColor(background, "accent")}`,
|
|
1138
1187
|
tabTriggerClassName,
|
|
1139
1188
|
tab.className
|
|
1140
1189
|
),
|
|
@@ -1213,7 +1262,8 @@ function FeatureIconTabsContent({
|
|
|
1213
1262
|
"p",
|
|
1214
1263
|
{
|
|
1215
1264
|
className: cn(
|
|
1216
|
-
"
|
|
1265
|
+
"lg:text-lg",
|
|
1266
|
+
getTextColor(background, "muted"),
|
|
1217
1267
|
content.descriptionClassName
|
|
1218
1268
|
),
|
|
1219
1269
|
children: content.description
|
|
@@ -1222,7 +1272,8 @@ function FeatureIconTabsContent({
|
|
|
1222
1272
|
"div",
|
|
1223
1273
|
{
|
|
1224
1274
|
className: cn(
|
|
1225
|
-
"
|
|
1275
|
+
"lg:text-lg",
|
|
1276
|
+
getTextColor(background, "muted"),
|
|
1226
1277
|
content.descriptionClassName
|
|
1227
1278
|
),
|
|
1228
1279
|
children: content.description
|
|
@@ -1290,10 +1341,10 @@ function FeatureIconTabsContent({
|
|
|
1290
1341
|
children: heading
|
|
1291
1342
|
}
|
|
1292
1343
|
)),
|
|
1293
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("
|
|
1344
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1294
1345
|
"div",
|
|
1295
1346
|
{
|
|
1296
|
-
className: cn("
|
|
1347
|
+
className: cn(getTextColor(background, "muted"), descriptionClassName),
|
|
1297
1348
|
children: description
|
|
1298
1349
|
}
|
|
1299
1350
|
))
|