@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
|
@@ -11,6 +11,36 @@ 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
|
+
}
|
|
40
|
+
function getAccentColor(parentBg, options) {
|
|
41
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
42
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
43
|
+
}
|
|
14
44
|
function normalizePhoneNumber(input) {
|
|
15
45
|
const trimmed = input.trim();
|
|
16
46
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -868,7 +898,7 @@ function HeroPatternLogoTechStack({
|
|
|
868
898
|
if (techLogosSlot) return techLogosSlot;
|
|
869
899
|
if (!techLogos || techLogos.length === 0) return null;
|
|
870
900
|
return /* @__PURE__ */ jsxs("div", { className: cn("mt-20 flex flex-col items-center gap-5", techLogosClassName), children: [
|
|
871
|
-
techStackLabel && (typeof techStackLabel === "string" ? /* @__PURE__ */ jsx("p", { className: "font-medium
|
|
901
|
+
techStackLabel && (typeof techStackLabel === "string" ? /* @__PURE__ */ jsx("p", { className: cn("font-medium lg:text-left", getTextColor(background, "muted")), children: techStackLabel }) : techStackLabel),
|
|
872
902
|
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-center gap-4", children: techLogos.map((techLogo, index) => {
|
|
873
903
|
const techLogoSrc = typeof techLogo.src === "string" ? techLogo.src : techLogo.src.light;
|
|
874
904
|
return /* @__PURE__ */ jsx(
|
|
@@ -919,9 +949,9 @@ function HeroPatternLogoTechStack({
|
|
|
919
949
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxs("h1", { className: cn("mb-6 text-2xl font-bold tracking-tight text-pretty lg:text-5xl", headingClassName), children: [
|
|
920
950
|
heading,
|
|
921
951
|
" ",
|
|
922
|
-
highlightedWord && /* @__PURE__ */ jsx("span", { className:
|
|
952
|
+
highlightedWord && /* @__PURE__ */ jsx("span", { className: getAccentColor(background), children: highlightedWord })
|
|
923
953
|
] }) : /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-2xl font-bold tracking-tight text-pretty lg:text-5xl", headingClassName), children: heading })),
|
|
924
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-3xl
|
|
954
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-3xl lg:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
|
|
925
955
|
] }),
|
|
926
956
|
renderActions,
|
|
927
957
|
renderTechLogos
|
|
@@ -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:")) {
|
|
@@ -981,7 +1007,7 @@ function HeroPlatformFeaturesGrid({
|
|
|
981
1007
|
feature.icon ?? (feature.iconName && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24 })),
|
|
982
1008
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
983
1009
|
feature.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold md:text-base", children: feature.title }),
|
|
984
|
-
feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm
|
|
1010
|
+
feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm md:text-base", getTextColor(background, "muted")), children: feature.description })
|
|
985
1011
|
] })
|
|
986
1012
|
] }, index)) });
|
|
987
1013
|
}, [featuresSlot, features, featuresClassName]);
|
|
@@ -996,7 +1022,7 @@ function HeroPlatformFeaturesGrid({
|
|
|
996
1022
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container", containerClassName), children: [
|
|
997
1023
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("text-center", headerClassName), children: [
|
|
998
1024
|
renderLogo,
|
|
999
|
-
subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-3 text-sm tracking-widest
|
|
1025
|
+
subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base", getTextColor(background, "muted")), children: subtitle }) : subtitle),
|
|
1000
1026
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mt-4 text-4xl font-semibold text-balance lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mt-4 text-4xl font-semibold text-balance lg:text-6xl", headingClassName), children: heading })),
|
|
1001
1027
|
renderAction
|
|
1002
1028
|
] }),
|
|
@@ -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:")) {
|
|
@@ -960,7 +986,7 @@ function HeroPlatformFeaturesGrid({
|
|
|
960
986
|
feature.icon ?? (feature.iconName && /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 24 })),
|
|
961
987
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
962
988
|
feature.title && /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold md:text-base", children: feature.title }),
|
|
963
|
-
feature.description && /* @__PURE__ */ jsx("p", { className: "text-sm
|
|
989
|
+
feature.description && /* @__PURE__ */ jsx("p", { className: cn("text-sm md:text-base", getTextColor(background, "muted")), children: feature.description })
|
|
964
990
|
] })
|
|
965
991
|
] }, index)) });
|
|
966
992
|
}, [featuresSlot, features, featuresClassName]);
|
|
@@ -975,7 +1001,7 @@ function HeroPlatformFeaturesGrid({
|
|
|
975
1001
|
children: /* @__PURE__ */ jsxs("div", { className: cn("container", containerClassName), children: [
|
|
976
1002
|
/* @__PURE__ */ jsxs("div", { className: cn("text-center", headerClassName), children: [
|
|
977
1003
|
renderLogo,
|
|
978
|
-
subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("span", { className: "mb-3 text-sm tracking-widest
|
|
1004
|
+
subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base", getTextColor(background, "muted")), children: subtitle }) : subtitle),
|
|
979
1005
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mt-4 text-4xl font-semibold text-balance lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("mt-4 text-4xl font-semibold text-balance lg:text-6xl", headingClassName), children: heading })),
|
|
980
1006
|
renderAction
|
|
981
1007
|
] }),
|
|
@@ -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:")) {
|
|
@@ -968,7 +994,7 @@ function HeroPortfolioCreative({
|
|
|
968
994
|
) }),
|
|
969
995
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
970
996
|
profile.name && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold ", children: profile.name }),
|
|
971
|
-
profile.title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm
|
|
997
|
+
profile.title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm", getTextColor(background, "muted")), children: profile.title })
|
|
972
998
|
] })
|
|
973
999
|
] });
|
|
974
1000
|
}, [profileSlot, profile, optixFlowConfig]);
|
|
@@ -1000,7 +1026,7 @@ function HeroPortfolioCreative({
|
|
|
1000
1026
|
Pressable,
|
|
1001
1027
|
{
|
|
1002
1028
|
href: link.href,
|
|
1003
|
-
className: cn("
|
|
1029
|
+
className: cn("hover:", getTextColor(background, "muted"), link.className),
|
|
1004
1030
|
children: link.icon ?? (link.iconName && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: link.iconName, size: 20 }))
|
|
1005
1031
|
},
|
|
1006
1032
|
index
|
|
@@ -1064,7 +1090,7 @@ function HeroPortfolioCreative({
|
|
|
1064
1090
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
|
|
1065
1091
|
renderProfile,
|
|
1066
1092
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1067
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg
|
|
1093
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
1068
1094
|
renderActions,
|
|
1069
1095
|
renderSocialLinks
|
|
1070
1096
|
] }),
|
|
@@ -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:")) {
|
|
@@ -947,7 +973,7 @@ function HeroPortfolioCreative({
|
|
|
947
973
|
) }),
|
|
948
974
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
949
975
|
profile.name && /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold ", children: profile.name }),
|
|
950
|
-
profile.title && /* @__PURE__ */ jsx("p", { className: "text-sm
|
|
976
|
+
profile.title && /* @__PURE__ */ jsx("p", { className: cn("text-sm", getTextColor(background, "muted")), children: profile.title })
|
|
951
977
|
] })
|
|
952
978
|
] });
|
|
953
979
|
}, [profileSlot, profile, optixFlowConfig]);
|
|
@@ -979,7 +1005,7 @@ function HeroPortfolioCreative({
|
|
|
979
1005
|
Pressable,
|
|
980
1006
|
{
|
|
981
1007
|
href: link.href,
|
|
982
|
-
className: cn("
|
|
1008
|
+
className: cn("hover:", getTextColor(background, "muted"), link.className),
|
|
983
1009
|
children: link.icon ?? (link.iconName && /* @__PURE__ */ jsx(DynamicIcon, { name: link.iconName, size: 20 }))
|
|
984
1010
|
},
|
|
985
1011
|
index
|
|
@@ -1043,7 +1069,7 @@ function HeroPortfolioCreative({
|
|
|
1043
1069
|
/* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
|
|
1044
1070
|
renderProfile,
|
|
1045
1071
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1046
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg
|
|
1072
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
1047
1073
|
renderActions,
|
|
1048
1074
|
renderSocialLinks
|
|
1049
1075
|
] }),
|
|
@@ -62,6 +62,54 @@ function getNestedCardTextColor(parentBg, options) {
|
|
|
62
62
|
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
63
63
|
return isDark ? "text-foreground" : "";
|
|
64
64
|
}
|
|
65
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
66
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
67
|
+
if (isDark) {
|
|
68
|
+
switch (variant) {
|
|
69
|
+
case "default":
|
|
70
|
+
return "text-foreground";
|
|
71
|
+
case "muted":
|
|
72
|
+
return "text-foreground/80";
|
|
73
|
+
case "subtle":
|
|
74
|
+
return "text-foreground/60";
|
|
75
|
+
case "accent":
|
|
76
|
+
return "text-accent-foreground";
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
switch (variant) {
|
|
80
|
+
case "default":
|
|
81
|
+
return "text-foreground";
|
|
82
|
+
case "muted":
|
|
83
|
+
return "text-muted-foreground";
|
|
84
|
+
case "subtle":
|
|
85
|
+
return "text-muted-foreground/70";
|
|
86
|
+
case "accent":
|
|
87
|
+
return "text-primary";
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function getBorderColor(parentBg, variant = "default", options) {
|
|
92
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
93
|
+
if (isDark) {
|
|
94
|
+
switch (variant) {
|
|
95
|
+
case "default":
|
|
96
|
+
return "border-foreground/20";
|
|
97
|
+
case "muted":
|
|
98
|
+
return "border-foreground/10";
|
|
99
|
+
case "accent":
|
|
100
|
+
return "border-accent-foreground";
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
switch (variant) {
|
|
104
|
+
case "default":
|
|
105
|
+
return "border-border";
|
|
106
|
+
case "muted":
|
|
107
|
+
return "border-muted";
|
|
108
|
+
case "accent":
|
|
109
|
+
return "border-primary";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
65
113
|
function normalizePhoneNumber(input) {
|
|
66
114
|
const trimmed = input.trim();
|
|
67
115
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -1025,15 +1073,15 @@ function HeroPricingComparison({
|
|
|
1025
1073
|
"rounded-2xl p-8",
|
|
1026
1074
|
getNestedCardBg(background, "card"),
|
|
1027
1075
|
getNestedCardTextColor(background),
|
|
1028
|
-
plan.isPopular ?
|
|
1076
|
+
plan.isPopular ? `relative border-2 ${getBorderColor(background, "accent")}` : "border border-border"
|
|
1029
1077
|
),
|
|
1030
1078
|
children: [
|
|
1031
1079
|
plan.isPopular && plan.popularBadge && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { children: plan.popularBadge }) }),
|
|
1032
1080
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold ", children: plan.name }),
|
|
1033
|
-
plan.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm
|
|
1081
|
+
plan.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2 text-sm", getTextColor(background, "muted")), children: plan.description }),
|
|
1034
1082
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-6", children: [
|
|
1035
1083
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-4xl font-bold ", children: plan.price }),
|
|
1036
|
-
plan.pricePeriod && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
1084
|
+
plan.pricePeriod && /* @__PURE__ */ jsxRuntime.jsx("span", { className: getTextColor(background, "muted"), children: plan.pricePeriod })
|
|
1037
1085
|
] }),
|
|
1038
1086
|
plan.action && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1039
1087
|
Pressable,
|
|
@@ -1066,7 +1114,7 @@ function HeroPricingComparison({
|
|
|
1066
1114
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl text-center", headerClassName), children: [
|
|
1067
1115
|
renderBadge,
|
|
1068
1116
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1069
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 text-lg
|
|
1117
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
|
|
1070
1118
|
] }),
|
|
1071
1119
|
renderPlans
|
|
1072
1120
|
] })
|
|
@@ -41,6 +41,54 @@ function getNestedCardTextColor(parentBg, options) {
|
|
|
41
41
|
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
42
42
|
return isDark ? "text-foreground" : "";
|
|
43
43
|
}
|
|
44
|
+
function getTextColor(parentBg, variant = "default", options) {
|
|
45
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
46
|
+
if (isDark) {
|
|
47
|
+
switch (variant) {
|
|
48
|
+
case "default":
|
|
49
|
+
return "text-foreground";
|
|
50
|
+
case "muted":
|
|
51
|
+
return "text-foreground/80";
|
|
52
|
+
case "subtle":
|
|
53
|
+
return "text-foreground/60";
|
|
54
|
+
case "accent":
|
|
55
|
+
return "text-accent-foreground";
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
switch (variant) {
|
|
59
|
+
case "default":
|
|
60
|
+
return "text-foreground";
|
|
61
|
+
case "muted":
|
|
62
|
+
return "text-muted-foreground";
|
|
63
|
+
case "subtle":
|
|
64
|
+
return "text-muted-foreground/70";
|
|
65
|
+
case "accent":
|
|
66
|
+
return "text-primary";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function getBorderColor(parentBg, variant = "default", options) {
|
|
71
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
72
|
+
if (isDark) {
|
|
73
|
+
switch (variant) {
|
|
74
|
+
case "default":
|
|
75
|
+
return "border-foreground/20";
|
|
76
|
+
case "muted":
|
|
77
|
+
return "border-foreground/10";
|
|
78
|
+
case "accent":
|
|
79
|
+
return "border-accent-foreground";
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
switch (variant) {
|
|
83
|
+
case "default":
|
|
84
|
+
return "border-border";
|
|
85
|
+
case "muted":
|
|
86
|
+
return "border-muted";
|
|
87
|
+
case "accent":
|
|
88
|
+
return "border-primary";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
44
92
|
function normalizePhoneNumber(input) {
|
|
45
93
|
const trimmed = input.trim();
|
|
46
94
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -1004,15 +1052,15 @@ function HeroPricingComparison({
|
|
|
1004
1052
|
"rounded-2xl p-8",
|
|
1005
1053
|
getNestedCardBg(background, "card"),
|
|
1006
1054
|
getNestedCardTextColor(background),
|
|
1007
|
-
plan.isPopular ?
|
|
1055
|
+
plan.isPopular ? `relative border-2 ${getBorderColor(background, "accent")}` : "border border-border"
|
|
1008
1056
|
),
|
|
1009
1057
|
children: [
|
|
1010
1058
|
plan.isPopular && plan.popularBadge && /* @__PURE__ */ jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsx(Badge, { children: plan.popularBadge }) }),
|
|
1011
1059
|
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold ", children: plan.name }),
|
|
1012
|
-
plan.description && /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm
|
|
1060
|
+
plan.description && /* @__PURE__ */ jsx("p", { className: cn("mt-2 text-sm", getTextColor(background, "muted")), children: plan.description }),
|
|
1013
1061
|
/* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
|
|
1014
1062
|
/* @__PURE__ */ jsx("span", { className: "text-4xl font-bold ", children: plan.price }),
|
|
1015
|
-
plan.pricePeriod && /* @__PURE__ */ jsx("span", { className: "
|
|
1063
|
+
plan.pricePeriod && /* @__PURE__ */ jsx("span", { className: getTextColor(background, "muted"), children: plan.pricePeriod })
|
|
1016
1064
|
] }),
|
|
1017
1065
|
plan.action && /* @__PURE__ */ jsx(
|
|
1018
1066
|
Pressable,
|
|
@@ -1045,7 +1093,7 @@ function HeroPricingComparison({
|
|
|
1045
1093
|
/* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-4xl text-center", headerClassName), children: [
|
|
1046
1094
|
renderBadge,
|
|
1047
1095
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1048
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-lg
|
|
1096
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
|
|
1049
1097
|
] }),
|
|
1050
1098
|
renderPlans
|
|
1051
1099
|
] })
|
|
@@ -32,6 +32,36 @@ 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
|
+
}
|
|
61
|
+
function getAccentColor(parentBg, options) {
|
|
62
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
63
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
64
|
+
}
|
|
35
65
|
function normalizePhoneNumber(input) {
|
|
36
66
|
const trimmed = input.trim();
|
|
37
67
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -958,7 +988,7 @@ function HeroProductShowcaseFloating({
|
|
|
958
988
|
}) {
|
|
959
989
|
const renderBadge = React.useMemo(() => {
|
|
960
990
|
if (badgeSlot) return badgeSlot;
|
|
961
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex w-fit items-center gap-2 rounded-full
|
|
991
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("inline-flex w-fit items-center gap-2 rounded-full px-4 py-2 text-sm font-medium", `${getAccentColor(background)}/10`, getAccentColor(background)), children: [
|
|
962
992
|
badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
|
|
963
993
|
badgeText && /* @__PURE__ */ jsxRuntime.jsx("span", { children: badgeText })
|
|
964
994
|
] });
|
|
@@ -998,7 +1028,7 @@ function HeroProductShowcaseFloating({
|
|
|
998
1028
|
) }),
|
|
999
1029
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1000
1030
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl font-bold ", children: floatingStat.value }),
|
|
1001
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs
|
|
1031
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-xs", getTextColor(background, "muted")), children: floatingStat.label })
|
|
1002
1032
|
] })
|
|
1003
1033
|
] }) });
|
|
1004
1034
|
}, [floatingStatSlot, floatingStat]);
|
|
@@ -1018,7 +1048,7 @@ function HeroProductShowcaseFloating({
|
|
|
1018
1048
|
)) }),
|
|
1019
1049
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm", children: [
|
|
1020
1050
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold ", children: userCount.count }),
|
|
1021
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
1051
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: getTextColor(background, "muted"), children: userCount.label })
|
|
1022
1052
|
] })
|
|
1023
1053
|
] }) });
|
|
1024
1054
|
}, [userCountSlot, userCount, optixFlowConfig]);
|
|
@@ -1052,7 +1082,7 @@ function HeroProductShowcaseFloating({
|
|
|
1052
1082
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("order-1 flex flex-col gap-8 lg:order-2", contentClassName), children: [
|
|
1053
1083
|
renderBadge,
|
|
1054
1084
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1055
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg
|
|
1085
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
1056
1086
|
renderActions
|
|
1057
1087
|
] })
|
|
1058
1088
|
] }) })
|
|
@@ -11,6 +11,36 @@ 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
|
+
}
|
|
40
|
+
function getAccentColor(parentBg, options) {
|
|
41
|
+
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
42
|
+
return isDark ? "text-accent-foreground" : "text-primary";
|
|
43
|
+
}
|
|
14
44
|
function normalizePhoneNumber(input) {
|
|
15
45
|
const trimmed = input.trim();
|
|
16
46
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -937,7 +967,7 @@ function HeroProductShowcaseFloating({
|
|
|
937
967
|
}) {
|
|
938
968
|
const renderBadge = useMemo(() => {
|
|
939
969
|
if (badgeSlot) return badgeSlot;
|
|
940
|
-
return /* @__PURE__ */ jsxs("div", { className: "inline-flex w-fit items-center gap-2 rounded-full
|
|
970
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("inline-flex w-fit items-center gap-2 rounded-full px-4 py-2 text-sm font-medium", `${getAccentColor(background)}/10`, getAccentColor(background)), children: [
|
|
941
971
|
badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
|
|
942
972
|
badgeText && /* @__PURE__ */ jsx("span", { children: badgeText })
|
|
943
973
|
] });
|
|
@@ -977,7 +1007,7 @@ function HeroProductShowcaseFloating({
|
|
|
977
1007
|
) }),
|
|
978
1008
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
979
1009
|
/* @__PURE__ */ jsx("div", { className: "text-2xl font-bold ", children: floatingStat.value }),
|
|
980
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs
|
|
1010
|
+
/* @__PURE__ */ jsx("div", { className: cn("text-xs", getTextColor(background, "muted")), children: floatingStat.label })
|
|
981
1011
|
] })
|
|
982
1012
|
] }) });
|
|
983
1013
|
}, [floatingStatSlot, floatingStat]);
|
|
@@ -997,7 +1027,7 @@ function HeroProductShowcaseFloating({
|
|
|
997
1027
|
)) }),
|
|
998
1028
|
/* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
|
|
999
1029
|
/* @__PURE__ */ jsx("div", { className: "font-semibold ", children: userCount.count }),
|
|
1000
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
1030
|
+
/* @__PURE__ */ jsx("div", { className: getTextColor(background, "muted"), children: userCount.label })
|
|
1001
1031
|
] })
|
|
1002
1032
|
] }) });
|
|
1003
1033
|
}, [userCountSlot, userCount, optixFlowConfig]);
|
|
@@ -1031,7 +1061,7 @@ function HeroProductShowcaseFloating({
|
|
|
1031
1061
|
/* @__PURE__ */ jsxs("div", { className: cn("order-1 flex flex-col gap-8 lg:order-2", contentClassName), children: [
|
|
1032
1062
|
renderBadge,
|
|
1033
1063
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
|
|
1034
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg
|
|
1064
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
1035
1065
|
renderActions
|
|
1036
1066
|
] })
|
|
1037
1067
|
] }) })
|