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
package/dist/mcp-server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{constants as xe}from"fs";import{access as Te,readFile as Q}from"fs/promises";import p from"path";import{fileURLToPath as _e}from"url";import{Server as Ne}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as Oe}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as Ae,ErrorCode as d,ListResourceTemplatesRequestSchema as Ce,ListResourcesRequestSchema as Le,ListToolsRequestSchema as $e,McpError as l,ReadResourceRequestSchema as Fe}from"@modelcontextprotocol/sdk/types.js";var F={name:"love-ui",version:"1.2.19",private:!1,license:"MIT",type:"module",bin:{loveui:"dist/index.js","love-ui":"dist/index.js","loveui-mcp":"dist/mcp-server.js"},files:["dist","registry","skills"],main:"dist/index.js",exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./icons":{types:"./registry/default/icons/dist/index.d.ts",import:"./registry/default/icons/dist/index.mjs",require:"./registry/default/icons/dist/index.cjs"},"./logos":{types:"./registry/default/logos/dist/index.d.ts",import:"./registry/default/logos/dist/index.mjs",require:"./registry/default/logos/dist/index.cjs"},"./vectors":{types:"./registry/default/vectors/dist/index.d.ts",import:"./registry/default/vectors/dist/index.mjs",require:"./registry/default/vectors/dist/index.cjs"},"./registry/*":"./registry/*","./package.json":"./package.json"},dependencies:{"@modelcontextprotocol/sdk":"^1.18.1",postcss:"^8.5.6","postcss-nested":"^7.0.2"},scripts:{build:"tsup",postbuild:"node ./scripts/copy-registry.mjs",prepack:"npm run build","verify:registry":"node ./scripts/copy-registry.mjs",clean:"rimraf dist registry"},devDependencies:{"@types/node":"^20.14.10",rimraf:"^6.0.1",tsup:"^8.5.0"}};import{constants as me}from"fs";import{access as ue,readFile as U,readdir as z}from"fs/promises";import x,{extname as W,join as b,relative as ge}from"path";import{fileURLToPath as ye}from"url";import q from"postcss";import fe from"postcss-nested";var he=x.dirname(ye(import.meta.url)),ve=x.resolve(he,".."),M=x.join(ve,"packages"),we=new Set([".turbo",".next",".git","dist","build","storybook-static","node_modules","__tests__","__mocks__","coverage"]),Re=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".json",".css",".scss",".sass",".mdx"]),Se=new Set(["package.json","tsconfig.json","tsconfig.build.json","tsconfig.test.json","README.md",".DS_Store"]),ke=new Set(["shadcn-ui","typescript-config","patterns","loveui","love-ui"]),Ee=e=>e.replace(/\\/g,"/"),G=async(e,s,t)=>{let n=await z(e,{withFileTypes:!0});for(let r of n){let o=b(e,r.name);if(r.isDirectory()){if(we.has(r.name))continue;await G(o,s,t);continue}let a=W(r.name);!Re.has(a)||Se.has(r.name)||r.name.endsWith(".d.ts")||r.name.endsWith(".test.ts")||r.name.endsWith(".test.tsx")||r.name.endsWith(".stories.tsx")||t.push({absolute:o,relative:Ee(ge(s,o))})}},Ie=(e,s)=>{let t=e.loveui??{},n=typeof t.target=="string"?t.target.trim():"",r=t.category;if(n.length>0){let o=typeof t.includePackageName=="boolean"?t.includePackageName:!1;return{base:n.replace(/\/+$/,""),includePackageName:o}}return r==="feature"?{base:"components",includePackageName:!0}:r==="block"?{base:"components/blocks",includePackageName:!0}:{base:"components/ui",includePackageName:!0}},je=e=>{let t=(e.loveui??{}).type;return typeof t=="string"&&t.trim().length>0?t:"registry:ui"},De=async e=>{try{return await ue(e,me.F_OK),!0}catch{return!1}},P=e=>e.startsWith("@loveui/")||e.startsWith("@love-ui/")||e.startsWith("@repo/"),Pe=e=>e.replace(/^@repo\//,"").replace(/^@loveui\//,"").replace(/^@love-ui\//,""),be=new Set(["@loveui/shadcn-ui","@love-ui/shadcn-ui"]),H=async()=>(await z(M,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>s.name).filter(s=>!ke.has(s)).sort((s,t)=>s.localeCompare(t)),J=async e=>{let s=b(M,e),t=b(s,"package.json");if(!await De(t))throw new Error(`Missing package.json for ${e}`);let n=JSON.parse(await U(t,"utf8")),r=je(n),o=Object.keys(n.dependencies??{}),a=Object.keys(n.peerDependencies??{}),N=Object.keys(n.devDependencies??{}),oe=new Set([...o,...a,...N].filter(P).filter(i=>!be.has(i))),O=[...new Set([...o,...a].filter(i=>!P(i)))],A=[...new Set(N.filter(i=>!P(i)&&!["@loveui/typescript-config","@types/react","@types/react-dom","typescript"].includes(i)))],k=[];for(let i of oe){let h=Pe(i);k.push(`https://www.loveui.dev/r/${h}.json`)}let C=[];await G(s,s,C);let f=[],m={},g=Ie(n,e);for(let i of C){let h=await U(i.absolute,"utf8"),E=W(i.absolute);if(E===".css"||E===".scss"||E===".sass"){let v=await q([fe]).process(h,{from:void 0});q.parse(v.css).walkAtRules("layer",I=>{let j=`@layer ${I.params}`;m[j]??={},I.walkRules(c=>{if(c.parent&&c.parent.type==="atrule"&&c.parent.name==="media")return;let R=c.selector,u={};c.walkDecls(S=>{u[S.prop]=S.value}),Object.keys(u).length>0&&(m[j][R]=u)}),I.walkAtRules("media",c=>{let R=`@media ${c.params}`,u=m[j];u[R]??={};let S=u[R];c.walkRules(L=>{let pe=L.selector,D={};L.walkDecls($=>{D[$.prop]=$.value}),Object.keys(D).length>0&&(S[pe]=D)})})});continue}let y=i.relative.startsWith("src/")?i.relative.slice(4):i.relative;if(!g.includePackageName){let v=g.base.split("/").filter(Boolean),w=v[v.length-1];w&&y.startsWith(`${w}/`)&&(y=y.slice(w.length+1))}let ce=e.includes("/")?e.split("/").pop()??e:e,le=(g.includePackageName?`${g.base}/${ce}`:g.base).replace(/\/+$/,"");f.push({type:r,path:y,target:`${le}/${y}`.replace(/\/+/g,"/"),content:h})}let ae=!f.length&&Object.keys(m).length>0?"registry:style":r;return{$schema:"https://ui.shadcn.com/schema/registry-item.json",name:e,type:ae,title:n.title??e,description:n.description,author:n.author??"Connor Love <hello@loveconnor.com>",dependencies:O.length?O:void 0,devDependencies:A.length?A:void 0,registryDependencies:k.length?Array.from(new Set(k)):void 0,files:f.length?f:void 0,css:Object.keys(m).length?m:void 0}};var _="loveui://registry/",Ue="loveui://registry/{package}",K="get-loveui-package",Z=new Set(["shadcn-ui","typescript-config","eslint-config","patterns","loveui","love-ui"]),qe=["@loveui/","@love-ui/","@repo/"],ee=new Set(["@loveui/shadcn-ui","@love-ui/shadcn-ui"]),ze=e=>`${_}${e}`,We=p.dirname(_e(import.meta.url)),X=p.resolve(We,".."),Me=[p.join(X,"public","r"),p.resolve(X,"..","..","apps","ui","public","r"),p.resolve(process.cwd(),"apps","ui","public","r")],te=async e=>{try{return await Te(e,xe.R_OK),!0}catch{return!1}},se=e=>qe.some(s=>e.startsWith(s)),Ge=e=>e.replace(/^@repo\//,"").replace(/^@loveui\//,"").replace(/^@love-ui\//,""),ne=e=>Array.isArray(e)?e.filter(s=>typeof s=="string"):e&&typeof e=="object"?Object.keys(e):[],B=e=>{let s=Array.from(new Set(ne(e).filter(t=>!se(t)&&!ee.has(t))));return s.length>0?s:void 0},He=e=>{let s=Array.from(new Set(ne(e).map(t=>t.trim()).filter(Boolean).filter(t=>!ee.has(t)).map(t=>se(t)?`https://www.loveui.dev/r/${Ge(t)}.json`:t)));return s.length>0?s:void 0},re=e=>e.trim().replace(/^@repo\//,"").replace(/^@loveui\//,"").replace(/^@love-ui\//,""),Je=e=>{let s=re(e);if(Z.has(s))throw new l(d.InvalidParams,`${s} is an internal package and should not be used directly. Use \`npx love-ui add <component>\` with a public component name.`);return s},Y=e=>{if(!e||typeof e!="object")return{mcpHints:{installPattern:"npx love-ui add <component>",neverInstall:["@loveui/*","@love-ui/*","@repo/*"]}};let s={...e},t=B(s.dependencies),n=B(s.devDependencies),r=He(s.registryDependencies),o=typeof s.name=="string"&&s.name.trim().length>0?s.name.trim():"<component>",a={...s,mcpHints:{installPattern:"npx love-ui add <component>",installCommand:`npx love-ui add ${o}`,neverInstall:["@loveui/*","@love-ui/*","@repo/*","@loveui/shadcn-ui"]}};return t?a.dependencies=t:delete a.dependencies,n?a.devDependencies=n:delete a.devDependencies,r?a.registryDependencies=r:delete a.registryDependencies,a},T=null,ie=async()=>(T||(T=(async()=>{for(let e of Me){let s=p.join(e,"registry.json");if(await te(s))try{let t=JSON.parse(await Q(s,"utf8")),n=Array.from(new Set((t.items??[]).map(r=>r.name?.trim()).filter(r=>!!r))).sort((r,o)=>r.localeCompare(o));if(n.length===0)continue;return{dir:e,names:n,nameSet:new Set(n)}}catch{continue}}return null})()),T),Ke=async()=>{let[e,s]=await Promise.all([ie(),H()]),t=new Set(s);for(let n of e?.names??[])t.add(n);return Array.from(t).map(n=>re(n)).filter(n=>!Z.has(n)).sort((n,r)=>n.localeCompare(r))},Xe=async e=>{let s=await ie();if(!s||!s.nameSet.has(e))return null;let t=p.join(s.dir,`${e}.json`);return await te(t)?JSON.parse(await Q(t,"utf8")):null},Be=e=>{if(!e.startsWith(_))throw new l(d.InvalidParams,`Unsupported resource URI: ${e}`);let s=decodeURIComponent(e.slice(_.length)).trim();if(!s)throw new l(d.InvalidParams,"Package name is required.");return s},V=async e=>{let s=Je(e);try{let t=await Xe(s);return Y(t||await J(s))}catch(t){throw t instanceof l?t:t instanceof Error&&t.message.startsWith(`Missing package.json for ${s}`)?new l(d.InvalidParams,`Registry item "${s}" was not found. Call resources/list and use an exact item name from the registry.`):new l(d.InvalidParams,t instanceof Error?t.message:String(t))}};async function Ye(){let e=new Ne({name:"loveui-mcp",version:F.version??"0.0.0"},{capabilities:{resources:{listChanged:!0},tools:{listChanged:!0}}});e.setRequestHandler(Le,async()=>({resources:(await Ke()).map(n=>({uri:ze(n),name:n,description:`loveui registry definition for ${n}`,mimeType:"application/json"}))})),e.setRequestHandler(Ce,async()=>({resourceTemplates:[{name:"loveui-registry",uriTemplate:Ue,description:"loveui registry definitions by package name",mimeType:"application/json"}]})),e.setRequestHandler(Fe,async t=>{let n=Be(t.params.uri),r=await V(n);return{contents:[{uri:t.params.uri,mimeType:"application/json",text:JSON.stringify(r,null,2)}]}}),e.setRequestHandler($e,async()=>({tools:[{name:K,description:"Fetch a loveui registry definition by package name. Always install with `npx love-ui add <component>` and never install @loveui/* packages directly.",inputSchema:{type:"object",additionalProperties:!1,properties:{name:{type:"string",description:"Package name, e.g. badge"}},required:["name"]}}]})),e.setRequestHandler(Ae,async t=>{if(t.params.name!==K)throw new l(d.InvalidParams,`Tool ${t.params.name} not found`);let n=t.params.arguments?.name;if(typeof n!="string"||n.trim()==="")throw new l(d.InvalidParams,"Package name is required.");let r=await V(n.trim());return{content:[{type:"text",text:JSON.stringify(r,null,2)}]}});let s=new Oe;await e.connect(s)}Ye().catch(e=>{console.error(e),process.exit(1)});
|
|
2
|
+
import{Ha as t,e as o,ia as n}from"./chunk-VDMHIXDM.js";import{StdioServerTransport as e}from"@modelcontextprotocol/sdk/server/stdio.js";async function a(){try{let r=new e;await t.connect(r)}catch(r){o.break(),n(r)}}a();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "love-ui",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.21",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,9 +39,39 @@
|
|
|
39
39
|
"./package.json": "./package.json"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"@antfu/ni": "^24.4.0",
|
|
43
|
+
"@babel/core": "^7.28.5",
|
|
44
|
+
"@babel/parser": "^7.28.5",
|
|
45
|
+
"@babel/plugin-transform-typescript": "^7.28.5",
|
|
46
|
+
"@dotenvx/dotenvx": "^1.71.0",
|
|
42
47
|
"@modelcontextprotocol/sdk": "^1.18.1",
|
|
48
|
+
"clsx": "^2.1.1",
|
|
49
|
+
"commander": "^14.0.2",
|
|
50
|
+
"cosmiconfig": "^9.0.0",
|
|
51
|
+
"dedent": "^1.7.0",
|
|
52
|
+
"deepmerge": "^4.3.1",
|
|
53
|
+
"diff": "^8.0.2",
|
|
54
|
+
"execa": "^9.6.0",
|
|
55
|
+
"fast-glob": "^3.3.3",
|
|
56
|
+
"fs-extra": "^11.3.2",
|
|
57
|
+
"fuzzysort": "^3.1.0",
|
|
58
|
+
"https-proxy-agent": "^7.0.6",
|
|
59
|
+
"kleur": "^4.1.5",
|
|
60
|
+
"node-fetch": "^3.3.2",
|
|
61
|
+
"open": "^10.2.0",
|
|
62
|
+
"ora": "^9.0.0",
|
|
43
63
|
"postcss": "^8.5.6",
|
|
44
|
-
"postcss-nested": "^7.0.2"
|
|
64
|
+
"postcss-nested": "^7.0.2",
|
|
65
|
+
"postcss-selector-parser": "^7.1.1",
|
|
66
|
+
"prompts": "^2.4.2",
|
|
67
|
+
"recast": "^0.23.11",
|
|
68
|
+
"stringify-object": "^5.0.0",
|
|
69
|
+
"tailwind-merge": "^3.6.0",
|
|
70
|
+
"tailwindcss": "^4.3.0",
|
|
71
|
+
"ts-morph": "^27.0.2",
|
|
72
|
+
"tsconfig-paths": "^4.2.0",
|
|
73
|
+
"zod": "^3.25.76",
|
|
74
|
+
"zod-to-json-schema": "^3.25.2"
|
|
45
75
|
},
|
|
46
76
|
"scripts": {
|
|
47
77
|
"build": "tsup",
|
|
@@ -51,8 +81,13 @@
|
|
|
51
81
|
"clean": "rimraf dist registry"
|
|
52
82
|
},
|
|
53
83
|
"devDependencies": {
|
|
84
|
+
"@types/diff": "^7.0.2",
|
|
85
|
+
"@types/fs-extra": "^11.0.4",
|
|
54
86
|
"@types/node": "^20.14.10",
|
|
87
|
+
"@types/prompts": "^2.4.9",
|
|
88
|
+
"msw": "^2.12.4",
|
|
55
89
|
"rimraf": "^6.0.1",
|
|
56
|
-
"tsup": "^8.5.0"
|
|
90
|
+
"tsup": "^8.5.0",
|
|
91
|
+
"vitest": "^4.0.15"
|
|
57
92
|
}
|
|
58
93
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
EmptyTitle,
|
|
8
8
|
} from "@/registry/default/ui/empty";
|
|
9
9
|
import { FullWidthDivider } from "./full-width-divider";
|
|
10
|
-
import { HomeIcon, CompassIcon } from "
|
|
10
|
+
import { House as HomeIcon, Compass as CompassIcon } from "love-ui/icons";
|
|
11
11
|
|
|
12
12
|
export function NotFoundPage() {
|
|
13
13
|
return (
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { GithubIcon } from "
|
|
2
|
-
import { GoogleIcon } from "./icons/google-icon";
|
|
1
|
+
import { Github as GithubIcon, GoogleIcon } from "love-ui/logos";
|
|
3
2
|
import { Logo } from "./logo";
|
|
4
3
|
import { Particles } from "./particles";
|
|
5
4
|
import { Button } from "@/registry/default/ui/button";
|
|
6
|
-
import { ChevronLeftIcon } from "
|
|
5
|
+
import { ChevronLeft as ChevronLeftIcon } from "love-ui/icons";
|
|
7
6
|
|
|
8
7
|
export function AuthPage() {
|
|
9
8
|
return (
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import { Github as GithubIcon, GoogleIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
3
|
-
import { GoogleIcon } from "./icons/google-icon";
|
|
4
3
|
import { Button } from "@/registry/default/ui/button";
|
|
5
4
|
import {
|
|
6
5
|
InputGroup,
|
|
@@ -9,7 +8,7 @@ import {
|
|
|
9
8
|
} from "@/registry/default/ui/input-group";
|
|
10
9
|
import { AuthDivider } from "./ui/auth-divider";
|
|
11
10
|
import { DecorIcon } from "./ui/decor-icon";
|
|
12
|
-
import { AtSignIcon } from "
|
|
11
|
+
import { AtSign as AtSignIcon } from "love-ui/icons";
|
|
13
12
|
|
|
14
13
|
export function AuthPage() {
|
|
15
14
|
return (
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import { Github as GithubIcon, GoogleIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
3
|
-
import { GoogleIcon } from "./icons/google-icon";
|
|
4
3
|
import { Logo } from "./logo";
|
|
5
4
|
import { Button } from "@/registry/default/ui/button";
|
|
6
5
|
import {
|
|
@@ -9,7 +8,7 @@ import {
|
|
|
9
8
|
InputGroupInput,
|
|
10
9
|
} from "@/registry/default/ui/input-group";
|
|
11
10
|
import { AuthDivider } from "./ui/auth-divider";
|
|
12
|
-
import { AtSignIcon } from "
|
|
11
|
+
import { AtSign as AtSignIcon } from "love-ui/icons";
|
|
13
12
|
|
|
14
13
|
export function AuthPage() {
|
|
15
14
|
return (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { X as XIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
|
-
import { XIcon } from "./icons/x-icon";
|
|
3
3
|
import { Button } from "@/registry/default/ui/button";
|
|
4
|
-
import { Mail, Users } from "
|
|
4
|
+
import { Mail, Users } from "love-ui/icons";
|
|
5
5
|
|
|
6
6
|
const APP_EMAIL = "hello@loveui.dev";
|
|
7
7
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { Github as GithubIcon, X as XIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
3
|
import type React from "react";
|
|
3
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
4
|
-
import { XIcon } from "./icons/x-icon";
|
|
5
4
|
import { FullWidthDivider } from "./full-width-divider";
|
|
6
|
-
import { Mail, MapPin, Phone } from "
|
|
5
|
+
import { Mail, MapPin, Phone } from "love-ui/icons";
|
|
7
6
|
|
|
8
7
|
const APP_EMAIL = "hello@loveui.dev";
|
|
9
8
|
const APP_PHONE = "+1 555 014 2026";
|
|
@@ -3,7 +3,7 @@ import { Button } from "@/registry/default/ui/button";
|
|
|
3
3
|
import { Field, FieldGroup, FieldLabel } from "@/registry/default/ui/field";
|
|
4
4
|
import { Input } from "@/registry/default/ui/input";
|
|
5
5
|
import { Textarea } from "@/registry/default/ui/textarea";
|
|
6
|
-
import { MailIcon, PhoneIcon } from "
|
|
6
|
+
import { Mail as MailIcon, Phone as PhoneIcon } from "love-ui/icons";
|
|
7
7
|
|
|
8
8
|
const contactInfo = [
|
|
9
9
|
{
|
|
@@ -4,7 +4,7 @@ import { Field, FieldGroup, FieldLabel } from "@/registry/default/ui/field";
|
|
|
4
4
|
import { Input } from "@/registry/default/ui/input";
|
|
5
5
|
import { Textarea } from "@/registry/default/ui/textarea";
|
|
6
6
|
import { DecorIcon } from "./decor-icon";
|
|
7
|
-
import { Phone, Mail } from "
|
|
7
|
+
import { Phone, Mail } from "love-ui/icons";
|
|
8
8
|
|
|
9
9
|
const data = [
|
|
10
10
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Button } from "@/registry/default/ui/button";
|
|
2
2
|
import { FullWidthDivider } from "./full-width-divider";
|
|
3
|
-
import { ArrowRightIcon } from "
|
|
3
|
+
import { ArrowRight as ArrowRightIcon } from "love-ui/icons";
|
|
4
4
|
|
|
5
5
|
export function CallToAction() {
|
|
6
6
|
return (
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
InputGroupInput,
|
|
6
6
|
} from "@/registry/default/ui/input-group";
|
|
7
7
|
import { FullWidthDivider } from "./full-width-divider";
|
|
8
|
-
import { AtSignIcon, ArrowRightIcon } from "
|
|
8
|
+
import { AtSign as AtSignIcon, ArrowRight as ArrowRightIcon } from "love-ui/icons";
|
|
9
9
|
|
|
10
10
|
export function CallToAction() {
|
|
11
11
|
return (
|
|
@@ -7,7 +7,13 @@ import {
|
|
|
7
7
|
AccordionTrigger,
|
|
8
8
|
} from "@/registry/default/ui/accordion";
|
|
9
9
|
import { Button } from "@/registry/default/ui/button";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
LayoutGrid as LayoutGridIcon,
|
|
12
|
+
Power as PowerIcon,
|
|
13
|
+
Feather as FeatherIcon,
|
|
14
|
+
CreditCard as CreditCardIcon,
|
|
15
|
+
LifeBuoy as LifeBuoyIcon,
|
|
16
|
+
} from "love-ui/icons";
|
|
11
17
|
|
|
12
18
|
const categories = [
|
|
13
19
|
{
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
InputGroupInput,
|
|
23
23
|
} from "@/registry/default/ui/input-group";
|
|
24
24
|
import { FullWidthDivider } from "./full-width-divider";
|
|
25
|
-
import { SearchIcon, SearchSlashIcon } from "
|
|
25
|
+
import { Search as SearchIcon, SearchSlash as SearchSlashIcon } from "love-ui/icons";
|
|
26
26
|
|
|
27
27
|
export function FaqsSection() {
|
|
28
28
|
const [searchTerm, setSearchTerm] = React.useState("");
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Zap as ZapIcon,
|
|
5
|
+
ShieldCheck as ShieldCheckIcon,
|
|
6
|
+
Activity as ActivityIcon,
|
|
7
|
+
Globe as GlobeIcon,
|
|
8
|
+
} from "love-ui/icons";
|
|
4
9
|
|
|
5
10
|
type FeatureType = {
|
|
6
11
|
title: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import { DecorIcon } from "./decor-icon";
|
|
4
|
-
import { HistoryIcon, SquareDashedIcon, CommandIcon } from "
|
|
4
|
+
import { History as HistoryIcon, SquareDashed as SquareDashedIcon, Command as CommandIcon } from "love-ui/icons";
|
|
5
5
|
|
|
6
6
|
type FeatureType = {
|
|
7
7
|
title: string;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import { FullWidthDivider } from "./full-width-divider";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Zap as ZapIcon,
|
|
6
|
+
ShieldCheck as ShieldCheckIcon,
|
|
7
|
+
Activity as ActivityIcon,
|
|
8
|
+
Globe as GlobeIcon,
|
|
9
|
+
} from "love-ui/icons";
|
|
5
10
|
|
|
6
11
|
type FeatureType = {
|
|
7
12
|
title: string;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import { DecorIcon } from "./decor-icon";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
LayoutDashboard as LayoutDashboardIcon,
|
|
6
|
+
Terminal as TerminalIcon,
|
|
7
|
+
ShieldCheck as ShieldCheckIcon,
|
|
8
|
+
FileText as FileTextIcon,
|
|
9
|
+
} from "love-ui/icons";
|
|
5
10
|
|
|
6
11
|
type FeatureType = {
|
|
7
12
|
title: string;
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import { GridPattern } from "./grid-pattern";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Zap as ZapIcon,
|
|
6
|
+
Cpu as CpuIcon,
|
|
7
|
+
FingerprintPattern as FingerprintIcon,
|
|
8
|
+
Pencil as PencilIcon,
|
|
9
|
+
Settings2 as Settings2Icon,
|
|
10
|
+
Sparkles as SparklesIcon,
|
|
11
|
+
} from "love-ui/icons";
|
|
5
12
|
|
|
6
13
|
type FeatureType = {
|
|
7
14
|
title: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import { CobeGlobe } from "./cobe-globe";
|
|
4
|
-
import { TrendingUpIcon, SquareMousePointerIcon, GlobeIcon } from "
|
|
4
|
+
import { TrendingUp as TrendingUpIcon, SquareMousePointer as SquareMousePointerIcon, Globe as GlobeIcon } from "love-ui/icons";
|
|
5
5
|
|
|
6
6
|
const features = [
|
|
7
7
|
{
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
+
import { Github as GithubIcon, Instagram as InstagramIcon, X as XIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
3
|
-
import { InstagramIcon } from "./icons/instagram-icon";
|
|
4
|
-
import { XIcon } from "./icons/x-icon";
|
|
5
3
|
import { Logo } from "./logo";
|
|
6
4
|
import { Button } from "@/registry/default/ui/button";
|
|
7
5
|
import { FullWidthDivider } from "./full-width-divider";
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Github as GithubIcon, Instagram as InstagramIcon, LinkedIn as LinkedinIcon, X as XIcon } from "love-ui/logos";
|
|
2
3
|
import { cn } from "@/lib/utils";
|
|
3
4
|
import { motion, useReducedMotion } from "motion/react";
|
|
4
5
|
import type { ReactNode } from "react";
|
|
5
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
6
|
-
import { InstagramIcon } from "./icons/instagram-icon";
|
|
7
|
-
import { LinkedinIcon } from "./icons/linkedin-icon";
|
|
8
|
-
import { XIcon } from "./icons/x-icon";
|
|
9
6
|
import { Logo } from "./logo";
|
|
10
7
|
|
|
11
8
|
type FooterLink = {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
+
import { Github as GithubIcon, Instagram as InstagramIcon, LinkedIn as LinkedinIcon, X as XIcon } from "love-ui/logos";
|
|
1
2
|
import { cn } from "@/lib/utils";
|
|
2
|
-
import {
|
|
3
|
-
import { InstagramIcon } from "./icons/instagram-icon";
|
|
4
|
-
import { XIcon } from "./icons/x-icon";
|
|
5
|
-
import { LinkedinIcon } from "./icons/linkedin-icon";
|
|
6
|
-
import { ArrowRightIcon } from "lucide-react";
|
|
3
|
+
import { ArrowRight as ArrowRightIcon } from "love-ui/icons";
|
|
7
4
|
|
|
8
5
|
export function Footer() {
|
|
9
6
|
return (
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { AppleIcon } from "
|
|
4
|
-
import { FacebookIcon } from "./icons/facebook-icon";
|
|
5
|
-
import { GooglePlayIcon } from "./icons/google-play-icon";
|
|
6
|
-
import { InstagramIcon } from "./icons/instagram-icon";
|
|
7
|
-
import { LinkedinIcon } from "./icons/linkedin-icon";
|
|
8
|
-
import { XIcon } from "./icons/x-icon";
|
|
3
|
+
import { Instagram as InstagramIcon, LinkedIn as LinkedinIcon, X as XIcon, Apple as AppleIcon, Facebook as FacebookIcon, GooglePlay as GooglePlayIcon } from "love-ui/logos";
|
|
9
4
|
import { Button } from "@/registry/default/ui/button";
|
|
10
5
|
|
|
11
6
|
export function Footer() {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Github as GithubIcon, Instagram as InstagramIcon, LinkedIn as LinkedinIcon, Facebook as FacebookIcon } from "love-ui/logos";
|
|
2
3
|
import { motion, useReducedMotion } from "motion/react";
|
|
3
4
|
import type React from "react";
|
|
4
5
|
import type { ReactNode } from "react";
|
|
5
|
-
import { FacebookIcon } from "./icons/facebook-icon";
|
|
6
|
-
import { InstagramIcon } from "./icons/instagram-icon";
|
|
7
|
-
import { LinkedinIcon } from "./icons/linkedin-icon";
|
|
8
|
-
import { GithubIcon } from "./icons/github-icon";
|
|
9
6
|
import { Logo } from "./logo";
|
|
10
7
|
import { Button } from "@/registry/default/ui/button";
|
|
11
8
|
|
|
@@ -3,7 +3,7 @@ import React from "react";
|
|
|
3
3
|
import { Button } from "@/registry/default/ui/button";
|
|
4
4
|
import { Portal, PortalBackdrop } from "./ui/portal";
|
|
5
5
|
import { navLinks } from "./header";
|
|
6
|
-
import { XIcon, MenuIcon } from "
|
|
6
|
+
import { X as XIcon, Menu as MenuIcon } from "love-ui/icons";
|
|
7
7
|
|
|
8
8
|
export function MobileNav() {
|
|
9
9
|
const [open, setOpen] = React.useState(false);
|
|
@@ -3,7 +3,7 @@ import React from "react";
|
|
|
3
3
|
import { Button } from "@/registry/default/ui/button";
|
|
4
4
|
import { Portal, PortalBackdrop } from "./ui/portal";
|
|
5
5
|
import { navLinks } from "./header";
|
|
6
|
-
import { XIcon, MenuIcon } from "
|
|
6
|
+
import { X as XIcon, Menu as MenuIcon } from "love-ui/icons";
|
|
7
7
|
|
|
8
8
|
export function MobileNav() {
|
|
9
9
|
const [open, setOpen] = React.useState(false);
|
|
@@ -4,7 +4,7 @@ import { Button } from "@/registry/default/ui/button";
|
|
|
4
4
|
import { Portal, PortalBackdrop } from "./ui/portal";
|
|
5
5
|
import { companyLinks, companyLinks2, productLinks } from "./nav-links";
|
|
6
6
|
import { LinkItem } from "./sheard";
|
|
7
|
-
import { XIcon, MenuIcon } from "
|
|
7
|
+
import { X as XIcon, Menu as MenuIcon } from "love-ui/icons";
|
|
8
8
|
|
|
9
9
|
export function MobileNav() {
|
|
10
10
|
const [open, setOpen] = React.useState(false);
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { LinkItemType } from "./sheard";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
Globe as GlobeIcon,
|
|
4
|
+
Layers as LayersIcon,
|
|
5
|
+
UserPlus as UserPlusIcon,
|
|
6
|
+
ChartBar as BarChart3Icon,
|
|
7
|
+
Plug as PlugIcon,
|
|
8
|
+
Code as CodeIcon,
|
|
9
|
+
Users as UsersIcon,
|
|
10
|
+
Star as StarIcon,
|
|
11
|
+
Handshake as HandshakeIcon,
|
|
12
|
+
FileText as FileTextIcon,
|
|
13
|
+
Shield as ShieldIcon,
|
|
14
|
+
RotateCcw as RotateCcwIcon,
|
|
15
|
+
Leaf as LeafIcon,
|
|
16
|
+
CircleQuestionMark as HelpCircleIcon,
|
|
17
|
+
} from "love-ui/icons";
|
|
3
18
|
|
|
4
19
|
export const productLinks: LinkItemType[] = [
|
|
5
20
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu"
|
|
2
2
|
import { cva } from "class-variance-authority"
|
|
3
|
-
import { ChevronDownIcon } from "
|
|
3
|
+
import { ChevronDown as ChevronDownIcon } from "love-ui/icons"
|
|
4
4
|
|
|
5
5
|
import { cn } from "@/lib/utils"
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cn } from "@/lib/utils";
|
|
2
2
|
import { Button } from "@/registry/default/ui/button";
|
|
3
|
-
import { RocketIcon, ArrowRightIcon, PhoneCallIcon } from "
|
|
3
|
+
import { Rocket as RocketIcon, ArrowRight as ArrowRightIcon, PhoneCall as PhoneCallIcon } from "love-ui/icons";
|
|
4
4
|
|
|
5
5
|
export function HeroSection() {
|
|
6
6
|
return (
|
|
@@ -1,69 +1,51 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import type { ElementType, SVGProps } from "react";
|
|
2
|
+
import {
|
|
3
|
+
ClaudeAIWordmark as ClaudeLogo,
|
|
4
|
+
ClerkWordmark as ClerkLogo,
|
|
5
|
+
GithubWordmark as GithubLogo,
|
|
6
|
+
IBMWordmark as IBMLogo,
|
|
7
|
+
NextjsWordmark as NextjsLogo,
|
|
8
|
+
OpenAIWordmark as OpenAILogo,
|
|
9
|
+
ResendWordmark as ResendLogo,
|
|
10
|
+
VercelWordmark as VercelLogo,
|
|
11
|
+
} from "love-ui/logos";
|
|
10
12
|
|
|
11
|
-
type
|
|
13
|
+
type LogoComponent = ElementType<SVGProps<SVGSVGElement>>;
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
type Logo = {
|
|
16
|
+
Component: LogoComponent;
|
|
17
|
+
alt: string;
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function LogoAsset({ logo, className }: { logo: Logo; className: string }) {
|
|
22
|
+
const Component = logo.Component;
|
|
23
|
+
const logoClassName = [className, logo.className].filter(Boolean).join(" ");
|
|
24
|
+
|
|
25
|
+
return <Component aria-label={logo.alt} className={logoClassName} role="img" />;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const logos: Logo[] = [
|
|
29
|
+
{ Component: VercelLogo, alt: "Vercel Logo" },
|
|
30
|
+
{ Component: NextjsLogo, alt: "Next.js Logo" },
|
|
31
|
+
{ Component: OpenAILogo, alt: "OpenAI Logo" },
|
|
32
|
+
{ Component: ResendLogo, alt: "Resend Logo" },
|
|
33
|
+
{ Component: GithubLogo, alt: "GitHub Logo" },
|
|
34
|
+
{ Component: ClaudeLogo, alt: "Claude AI Logo" },
|
|
35
|
+
{ Component: IBMLogo, alt: "IBM Logo" },
|
|
36
|
+
{ Component: ClerkLogo, alt: "Clerk Logo" },
|
|
37
|
+
];
|
|
15
38
|
|
|
16
39
|
export function LogoCloud() {
|
|
17
40
|
return (
|
|
18
|
-
<div className="
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
loading="lazy"
|
|
27
|
-
src={getLogoSrc(logo.src)}
|
|
28
|
-
width="auto"
|
|
29
|
-
/>
|
|
30
|
-
))}
|
|
31
|
-
</InfiniteSlider>
|
|
41
|
+
<div className="relative flex flex-wrap items-center justify-center gap-x-8 gap-y-8 py-6 sm:gap-x-12 sm:gap-y-10">
|
|
42
|
+
{logos.map((logo) => (
|
|
43
|
+
<LogoAsset
|
|
44
|
+
className="pointer-events-none h-8 w-32 select-none text-foreground sm:h-9 sm:w-36"
|
|
45
|
+
key={logo.alt}
|
|
46
|
+
logo={logo}
|
|
47
|
+
/>
|
|
48
|
+
))}
|
|
32
49
|
</div>
|
|
33
50
|
);
|
|
34
51
|
}
|
|
35
|
-
|
|
36
|
-
const logos = [
|
|
37
|
-
{
|
|
38
|
-
src: NvidiaLogo,
|
|
39
|
-
alt: "Nvidia Logo",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
src: SupabaseLogo,
|
|
43
|
-
alt: "Supabase Logo",
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
src: OpenAILogo,
|
|
47
|
-
alt: "OpenAI Logo",
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
src: TursoLogo,
|
|
51
|
-
alt: "Turso Logo",
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
src: VercelLogo,
|
|
55
|
-
alt: "Vercel Logo",
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
src: GithubLogo,
|
|
59
|
-
alt: "GitHub Logo",
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
src: ClaudeLogo,
|
|
63
|
-
alt: "Claude AI Logo",
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
src: ClerkLogo,
|
|
67
|
-
alt: "Clerk Logo",
|
|
68
|
-
},
|
|
69
|
-
];
|