love-ui 1.2.15 → 1.2.18
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/README.md +14 -6
- package/dist/index.js +149 -0
- package/dist/mcp-server.js +2 -0
- package/package.json +28 -4
- package/registry/__index__.tsx +73 -0
- package/registry/default/blocks/404-1/app/page.tsx +5 -0
- package/registry/default/blocks/404-1/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/404-1/components/not-found.tsx +51 -0
- package/registry/default/blocks/404-2/app/page.tsx +5 -0
- package/registry/default/blocks/404-2/components/not-found.tsx +44 -0
- package/registry/default/blocks/auth1/app/page.tsx +5 -0
- package/registry/default/blocks/auth1/components/auth-page.tsx +66 -0
- package/registry/default/blocks/auth1/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/auth1/components/icons/google-icon.tsx +14 -0
- package/registry/default/blocks/auth1/components/logo.tsx +88 -0
- package/registry/default/blocks/auth1/components/particles.tsx +321 -0
- package/registry/default/blocks/auth2/app/page.tsx +5 -0
- package/registry/default/blocks/auth2/components/auth.tsx +87 -0
- package/registry/default/blocks/auth2/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/auth2/components/icons/google-icon.tsx +14 -0
- package/registry/default/blocks/auth2/components/ui/auth-divider.tsx +16 -0
- package/registry/default/blocks/auth2/components/ui/decor-icon.tsx +45 -0
- package/registry/default/blocks/auth3/app/page.tsx +5 -0
- package/registry/default/blocks/auth3/components/auth-page.tsx +84 -0
- package/registry/default/blocks/auth3/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/auth3/components/icons/google-icon.tsx +14 -0
- package/registry/default/blocks/auth3/components/logo.tsx +88 -0
- package/registry/default/blocks/auth3/components/ui/auth-divider.tsx +16 -0
- package/registry/default/blocks/auth3/components/ui/decor-icon.tsx +45 -0
- package/registry/default/blocks/blogs1/app/page.tsx +5 -0
- package/registry/default/blocks/blogs1/components/blogs.tsx +97 -0
- package/registry/default/blocks/blogs1/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/blogs2/app/page.tsx +5 -0
- package/registry/default/blocks/blogs2/components/blogs.tsx +158 -0
- package/registry/default/blocks/blogs2/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/blogs2/components/grid-filler.tsx +74 -0
- package/registry/default/blocks/blogs3/app/page.tsx +5 -0
- package/registry/default/blocks/blogs3/components/aspect-ratio.tsx +22 -0
- package/registry/default/blocks/blogs3/components/blogs.tsx +224 -0
- package/registry/default/blocks/blogs3/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/blogs3/components/lazy-image.tsx +94 -0
- package/registry/default/blocks/contact1/app/page.tsx +9 -0
- package/registry/default/blocks/contact1/components/contact.tsx +65 -0
- package/registry/default/blocks/contact1/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/contact2/app/page.tsx +9 -0
- package/registry/default/blocks/contact2/components/contact.tsx +74 -0
- package/registry/default/blocks/contact2/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/contact2/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/contact3/app/page.tsx +9 -0
- package/registry/default/blocks/contact3/components/contact.tsx +152 -0
- package/registry/default/blocks/contact3/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/contact3/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/contact3/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/contact4/app/page.tsx +9 -0
- package/registry/default/blocks/contact4/components/contact.tsx +120 -0
- package/registry/default/blocks/contact5/app/page.tsx +9 -0
- package/registry/default/blocks/contact5/components/contact.tsx +119 -0
- package/registry/default/blocks/contact5/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/cta-1/app/page.tsx +9 -0
- package/registry/default/blocks/cta-1/components/cta.tsx +20 -0
- package/registry/default/blocks/cta-1/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/cta-2/app/page.tsx +9 -0
- package/registry/default/blocks/cta-2/components/cta.tsx +27 -0
- package/registry/default/blocks/cta-2/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/cta-3/app/page.tsx +9 -0
- package/registry/default/blocks/cta-3/components/cta.tsx +35 -0
- package/registry/default/blocks/cta-3/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/cta-4/app/page.tsx +9 -0
- package/registry/default/blocks/cta-4/components/cta.tsx +28 -0
- package/registry/default/blocks/cta-5/app/page.tsx +9 -0
- package/registry/default/blocks/cta-5/components/cta.tsx +72 -0
- package/registry/default/blocks/cta-5/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/faq-1/app/page.tsx +9 -0
- package/registry/default/blocks/faq-1/components/faq.tsx +86 -0
- package/registry/default/blocks/faq-2/app/page.tsx +9 -0
- package/registry/default/blocks/faq-2/components/faq.tsx +93 -0
- package/registry/default/blocks/faq-3/app/page.tsx +9 -0
- package/registry/default/blocks/faq-3/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/faq-3/components/faq.tsx +110 -0
- package/registry/default/blocks/faq-4/app/page.tsx +9 -0
- package/registry/default/blocks/faq-4/components/faq.tsx +181 -0
- package/registry/default/blocks/faq-5/app/page.tsx +9 -0
- package/registry/default/blocks/faq-5/components/faq.tsx +211 -0
- package/registry/default/blocks/faq-5/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/features1/app/page.tsx +9 -0
- package/registry/default/blocks/features1/components/feature-section.tsx +73 -0
- package/registry/default/blocks/features2/app/page.tsx +9 -0
- package/registry/default/blocks/features2/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/features2/components/feature-section.tsx +97 -0
- package/registry/default/blocks/features3/app/page.tsx +9 -0
- package/registry/default/blocks/features3/components/feature-section.tsx +93 -0
- package/registry/default/blocks/features3/components/full-width-divider.tsx +21 -0
- package/registry/default/blocks/features4/app/page.tsx +9 -0
- package/registry/default/blocks/features4/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/features4/components/feature-section.tsx +114 -0
- package/registry/default/blocks/features5/app/page.tsx +9 -0
- package/registry/default/blocks/features5/components/feature-section.tsx +115 -0
- package/registry/default/blocks/features5/components/grid-pattern.tsx +70 -0
- package/registry/default/blocks/features6/app/page.tsx +9 -0
- package/registry/default/blocks/features6/components/cobe-globe.tsx +86 -0
- package/registry/default/blocks/features6/components/feature-section.tsx +309 -0
- package/registry/default/blocks/footer1/app/page.tsx +9 -0
- package/registry/default/blocks/footer1/components/footer.tsx +85 -0
- package/registry/default/blocks/footer1/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/footer1/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer1/components/logo.tsx +88 -0
- package/registry/default/blocks/footer2/app/page.tsx +9 -0
- package/registry/default/blocks/footer2/components/footer.tsx +139 -0
- package/registry/default/blocks/footer2/components/full-width-divider.tsx +21 -0
- package/registry/default/blocks/footer2/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/footer2/components/icons/instagram-icon.tsx +12 -0
- package/registry/default/blocks/footer2/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer2/components/logo.tsx +88 -0
- package/registry/default/blocks/footer3/app/page.tsx +9 -0
- package/registry/default/blocks/footer3/components/footer.tsx +155 -0
- package/registry/default/blocks/footer3/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/footer3/components/icons/instagram-icon.tsx +12 -0
- package/registry/default/blocks/footer3/components/icons/linkedin-icon.tsx +12 -0
- package/registry/default/blocks/footer3/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer3/components/logo.tsx +88 -0
- package/registry/default/blocks/footer4/app/page.tsx +9 -0
- package/registry/default/blocks/footer4/components/footer.tsx +137 -0
- package/registry/default/blocks/footer4/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/footer4/components/icons/instagram-icon.tsx +12 -0
- package/registry/default/blocks/footer4/components/icons/linkedin-icon.tsx +12 -0
- package/registry/default/blocks/footer4/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer4/components/logo.tsx +88 -0
- package/registry/default/blocks/footer5/app/page.tsx +9 -0
- package/registry/default/blocks/footer5/components/footer.tsx +152 -0
- package/registry/default/blocks/footer5/components/icons/apple-icon.tsx +18 -0
- package/registry/default/blocks/footer5/components/icons/facebook-icon.tsx +12 -0
- package/registry/default/blocks/footer5/components/icons/google-play-icon.tsx +10 -0
- package/registry/default/blocks/footer5/components/icons/instagram-icon.tsx +12 -0
- package/registry/default/blocks/footer5/components/icons/linkedin-icon.tsx +12 -0
- package/registry/default/blocks/footer5/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer5/components/logo.tsx +88 -0
- package/registry/default/blocks/footer6/app/page.tsx +16 -0
- package/registry/default/blocks/footer6/components/footer.tsx +220 -0
- package/registry/default/blocks/footer6/components/icons/apple-icon.tsx +18 -0
- package/registry/default/blocks/footer6/components/icons/facebook-icon.tsx +12 -0
- package/registry/default/blocks/footer6/components/icons/github-icon.tsx +10 -0
- package/registry/default/blocks/footer6/components/icons/google-play-icon.tsx +10 -0
- package/registry/default/blocks/footer6/components/icons/instagram-icon.tsx +12 -0
- package/registry/default/blocks/footer6/components/icons/linkedin-icon.tsx +12 -0
- package/registry/default/blocks/footer6/components/icons/x-icon.tsx +12 -0
- package/registry/default/blocks/footer6/components/logo.tsx +88 -0
- package/registry/default/blocks/header1/app/page.tsx +12 -0
- package/registry/default/blocks/header1/components/demo-layout.tsx +33 -0
- package/registry/default/blocks/header1/components/header.tsx +58 -0
- package/registry/default/blocks/header1/components/logo.tsx +88 -0
- package/registry/default/blocks/header1/components/mobile-nav.tsx +61 -0
- package/registry/default/blocks/header1/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/header1/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/header2/app/page.tsx +11 -0
- package/registry/default/blocks/header2/components/demo-layout.tsx +33 -0
- package/registry/default/blocks/header2/components/header.tsx +70 -0
- package/registry/default/blocks/header2/components/logo.tsx +88 -0
- package/registry/default/blocks/header2/components/mobile-nav.tsx +61 -0
- package/registry/default/blocks/header2/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/header2/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/header3/app/page.tsx +11 -0
- package/registry/default/blocks/header3/components/demo-layout.tsx +33 -0
- package/registry/default/blocks/header3/components/desktop-nav.tsx +70 -0
- package/registry/default/blocks/header3/components/header.tsx +41 -0
- package/registry/default/blocks/header3/components/logo.tsx +88 -0
- package/registry/default/blocks/header3/components/mobile-nav.tsx +88 -0
- package/registry/default/blocks/header3/components/nav-links.tsx +132 -0
- package/registry/default/blocks/header3/components/sheard.tsx +41 -0
- package/registry/default/blocks/header3/components/ui/navigation-menu.tsx +171 -0
- package/registry/default/blocks/header3/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/header3/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/hero1/app/page.tsx +15 -0
- package/registry/default/blocks/hero1/components/header.tsx +70 -0
- package/registry/default/blocks/hero1/components/hero.tsx +80 -0
- package/registry/default/blocks/hero1/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/hero1/components/logo-cloud.tsx +69 -0
- package/registry/default/blocks/hero1/components/logo.tsx +88 -0
- package/registry/default/blocks/hero1/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/hero1/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/hero1/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/hero1/components/logos-section.tsx +14 -0
- package/registry/default/blocks/hero1/components/mobile-nav.tsx +61 -0
- package/registry/default/blocks/hero1/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/hero1/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/hero2/app/page.tsx +23 -0
- package/registry/default/blocks/hero2/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/hero2/components/full-width-divider.tsx +21 -0
- package/registry/default/blocks/hero2/components/header.tsx +70 -0
- package/registry/default/blocks/hero2/components/hero.tsx +104 -0
- package/registry/default/blocks/hero2/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/hero2/components/logo-cloud.tsx +120 -0
- package/registry/default/blocks/hero2/components/logo.tsx +88 -0
- package/registry/default/blocks/hero2/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/hero2/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/hero2/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/hero2/components/logos-section.tsx +23 -0
- package/registry/default/blocks/hero2/components/mobile-nav.tsx +61 -0
- package/registry/default/blocks/hero2/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/hero2/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/hero3/app/page.tsx +15 -0
- package/registry/default/blocks/hero3/components/header.tsx +70 -0
- package/registry/default/blocks/hero3/components/hero.tsx +104 -0
- package/registry/default/blocks/hero3/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/hero3/components/logo-cloud.tsx +67 -0
- package/registry/default/blocks/hero3/components/logo.tsx +88 -0
- package/registry/default/blocks/hero3/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/hero3/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/hero3/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/hero3/components/logos-section.tsx +12 -0
- package/registry/default/blocks/hero3/components/mobile-nav.tsx +61 -0
- package/registry/default/blocks/hero3/components/ui/portal.tsx +27 -0
- package/registry/default/blocks/hero3/hooks/use-scroll.ts +54 -0
- package/registry/default/blocks/image-gallery-1/app/page.tsx +5 -0
- package/registry/default/blocks/image-gallery-1/components/aspect-ratio.tsx +22 -0
- package/registry/default/blocks/image-gallery-1/components/image-gallery.tsx +135 -0
- package/registry/default/blocks/image-gallery-1/components/lazy-image.tsx +94 -0
- package/registry/default/blocks/integrations1/app/page.tsx +9 -0
- package/registry/default/blocks/integrations1/components/integrations.tsx +86 -0
- package/registry/default/blocks/integrations1/components/logos/adobe.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/canva.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/cursor.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/gmail.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/notion.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/planetscale.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/polar.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/supabase.svg +1 -0
- package/registry/default/blocks/integrations1/components/logos/vercel.svg +1 -0
- package/registry/default/blocks/integrations2/app/page.tsx +9 -0
- package/registry/default/blocks/integrations2/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/integrations2/components/integrations.tsx +118 -0
- package/registry/default/blocks/integrations2/components/logos/adobe.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/canva.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/cursor.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/gmail.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/notion.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/planetscale.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/polar.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/supabase.svg +1 -0
- package/registry/default/blocks/integrations2/components/logos/vercel.svg +1 -0
- package/registry/default/blocks/integrations3/app/page.tsx +9 -0
- package/registry/default/blocks/integrations3/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/integrations3/components/integrations.tsx +190 -0
- package/registry/default/blocks/integrations3/components/logos/adobe.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/canva.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/cursor.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/gmail.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/notion.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/planetscale.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/polar.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/supabase.svg +1 -0
- package/registry/default/blocks/integrations3/components/logos/vercel.svg +1 -0
- package/registry/default/blocks/integrations4/app/page.tsx +9 -0
- package/registry/default/blocks/integrations4/components/integrations.tsx +177 -0
- package/registry/default/blocks/integrations4/components/logos/adobe.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/canva.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/cursor.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/gmail.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/notion.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/planetscale.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/polar.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/supabase.svg +1 -0
- package/registry/default/blocks/integrations4/components/logos/vercel.svg +1 -0
- package/registry/default/blocks/integrations5/app/page.tsx +9 -0
- package/registry/default/blocks/integrations5/components/integrations.tsx +112 -0
- package/registry/default/blocks/integrations5/components/logos/adobe.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/canva.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/cursor.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/gmail.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/notion.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/planetscale.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/polar.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/supabase.svg +1 -0
- package/registry/default/blocks/integrations5/components/logos/vercel.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/app/page.tsx +17 -0
- package/registry/default/blocks/logo-cloud-1/components/logo-cloud.tsx +70 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-1/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/app/page.tsx +19 -0
- package/registry/default/blocks/logo-cloud-2/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/logo-cloud-2/components/logo-cloud.tsx +120 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-2/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/app/page.tsx +18 -0
- package/registry/default/blocks/logo-cloud-3/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/logo-cloud-3/components/logo-cloud.tsx +69 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-3/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/app/page.tsx +23 -0
- package/registry/default/blocks/logo-cloud-4/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/logo-cloud-4/components/logo-cloud.tsx +83 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-4/components/progressive-blur.tsx +63 -0
- package/registry/default/blocks/logo-cloud-5/app/page.tsx +17 -0
- package/registry/default/blocks/logo-cloud-5/components/logo-cloud.tsx +67 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/claude-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/clerk-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/github-wordmark.svg +6 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/nvidia-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/openai-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/supabase-wordmark.svg +23 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/turso-wordmark.svg +1 -0
- package/registry/default/blocks/logo-cloud-5/components/logos/vercel-wordmark.svg +1 -0
- package/registry/default/blocks/pricing1/app/page.tsx +9 -0
- package/registry/default/blocks/pricing1/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/pricing1/components/pricing.tsx +94 -0
- package/registry/default/blocks/pricing2/app/page.tsx +9 -0
- package/registry/default/blocks/pricing2/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/pricing2/components/pricing.tsx +117 -0
- package/registry/default/blocks/pricing3/app/page.tsx +9 -0
- package/registry/default/blocks/pricing3/components/pricing-card.tsx +171 -0
- package/registry/default/blocks/pricing3/components/pricing.tsx +143 -0
- package/registry/default/blocks/pricing4/app/page.tsx +9 -0
- package/registry/default/blocks/pricing4/components/frequency-toggle.tsx +47 -0
- package/registry/default/blocks/pricing4/components/pricing.tsx +230 -0
- package/registry/default/blocks/testimonials1/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials1/components/logo.tsx +74 -0
- package/registry/default/blocks/testimonials1/components/testimonials.tsx +41 -0
- package/registry/default/blocks/testimonials2/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials2/components/testimonials.tsx +65 -0
- package/registry/default/blocks/testimonials3/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials3/components/decor-icon.tsx +45 -0
- package/registry/default/blocks/testimonials3/components/testimonials.tsx +114 -0
- package/registry/default/blocks/testimonials4/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials4/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/testimonials4/components/testimonials.tsx +81 -0
- package/registry/default/blocks/testimonials5/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials5/components/full-width-divider.tsx +33 -0
- package/registry/default/blocks/testimonials5/components/grid-filler.tsx +74 -0
- package/registry/default/blocks/testimonials5/components/grid-pattern.tsx +70 -0
- package/registry/default/blocks/testimonials5/components/testimonials.tsx +186 -0
- package/registry/default/blocks/testimonials6/app/page.tsx +9 -0
- package/registry/default/blocks/testimonials6/components/infinite-slider.tsx +109 -0
- package/registry/default/blocks/testimonials6/components/testimonials.tsx +193 -0
- package/registry/default/examples/accordion-disabled.tsx +58 -0
- package/registry/default/examples/accordion-in-card.tsx +92 -0
- package/registry/default/examples/accordion-leading-icon.tsx +51 -0
- package/registry/default/examples/accordion-user-roles.tsx +97 -0
- package/registry/default/examples/accordion-with-icons.tsx +67 -0
- package/registry/default/examples/avatar-badge-icons.tsx +60 -0
- package/registry/default/examples/avatar-badge-position.tsx +47 -0
- package/registry/default/examples/avatar-empty-collaborators.tsx +55 -0
- package/registry/default/examples/avatar-group-trust.tsx +49 -0
- package/registry/default/examples/avatar-loading.tsx +33 -0
- package/registry/default/examples/avatar-menu.tsx +81 -0
- package/registry/default/examples/avatar-profile-badge.tsx +30 -0
- package/registry/default/examples/avatar-status.tsx +47 -0
- package/registry/default/examples/breadcrumb-bullet-separator.tsx +38 -0
- package/registry/default/examples/breadcrumb-buttons.tsx +61 -0
- package/registry/default/examples/breadcrumb-card.tsx +40 -0
- package/registry/default/examples/button-default-icons.tsx +18 -0
- package/registry/default/examples/button-default.tsx +5 -0
- package/registry/default/examples/button-demo.tsx +11 -1
- package/registry/default/examples/button-destructive-icons.tsx +18 -0
- package/registry/default/examples/button-destructive-outline-icons.tsx +18 -0
- package/registry/default/examples/button-ghost-icons.tsx +18 -0
- package/registry/default/examples/button-link-icons.tsx +18 -0
- package/registry/default/examples/button-outline-icons.tsx +18 -0
- package/registry/default/examples/button-secondary-icons.tsx +18 -0
- package/registry/default/examples/button-theme-toggle.tsx +38 -0
- package/registry/default/examples/card-author-profile.tsx +66 -0
- package/registry/default/examples/card-default-size.tsx +33 -0
- package/registry/default/examples/card-depth.tsx +37 -0
- package/registry/default/examples/card-help-link.tsx +32 -0
- package/registry/default/examples/card-help-menu.tsx +78 -0
- package/registry/default/examples/card-image-centered.tsx +38 -0
- package/registry/default/examples/card-image-feature.tsx +44 -0
- package/registry/default/examples/card-metric-actions.tsx +102 -0
- package/registry/default/examples/card-resource-link.tsx +40 -0
- package/registry/default/examples/card-team-member.tsx +38 -14
- package/registry/default/examples/card-usage-expandable.tsx +98 -0
- package/registry/default/examples/card-with-borders.tsx +29 -0
- package/registry/default/examples/code-block-shared.tsx +8 -1
- package/registry/default/ui/accordion.tsx +82 -2
- package/registry/default/ui/avatar.tsx +45 -1
- package/registry/default/ui/form.tsx +6 -1
- package/registry/default/ui/input-group.tsx +158 -0
- package/registry/default/ui/toast-gooey-icons.tsx +68 -0
- package/registry/default/ui/toast-gooey-renderer.tsx +614 -0
- package/registry/default/ui/toast-gooey-types.ts +45 -0
- package/registry/default/ui/toast-gooey.css +511 -0
- package/registry/default/ui/toast-gooey.tsx +445 -0
- package/registry/default/ui/toast.tsx +1 -1
- package/skills/loveui-skills/SKILL.md +170 -0
- package/skills/loveui-skills/references/accessibility-baseline.md +32 -0
- package/skills/loveui-skills/references/component-api-and-naming.md +30 -0
- package/skills/loveui-skills/references/content-ux-writing.md +33 -0
- package/skills/loveui-skills/references/design-directions.md +60 -0
- package/skills/loveui-skills/references/forms-and-validation.md +30 -0
- package/skills/loveui-skills/references/frontend-architecture.md +30 -0
- package/skills/loveui-skills/references/interaction-heuristics.md +45 -0
- package/skills/loveui-skills/references/mcp-catalog-workflow.md +68 -0
- package/skills/loveui-skills/references/motion-and-feedback.md +31 -0
- package/skills/loveui-skills/references/navigation-and-information-architecture.md +30 -0
- package/skills/loveui-skills/references/page-blueprints.md +76 -0
- package/skills/loveui-skills/references/quality-gates.md +51 -0
- package/skills/loveui-skills/references/screenshot-translation-protocol.md +52 -0
- package/skills/loveui-skills/references/structural-cleanliness.md +37 -0
- package/skills/loveui-skills/references/testing-and-quality-strategy.md +33 -0
- package/skills/loveui-skills/references/visual-primitives.md +42 -0
- package/skills/loveui-skills/skills/adapt/SKILL.md +199 -0
- package/skills/loveui-skills/skills/animate/SKILL.md +190 -0
- package/skills/loveui-skills/skills/audit/SKILL.md +127 -0
- package/skills/loveui-skills/skills/bolder/SKILL.md +132 -0
- package/skills/loveui-skills/skills/clarify/SKILL.md +180 -0
- package/skills/loveui-skills/skills/colorize/SKILL.md +158 -0
- package/skills/loveui-skills/skills/critique/SKILL.md +118 -0
- package/skills/loveui-skills/skills/delight/SKILL.md +317 -0
- package/skills/loveui-skills/skills/distill/SKILL.md +137 -0
- package/skills/loveui-skills/skills/extract/SKILL.md +95 -0
- package/skills/loveui-skills/skills/frontend-design/SKILL.md +127 -0
- package/skills/loveui-skills/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/skills/loveui-skills/skills/frontend-design/reference/interaction-design.md +123 -0
- package/skills/loveui-skills/skills/frontend-design/reference/motion-design.md +99 -0
- package/skills/loveui-skills/skills/frontend-design/reference/responsive-design.md +114 -0
- package/skills/loveui-skills/skills/frontend-design/reference/spatial-design.md +100 -0
- package/skills/loveui-skills/skills/frontend-design/reference/typography.md +131 -0
- package/skills/loveui-skills/skills/frontend-design/reference/ux-writing.md +107 -0
- package/skills/loveui-skills/skills/harden/SKILL.md +358 -0
- package/skills/loveui-skills/skills/normalize/SKILL.md +67 -0
- package/skills/loveui-skills/skills/onboard/SKILL.md +243 -0
- package/skills/loveui-skills/skills/optimize/SKILL.md +269 -0
- package/skills/loveui-skills/skills/polish/SKILL.md +202 -0
- package/skills/loveui-skills/skills/quieter/SKILL.md +118 -0
- package/skills/loveui-skills/skills/teach-loveui/SKILL.md +69 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Button } from "@/registry/default/ui/button";
|
|
2
|
+
import {
|
|
3
|
+
Empty,
|
|
4
|
+
EmptyContent,
|
|
5
|
+
EmptyDescription,
|
|
6
|
+
EmptyHeader,
|
|
7
|
+
EmptyTitle,
|
|
8
|
+
} from "@/registry/default/ui/empty";
|
|
9
|
+
import { HomeIcon, CompassIcon } from "lucide-react";
|
|
10
|
+
|
|
11
|
+
export function NotFoundPage() {
|
|
12
|
+
return (
|
|
13
|
+
<div className="relative flex min-h-screen w-full items-center justify-center overflow-hidden">
|
|
14
|
+
<Empty>
|
|
15
|
+
<EmptyHeader>
|
|
16
|
+
<EmptyTitle className="mask-b-from-20% mask-b-to-80% font-extrabold text-9xl">
|
|
17
|
+
404
|
|
18
|
+
</EmptyTitle>
|
|
19
|
+
<EmptyDescription className="-mt-8 text-nowrap text-foreground/80">
|
|
20
|
+
The page you're looking for might have been <br />
|
|
21
|
+
moved or doesn't exist.
|
|
22
|
+
</EmptyDescription>
|
|
23
|
+
</EmptyHeader>
|
|
24
|
+
<EmptyContent>
|
|
25
|
+
<div className="flex gap-2">
|
|
26
|
+
<Button asChild>
|
|
27
|
+
<a href="#">
|
|
28
|
+
<HomeIcon data-icon="inline-start" />
|
|
29
|
+
Go Home
|
|
30
|
+
</a>
|
|
31
|
+
</Button>
|
|
32
|
+
|
|
33
|
+
<Button asChild variant="outline">
|
|
34
|
+
<a href="#">
|
|
35
|
+
<CompassIcon data-icon="inline-start" />{" "}
|
|
36
|
+
Explore
|
|
37
|
+
</a>
|
|
38
|
+
</Button>
|
|
39
|
+
</div>
|
|
40
|
+
</EmptyContent>
|
|
41
|
+
</Empty>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { GithubIcon } from "./icons/github-icon";
|
|
2
|
+
import { GoogleIcon } from "./icons/google-icon";
|
|
3
|
+
import { Logo } from "./logo";
|
|
4
|
+
import { Particles } from "./particles";
|
|
5
|
+
import { Button } from "@/registry/default/ui/button";
|
|
6
|
+
import { ChevronLeftIcon } from "lucide-react";
|
|
7
|
+
|
|
8
|
+
export function AuthPage() {
|
|
9
|
+
return (
|
|
10
|
+
<div className="relative w-full md:h-screen md:overflow-hidden">
|
|
11
|
+
<Particles
|
|
12
|
+
className="absolute inset-0"
|
|
13
|
+
color="#666666"
|
|
14
|
+
ease={20}
|
|
15
|
+
quantity={120}
|
|
16
|
+
/>
|
|
17
|
+
<div className="relative mx-auto flex min-h-screen max-w-5xl flex-col justify-center px-8">
|
|
18
|
+
<Button asChild className="absolute top-4 left-4" variant="ghost">
|
|
19
|
+
<a href="#">
|
|
20
|
+
<ChevronLeftIcon data-icon="inline-start" />
|
|
21
|
+
Home
|
|
22
|
+
</a>
|
|
23
|
+
</Button>
|
|
24
|
+
|
|
25
|
+
<div className="mx-auto space-y-4 sm:w-sm">
|
|
26
|
+
<Logo className="h-5" />
|
|
27
|
+
<div className="flex flex-col space-y-1">
|
|
28
|
+
<h1 className="font-bold text-2xl tracking-wide">
|
|
29
|
+
Sign In or Join Now!
|
|
30
|
+
</h1>
|
|
31
|
+
<p className="text-base text-muted-foreground">
|
|
32
|
+
Sign in or create your LoveUI account.
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
<div className="space-y-2">
|
|
36
|
+
<Button className="w-full" type="button">
|
|
37
|
+
<GoogleIcon data-icon="inline-start" />
|
|
38
|
+
Continue with Google
|
|
39
|
+
</Button>
|
|
40
|
+
<Button className="w-full" type="button">
|
|
41
|
+
<GithubIcon data-icon="inline-start" />
|
|
42
|
+
Continue with GitHub
|
|
43
|
+
</Button>
|
|
44
|
+
</div>
|
|
45
|
+
<p className="mt-8 text-muted-foreground text-sm">
|
|
46
|
+
By clicking continue, you agree to our{" "}
|
|
47
|
+
<a
|
|
48
|
+
className="underline underline-offset-4 hover:text-primary"
|
|
49
|
+
href="#"
|
|
50
|
+
>
|
|
51
|
+
Terms of Service
|
|
52
|
+
</a>{" "}
|
|
53
|
+
and{" "}
|
|
54
|
+
<a
|
|
55
|
+
className="underline underline-offset-4 hover:text-primary"
|
|
56
|
+
href="#"
|
|
57
|
+
>
|
|
58
|
+
Privacy Policy
|
|
59
|
+
</a>
|
|
60
|
+
.
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function GithubIcon(props: React.ComponentProps<"svg">) {
|
|
2
|
+
return (
|
|
3
|
+
<svg viewBox="0 0 438.549 438.549" {...props}>
|
|
4
|
+
<path
|
|
5
|
+
d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"
|
|
6
|
+
fill="currentColor"
|
|
7
|
+
/>
|
|
8
|
+
</svg>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function GoogleIcon(props: React.ComponentProps<"svg">) {
|
|
2
|
+
return (
|
|
3
|
+
<svg
|
|
4
|
+
fill="currentColor"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
{...props}
|
|
8
|
+
>
|
|
9
|
+
<g>
|
|
10
|
+
<path d="M12.479,14.265v-3.279h11.049c0.108,0.571,0.164,1.247,0.164,1.979c0,2.46-0.672,5.502-2.84,7.669C18.744,22.829,16.051,24,12.483,24C5.869,24,0.308,18.613,0.308,12S5.869,0,12.483,0c3.659,0,6.265,1.436,8.223,3.307L18.392,5.62c-1.404-1.317-3.307-2.341-5.913-2.341C7.65,3.279,3.873,7.171,3.873,12s3.777,8.721,8.606,8.721c3.132,0,4.916-1.258,6.059-2.401c0.927-0.927,1.537-2.251,1.777-4.059L12.479,14.265z" />
|
|
11
|
+
</g>
|
|
12
|
+
</svg>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
2
|
+
<svg
|
|
3
|
+
width="220"
|
|
4
|
+
height="48"
|
|
5
|
+
viewBox="0 0 220 48"
|
|
6
|
+
fill="none"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
>
|
|
9
|
+
<defs>
|
|
10
|
+
<linearGradient id="loveui-blue" x1="0" y1="0" x2="48" y2="48">
|
|
11
|
+
<stop stopColor="#38A3FF" />
|
|
12
|
+
<stop offset="0.55" stopColor="#1266F1" />
|
|
13
|
+
<stop offset="1" stopColor="#0B3FD8" />
|
|
14
|
+
</linearGradient>
|
|
15
|
+
|
|
16
|
+
<linearGradient id="loveui-shine" x1="0" y1="0" x2="1" y2="1">
|
|
17
|
+
<stop stopColor="#FFFFFF" stopOpacity="0.9" />
|
|
18
|
+
<stop offset="1" stopColor="#BBD8FF" stopOpacity="0.4" />
|
|
19
|
+
</linearGradient>
|
|
20
|
+
</defs>
|
|
21
|
+
|
|
22
|
+
<g transform="translate(0 0)">
|
|
23
|
+
<rect
|
|
24
|
+
x="0"
|
|
25
|
+
y="0"
|
|
26
|
+
width="48"
|
|
27
|
+
height="48"
|
|
28
|
+
rx="12"
|
|
29
|
+
fill="url(#loveui-blue)"
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
<path
|
|
33
|
+
d="
|
|
34
|
+
M12 10
|
|
35
|
+
C12 8.3 13.3 7 15 7
|
|
36
|
+
H18
|
|
37
|
+
C19.7 7 21 8.3 21 10
|
|
38
|
+
V25
|
|
39
|
+
C21 27.2 22.8 29 25 29
|
|
40
|
+
H35
|
|
41
|
+
C36.7 29 38 30.3 38 32
|
|
42
|
+
V34
|
|
43
|
+
C38 35.7 36.7 37 35 37
|
|
44
|
+
H15
|
|
45
|
+
C13.3 37 12 35.7 12 34
|
|
46
|
+
Z"
|
|
47
|
+
fill="white"
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
<rect
|
|
51
|
+
x="28"
|
|
52
|
+
y="14"
|
|
53
|
+
width="9"
|
|
54
|
+
height="9"
|
|
55
|
+
rx="3"
|
|
56
|
+
fill="white"
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
<path
|
|
60
|
+
d="
|
|
61
|
+
M21 25
|
|
62
|
+
C21 27.2 22.8 29 25 29
|
|
63
|
+
H27
|
|
64
|
+
V34
|
|
65
|
+
C27 35.7 25.7 37 24 37
|
|
66
|
+
H15
|
|
67
|
+
C13.3 37 12 35.7 12 34
|
|
68
|
+
V29
|
|
69
|
+
H18
|
|
70
|
+
C19.7 29 21 27.7 21 25
|
|
71
|
+
Z"
|
|
72
|
+
fill="url(#loveui-shine)"
|
|
73
|
+
opacity="0.5"
|
|
74
|
+
/>
|
|
75
|
+
</g>
|
|
76
|
+
<text
|
|
77
|
+
x="62"
|
|
78
|
+
y="31"
|
|
79
|
+
fontFamily="Inter, Geist, sans-serif"
|
|
80
|
+
fontSize="24"
|
|
81
|
+
fontWeight="700"
|
|
82
|
+
letterSpacing="-0.04em"
|
|
83
|
+
fill="currentColor"
|
|
84
|
+
>
|
|
85
|
+
LoveUI
|
|
86
|
+
</text>
|
|
87
|
+
</svg>
|
|
88
|
+
);
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import React, {
|
|
4
|
+
useEffect,
|
|
5
|
+
useRef,
|
|
6
|
+
useState,
|
|
7
|
+
type ComponentPropsWithoutRef,
|
|
8
|
+
} from "react"
|
|
9
|
+
|
|
10
|
+
import { cn } from "@/lib/utils"
|
|
11
|
+
|
|
12
|
+
interface MousePosition {
|
|
13
|
+
x: number
|
|
14
|
+
y: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function MousePosition(): MousePosition {
|
|
18
|
+
const [mousePosition, setMousePosition] = useState<MousePosition>({
|
|
19
|
+
x: 0,
|
|
20
|
+
y: 0,
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const handleMouseMove = (event: MouseEvent) => {
|
|
25
|
+
setMousePosition({ x: event.clientX, y: event.clientY })
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
window.addEventListener("mousemove", handleMouseMove)
|
|
29
|
+
|
|
30
|
+
return () => {
|
|
31
|
+
window.removeEventListener("mousemove", handleMouseMove)
|
|
32
|
+
}
|
|
33
|
+
}, [])
|
|
34
|
+
|
|
35
|
+
return mousePosition
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface ParticlesProps extends ComponentPropsWithoutRef<"div"> {
|
|
39
|
+
className?: string
|
|
40
|
+
quantity?: number
|
|
41
|
+
staticity?: number
|
|
42
|
+
ease?: number
|
|
43
|
+
size?: number
|
|
44
|
+
refresh?: boolean
|
|
45
|
+
color?: string
|
|
46
|
+
vx?: number
|
|
47
|
+
vy?: number
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function hexToRgb(hex: string): number[] {
|
|
51
|
+
hex = hex.replace("#", "")
|
|
52
|
+
|
|
53
|
+
if (hex.length === 3) {
|
|
54
|
+
hex = hex
|
|
55
|
+
.split("")
|
|
56
|
+
.map((char) => char + char)
|
|
57
|
+
.join("")
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const hexInt = parseInt(hex, 16)
|
|
61
|
+
const red = (hexInt >> 16) & 255
|
|
62
|
+
const green = (hexInt >> 8) & 255
|
|
63
|
+
const blue = hexInt & 255
|
|
64
|
+
return [red, green, blue]
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
type Circle = {
|
|
68
|
+
x: number
|
|
69
|
+
y: number
|
|
70
|
+
translateX: number
|
|
71
|
+
translateY: number
|
|
72
|
+
size: number
|
|
73
|
+
alpha: number
|
|
74
|
+
targetAlpha: number
|
|
75
|
+
dx: number
|
|
76
|
+
dy: number
|
|
77
|
+
magnetism: number
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const Particles: React.FC<ParticlesProps> = ({
|
|
81
|
+
className = "",
|
|
82
|
+
quantity = 100,
|
|
83
|
+
staticity = 50,
|
|
84
|
+
ease = 50,
|
|
85
|
+
size = 0.4,
|
|
86
|
+
refresh = false,
|
|
87
|
+
color = "#ffffff",
|
|
88
|
+
vx = 0,
|
|
89
|
+
vy = 0,
|
|
90
|
+
...props
|
|
91
|
+
}) => {
|
|
92
|
+
const canvasRef = useRef<HTMLCanvasElement>(null)
|
|
93
|
+
const canvasContainerRef = useRef<HTMLDivElement>(null)
|
|
94
|
+
const context = useRef<CanvasRenderingContext2D | null>(null)
|
|
95
|
+
const circles = useRef<Circle[]>([])
|
|
96
|
+
const mousePosition = MousePosition()
|
|
97
|
+
const mouse = useRef<{ x: number; y: number }>({ x: 0, y: 0 })
|
|
98
|
+
const canvasSize = useRef<{ w: number; h: number }>({ w: 0, h: 0 })
|
|
99
|
+
const dpr = typeof window !== "undefined" ? window.devicePixelRatio : 1
|
|
100
|
+
const rafID = useRef<number | null>(null)
|
|
101
|
+
const resizeTimeout = useRef<NodeJS.Timeout | null>(null)
|
|
102
|
+
const initCanvasRef = useRef<() => void>(() => {})
|
|
103
|
+
const onMouseMoveRef = useRef<() => void>(() => {})
|
|
104
|
+
const animateRef = useRef<() => void>(() => {})
|
|
105
|
+
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (canvasRef.current) {
|
|
108
|
+
context.current = canvasRef.current.getContext("2d")
|
|
109
|
+
}
|
|
110
|
+
initCanvasRef.current()
|
|
111
|
+
animateRef.current()
|
|
112
|
+
|
|
113
|
+
const handleResize = () => {
|
|
114
|
+
if (resizeTimeout.current) {
|
|
115
|
+
clearTimeout(resizeTimeout.current)
|
|
116
|
+
}
|
|
117
|
+
resizeTimeout.current = setTimeout(() => {
|
|
118
|
+
initCanvasRef.current()
|
|
119
|
+
}, 200)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
window.addEventListener("resize", handleResize)
|
|
123
|
+
|
|
124
|
+
return () => {
|
|
125
|
+
if (rafID.current != null) {
|
|
126
|
+
window.cancelAnimationFrame(rafID.current)
|
|
127
|
+
}
|
|
128
|
+
if (resizeTimeout.current) {
|
|
129
|
+
clearTimeout(resizeTimeout.current)
|
|
130
|
+
}
|
|
131
|
+
window.removeEventListener("resize", handleResize)
|
|
132
|
+
}
|
|
133
|
+
}, [color])
|
|
134
|
+
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
onMouseMoveRef.current()
|
|
137
|
+
}, [mousePosition.x, mousePosition.y])
|
|
138
|
+
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
initCanvasRef.current()
|
|
141
|
+
}, [refresh])
|
|
142
|
+
|
|
143
|
+
const initCanvas = () => {
|
|
144
|
+
resizeCanvas()
|
|
145
|
+
drawParticles()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const onMouseMove = () => {
|
|
149
|
+
if (canvasRef.current) {
|
|
150
|
+
const rect = canvasRef.current.getBoundingClientRect()
|
|
151
|
+
const { w, h } = canvasSize.current
|
|
152
|
+
const x = mousePosition.x - rect.left - w / 2
|
|
153
|
+
const y = mousePosition.y - rect.top - h / 2
|
|
154
|
+
const inside = x < w / 2 && x > -w / 2 && y < h / 2 && y > -h / 2
|
|
155
|
+
if (inside) {
|
|
156
|
+
mouse.current.x = x
|
|
157
|
+
mouse.current.y = y
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const resizeCanvas = () => {
|
|
163
|
+
if (canvasContainerRef.current && canvasRef.current && context.current) {
|
|
164
|
+
canvasSize.current.w = canvasContainerRef.current.offsetWidth
|
|
165
|
+
canvasSize.current.h = canvasContainerRef.current.offsetHeight
|
|
166
|
+
|
|
167
|
+
canvasRef.current.width = canvasSize.current.w * dpr
|
|
168
|
+
canvasRef.current.height = canvasSize.current.h * dpr
|
|
169
|
+
canvasRef.current.style.width = `${canvasSize.current.w}px`
|
|
170
|
+
canvasRef.current.style.height = `${canvasSize.current.h}px`
|
|
171
|
+
context.current.scale(dpr, dpr)
|
|
172
|
+
|
|
173
|
+
// Clear existing particles and create new ones with exact quantity
|
|
174
|
+
circles.current = []
|
|
175
|
+
for (let i = 0; i < quantity; i++) {
|
|
176
|
+
const circle = circleParams()
|
|
177
|
+
drawCircle(circle)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const circleParams = (): Circle => {
|
|
183
|
+
const x = Math.floor(Math.random() * canvasSize.current.w)
|
|
184
|
+
const y = Math.floor(Math.random() * canvasSize.current.h)
|
|
185
|
+
const translateX = 0
|
|
186
|
+
const translateY = 0
|
|
187
|
+
const pSize = Math.floor(Math.random() * 2) + size
|
|
188
|
+
const alpha = 0
|
|
189
|
+
const targetAlpha = parseFloat((Math.random() * 0.6 + 0.1).toFixed(1))
|
|
190
|
+
const dx = (Math.random() - 0.5) * 0.1
|
|
191
|
+
const dy = (Math.random() - 0.5) * 0.1
|
|
192
|
+
const magnetism = 0.1 + Math.random() * 4
|
|
193
|
+
return {
|
|
194
|
+
x,
|
|
195
|
+
y,
|
|
196
|
+
translateX,
|
|
197
|
+
translateY,
|
|
198
|
+
size: pSize,
|
|
199
|
+
alpha,
|
|
200
|
+
targetAlpha,
|
|
201
|
+
dx,
|
|
202
|
+
dy,
|
|
203
|
+
magnetism,
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const rgb = hexToRgb(color)
|
|
208
|
+
|
|
209
|
+
const drawCircle = (circle: Circle, update = false) => {
|
|
210
|
+
if (context.current) {
|
|
211
|
+
const { x, y, translateX, translateY, size, alpha } = circle
|
|
212
|
+
context.current.translate(translateX, translateY)
|
|
213
|
+
context.current.beginPath()
|
|
214
|
+
context.current.arc(x, y, size, 0, 2 * Math.PI)
|
|
215
|
+
context.current.fillStyle = `rgba(${rgb.join(", ")}, ${alpha})`
|
|
216
|
+
context.current.fill()
|
|
217
|
+
context.current.setTransform(dpr, 0, 0, dpr, 0, 0)
|
|
218
|
+
|
|
219
|
+
if (!update) {
|
|
220
|
+
circles.current.push(circle)
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const clearContext = () => {
|
|
226
|
+
if (context.current) {
|
|
227
|
+
context.current.clearRect(
|
|
228
|
+
0,
|
|
229
|
+
0,
|
|
230
|
+
canvasSize.current.w,
|
|
231
|
+
canvasSize.current.h
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const drawParticles = () => {
|
|
237
|
+
clearContext()
|
|
238
|
+
const particleCount = quantity
|
|
239
|
+
for (let i = 0; i < particleCount; i++) {
|
|
240
|
+
const circle = circleParams()
|
|
241
|
+
drawCircle(circle)
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const remapValue = (
|
|
246
|
+
value: number,
|
|
247
|
+
start1: number,
|
|
248
|
+
end1: number,
|
|
249
|
+
start2: number,
|
|
250
|
+
end2: number
|
|
251
|
+
): number => {
|
|
252
|
+
const remapped =
|
|
253
|
+
((value - start1) * (end2 - start2)) / (end1 - start1) + start2
|
|
254
|
+
return remapped > 0 ? remapped : 0
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const animate = () => {
|
|
258
|
+
clearContext()
|
|
259
|
+
circles.current.forEach((circle: Circle, i: number) => {
|
|
260
|
+
// Handle the alpha value
|
|
261
|
+
const edge = [
|
|
262
|
+
circle.x + circle.translateX - circle.size, // distance from left edge
|
|
263
|
+
canvasSize.current.w - circle.x - circle.translateX - circle.size, // distance from right edge
|
|
264
|
+
circle.y + circle.translateY - circle.size, // distance from top edge
|
|
265
|
+
canvasSize.current.h - circle.y - circle.translateY - circle.size, // distance from bottom edge
|
|
266
|
+
]
|
|
267
|
+
const closestEdge = edge.reduce((a, b) => Math.min(a, b))
|
|
268
|
+
const remapClosestEdge = parseFloat(
|
|
269
|
+
remapValue(closestEdge, 0, 20, 0, 1).toFixed(2)
|
|
270
|
+
)
|
|
271
|
+
if (remapClosestEdge > 1) {
|
|
272
|
+
circle.alpha += 0.02
|
|
273
|
+
if (circle.alpha > circle.targetAlpha) {
|
|
274
|
+
circle.alpha = circle.targetAlpha
|
|
275
|
+
}
|
|
276
|
+
} else {
|
|
277
|
+
circle.alpha = circle.targetAlpha * remapClosestEdge
|
|
278
|
+
}
|
|
279
|
+
circle.x += circle.dx + vx
|
|
280
|
+
circle.y += circle.dy + vy
|
|
281
|
+
circle.translateX +=
|
|
282
|
+
(mouse.current.x / (staticity / circle.magnetism) - circle.translateX) /
|
|
283
|
+
ease
|
|
284
|
+
circle.translateY +=
|
|
285
|
+
(mouse.current.y / (staticity / circle.magnetism) - circle.translateY) /
|
|
286
|
+
ease
|
|
287
|
+
|
|
288
|
+
drawCircle(circle, true)
|
|
289
|
+
|
|
290
|
+
// circle gets out of the canvas
|
|
291
|
+
if (
|
|
292
|
+
circle.x < -circle.size ||
|
|
293
|
+
circle.x > canvasSize.current.w + circle.size ||
|
|
294
|
+
circle.y < -circle.size ||
|
|
295
|
+
circle.y > canvasSize.current.h + circle.size
|
|
296
|
+
) {
|
|
297
|
+
// remove the circle from the array
|
|
298
|
+
circles.current.splice(i, 1)
|
|
299
|
+
// create a new circle
|
|
300
|
+
const newCircle = circleParams()
|
|
301
|
+
drawCircle(newCircle)
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
rafID.current = window.requestAnimationFrame(animateRef.current)
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
initCanvasRef.current = initCanvas
|
|
308
|
+
onMouseMoveRef.current = onMouseMove
|
|
309
|
+
animateRef.current = animate
|
|
310
|
+
|
|
311
|
+
return (
|
|
312
|
+
<div
|
|
313
|
+
className={cn("pointer-events-none", className)}
|
|
314
|
+
ref={canvasContainerRef}
|
|
315
|
+
aria-hidden="true"
|
|
316
|
+
{...props}
|
|
317
|
+
>
|
|
318
|
+
<canvas ref={canvasRef} className="size-full" />
|
|
319
|
+
</div>
|
|
320
|
+
)
|
|
321
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { cn } from "@/lib/utils";
|
|
2
|
+
import { GithubIcon } from "./icons/github-icon";
|
|
3
|
+
import { GoogleIcon } from "./icons/google-icon";
|
|
4
|
+
import { Button } from "@/registry/default/ui/button";
|
|
5
|
+
import {
|
|
6
|
+
InputGroup,
|
|
7
|
+
InputGroupAddon,
|
|
8
|
+
InputGroupInput,
|
|
9
|
+
} from "@/registry/default/ui/input-group";
|
|
10
|
+
import { AuthDivider } from "./ui/auth-divider";
|
|
11
|
+
import { DecorIcon } from "./ui/decor-icon";
|
|
12
|
+
import { AtSignIcon } from "lucide-react";
|
|
13
|
+
|
|
14
|
+
export function AuthPage() {
|
|
15
|
+
return (
|
|
16
|
+
<div className="relative flex h-screen w-full items-center justify-center overflow-hidden px-6 md:px-8">
|
|
17
|
+
<div
|
|
18
|
+
className={cn(
|
|
19
|
+
"relative flex w-full max-w-sm flex-col justify-between p-6 md:p-8",
|
|
20
|
+
"dark:bg-[radial-gradient(50%_80%_at_20%_0%,--theme(--color-foreground/.1),transparent)]"
|
|
21
|
+
)}
|
|
22
|
+
>
|
|
23
|
+
<div className="absolute -inset-y-6 -left-px w-px bg-border" />
|
|
24
|
+
<div className="absolute -inset-y-6 -right-px w-px bg-border" />
|
|
25
|
+
<div className="absolute -inset-x-6 -top-px h-px bg-border" />
|
|
26
|
+
<div className="absolute -inset-x-6 -bottom-px h-px bg-border" />
|
|
27
|
+
<DecorIcon position="top-left" />
|
|
28
|
+
<DecorIcon position="bottom-right" />
|
|
29
|
+
|
|
30
|
+
<div className="w-full max-w-sm animate-in space-y-8">
|
|
31
|
+
<div className="flex flex-col space-y-1">
|
|
32
|
+
<h1 className="font-bold text-2xl tracking-wide">Join Now!</h1>
|
|
33
|
+
<p className="text-base text-muted-foreground">
|
|
34
|
+
Sign in or create your LoveUI account.
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
<div className="space-y-4">
|
|
38
|
+
<form className="space-y-2">
|
|
39
|
+
<InputGroup>
|
|
40
|
+
<InputGroupInput
|
|
41
|
+
placeholder="your.email@example.com"
|
|
42
|
+
type="email"
|
|
43
|
+
/>
|
|
44
|
+
<InputGroupAddon align="inline-start">
|
|
45
|
+
<AtSignIcon
|
|
46
|
+
/>
|
|
47
|
+
</InputGroupAddon>
|
|
48
|
+
</InputGroup>
|
|
49
|
+
|
|
50
|
+
<Button className="w-full" size="sm" type="button">
|
|
51
|
+
Continue With Email
|
|
52
|
+
</Button>
|
|
53
|
+
</form>
|
|
54
|
+
<AuthDivider>OR</AuthDivider>
|
|
55
|
+
<div className="grid grid-cols-2 gap-2">
|
|
56
|
+
<Button className="h-11 w-full" type="button" variant="outline">
|
|
57
|
+
<GoogleIcon data-icon="inline-start" />
|
|
58
|
+
Google
|
|
59
|
+
</Button>
|
|
60
|
+
<Button className="h-11 w-full" type="button" variant="outline">
|
|
61
|
+
<GithubIcon data-icon="inline-start" />
|
|
62
|
+
GitHub
|
|
63
|
+
</Button>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<p className="text-muted-foreground text-sm">
|
|
67
|
+
By clicking continue, you agree to our{" "}
|
|
68
|
+
<a
|
|
69
|
+
className="underline underline-offset-4 hover:text-primary"
|
|
70
|
+
href="#"
|
|
71
|
+
>
|
|
72
|
+
Terms of Service
|
|
73
|
+
</a>{" "}
|
|
74
|
+
and{" "}
|
|
75
|
+
<a
|
|
76
|
+
className="underline underline-offset-4 hover:text-primary"
|
|
77
|
+
href="#"
|
|
78
|
+
>
|
|
79
|
+
Privacy Policy
|
|
80
|
+
</a>
|
|
81
|
+
.
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function GithubIcon(props: React.ComponentProps<"svg">) {
|
|
2
|
+
return (
|
|
3
|
+
<svg viewBox="0 0 438.549 438.549" {...props}>
|
|
4
|
+
<path
|
|
5
|
+
d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"
|
|
6
|
+
fill="currentColor"
|
|
7
|
+
/>
|
|
8
|
+
</svg>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function GoogleIcon(props: React.ComponentProps<"svg">) {
|
|
2
|
+
return (
|
|
3
|
+
<svg
|
|
4
|
+
fill="currentColor"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
{...props}
|
|
8
|
+
>
|
|
9
|
+
<g>
|
|
10
|
+
<path d="M12.479,14.265v-3.279h11.049c0.108,0.571,0.164,1.247,0.164,1.979c0,2.46-0.672,5.502-2.84,7.669C18.744,22.829,16.051,24,12.483,24C5.869,24,0.308,18.613,0.308,12S5.869,0,12.483,0c3.659,0,6.265,1.436,8.223,3.307L18.392,5.62c-1.404-1.317-3.307-2.341-5.913-2.341C7.65,3.279,3.873,7.171,3.873,12s3.777,8.721,8.606,8.721c3.132,0,4.916-1.258,6.059-2.401c0.927-0.927,1.537-2.251,1.777-4.059L12.479,14.265z" />
|
|
11
|
+
</g>
|
|
12
|
+
</svg>
|
|
13
|
+
);
|
|
14
|
+
}
|