love-ui 1.2.19 → 1.2.21
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/chunk-VDMHIXDM.js +121 -0
- package/dist/index.js +156 -134
- package/dist/mcp-server.js +1 -1
- package/package.json +38 -3
- package/registry/default/blocks/404-1/components/not-found.tsx +1 -1
- package/registry/default/blocks/404-2/components/not-found.tsx +1 -1
- package/registry/default/blocks/auth1/components/auth-page.tsx +2 -3
- package/registry/default/blocks/auth2/components/auth.tsx +2 -3
- package/registry/default/blocks/auth3/components/auth-page.tsx +2 -3
- package/registry/default/blocks/contact1/components/contact.tsx +1 -1
- package/registry/default/blocks/contact2/components/contact.tsx +2 -2
- package/registry/default/blocks/contact3/components/contact.tsx +2 -3
- package/registry/default/blocks/contact4/components/contact.tsx +1 -1
- package/registry/default/blocks/contact5/components/contact.tsx +1 -1
- package/registry/default/blocks/cta-2/components/cta.tsx +1 -1
- package/registry/default/blocks/cta-3/components/cta.tsx +1 -1
- package/registry/default/blocks/cta-4/components/cta.tsx +1 -1
- package/registry/default/blocks/cta-5/components/cta.tsx +1 -1
- package/registry/default/blocks/faq-4/components/faq.tsx +7 -1
- package/registry/default/blocks/faq-5/components/faq.tsx +1 -1
- package/registry/default/blocks/features1/components/feature-section.tsx +6 -1
- package/registry/default/blocks/features2/components/feature-section.tsx +1 -1
- package/registry/default/blocks/features3/components/feature-section.tsx +6 -1
- package/registry/default/blocks/features4/components/feature-section.tsx +6 -1
- package/registry/default/blocks/features5/components/feature-section.tsx +8 -1
- package/registry/default/blocks/features6/components/feature-section.tsx +1 -1
- package/registry/default/blocks/footer1/components/footer.tsx +1 -2
- package/registry/default/blocks/footer2/components/footer.tsx +1 -3
- package/registry/default/blocks/footer3/components/footer.tsx +1 -4
- package/registry/default/blocks/footer4/components/footer.tsx +2 -5
- package/registry/default/blocks/footer5/components/footer.tsx +1 -6
- package/registry/default/blocks/footer6/app/page.tsx +1 -1
- package/registry/default/blocks/footer6/components/footer.tsx +1 -4
- package/registry/default/blocks/header1/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/header2/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/header3/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/header3/components/nav-links.tsx +16 -1
- package/registry/default/blocks/header3/components/ui/navigation-menu.tsx +1 -1
- package/registry/default/blocks/hero1/components/hero.tsx +1 -1
- package/registry/default/blocks/hero1/components/logo-cloud.tsx +43 -61
- package/registry/default/blocks/hero1/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/hero2/components/hero.tsx +1 -1
- package/registry/default/blocks/hero2/components/logo-cloud.tsx +38 -107
- package/registry/default/blocks/hero2/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/hero3/components/hero.tsx +1 -1
- package/registry/default/blocks/hero3/components/logo-cloud.tsx +39 -55
- package/registry/default/blocks/hero3/components/mobile-nav.tsx +1 -1
- package/registry/default/blocks/integrations1/components/integrations.tsx +45 -27
- package/registry/default/blocks/integrations2/components/integrations.tsx +46 -36
- package/registry/default/blocks/integrations3/components/integrations.tsx +53 -106
- package/registry/default/blocks/integrations4/components/integrations.tsx +53 -108
- package/registry/default/blocks/integrations5/components/integrations.tsx +51 -68
- package/registry/default/blocks/logo-cloud-1/components/logo-cloud.tsx +39 -54
- package/registry/default/blocks/logo-cloud-2/components/logo-cloud.tsx +39 -50
- package/registry/default/blocks/logo-cloud-3/components/logo-cloud.tsx +41 -56
- package/registry/default/blocks/logo-cloud-4/components/logo-cloud.tsx +41 -56
- package/registry/default/blocks/logo-cloud-5/components/logo-cloud.tsx +39 -55
- package/registry/default/blocks/onboarding1/components/onboarding.tsx +7 -7
- package/registry/default/blocks/onboarding2/components/onboarding.tsx +19 -9
- package/registry/default/blocks/onboarding3/components/onboarding.tsx +1 -1
- package/registry/default/blocks/onboarding4/components/onboarding.tsx +6 -6
- package/registry/default/blocks/onboarding6/components/onboarding.tsx +1 -1
- package/registry/default/blocks/onboarding7/components/onboarding.tsx +4 -4
- package/registry/default/blocks/pricing1/components/pricing.tsx +1 -1
- package/registry/default/blocks/pricing2/components/pricing.tsx +1 -1
- package/registry/default/blocks/pricing3/components/pricing.tsx +6 -1
- package/registry/default/blocks/pricing4/components/pricing.tsx +1 -1
- package/registry/default/blocks/stats11/components/stats.tsx +1 -1
- package/registry/default/blocks/stats2/components/stats.tsx +1 -1
- package/registry/default/blocks/stats4/components/stats.tsx +1 -1
- package/registry/default/blocks/stats6/components/stats.tsx +6 -1
- package/registry/default/blocks/stats7/components/stats.tsx +1 -1
- package/registry/default/blocks/testimonials3/components/testimonials.tsx +1 -1
- package/registry/default/blocks/testimonials4/components/testimonials.tsx +1 -1
- package/registry/default/examples/accordion-in-card.tsx +1 -1
- package/registry/default/examples/accordion-leading-icon.tsx +1 -1
- package/registry/default/examples/accordion-with-icons.tsx +1 -1
- package/registry/default/examples/alert-billing-notice.tsx +1 -1
- package/registry/default/examples/alert-error.tsx +1 -1
- package/registry/default/examples/alert-info.tsx +1 -1
- package/registry/default/examples/alert-success.tsx +1 -1
- package/registry/default/examples/alert-warning.tsx +1 -1
- package/registry/default/examples/alert-with-icon-action.tsx +1 -1
- package/registry/default/examples/alert-with-icon.tsx +1 -1
- package/registry/default/examples/autocomplete-async.tsx +1 -1
- package/registry/default/examples/avatar-badge-icons.tsx +5 -5
- package/registry/default/examples/avatar-empty-collaborators.tsx +1 -1
- package/registry/default/examples/avatar-loading.tsx +2 -2
- package/registry/default/examples/avatar-menu.tsx +6 -6
- package/registry/default/examples/badge-release-status.tsx +1 -1
- package/registry/default/examples/badge-with-icon.tsx +1 -1
- package/registry/default/examples/breadcrumb-buttons.tsx +5 -5
- package/registry/default/examples/breadcrumb-card.tsx +1 -1
- package/registry/default/examples/breadcrumb-workspace-path.tsx +1 -1
- package/registry/default/examples/button-command-bar.tsx +1 -1
- package/registry/default/examples/button-default-icons.tsx +1 -1
- package/registry/default/examples/button-demo.tsx +1 -1
- package/registry/default/examples/button-destructive-icons.tsx +1 -1
- package/registry/default/examples/button-destructive-outline-icons.tsx +1 -1
- package/registry/default/examples/button-ghost-icons.tsx +1 -1
- package/registry/default/examples/button-icon-lg.tsx +1 -1
- package/registry/default/examples/button-icon-sm.tsx +1 -1
- package/registry/default/examples/button-icon.tsx +1 -1
- package/registry/default/examples/button-link-icons.tsx +1 -1
- package/registry/default/examples/button-loading.tsx +1 -1
- package/registry/default/examples/button-outline-icons.tsx +1 -1
- package/registry/default/examples/button-secondary-icons.tsx +1 -1
- package/registry/default/examples/button-theme-toggle.tsx +1 -1
- package/registry/default/examples/button-with-icon.tsx +1 -1
- package/registry/default/examples/card-help-link.tsx +1 -1
- package/registry/default/examples/card-help-menu.tsx +7 -7
- package/registry/default/examples/card-image-centered.tsx +1 -1
- package/registry/default/examples/card-image-feature.tsx +1 -1
- package/registry/default/examples/card-metric-actions.tsx +9 -9
- package/registry/default/examples/card-metric-summary.tsx +1 -1
- package/registry/default/examples/card-resource-link.tsx +1 -1
- package/registry/default/examples/card-usage-expandable.tsx +1 -1
- package/registry/default/examples/checkbox-notification-row.tsx +1 -1
- package/registry/default/examples/collapsible-demo.tsx +1 -1
- package/registry/default/examples/collapsible-release-notes.tsx +1 -1
- package/registry/default/examples/combobox-with-inner-input.tsx +1 -1
- package/registry/default/examples/empty-demo.tsx +1 -1
- package/registry/default/examples/empty-filtered-results.tsx +1 -1
- package/registry/default/examples/empty-inbox-zero.tsx +1 -1
- package/registry/default/examples/empty-upload-queue.tsx +1 -1
- package/registry/default/examples/form.tsx +7 -7
- package/registry/default/examples/group-demo.tsx +1 -1
- package/registry/default/examples/group-toolbar-actions.tsx +1 -1
- package/registry/default/examples/group-with-input.tsx +1 -1
- package/registry/default/examples/input-search-inline.tsx +1 -1
- package/registry/default/examples/menu-demo.tsx +6 -6
- package/registry/default/examples/menu-project-actions.tsx +1 -1
- package/registry/default/examples/popover-with-close.tsx +1 -1
- package/registry/default/examples/preview-card-demo.tsx +1 -1
- package/registry/default/examples/preview-card-repository.tsx +1 -1
- package/registry/default/examples/skeleton-demo.tsx +1 -1
- package/registry/default/examples/switch-privacy-mode.tsx +1 -1
- package/registry/default/examples/table.tsx +1 -1
- package/registry/default/examples/toggle-group-demo.tsx +1 -1
- package/registry/default/examples/toggle-group-disabled.tsx +1 -1
- package/registry/default/examples/toggle-group-lg.tsx +1 -1
- package/registry/default/examples/toggle-group-multiple.tsx +1 -1
- package/registry/default/examples/toggle-group-outline-with-separator.tsx +1 -1
- package/registry/default/examples/toggle-group-outline.tsx +1 -1
- package/registry/default/examples/toggle-group-sm.tsx +1 -1
- package/registry/default/examples/toggle-group-with-disabled-item.tsx +1 -1
- package/registry/default/examples/toggle-icon-group.tsx +1 -1
- package/registry/default/examples/toggle-view-mode.tsx +1 -1
- package/registry/default/examples/toggle-with-icon.tsx +1 -1
- package/registry/default/examples/toolbar-canvas-controls.tsx +1 -1
- package/registry/default/examples/toolbar-demo.tsx +6 -6
- package/registry/default/examples/toolbar-density-controls.tsx +1 -1
- package/registry/default/examples/toolbar-media-controls.tsx +1 -1
- package/registry/default/examples/tooltip-grouped.tsx +1 -1
- package/registry/default/examples/tooltip-icon-row.tsx +1 -1
- package/registry/default/icons/package.json +1 -1
- package/registry/default/icons/scripts/generate-registry.ts +5 -5
- package/registry/default/logos/package.json +1 -1
- package/registry/default/logos/scripts/generate-registry.ts +5 -5
- package/registry/default/logos/src/generated/ai/index.tsx +3 -3
- package/registry/default/logos/src/generated/index.tsx +4 -4
- package/registry/default/ui/accordion.tsx +1 -1
- package/registry/default/ui/autocomplete.tsx +1 -1
- package/registry/default/ui/breadcrumb.tsx +1 -1
- package/registry/default/ui/combobox.tsx +1 -1
- package/registry/default/ui/dialog.tsx +1 -1
- package/registry/default/ui/dropdown-menu.tsx +1 -1
- package/registry/default/ui/menu.tsx +1 -1
- package/registry/default/ui/number-field.tsx +1 -1
- package/registry/default/ui/pagination.tsx +4 -4
- package/registry/default/ui/select.tsx +4 -4
- package/registry/default/ui/sheet.tsx +1 -1
- package/registry/default/ui/sidebar.tsx +1 -1
- package/registry/default/ui/toast.tsx +6 -6
- package/registry/default/vectors/package.json +1 -1
- package/registry/default/vectors/scripts/generate-registry.ts +5 -5
- package/registry/default/blocks/auth1/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/auth1/components/icons/google-icon.tsx +0 -14
- package/registry/default/blocks/auth2/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/auth2/components/icons/google-icon.tsx +0 -14
- package/registry/default/blocks/auth3/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/auth3/components/icons/google-icon.tsx +0 -14
- package/registry/default/blocks/contact2/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/contact3/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/contact3/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer1/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/footer1/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer2/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/footer2/components/icons/instagram-icon.tsx +0 -12
- package/registry/default/blocks/footer2/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer3/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/footer3/components/icons/instagram-icon.tsx +0 -12
- package/registry/default/blocks/footer3/components/icons/linkedin-icon.tsx +0 -12
- package/registry/default/blocks/footer3/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer4/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/footer4/components/icons/instagram-icon.tsx +0 -12
- package/registry/default/blocks/footer4/components/icons/linkedin-icon.tsx +0 -12
- package/registry/default/blocks/footer4/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer5/components/icons/apple-icon.tsx +0 -18
- package/registry/default/blocks/footer5/components/icons/facebook-icon.tsx +0 -12
- package/registry/default/blocks/footer5/components/icons/google-play-icon.tsx +0 -10
- package/registry/default/blocks/footer5/components/icons/instagram-icon.tsx +0 -12
- package/registry/default/blocks/footer5/components/icons/linkedin-icon.tsx +0 -12
- package/registry/default/blocks/footer5/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/footer6/components/icons/apple-icon.tsx +0 -18
- package/registry/default/blocks/footer6/components/icons/facebook-icon.tsx +0 -12
- package/registry/default/blocks/footer6/components/icons/github-icon.tsx +0 -10
- package/registry/default/blocks/footer6/components/icons/google-play-icon.tsx +0 -10
- package/registry/default/blocks/footer6/components/icons/instagram-icon.tsx +0 -12
- package/registry/default/blocks/footer6/components/icons/linkedin-icon.tsx +0 -12
- package/registry/default/blocks/footer6/components/icons/x-icon.tsx +0 -12
- package/registry/default/blocks/hero1/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/hero1/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/hero1/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/hero1/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/hero1/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/hero1/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/hero1/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/hero1/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/hero2/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/hero2/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/hero2/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/hero3/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/hero3/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/hero3/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/adobe.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/canva.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/cursor.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/gmail.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/notion.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/planetscale.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/polar.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/supabase.svg +0 -1
- package/registry/default/blocks/integrations1/components/logos/vercel.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/adobe.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/canva.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/cursor.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/gmail.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/notion.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/planetscale.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/polar.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/supabase.svg +0 -1
- package/registry/default/blocks/integrations2/components/logos/vercel.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/adobe.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/canva.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/cursor.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/gmail.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/notion.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/planetscale.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/polar.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/supabase.svg +0 -1
- package/registry/default/blocks/integrations3/components/logos/vercel.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/adobe.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/canva.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/cursor.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/gmail.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/notion.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/planetscale.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/polar.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/supabase.svg +0 -1
- package/registry/default/blocks/integrations4/components/logos/vercel.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/adobe.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/canva.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/cursor.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/gmail.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/notion.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/planetscale.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/polar.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/supabase.svg +0 -1
- package/registry/default/blocks/integrations5/components/logos/vercel.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/logo-cloud-1/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/logo-cloud-1/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-1/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/logo-cloud-2/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/logo-cloud-2/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-2/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/logo-cloud-3/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/logo-cloud-3/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-3/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/logo-cloud-4/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/logo-cloud-4/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-4/components/logos/vercel-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/claude-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/clerk-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/github-wordmark.svg +0 -6
- package/registry/default/blocks/logo-cloud-5/components/logos/nvidia-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/openai-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/supabase-wordmark.svg +0 -23
- package/registry/default/blocks/logo-cloud-5/components/logos/turso-wordmark.svg +0 -1
- package/registry/default/blocks/logo-cloud-5/components/logos/vercel-wordmark.svg +0 -1
|
@@ -1,34 +1,30 @@
|
|
|
1
|
+
import type { ElementType, SVGProps } from "react";
|
|
2
|
+
import {
|
|
3
|
+
Cursor as CursorLogo,
|
|
4
|
+
GoogleGmail as GmailLogo,
|
|
5
|
+
Neon as NeonLogo,
|
|
6
|
+
PlanetScale as PlanetscaleLogo,
|
|
7
|
+
Polar as PolarLogo,
|
|
8
|
+
Vercel as VercelLogo,
|
|
9
|
+
} from "love-ui/logos";
|
|
10
|
+
|
|
1
11
|
import { cn } from "@/lib/utils";
|
|
2
12
|
import { Button } from "@/registry/default/ui/button";
|
|
3
13
|
import { FullWidthDivider } from "./full-width-divider";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import PlanetscaleLogo from "./logos/planetscale.svg";
|
|
7
|
-
import PolarLogo from "./logos/polar.svg";
|
|
8
|
-
import SupabaseLogo from "./logos/supabase.svg";
|
|
9
|
-
import VercelLogo from "./logos/vercel.svg";
|
|
14
|
+
|
|
15
|
+
type LogoComponent = ElementType<SVGProps<SVGSVGElement>>;
|
|
10
16
|
|
|
11
17
|
type LogoType = {
|
|
12
|
-
|
|
18
|
+
Component: LogoComponent;
|
|
13
19
|
alt: string;
|
|
14
20
|
isInvertable?: boolean;
|
|
15
21
|
};
|
|
16
|
-
|
|
17
|
-
type TileData = {
|
|
18
|
-
row: number;
|
|
19
|
-
col: number;
|
|
20
|
-
logo?: LogoType;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const getLogoSrc = (source: LogoType["src"]) =>
|
|
24
|
-
typeof source === "string" ? source : source.src;
|
|
22
|
+
type TileData = { row: number; col: number; logo?: LogoType };
|
|
25
23
|
|
|
26
24
|
export function Integrations() {
|
|
27
25
|
return (
|
|
28
26
|
<div className="relative mx-auto grid max-w-4xl grid-cols-1 gap-12 border-x md:grid-cols-2 md:items-center">
|
|
29
27
|
<FullWidthDivider className="-top-px" />
|
|
30
|
-
|
|
31
|
-
{/* Left Content */}
|
|
32
28
|
<div className="p-4 md:p-6">
|
|
33
29
|
<div className="space-y-4">
|
|
34
30
|
<h2 className="font-medium text-3xl text-foreground tracking-tight sm:text-4xl">
|
|
@@ -41,11 +37,8 @@ export function Integrations() {
|
|
|
41
37
|
<Button size="sm">Explore LoveUI integrations</Button>
|
|
42
38
|
</div>
|
|
43
39
|
</div>
|
|
44
|
-
|
|
45
|
-
{/* Right Content - Visual */}
|
|
46
40
|
<div className="place-items-end">
|
|
47
41
|
<div className="relative size-80">
|
|
48
|
-
{/* Grid Background */}
|
|
49
42
|
<div
|
|
50
43
|
className={cn(
|
|
51
44
|
"absolute inset-0 size-full",
|
|
@@ -54,13 +47,14 @@ export function Integrations() {
|
|
|
54
47
|
"mask-[radial-gradient(ellipse_at_center,black,black,transparent)]"
|
|
55
48
|
)}
|
|
56
49
|
/>
|
|
57
|
-
|
|
58
50
|
{tiles.map((tile) => (
|
|
59
|
-
<IntegrationCard
|
|
51
|
+
<IntegrationCard
|
|
52
|
+
key={String(tile.row) + "_" + String(tile.col)}
|
|
53
|
+
{...tile}
|
|
54
|
+
/>
|
|
60
55
|
))}
|
|
61
56
|
</div>
|
|
62
57
|
</div>
|
|
63
|
-
|
|
64
58
|
<FullWidthDivider className="-bottom-px" />
|
|
65
59
|
</div>
|
|
66
60
|
);
|
|
@@ -71,120 +65,73 @@ function IntegrationCard({ row, col, logo }: TileData) {
|
|
|
71
65
|
<div
|
|
72
66
|
className={cn(
|
|
73
67
|
"absolute flex size-16 items-center justify-center",
|
|
74
|
-
logo ? "bg-secondary/40" : ""
|
|
68
|
+
logo ? "bg-secondary/40" : ""
|
|
75
69
|
)}
|
|
76
|
-
style={{
|
|
77
|
-
left: col * 64, // 64px cell
|
|
78
|
-
top: row * 64,
|
|
79
|
-
}}
|
|
70
|
+
style={{ left: col * 64, top: row * 64 }}
|
|
80
71
|
>
|
|
81
72
|
{logo && (
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"pointer-events-none size-8 select-none object-contain p-1",
|
|
86
|
-
logo.isInvertable && "dark:invert"
|
|
87
|
-
)}
|
|
88
|
-
height={40}
|
|
89
|
-
src={getLogoSrc(logo.src)}
|
|
90
|
-
width={40}
|
|
73
|
+
<LogoAsset
|
|
74
|
+
className="pointer-events-none size-9 select-none object-contain p-1"
|
|
75
|
+
logo={logo}
|
|
91
76
|
/>
|
|
92
77
|
)}
|
|
93
78
|
</div>
|
|
94
79
|
);
|
|
95
80
|
}
|
|
96
81
|
|
|
97
|
-
|
|
98
|
-
|
|
82
|
+
function LogoAsset({
|
|
83
|
+
logo,
|
|
84
|
+
className,
|
|
85
|
+
}: {
|
|
86
|
+
logo: LogoType;
|
|
87
|
+
className: string;
|
|
88
|
+
}) {
|
|
89
|
+
const Component = logo.Component;
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<Component
|
|
93
|
+
aria-label={logo.alt}
|
|
94
|
+
className={cn(className, logo.isInvertable && "dark:invert")}
|
|
95
|
+
role="img"
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
99
100
|
const tiles: TileData[] = [
|
|
100
|
-
// Row 0
|
|
101
101
|
{
|
|
102
102
|
row: 0,
|
|
103
103
|
col: 1,
|
|
104
|
-
logo: {
|
|
105
|
-
src: VercelLogo,
|
|
106
|
-
alt: "Vercel Logo",
|
|
107
|
-
isInvertable: true,
|
|
108
|
-
},
|
|
104
|
+
logo: { Component: VercelLogo, alt: "Vercel Logo", isInvertable: true },
|
|
109
105
|
},
|
|
110
106
|
{
|
|
111
107
|
row: 0,
|
|
112
108
|
col: 3,
|
|
113
|
-
logo: {
|
|
114
|
-
src: CursorLogo,
|
|
115
|
-
alt: "Cursor Logo",
|
|
116
|
-
isInvertable: true,
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
// Row 1
|
|
121
|
-
{ row: 1, col: 0 }, // Empty
|
|
122
|
-
{
|
|
123
|
-
row: 1,
|
|
124
|
-
col: 2,
|
|
125
|
-
logo: {
|
|
126
|
-
src: SupabaseLogo,
|
|
127
|
-
alt: "Supabase Logo",
|
|
128
|
-
},
|
|
109
|
+
logo: { Component: CursorLogo, alt: "Cursor Logo", isInvertable: true },
|
|
129
110
|
},
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
logo: {
|
|
134
|
-
src: GmailLogo,
|
|
135
|
-
alt: "Gmail Logo",
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
// Row 2
|
|
111
|
+
{ row: 1, col: 0 },
|
|
112
|
+
{ row: 1, col: 2, logo: { Component: NeonLogo, alt: "Neon Logo" } },
|
|
113
|
+
{ row: 1, col: 4, logo: { Component: GmailLogo, alt: "Gmail Logo" } },
|
|
140
114
|
{
|
|
141
115
|
row: 2,
|
|
142
116
|
col: 1,
|
|
143
117
|
logo: {
|
|
144
|
-
|
|
118
|
+
Component: PlanetscaleLogo,
|
|
145
119
|
alt: "Planetscale Logo",
|
|
146
120
|
isInvertable: true,
|
|
147
121
|
},
|
|
148
122
|
},
|
|
149
|
-
{ row: 2, col: 3 },
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
{ row: 3, col: 0 }, // Empty
|
|
154
|
-
{
|
|
155
|
-
row: 3,
|
|
156
|
-
col: 2,
|
|
157
|
-
logo: {
|
|
158
|
-
src: PolarLogo,
|
|
159
|
-
alt: "Polar Logo",
|
|
160
|
-
},
|
|
161
|
-
},
|
|
123
|
+
{ row: 2, col: 3 },
|
|
124
|
+
{ row: 3, col: 0 },
|
|
125
|
+
{ row: 3, col: 2, logo: { Component: PolarLogo, alt: "Polar Logo" } },
|
|
162
126
|
{
|
|
163
127
|
row: 3,
|
|
164
128
|
col: 4,
|
|
165
|
-
logo: {
|
|
166
|
-
src: VercelLogo,
|
|
167
|
-
alt: "Vercel Logo",
|
|
168
|
-
isInvertable: true,
|
|
169
|
-
},
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
// Row 4
|
|
173
|
-
{
|
|
174
|
-
row: 4,
|
|
175
|
-
col: 1,
|
|
176
|
-
logo: {
|
|
177
|
-
src: SupabaseLogo,
|
|
178
|
-
alt: "Supabase Logo",
|
|
179
|
-
},
|
|
129
|
+
logo: { Component: VercelLogo, alt: "Vercel Logo", isInvertable: true },
|
|
180
130
|
},
|
|
131
|
+
{ row: 4, col: 1, logo: { Component: NeonLogo, alt: "Neon Logo" } },
|
|
181
132
|
{
|
|
182
133
|
row: 4,
|
|
183
134
|
col: 3,
|
|
184
|
-
logo: {
|
|
185
|
-
src: CursorLogo,
|
|
186
|
-
alt: "Cursor Logo",
|
|
187
|
-
isInvertable: true,
|
|
188
|
-
},
|
|
135
|
+
logo: { Component: CursorLogo, alt: "Cursor Logo", isInvertable: true },
|
|
189
136
|
},
|
|
190
137
|
];
|
|
@@ -1,33 +1,27 @@
|
|
|
1
|
+
import type { ElementType, SVGProps } from "react";
|
|
2
|
+
import {
|
|
3
|
+
Cursor as CursorLogo,
|
|
4
|
+
GoogleGmail as GmailLogo,
|
|
5
|
+
Neon as NeonLogo,
|
|
6
|
+
PlanetScale as PlanetscaleLogo,
|
|
7
|
+
Polar as PolarLogo,
|
|
8
|
+
Vercel as VercelLogo,
|
|
9
|
+
} from "love-ui/logos";
|
|
10
|
+
|
|
1
11
|
import { cn } from "@/lib/utils";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import CursorLogo from "./logos/cursor.svg";
|
|
5
|
-
import GmailLogo from "./logos/gmail.svg";
|
|
6
|
-
import NotionLogo from "./logos/notion.svg";
|
|
7
|
-
import PlanetscaleLogo from "./logos/planetscale.svg";
|
|
8
|
-
import PolarLogo from "./logos/polar.svg";
|
|
9
|
-
import SupabaseLogo from "./logos/supabase.svg";
|
|
10
|
-
import VercelLogo from "./logos/vercel.svg";
|
|
12
|
+
|
|
13
|
+
type LogoComponent = ElementType<SVGProps<SVGSVGElement>>;
|
|
11
14
|
|
|
12
15
|
type LogoType = {
|
|
13
|
-
|
|
16
|
+
Component: LogoComponent;
|
|
14
17
|
alt: string;
|
|
15
18
|
isInvertable?: boolean;
|
|
16
19
|
};
|
|
17
|
-
|
|
18
|
-
type TileData = {
|
|
19
|
-
row: number;
|
|
20
|
-
col: number;
|
|
21
|
-
logo?: LogoType;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const getLogoSrc = (source: LogoType["src"]) =>
|
|
25
|
-
typeof source === "string" ? source : source.src;
|
|
20
|
+
type TileData = { row: number; col: number; logo?: LogoType };
|
|
26
21
|
|
|
27
22
|
export function Integrations() {
|
|
28
23
|
return (
|
|
29
24
|
<div className="mx-auto grid max-w-5xl grid-cols-1 gap-12 p-4 md:grid-cols-2 md:items-center">
|
|
30
|
-
{/* Left Content */}
|
|
31
25
|
<div className="max-w-xl space-y-5">
|
|
32
26
|
<h2 className="font-medium text-3xl text-foreground tracking-tight sm:text-4xl md:text-5xl">
|
|
33
27
|
LoveUI fits your product stack
|
|
@@ -37,12 +31,13 @@ export function Integrations() {
|
|
|
37
31
|
data, docs, billing, and design collaboration.
|
|
38
32
|
</p>
|
|
39
33
|
</div>
|
|
40
|
-
|
|
41
|
-
{/* Right Content - Visual */}
|
|
42
34
|
<div className="place-items-end">
|
|
43
35
|
<div className="mask-[radial-gradient(ellipse_at_center,black,black,transparent)] relative size-90">
|
|
44
36
|
{tiles.map((tile) => (
|
|
45
|
-
<IntegrationCard
|
|
37
|
+
<IntegrationCard
|
|
38
|
+
key={String(tile.row) + "_" + String(tile.col)}
|
|
39
|
+
{...tile}
|
|
40
|
+
/>
|
|
46
41
|
))}
|
|
47
42
|
</div>
|
|
48
43
|
</div>
|
|
@@ -55,123 +50,73 @@ function IntegrationCard({ row, col, logo }: TileData) {
|
|
|
55
50
|
<div
|
|
56
51
|
className={cn(
|
|
57
52
|
"absolute flex size-18 items-center justify-center rounded-md border",
|
|
58
|
-
logo
|
|
59
|
-
? "bg-card shadow-xs dark:bg-card/60"
|
|
60
|
-
: "bg-secondary/30 dark:bg-background" // Styling for empty tiles
|
|
53
|
+
logo ? "bg-card shadow-xs dark:bg-card/60" : "bg-secondary/30 dark:bg-background"
|
|
61
54
|
)}
|
|
62
|
-
style={{
|
|
63
|
-
left: col * 72, // 72px cell
|
|
64
|
-
top: row * 72,
|
|
65
|
-
}}
|
|
55
|
+
style={{ left: col * 72, top: row * 72 }}
|
|
66
56
|
>
|
|
67
57
|
{logo && (
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"pointer-events-none size-8 select-none object-contain p-1",
|
|
72
|
-
logo.isInvertable && "dark:invert"
|
|
73
|
-
)}
|
|
74
|
-
height={40}
|
|
75
|
-
src={getLogoSrc(logo.src)}
|
|
76
|
-
width={40}
|
|
58
|
+
<LogoAsset
|
|
59
|
+
className="pointer-events-none size-9 select-none object-contain p-1"
|
|
60
|
+
logo={logo}
|
|
77
61
|
/>
|
|
78
62
|
)}
|
|
79
63
|
</div>
|
|
80
64
|
);
|
|
81
65
|
}
|
|
82
66
|
|
|
83
|
-
|
|
84
|
-
|
|
67
|
+
function LogoAsset({
|
|
68
|
+
logo,
|
|
69
|
+
className,
|
|
70
|
+
}: {
|
|
71
|
+
logo: LogoType;
|
|
72
|
+
className: string;
|
|
73
|
+
}) {
|
|
74
|
+
const Component = logo.Component;
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<Component
|
|
78
|
+
aria-label={logo.alt}
|
|
79
|
+
className={cn(className, logo.isInvertable && "dark:invert")}
|
|
80
|
+
role="img"
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
85
|
const tiles: TileData[] = [
|
|
86
|
-
// Row 0
|
|
87
86
|
{
|
|
88
87
|
row: 0,
|
|
89
88
|
col: 1,
|
|
89
|
+
logo: { Component: VercelLogo, alt: "Vercel Logo", isInvertable: true },
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
row: 0,
|
|
93
93
|
col: 3,
|
|
94
|
-
logo: {
|
|
95
|
-
src: NotionLogo,
|
|
96
|
-
alt: "Notion Logo",
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
// Row 1
|
|
101
|
-
{ row: 1, col: 0 }, // Empty
|
|
102
|
-
{
|
|
103
|
-
row: 1,
|
|
104
|
-
col: 2,
|
|
105
|
-
logo: {
|
|
106
|
-
src: CursorLogo,
|
|
107
|
-
alt: "Cursor Logo",
|
|
108
|
-
isInvertable: true,
|
|
109
|
-
},
|
|
94
|
+
logo: { Component: CursorLogo, alt: "Cursor Logo", isInvertable: true },
|
|
110
95
|
},
|
|
111
|
-
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
logo: {
|
|
115
|
-
src: VercelLogo,
|
|
116
|
-
alt: "Vercel Logo",
|
|
117
|
-
isInvertable: true,
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
// Row 2
|
|
96
|
+
{ row: 1, col: 0 },
|
|
97
|
+
{ row: 1, col: 2, logo: { Component: NeonLogo, alt: "Neon Logo" } },
|
|
98
|
+
{ row: 1, col: 4, logo: { Component: GmailLogo, alt: "Gmail Logo" } },
|
|
122
99
|
{
|
|
123
100
|
row: 2,
|
|
124
101
|
col: 1,
|
|
125
102
|
logo: {
|
|
126
|
-
|
|
103
|
+
Component: PlanetscaleLogo,
|
|
127
104
|
alt: "Planetscale Logo",
|
|
128
105
|
isInvertable: true,
|
|
129
106
|
},
|
|
130
107
|
},
|
|
131
|
-
{
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
logo: {
|
|
135
|
-
src: GmailLogo,
|
|
136
|
-
alt: "Gmail Logo",
|
|
137
|
-
},
|
|
138
|
-
}, // Empty
|
|
139
|
-
|
|
140
|
-
// Row 3
|
|
141
|
-
|
|
142
|
-
{ row: 3, col: 0 }, // Empty
|
|
143
|
-
{
|
|
144
|
-
row: 3,
|
|
145
|
-
col: 2,
|
|
146
|
-
logo: {
|
|
147
|
-
src: SupabaseLogo,
|
|
148
|
-
alt: "Supabase Logo",
|
|
149
|
-
},
|
|
150
|
-
},
|
|
108
|
+
{ row: 2, col: 3 },
|
|
109
|
+
{ row: 3, col: 0 },
|
|
110
|
+
{ row: 3, col: 2, logo: { Component: PolarLogo, alt: "Polar Logo" } },
|
|
151
111
|
{
|
|
152
112
|
row: 3,
|
|
153
113
|
col: 4,
|
|
154
|
-
logo: {
|
|
155
|
-
src: CanvaLogo,
|
|
156
|
-
alt: "Canva Logo",
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
|
|
160
|
-
// Row 4
|
|
161
|
-
{
|
|
162
|
-
row: 4,
|
|
163
|
-
col: 1,
|
|
164
|
-
logo: {
|
|
165
|
-
src: AdobeLogo,
|
|
166
|
-
alt: "Adobe Logo",
|
|
167
|
-
},
|
|
114
|
+
logo: { Component: VercelLogo, alt: "Vercel Logo", isInvertable: true },
|
|
168
115
|
},
|
|
116
|
+
{ row: 4, col: 1, logo: { Component: NeonLogo, alt: "Neon Logo" } },
|
|
169
117
|
{
|
|
170
118
|
row: 4,
|
|
171
119
|
col: 3,
|
|
172
|
-
logo: {
|
|
173
|
-
src: PolarLogo,
|
|
174
|
-
alt: "Polar Logo",
|
|
175
|
-
},
|
|
120
|
+
logo: { Component: CursorLogo, alt: "Cursor Logo", isInvertable: true },
|
|
176
121
|
},
|
|
177
122
|
];
|
|
@@ -1,66 +1,36 @@
|
|
|
1
|
+
import type { ElementType, SVGProps } from "react";
|
|
2
|
+
import {
|
|
3
|
+
Cursor as CursorLogo,
|
|
4
|
+
GoogleGmail as GmailLogo,
|
|
5
|
+
Neon as NeonLogo,
|
|
6
|
+
Notion as NotionLogo,
|
|
7
|
+
PlanetScale as PlanetscaleLogo,
|
|
8
|
+
Polar as PolarLogo,
|
|
9
|
+
Vercel as VercelLogo,
|
|
10
|
+
} from "love-ui/logos";
|
|
11
|
+
|
|
1
12
|
import { cn } from "@/lib/utils";
|
|
2
13
|
import { Button } from "@/registry/default/ui/button";
|
|
3
|
-
import { ArrowUpRightIcon } from "
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import NotionLogo from "./logos/notion.svg";
|
|
7
|
-
import PlanetscaleLogo from "./logos/planetscale.svg";
|
|
8
|
-
import PolarLogo from "./logos/polar.svg";
|
|
9
|
-
import SupabaseLogo from "./logos/supabase.svg";
|
|
10
|
-
import VercelLogo from "./logos/vercel.svg";
|
|
14
|
+
import { ArrowUpRight as ArrowUpRightIcon } from "love-ui/icons";
|
|
15
|
+
|
|
16
|
+
type LogoComponent = ElementType<SVGProps<SVGSVGElement>>;
|
|
11
17
|
|
|
12
18
|
type Integration = {
|
|
13
|
-
|
|
19
|
+
Component?: LogoComponent;
|
|
14
20
|
name: string;
|
|
15
21
|
isInvertable?: boolean;
|
|
16
22
|
};
|
|
17
|
-
|
|
18
|
-
const getLogoSrc = (source: NonNullable<Integration["src"]>) =>
|
|
19
|
-
typeof source === "string" ? source : source.src;
|
|
20
|
-
|
|
21
23
|
const data: Integration[] = [
|
|
22
|
-
{
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
|
|
32
|
-
src: CursorLogo,
|
|
33
|
-
isInvertable: true,
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
src: SupabaseLogo,
|
|
37
|
-
name: "Supabase",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: "PlanetScale",
|
|
41
|
-
src: PlanetscaleLogo,
|
|
42
|
-
isInvertable: true,
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: "Notion",
|
|
46
|
-
src: NotionLogo,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: "Gmail",
|
|
50
|
-
src: GmailLogo,
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: "Polar",
|
|
54
|
-
src: PolarLogo,
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
name: "Cursor",
|
|
58
|
-
src: CursorLogo,
|
|
59
|
-
isInvertable: true,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: "Empty 2",
|
|
63
|
-
},
|
|
24
|
+
{ name: "Empty 1" },
|
|
25
|
+
{ name: "Vercel", Component: VercelLogo, isInvertable: true },
|
|
26
|
+
{ name: "Cursor", Component: CursorLogo, isInvertable: true },
|
|
27
|
+
{ name: "Neon", Component: NeonLogo },
|
|
28
|
+
{ name: "PlanetScale", Component: PlanetscaleLogo, isInvertable: true },
|
|
29
|
+
{ name: "Notion", Component: NotionLogo },
|
|
30
|
+
{ name: "Gmail", Component: GmailLogo },
|
|
31
|
+
{ name: "Polar", Component: PolarLogo },
|
|
32
|
+
{ name: "Cursor", Component: CursorLogo, isInvertable: true },
|
|
33
|
+
{ name: "Empty 2" },
|
|
64
34
|
];
|
|
65
35
|
|
|
66
36
|
export function Integrations() {
|
|
@@ -74,28 +44,21 @@ export function Integrations() {
|
|
|
74
44
|
Use familiar tools around your copied components, blocks, and docs.
|
|
75
45
|
</p>
|
|
76
46
|
</div>
|
|
77
|
-
|
|
78
47
|
<div className="flex flex-col justify-center rounded-full border bg-secondary dark:bg-secondary/10">
|
|
79
48
|
<div className="mask-l-from-90 mask-r-from-90 flex items-center justify-center -space-x-4 p-1">
|
|
80
49
|
{data.map((item, index) => (
|
|
81
50
|
<div
|
|
82
51
|
className={cn(
|
|
83
52
|
"relative z-0 transition-transform",
|
|
84
|
-
item.
|
|
53
|
+
item.Component ? "hover:z-10 hover:scale-110" : ""
|
|
85
54
|
)}
|
|
86
|
-
key={
|
|
55
|
+
key={item.name + "-" + String(index)}
|
|
87
56
|
>
|
|
88
57
|
<div className="flex size-12 items-center justify-center overflow-hidden rounded-full border bg-card shadow-sm md:size-16">
|
|
89
|
-
{item.
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"pointer-events-auto size-5 select-none object-contain md:size-6",
|
|
94
|
-
item.isInvertable && "dark:invert"
|
|
95
|
-
)}
|
|
96
|
-
height="auto"
|
|
97
|
-
src={getLogoSrc(item.src)}
|
|
98
|
-
width="auto"
|
|
58
|
+
{item.Component && (
|
|
59
|
+
<LogoAsset
|
|
60
|
+
className="pointer-events-auto size-6 select-none object-contain md:size-7"
|
|
61
|
+
integration={item}
|
|
99
62
|
/>
|
|
100
63
|
)}
|
|
101
64
|
</div>
|
|
@@ -110,3 +73,23 @@ export function Integrations() {
|
|
|
110
73
|
</div>
|
|
111
74
|
);
|
|
112
75
|
}
|
|
76
|
+
|
|
77
|
+
function LogoAsset({
|
|
78
|
+
integration,
|
|
79
|
+
className,
|
|
80
|
+
}: {
|
|
81
|
+
integration: Integration;
|
|
82
|
+
className: string;
|
|
83
|
+
}) {
|
|
84
|
+
if (!integration.Component) return null;
|
|
85
|
+
|
|
86
|
+
const Component = integration.Component;
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<Component
|
|
90
|
+
aria-label={integration.name}
|
|
91
|
+
className={cn(className, integration.isInvertable && "dark:invert")}
|
|
92
|
+
role="img"
|
|
93
|
+
/>
|
|
94
|
+
);
|
|
95
|
+
}
|