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
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import{cyan as zs,green as Vs,red as Us,yellow as Bs}from"kleur/colors";var k={error:Us,warn:Bs,info:zs,success:Vs};var S={error(...e){console.log(k.error(e.join(" ")))},warn(...e){console.log(k.warn(e.join(" ")))},info(...e){console.log(k.info(e.join(" ")))},success(...e){console.log(k.success(e.join(" ")))},log(...e){console.log(e.join(" "))},break(){console.log("")}};var lr={name:"love-ui",version:"1.2.21",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:{"@antfu/ni":"^24.4.0","@babel/core":"^7.28.5","@babel/parser":"^7.28.5","@babel/plugin-transform-typescript":"^7.28.5","@dotenvx/dotenvx":"^1.71.0","@modelcontextprotocol/sdk":"^1.18.1",clsx:"^2.1.1",commander:"^14.0.2",cosmiconfig:"^9.0.0",dedent:"^1.7.0",deepmerge:"^4.3.1",diff:"^8.0.2",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.2",fuzzysort:"^3.1.0","https-proxy-agent":"^7.0.6",kleur:"^4.1.5","node-fetch":"^3.3.2",open:"^10.2.0",ora:"^9.0.0",postcss:"^8.5.6","postcss-nested":"^7.0.2","postcss-selector-parser":"^7.1.1",prompts:"^2.4.2",recast:"^0.23.11","stringify-object":"^5.0.0","tailwind-merge":"^3.6.0",tailwindcss:"^4.3.0","ts-morph":"^27.0.2","tsconfig-paths":"^4.2.0",zod:"^3.25.76","zod-to-json-schema":"^3.25.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/diff":"^7.0.2","@types/fs-extra":"^11.0.4","@types/node":"^20.14.10","@types/prompts":"^2.4.9",msw:"^2.12.4",rimraf:"^6.0.1",tsup:"^8.5.0",vitest:"^4.0.15"}};var pe=process.env.REGISTRY_URL??"https://www.loveui.dev/r",K=pe.replace(/\/r\/?$/,""),et="new-york-v4",pr=[{name:"neutral",label:"Neutral"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"mauve",label:"Mauve"},{name:"olive",label:"Olive"},{name:"mist",label:"Mist"},{name:"taupe",label:"Taupe"}],U={"@love-ui":`${pe}/{name}.json`};var pa=[{name:"toast",deprecatedBy:"sonner",message:"The toast component is deprecated. Use the sonner component instead."},{name:"toaster",deprecatedBy:"sonner",message:"The toaster component is deprecated. Use the sonner component instead."}];import{z as Kt}from"zod";var _={NETWORK_ERROR:"NETWORK_ERROR",NOT_FOUND:"NOT_FOUND",GONE:"GONE",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},$=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||_.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},Y=class extends ${constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:_.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError"}url},tt=class extends ${constructor(r,s){let n=`The item at ${r} is no longer available. It may have been removed or expired.`;super(n,{code:_.GONE,statusCode:410,cause:s,context:{url:r},suggestion:"This resource was previously available but has been permanently removed. Check if a newer version exists or contact the registry maintainer."});this.url=r;this.name="RegistryGoneError"}url},$e=class extends ${constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:_.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError"}url},je=class extends ${constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:_.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError"}url},Ae=class extends ${constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,l="Check your network connection and try again.";s===404?l="The requested resource was not found. Check the URL or item name.":s===500?l="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(l="There was a client error. Check your request parameters.");super(a,{code:_.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:l});this.url=r;this.responseBody=n;this.name="RegistryFetchError"}url;responseBody},re=class extends ${constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined in components.json as follows:
|
|
2
|
+
{
|
|
3
|
+
"registries": {
|
|
4
|
+
"${r}": "[URL_TO_REGISTRY]"
|
|
5
|
+
}
|
|
6
|
+
}`:'Unknown registry. Make sure it is defined in components.json under "registries".';super(s,{code:_.NOT_CONFIGURED,context:{registryName:r},suggestion:"Add the registry configuration to your components.json file. Consult the registry documentation for the correct format."});this.registryName=r;this.name="RegistryNotConfiguredError"}registryName},Z=class extends ${constructor(r,s,n={}){super(n.message??`Failed to read local registry file: ${r}`,{code:_.LOCAL_FILE_ERROR,cause:s,context:{filePath:r,...n.context},suggestion:n.suggestion??"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError"}filePath},D=class extends ${constructor(r,s,n={}){let i=n.subject??"registry item",o=`Failed to parse ${i}: ${r}`;s instanceof Kt.ZodError&&(o=`Failed to parse ${i}: ${r}
|
|
7
|
+
${s.errors.map(a=>` - ${a.path.join(".")}: ${a.message}`).join(`
|
|
8
|
+
`)}`);super(o,{code:_.PARSE_ERROR,cause:s,context:{item:r,...n.context},suggestion:n.suggestion??`The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See ${K}/schema/registry-item.json.`});this.item=r;this.parseError=s,this.name="RegistryParseError"}item;parseError},C=class extends ${constructor(t,r={}){super(t,{code:_.VALIDATION_ERROR,cause:r.cause,context:{...r.registryFile?{registryFile:r.registryFile}:{},...r.context},suggestion:r.suggestion??"Update the registry.json file and try running the command again."}),this.name="RegistryValidationError"}};var Ne=class extends ${constructor(r,s){let n=`Registry "${r}" requires the following environment variables:
|
|
9
|
+
|
|
10
|
+
`+s.map(i=>` \u2022 ${i}`).join(`
|
|
11
|
+
`);super(n,{code:_.MISSING_ENV_VARS,context:{registryName:r,missingVars:s},suggestion:"Set the required environment variables to your .env or .env.local file."});this.registryName=r;this.missingVars=s;this.name="RegistryMissingEnvironmentVariablesError"}registryName;missingVars},Le=class extends ${constructor(r){let s=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @love-ui, @v0).`;super(s,{code:_.VALIDATION_ERROR,context:{name:r},suggestion:"Use a valid registry name starting with @ or provide a direct URL to the registry."});this.name=r;this.name="RegistryInvalidNamespaceError"}name};var rt=class extends ${constructor(r,s){let n=`Invalid components.json configuration in ${r}.`;s instanceof Kt.ZodError&&(n=`Invalid components.json configuration in ${r}:
|
|
12
|
+
${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
|
|
13
|
+
`)}`);super(n,{code:_.INVALID_CONFIG,cause:s,context:{cwd:r},suggestion:"Check your components.json file for syntax errors or invalid configuration. Run 'npx love-ui@latest init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError"}cwd},Oe=class extends ${parseError;constructor(t){let r="Failed to parse registries index";if(t instanceof Kt.ZodError){let s=t.errors.filter(n=>n.path.length>0).map(n=>`"${n.path[0]}"`).filter((n,i,o)=>o.indexOf(n)===i);s.length>0?r=`Failed to parse registries index. Invalid registry namespace(s): ${s.join(", ")}
|
|
14
|
+
${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
|
|
15
|
+
`)}`:r=`Failed to parse registries index:
|
|
16
|
+
${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
|
|
17
|
+
`)}`}super(r,{code:_.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @love-ui, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError"}};import{detect as qs}from"@antfu/ni";async function Gs(e,{withFallback:t}={withFallback:!1}){let r=await qs({programmatic:!0,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?Dt()??"npm":r??"npm"}function Dt(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function Mt(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function gr(e){let t=await Gs(e);return Mt(t)}import{z as Hs}from"zod";function xe(e){if(S.break(),S.error("Something went wrong. Please check the error below for more details."),S.error("If the problem persists, please open an issue on GitHub."),S.error(""),typeof e=="string"&&(S.error(e),_e()),e instanceof $&&(e.message&&(S.error(e.cause?"Error:":"Message:"),S.error(e.message)),e.cause&&(S.error(`
|
|
18
|
+
Message:`),S.error(e.cause)),e.suggestion&&(S.error(`
|
|
19
|
+
Suggestion:`),S.error(e.suggestion)),_e()),e instanceof Hs.ZodError){S.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))S.error(`- ${k.info(t)}: ${r}`);_e()}e instanceof Error&&(S.error(e.message),_e()),_e()}function Ys(e){let t=e.match(/^(\d+)\.(\d+)\.\d+/);if(!t)return null;let r=Number.parseInt(t[1],10),s=Number.parseInt(t[2],10);return s===0?null:`${r}.${s-1}.0`}function Zs(e=lr.version,t=process.argv.slice(2)){let r=Ys(e);return r?[...Mt(Dt()).split(" "),`love-ui@${r}`,...t].map(Xs).join(" "):null}function _e(){let e=Zs();e&&(S.error(""),S.error("You can also try a previous version to see if that works:"),S.error(e)),S.break(),process.exit(1)}function Xs(e){return/^[a-zA-Z0-9_./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}import _o from"path";function Fe(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function Ke(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}var Qs=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function we(e){if(!e.startsWith("@"))return{registry:null,item:e};let t=e.match(Qs);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}import{z as c}from"zod";var en=c.union([c.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),c.object({url:c.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),params:c.record(c.string(),c.string()).optional(),headers:c.record(c.string(),c.string()).optional()})]),zt=c.record(c.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @v0, @acme)"}),en),st=c.object({$schema:c.string().optional(),style:c.string(),rsc:c.coerce.boolean().default(!1),tsx:c.coerce.boolean().default(!0),tailwind:c.object({config:c.string().optional(),css:c.string(),baseColor:c.string(),cssVariables:c.boolean().default(!0),prefix:c.string().default("").optional()}),iconLibrary:c.string().optional(),rtl:c.coerce.boolean().default(!1).optional(),menuColor:c.enum(["default","inverted","default-translucent","inverted-translucent"]).default("default").optional(),menuAccent:c.enum(["subtle","bold"]).default("subtle").optional(),aliases:c.object({components:c.string(),utils:c.string(),ui:c.string().optional(),lib:c.string().optional(),hooks:c.string().optional()}),registries:zt.optional()}).strict(),De=st.extend({resolvedPaths:c.object({cwd:c.string(),tailwindConfig:c.string(),tailwindCss:c.string(),utils:c.string(),components:c.string(),lib:c.string(),hooks:c.string(),ui:c.string()})}),mr=c.record(De),nt=c.enum(["registry:lib","registry:block","registry:component","registry:ui","registry:hook","registry:page","registry:file","registry:theme","registry:style","registry:item","registry:base","registry:font","registry:example","registry:internal"]),it=c.discriminatedUnion("type",[c.object({path:c.string(),content:c.string().optional(),type:c.enum(["registry:file","registry:page"]),target:c.string()}),c.object({path:c.string(),content:c.string().optional(),type:nt.exclude(["registry:file","registry:page"]),target:c.string().optional()})]),tn=c.object({config:c.object({content:c.array(c.string()).optional(),theme:c.record(c.string(),c.any()).optional(),plugins:c.array(c.string()).optional()}).optional()}),Wt=c.object({theme:c.record(c.string(),c.string()).optional(),light:c.record(c.string(),c.string()).optional(),dark:c.record(c.string(),c.string()).optional()}),ur=c.lazy(()=>c.union([c.string(),c.array(c.union([c.string(),c.record(c.string(),c.string())])),c.record(c.string(),ur)])),rn=c.record(c.string(),ur),sn=c.record(c.string(),c.string()),ot=c.object({family:c.string(),provider:c.literal("google"),import:c.string(),variable:c.string(),weight:c.array(c.string()).optional(),subsets:c.array(c.string()).optional(),selector:c.string().optional(),dependency:c.string().optional()}),ge=c.object({$schema:c.string().optional(),extends:c.string().optional(),name:c.string(),title:c.string().optional(),author:c.string().min(2).optional(),description:c.string().optional(),dependencies:c.array(c.string()).optional(),devDependencies:c.array(c.string()).optional(),registryDependencies:c.array(c.string()).optional(),files:c.array(it).optional(),tailwind:tn.optional(),cssVars:Wt.optional(),css:rn.optional(),envVars:sn.optional(),meta:c.record(c.string(),c.any()).optional(),docs:c.string().optional(),categories:c.array(c.string()).optional()}),M=c.discriminatedUnion("type",[ge.extend({type:c.literal("registry:base"),config:st.deepPartial().optional()}),ge.extend({type:c.literal("registry:font"),font:ot}),ge.extend({type:nt.exclude(["registry:base","registry:font"])})]),nn=c.object({$schema:c.string().optional(),name:c.string().optional(),homepage:c.string().optional(),include:c.array(c.string()).optional(),items:c.array(M).optional()}).refine(e=>e.items!==void 0||e.include!==void 0,{message:"Registry must define at least one of `items` or `include`.",path:["items"]}),Vt=nn.transform(e=>({...e,items:e.items??[]})),fr=Vt.pipe(c.object({$schema:c.string().optional(),name:c.string(),homepage:c.string(),include:c.array(c.string()).optional(),items:c.array(M)})),dr=c.array(M),hr=c.array(c.object({name:c.string(),label:c.string()})),yr=c.record(c.string(),c.record(c.string(),c.string())),xr=c.object({inlineColors:c.object({light:c.record(c.string(),c.string()),dark:c.record(c.string(),c.string())}).optional(),cssVars:Wt,cssVarsV4:Wt.optional(),inlineColorsTemplate:c.string().optional(),cssVarsTemplate:c.string().optional()}),wr=ge.pick({dependencies:!0,devDependencies:!0,files:!0,tailwind:!0,cssVars:!0,css:!0,envVars:!0,docs:!0}).extend({fonts:c.array(ge.extend({type:c.literal("registry:font"),font:ot})).optional()}),on=c.object({name:c.string(),type:c.string().optional(),description:c.string().optional(),registry:c.string(),addCommandArgument:c.string()}),br=c.object({pagination:c.object({total:c.number(),offset:c.number(),limit:c.number(),hasMore:c.boolean()}),items:c.array(on)}),Ca=c.record(c.string().regex(/^@[a-zA-Z0-9][a-zA-Z0-9-_]*$/),c.string()),Ir=c.array(c.object({name:c.string(),homepage:c.string().optional(),url:c.string(),description:c.string().optional()})),an=c.object({name:c.string(),title:c.string(),description:c.string(),base:c.string(),style:c.string(),baseColor:c.string(),theme:c.string(),iconLibrary:c.string(),font:c.string(),rtl:c.coerce.boolean().default(!1),menuAccent:c.enum(["subtle","bold"]),menuColor:c.enum(["default","inverted","default-translucent","inverted-translucent"]),radius:c.string()}),vr=c.object({presets:c.array(an)});import{promises as Kn}from"fs";import ne from"path";var W={"next-app":{name:"next-app",label:"Next.js",links:{installation:`${K}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:`${K}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:`${K}/docs/installation/remix`,tailwind:"https://tailwindcss.com/docs/guides/remix"}},"react-router":{name:"react-router",label:"React Router",links:{installation:`${K}/docs/installation/react-router`,tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:`${K}/docs/installation/vite`,tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:`${K}/docs/installation/astro`,tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:`${K}/docs/installation/laravel`,tailwind:"https://tailwindcss.com/docs/guides/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:`${K}/docs/installation/tanstack`,tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:`${K}/docs/installation/gatsby`,tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:`${K}/docs/installation/expo`,tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:`${K}/docs/installation/manual`,tailwind:"https://tailwindcss.com/docs/installation"}}};import z from"path";import Rr from"path";function at(e){let t=[e];for(;t.length;){let r=t.shift();if(typeof r=="string"){if(r.startsWith("./"))return r;continue}if(Array.isArray(r)){t.unshift(...r);continue}r&&typeof r=="object"&&t.unshift(...Object.values(r))}return null}function ct(e){if(!e.includes("*"))return"strip_extension";let t=e.slice(e.indexOf("*")+1);return t&&/^\.[^/]+$/.test(t)?"strip_extension":"preserve_extension"}function lt(e,t){let r=t.find(n=>!n.hasWildcard&&n.key===e);if(r)return{path:Rr.resolve(r.rootDir,r.target),matchedAlias:r.key,matchedTarget:r.target,emitMode:r.emitMode};let s=t.filter(n=>n.hasWildcard).sort((n,i)=>i.key.length-n.key.length);for(let n of s){let i=Ut(e,n.key,{allowBareAliasBase:!0});if(i!==null)return{path:Rr.resolve(n.rootDir,cn(n.target,i)),matchedAlias:n.key,matchedTarget:n.target,emitMode:n.emitMode}}return null}function Ut(e,t,r={}){if(!t.includes("*"))return e===t?"":null;let[s,n=""]=t.split("*");return e.startsWith(s)&&e.endsWith(n)?n?e.slice(s.length,-n.length):e.slice(s.length):r.allowBareAliasBase&&n===""&&s.endsWith("/")&&e===s.slice(0,-1)?"":null}function cn(e,t){if(!e.includes("*"))return e;let[r,s=""]=e.split("*");return t?`${r}${t}${s}`:r.replace(/\/$/,"")}import gn from"path";import ln from"path";import pn from"fs-extra";function se(e="",t=!0){let r=ln.join(e,"package.json");return pn.readJSONSync(r,{throws:t})}var Bt=new Map;function Jt(e){let t=gn.resolve(e),r=Bt.get(t);if(r)return r;let n=se(e,!1)?.imports;if(!n||typeof n!="object"||Array.isArray(n))return Bt.set(t,[]),[];let i=[];for(let[o,a]of Object.entries(n)){if(!o.startsWith("#"))continue;let l=at(a);l&&i.push({key:o,aliasBase:o==="#*"?"#":o.endsWith("/*")?o.slice(0,-2):o,target:l,emitMode:ct(l),hasWildcard:o.includes("*"),rootDir:t})}return Bt.set(t,i),i}function Sr(e){let t=Jt(e).map(r=>r.aliasBase);return t.length?fn(t):null}function We(e,t){return lt(e,Jt(t))}function Er(e){let t=Jt(e),r=t.some(s=>s.key==="#*")?{components:"#components",ui:"#components/ui",lib:"#lib",hooks:"#hooks",utils:"#lib/utils"}:null;return{components:Me(t,"components")??r?.components,ui:Me(t,"ui")??r?.ui,lib:Me(t,"lib")??r?.lib,hooks:Me(t,"hooks")??r?.hooks,utils:Me(t,"utils")??r?.utils}}function Me(e,t){return e.map(s=>({entry:s,score:mn(s,t)})).filter(s=>s.score>0).sort((s,n)=>n.score-s.score||n.entry.aliasBase.length-s.entry.aliasBase.length)[0]?.entry.aliasBase}function mn(e,t){let r=e.aliasBase.toLowerCase(),s=un(e.target).toLowerCase();switch(t){case"components":return r.endsWith("/ui")||s.includes("/components/ui")?0:pt(r,"components")?4:pt(s,"components")?3:0;case"ui":return r.endsWith("/ui")||r==="#ui"?5:s.includes("/components/ui")?4:s.endsWith("/ui")?3:0;case"lib":return r==="#lib"||r.endsWith("/lib")?5:s.endsWith("/lib")?4:pt(s,"lib")?3:0;case"hooks":return r==="#hooks"||r.endsWith("/hooks")?5:s.endsWith("/hooks")?4:pt(s,"hooks")?3:0;case"utils":return r==="#utils"||r.endsWith("/utils")?5:s.endsWith("/lib/utils")?4:s.endsWith("/utils")?3:0}}function un(e){return e.replace(/\/\*$/,"").replace(/\*$/,"").replace(/\/index\.[^/]+$/,"")}function pt(e,t){return e===t||e.includes(`/${t}`)||e.includes(`${t}/`)}function fn(e){let t=e.map(r=>r.slice(1).split("/").filter(Boolean)).reduce((r,s,n)=>n?r.filter((i,o)=>s[o]===i):s,[]);return t.length?`#${t.join("/")}`:"#"}import H from"path";import X from"path";import kr from"fast-glob";import J from"fs-extra";var dn=["next.config.*","vite.config.*","astro.config.*","remix.config.*","nuxt.config.*","svelte.config.*","gatsby-config.*","angular.json"];async function qa(e){if(J.existsSync(X.resolve(e,"pnpm-workspace.yaml")))return!0;let t=X.resolve(e,"package.json");if(J.existsSync(t))try{if((await J.readJson(t)).workspaces)return!0}catch{}return!!(J.existsSync(X.resolve(e,"lerna.json"))||J.existsSync(X.resolve(e,"nx.json")))}async function Ga(e){let t=await gt(e);if(!t.length)return[];let r=await kr(t,{cwd:e,onlyDirectories:!0,ignore:["**/node_modules/**"]}),s=[];for(let n of r){let i=X.resolve(e,n);if(!J.existsSync(X.resolve(i,"package.json")))continue;let o=J.existsSync(X.resolve(i,"components.json")),a=dn.some(l=>kr.sync(l,{cwd:i,dot:!0}).length>0);(o||a)&&s.push({name:n,hasConfig:o})}return s}function Ha(e,t,r){let s=r?.cwdFlag??"-c";S.break(),S.log(`It looks like you are running ${k.info(e)} from a monorepo root.`),S.log(`To use love-ui in a specific workspace, use the ${k.info(s)} flag:`),S.break();for(let n of t)S.log(` love-ui ${e} ${s} ${n.name}`);S.break()}async function gt(e){let t=[],r=X.resolve(e,"pnpm-workspace.yaml");if(J.existsSync(r)){let n=await J.readFile(r,"utf8");t.push(...hn(n))}let s=X.resolve(e,"package.json");if(J.existsSync(s))try{let n=await J.readJson(s),i=Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages;Array.isArray(i)&&t.push(...i.filter(o=>!o.startsWith("!")))}catch{}return Array.from(new Set(t))}function hn(e){let t=[],r=!1,s=0;for(let n of e.split(`
|
|
20
|
+
`)){let i=n.trim();if(!i||i.startsWith("#"))continue;let o=n.match(/^(\s*)([A-Za-z0-9_-]+)\s*:/);if(o){s=o[1].length,r=o[2]==="packages";continue}if(!r)continue;let a=n.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/);!a||a[1].length<=s||t.push(a[2].trim().replace(/^["']|["']$/g,""))}return t}import yn from"fast-glob";import xn from"fs-extra";var Cr=new Map,qt=new Map,mt=new Map;async function Tr(e,t){let r=Sn(e);if(!r)return null;let s=await bn(t,r.packageName);return s?lt(e,wn(s)):null}function wn(e){let t=`${e.packageRoot}:${e.packageName}`,r=qt.get(t);if(r)return r;let n=se(e.packageRoot,!1)?.exports;if(!n||typeof n!="object"||Array.isArray(n))return qt.set(t,[]),[];let i=[];for(let[o,a]of Object.entries(n)){if(o!=="."&&!o.startsWith("./"))continue;let l=at(a);if(!l)continue;let p=En(e.packageName,o);i.push({key:o.includes("*")?`${p}/*`:p,aliasBase:p,target:l,emitMode:ct(l),hasWildcard:o.includes("*"),rootDir:e.packageRoot})}return qt.set(t,i),i}async function bn(e,t){let r=await vn(e);if(!r)return null;let s=Cr.get(r);if(s?.has(t))return s.get(t)??null;let n=await In(r);return Cr.set(r,n),n.get(t)??null}async function In(e){let t=await gt(e),r=new Map;if(!t.length)return r;let s=await yn(t.map(n=>H.posix.join(n.split(H.sep).join("/"),"package.json")),{cwd:e,ignore:["**/node_modules/**"]});for(let n of s){let i=H.resolve(e,H.dirname(n)),a=se(i,!1)?.name;a&&r.set(a,{packageName:a,packageRoot:i})}return r}async function vn(e){let t=H.resolve(e),r=mt.get(t);if(r!==void 0)return r;let s=t,n=await Rn(t);for(;;){if((await gt(s)).length)return mt.set(t,s),s;if(n&&s===n)return mt.set(t,null),null;let o=H.dirname(s);if(o===s)return mt.set(t,null),null;s=o}}async function Rn(e){let t=H.resolve(e);for(;;){if(xn.existsSync(H.resolve(t,".git")))return t;let r=H.dirname(t);if(r===t)return null;t=r}}function Sn(e){if(e.startsWith("#")||e.startsWith(".")||H.isAbsolute(e))return null;let t=e.split("/");return e.startsWith("@")?t.length<2?null:{packageName:`${t[0]}/${t[1]}`}:{packageName:t[0]}}function En(e,t){if(t===".")return e;let r=t.slice(2).replace(/\/\*$/,"");return r?`${e}/${r}`:e}import{createMatchPath as kn}from"tsconfig-paths";async function ze(e,t){let r=t.cwd??t.absoluteBaseUrl;if(e.startsWith("#")){let n=We(e,r);if(n)return{path:n.path,source:"package_imports",matchedAlias:n.matchedAlias,matchedTarget:n.matchedTarget,emitMode:n.emitMode}}let s=await Tr(e,r);return s?{path:s.path,source:"workspace_package_exports",matchedAlias:s.matchedAlias,matchedTarget:s.matchedTarget,emitMode:s.emitMode}:Tn(e,t)}function Gt(e,t){return e.startsWith("#")?!0:t?e.startsWith(`${t}/`):!1}function Cn(e){return/^@[^/]+\/[^/]+(?:\/.*)?$/.test(e)}function Tn(e,t){let r=kn(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx",".jsx",".js",".css"]);if(!r)return null;let s=Pn(e,t.paths);return!s&&Cn(e)?null:{path:r,source:"tsconfig_paths",matchedAlias:s?.key??e,matchedTarget:s?.target??r,emitMode:"strip_extension"}}function Pn(e,t){for(let[r,s]of Object.entries(t)){let n=Array.isArray(s)?s:[s],i=Ut(e,r);if(i!==null)return{key:r,target:n[0]?.includes("*")&&i!==null?n[0].replace(/\*/g,i):n[0]}}return null}import{cosmiconfig as $n}from"cosmiconfig";import jn from"fast-glob";import{loadConfig as An}from"tsconfig-paths";var xc="@/components",wc="@/lib/utils",bc="app/globals.css",Ic="tailwind.config.js";var ut=$n("components",{searchPlaces:["components.json"]});async function Ue(e){let t=await Ln(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await ft(e,t)):null}async function ft(e,t){t.registries={...U,...t.registries||{}};let r=await An(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());let s=await Ve("utils",t.aliases.utils,e,r),n=await Ve("components",t.aliases.components,e,r),i=t.aliases.ui?await Ve("ui",t.aliases.ui,e,r):z.resolve(n??e,"ui"),o=t.aliases.lib?await Ve("lib",t.aliases.lib,e,r):z.resolve(s??e,".."),a=t.aliases.hooks?await Ve("hooks",t.aliases.hooks,e,r):z.resolve(n??e,"..","hooks");return Nn(e,{components:n,utils:s,ui:i,lib:o,hooks:a}),De.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?z.resolve(e,t.tailwind.config):"",tailwindCss:z.resolve(e,t.tailwind.css),utils:s,components:n,ui:i,lib:o,hooks:a}})}async function Ve(e,t,r,s){let n=await ze(t,{...s,cwd:r});if(!n?.path||t.startsWith("#")&&n.path===z.resolve(r,t))return null;if(e!=="utils"&&(n.source==="package_imports"||n.source==="workspace_package_exports")){if(!n.matchedAlias.includes("*")&&/\/index\.[^/]+$/.test(n.path))return z.dirname(n.path);if(n.matchedAlias.includes("*")&&/\.[^/]+$/.test(n.path))return n.path.replace(/\.[^/]+$/,"")}return n.path}function Nn(e,t){let r=["components","ui","lib","hooks","utils"].filter(s=>!t[s]);if(r.length)throw new Error([`Could not resolve the following aliases in ${k.info(e)}: ${k.info(r.join(", "))}.`,`Configure path aliases in ${k.info("tsconfig.json")} or imports in ${k.info("package.json")} for this workspace and try again.`].join(`
|
|
21
|
+
`))}async function Ln(e){try{let t=await ut.search(e);if(!t)return null;let r=st.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in U)throw new Error(`"${s}" is a built-in registry and cannot be overridden.`)}return r}catch(t){let r=`${e}/components.json`;throw t instanceof Error&&t.message.includes("reserved registry")?t:new Error(`Invalid configuration found in ${k.info(r)}.`)}}async function vc(e){let t={};for(let s of Object.keys(e.aliases)){if(!_n(s,e))continue;let n=e.resolvedPaths[s],i=await On(e.resolvedPaths.cwd,n);if(!i){t[s]=e;continue}let o=await Ue(i);if(!o)throw new Error([`Could not load the workspace config in ${k.info(i)}.`,`Add ${k.info("components.json")} to this workspace and configure its path aliases or package imports, then try again.`].join(`
|
|
22
|
+
`));t[s]=o}let r=mr.safeParse(t);return r.success?r.data:null}async function On(e,t){let r=Fn(e,t),s=z.relative(r,t),i=(await jn.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>z.dirname(o)).find(o=>s.startsWith(o));return i?z.join(r,i):null}function _n(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function Fn(e,t){let r=e.split(z.sep),s=t.split(z.sep),n=[];for(let i=0;i<Math.min(r.length,s.length)&&r[i]===s[i];i++)n.push(r[i]);return n.join(z.sep)}async function Pr(e,t){return(await Q(e))?.tailwindVersion==="v4"?"new-york-v4":t}function Rc(e){return"base"}function $r(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:!1},rsc:!1,tsx:!0,aliases:{components:"",utils:""},registries:{...U}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}import ht from"fast-glob";import ie from"fs-extra";import{loadConfig as Dn}from"tsconfig-paths";import{z as be}from"zod";var yt=["**/node_modules/**",".next","public","dist","build"],Mn=be.object({compilerOptions:be.object({paths:be.record(be.string().or(be.array(be.string())))})});async function Q(e,t){let[r,s,n,i,o,a,l,p]=await Promise.all([ht.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:yt}),ie.pathExists(ne.resolve(e,"src")),Bn(e),Vn(e),zn(e,t?.configCssFile),jr(e),Ar(e),se(e,!1)]),g=await ie.pathExists(ne.resolve(e,`${s?"src/":""}app`)),m={framework:W.manual,isSrcDir:s,isRSC:!1,isTsx:n,tailwindConfigFile:i,tailwindCssFile:o,tailwindVersion:a,frameworkVersion:null,aliasPrefix:l.prefix};if(r.find(d=>d.startsWith("next.config."))?.length)return m.framework=g?W["next-app"]:W["next-pages"],m.isRSC=g,m.frameworkVersion=await Wn(m.framework,p),m;if(r.find(d=>d.startsWith("astro.config."))?.length)return m.framework=W.astro,m;if(r.find(d=>d.startsWith("gatsby-config."))?.length)return m.framework=W.gatsby,m;if(r.find(d=>d.startsWith("composer.json"))?.length)return m.framework=W.laravel,m;if(Object.keys(p?.dependencies??{}).find(d=>d.startsWith("@remix-run/")))return m.framework=W.remix,m;if([...Object.keys(p?.dependencies??{}),...Object.keys(p?.devDependencies??{})].find(d=>d.startsWith("@tanstack/react-start")))return m.framework=W["tanstack-start"],m;if(r.find(d=>d.startsWith("react-router.config."))?.length)return m.framework=W["react-router"],m;if(r.find(d=>d.startsWith("vite.config."))?.length)return m.framework=W.vite,m;let h=r.find(d=>d.startsWith("app.config"));return h?.length&&(await ie.readFile(ne.resolve(e,h),"utf8")).includes("defineConfig")?(m.framework=W.vite,m):(p?.dependencies?.expo&&(m.framework=W.expo),m)}async function Wn(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let n=r.match(/(\d+\.\d+\.\d+)/);return n?n[1]:r}async function jr(e){let[t,r]=await Promise.all([se(e,!1),Ue(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||"")?"v3":"v4"}async function zn(e,t){if(t){let i=ne.resolve(e,t);if(await ie.pathExists(i))return t}let[r,s]=await Promise.all([ht.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:yt}),jr(e)]);if(!r.length)return null;let n=s==="v4"?'@import "tailwindcss"':"@tailwind base";for(let i of r){let o=await ie.readFile(ne.resolve(e,i),"utf8");if(o.includes('@import "tailwindcss"')||o.includes("@import 'tailwindcss'")||o.includes("@tailwind base"))return i}return null}async function Vn(e){let t=await ht.glob("tailwind.config.*",{cwd:e,deep:3,ignore:yt});return t.length?t[0]:null}async function Un(e){let t=await Dn(e),r=t?.resultType==="success"&&Object.entries(t.paths).length?t.paths:(await Jn(e))?.compilerOptions.paths;if(!r||!Object.entries(r).length)return null;for(let[s,n]of Object.entries(r)){let i=Array.isArray(n)?n:[n];if(i.includes("./*")||i.includes("./src/*")||i.includes("./app/*")||i.includes("./resources/js/*"))return s.replace(/\/\*$/,"")??null}return Object.keys(r)?.[0].replace(/\/\*$/,"")??null}async function Ar(e){let t=await Un(e),r=Sr(e);return r&&t?.startsWith("#")?{prefix:r,source:"package_imports"}:t?{prefix:t,source:"tsconfig_paths"}:r?{prefix:r,source:"package_imports"}:{prefix:null,source:null}}async function Bn(e){return(await ht.glob("tsconfig.*",{cwd:e,deep:1,ignore:yt})).length>0}async function Jn(e){for(let t of["tsconfig.json","tsconfig.web.json","tsconfig.app.json"]){let r=ne.resolve(e,t);if(!await ie.pathExists(r))continue;let s=await ie.readFile(r,"utf8"),n;try{n=JSON.parse(qn(s))}catch{continue}let i=Mn.safeParse(n);if(!i.error)return i.data}return null}function qn(e){let t="",r=!1,s=!1;for(let n=0;n<e.length;n++){let i=e[n],o=e[n+1];if(r){if(t+=i,s){s=!1;continue}if(i==="\\"){s=!0;continue}i==='"'&&(r=!1);continue}if(i==='"'){r=!0,t+=i;continue}if(i==="/"&&o==="/"){for(;n<e.length&&e[n]!==`
|
|
23
|
+
`;)n++;n<e.length&&(t+=e[n]);continue}if(i==="/"&&o==="*"){for(n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){n++;break}e[n]===`
|
|
24
|
+
`&&(t+=`
|
|
25
|
+
`),n++}continue}if(i===","){let a=n+1;for(;a<e.length;){for(;/\s/.test(e[a]??"");)a++;if(e[a]==="/"&&e[a+1]==="/"){for(a+=2;a<e.length&&e[a]!==`
|
|
26
|
+
`&&e[a]!=="\r";)a++;continue}if(e[a]==="/"&&e[a+1]==="*"){for(a+=2;a<e.length&&!(e[a]==="*"&&e[a+1]==="/");)a++;a+=2;continue}break}if(e[a]==="}"||e[a]==="]")continue}t+=i}return t}async function Kc(e,t=null){let[r,s,n]=await Promise.all([Ue(e),t?Promise.resolve(t):Q(e),Ar(e)]);if(r)return r;if(!s||!s.tailwindCssFile||s.tailwindVersion==="v3"&&!s.tailwindConfigFile)return null;let i=n.source==="package_imports"?Er(e):null;if(!s.aliasPrefix)return null;let o=Gn(s.aliasPrefix,n.source==="package_imports"),a=n.source==="package_imports"&&i?Hn({...o,components:i.components??o.components,ui:i.ui??o.ui,hooks:i.hooks??o.hooks,lib:i.lib??o.lib,utils:i.utils??o.utils}):o;if(!a.components||!a.utils)return null;let l={$schema:"https://www.loveui.dev/schema.json",rsc:s.isRSC,tsx:s.isTsx,style:"new-york",tailwind:{config:s.tailwindConfigFile??"",baseColor:"zinc",css:s.tailwindCssFile,cssVariables:!0,prefix:""},iconLibrary:"lucide",aliases:a};return await ft(e,l)}function Gn(e,t=!1){return t&&e==="#"?{components:"",ui:void 0,hooks:void 0,lib:void 0,utils:""}:{components:`${e}/components`,ui:`${e}/components/ui`,hooks:`${e}/hooks`,lib:`${e}/lib`,utils:`${e}/lib/utils`}}function Hn(e){let t={...e};return!t.ui&&t.components&&(t.ui=`${t.components}/ui`),!t.lib&&t.utils.endsWith("/utils")&&(t.lib=t.utils.slice(0,-6)),!t.utils&&t.lib&&(t.utils=`${t.lib}/utils`),t}async function xt(e){if(!e.resolvedPaths?.cwd)return"v3";let t=await Q(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}async function Dc(e){let t=await Ue(e);if(!t)return[];let s=(await ft(e,t)).resolvedPaths.ui;if(!ie.existsSync(s))return[];let n=await dt(),i=new Set(n?.map(a=>a.name)??[]);return(await Kn.readdir(s)).filter(a=>/\.(tsx|jsx)$/.test(a)).map(a=>ne.basename(a,ne.extname(a))).filter(a=>i.has(a))}import{existsSync as Re,promises as ce,statSync as Ki}from"fs";import{tmpdir as ss}from"os";import y,{basename as Zt}from"path";function Nr(e,t,r={}){let{ignoreImports:s=!1}=r,n=e.replace(/\r\n/g,`
|
|
27
|
+
`).trim(),i=t.replace(/\r\n/g,`
|
|
28
|
+
`).trim();if(n===i)return!0;if(!s)return!1;let o=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,a=g=>g.replace(o,(m,h,d,x)=>{if(d.startsWith("."))return`${h}${d}${x}`;let b=d.split("/"),E=b[b.length-1];return`${h}@normalized/${E}${x}`}),l=a(n),p=a(i);return l===p}import{existsSync as Yn}from"fs";import Lr from"path";function me(e){let t=Lr.basename(e);return/^\.env(\.|$)/.test(t)}function Or(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let s=Lr.join(e,r);if(Yn(s))return s}return null}function Ie(e){let t=e.split(`
|
|
29
|
+
`),r={};for(let s of t){let n=s.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let o=n.substring(0,i).trim(),a=n.substring(i+1).trim();o&&(r[o]=a.replace(/^["']|["']$/g,""))}return r}function _r(e,t){let r=Ie(e),s=Ie(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function Fr(e,t){let r=Ie(e),s=Ie(t),n=e.trimEnd();n&&!n.endsWith(`
|
|
30
|
+
`)&&(n+=`
|
|
31
|
+
`);let i=[];for(let[o,a]of Object.entries(s))o in r||i.push(`${o}=${a}`);return i.length>0?(n&&(n+=`
|
|
32
|
+
`),n+=i.join(`
|
|
33
|
+
`),n+`
|
|
34
|
+
`):n&&!n.endsWith(`
|
|
35
|
+
`)?n+`
|
|
36
|
+
`:n}import Zn from"ora";function ue(e,t){return Zn({text:e,isSilent:t?.silent})}import{promises as ki}from"fs";import{tmpdir as Ci}from"os";import Jr from"path";import{SyntaxKind as Xn}from"ts-morph";var wt=async({sourceFile:e,config:t,baseColor:r})=>{if(t.tailwind?.cssVariables||!r?.inlineColors)return e;let s=r.inlineColors;return e.getDescendantsOfKind(Xn.StringLiteral).forEach(n=>{let i=n.getLiteralText(),o=ei(i,s).trim();o!==i&&n.setLiteralValue(o)}),e};function Be(e){if(!e.includes("/")&&!e.includes(":"))return[null,e,null];let t=-1,r=0;for(let l=e.length-1;l>=0;l--){let p=e[l];if(p==="]")r++;else if(p==="[")r--;else if(p===":"&&r===0){t=l;break}}let s=null,n;t===-1?n=e:(s=e.slice(0,t),n=e.slice(t+1));let i=n.lastIndexOf("/");if(i===-1)return[s,n,null];let o=n.slice(0,i),a=n.slice(i+1);return[s,o,a]}var Qn=["bg-","text-","border-","ring-offset-","ring-"];function ei(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),s=new Set,n=new Set;for(let i of r){let[o,a,l]=Be(i),p=Qn.find(m=>a?.startsWith(m));if(!p){s.has(i)||s.add(i);continue}let g=a?.replace(p,"");if(g&&g in t.light){s.add([o,`${p}${t.light[g]}`].filter(Boolean).join(":")+(l?`/${l}`:"")),n.add(["dark",o,`${p}${t.dark[g]}`].filter(Boolean).join(":")+(l?`/${l}`:""));continue}s.has(i)||s.add(i)}return[...Array.from(s),...Array.from(n)].join(" ").trim()}var ve={lucide:{name:"lucide",title:"Lucide",packages:["lucide-react"],import:"import { ICON } from 'lucide-react'",usage:"<ICON />",export:"lucide-react"},tabler:{name:"tabler",title:"Tabler Icons",packages:["@tabler/icons-react"],import:"import { ICON } from '@tabler/icons-react'",usage:"<ICON />",export:"@tabler/icons-react"},hugeicons:{name:"hugeicons",title:"HugeIcons",packages:["@hugeicons/react","@hugeicons/core-free-icons"],import:`import { HugeiconsIcon } from '@hugeicons/react'
|
|
37
|
+
import { ICON } from '@hugeicons/core-free-icons';`,usage:"<HugeiconsIcon icon={ICON} strokeWidth={2} />",export:"@hugeicons/core-free-icons"},phosphor:{name:"phosphor",title:"Phosphor Icons",packages:["@phosphor-icons/react"],import:"import { ICON } from '@phosphor-icons/react'",usage:"<ICON strokeWidth={2} />",export:"@phosphor-icons/react"},remixicon:{name:"remixicon",title:"Remix Icon",packages:["@remixicon/react"],import:"import { ICON } from '@remixicon/react'",usage:"<ICON />",export:"@remixicon/react"}};import{SyntaxKind as B}from"ts-morph";var bt=async({sourceFile:e,config:t})=>{let r=t.iconLibrary;if(!r||!(r in ve))return e;let s=r,n=ve[s],i=[];for(let o of e.getDescendantsOfKind(B.JsxSelfClosingElement)){if(o.getTagNameNode()?.getText()!=="IconPlaceholder")continue;let a=o.getAttributes().find(x=>x.getKind()!==B.JsxAttribute?!1:x.asKindOrThrow(B.JsxAttribute).getNameNode().getText()===s);if(!a)continue;let l=a.asKindOrThrow(B.JsxAttribute),p=l.getInitializer()?.getText().replace(/^["']|["']$/g,"");if(!p)continue;i.includes(p)||i.push(p);let m=n.usage.match(/<(\w+)([^>]*)\s*\/>/);l.remove();for(let x of o.getAttributes()){if(x.getKind()!==B.JsxAttribute)continue;let b=x.asKindOrThrow(B.JsxAttribute);b.getNameNode().getText()in ve&&b.remove()}if(!m){o.getTagNameNode()?.replaceWithText(p);continue}let[,h,d]=m;if(h==="ICON"){let x=o.getAttributes().filter(b=>b.getKind()!==B.JsxAttribute?!0:!(b.asKindOrThrow(B.JsxAttribute).getNameNode().getText()in ve)).map(b=>b.getText()).join(" ");x.trim()?o.replaceWithText(`<${p} ${x} />`):o.getTagNameNode()?.replaceWithText(p)}else{let x=new Set(o.getAttributes().filter(f=>f.getKind()===B.JsxAttribute).map(f=>f.asKindOrThrow(B.JsxAttribute).getNameNode().getText())),E=d.replace(/\{ICON\}/g,`{${p}}`).trim().split(/\s+(?=\w+=)/).filter(f=>f).map(f=>{let P=f.split("=")[0];return P&&!x.has(P)?f:null}).filter(Boolean),R=o.getAttributes().filter(f=>f.getKind()!==B.JsxAttribute?!0:!(f.asKindOrThrow(B.JsxAttribute).getNameNode().getText()in ve)).map(f=>f.getText()).join(" "),u=[...E,R].filter(Boolean).join(" ");o.replaceWithText(`<${h} ${u} />`)}}for(let o of e.getImportDeclarations()??[])if(o.getModuleSpecifier()?.getText()?.includes("icon-placeholder")){let p=(o.getNamedImports()??[]).find(g=>g.getName()==="IconPlaceholder");p&&p.remove(),o.getNamedImports()?.length===0&&o.remove()}if(i.length>0){let o=n.import.split(`
|
|
38
|
+
`),a=[];for(let l of o){let p=l.match(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);if(!p)continue;let[,g,m]=p,h=g.split(",").map(x=>x.trim()).map(x=>x==="ICON"?i.map(b=>({name:b})):{name:x}).flat(),d=e.addImportDeclaration({moduleSpecifier:m,namedImports:h});a.push(d)}if(!ti(e))for(let l of a)l.replaceWithText(l.getText().replace(";",""))}return e};function ti(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??!1}import{SyntaxKind as ri}from"ts-morph";var It=async({sourceFile:e,config:t,isRemote:r})=>{let s=t.aliases?.utils,n=typeof s=="string"?ni(s):"@",i=n?`${n}/lib/utils`:"@/lib/utils";if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of e.getImportStringLiterals()){let a=si(o.getLiteralValue(),t,r);if(o.setLiteralValue(a),i===a||a==="@/lib/utils"){if(!o.getFirstAncestorByKind(ri.ImportDeclaration)?.getNamedImports().some(g=>g.getName()==="cn")||!t.aliases.utils)continue;o.setLiteralValue(i===a?a.replace(i,t.aliases.utils):t.aliases.utils)}}return e};function si(e,t,r=!1){if(e=ii(e,t),!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/new-york/")),e==="@/registry")return t.aliases.components;if(!e.startsWith("@/registry/")){if(e==="@/lib/utils"&&t.aliases.utils)return t.aliases.utils;if(t.aliases.ui&&e.match(/^@\/components\/ui(?=\/|$)/))return e.replace(/^@\/components\/ui/,t.aliases.ui);if(t.aliases.components&&e.match(/^@\/components(?=\/|$)/))return e.replace(/^@\/components/,t.aliases.components);if(t.aliases.hooks&&e.match(/^@\/hooks(?=\/|$)/))return e.replace(/^@\/hooks/,t.aliases.hooks);if(t.aliases.lib&&e.match(/^@\/lib(?=\/|$)/))return e.replace(/^@\/lib/,t.aliases.lib);let s=t.aliases.components.split("/")[0];return e.replace(/^@\//,`${s}/`)}return e.match(/^@\/registry\/(.+)\/ui/)?e.replace(/^@\/registry\/(.+)\/ui/,t.aliases.ui??`${t.aliases.components}/ui`):t.aliases.utils&&e.match(/^@\/registry\/(.+)\/lib\/utils$/)?t.aliases.utils:t.aliases.components&&e.match(/^@\/registry\/(.+)\/components/)?e.replace(/^@\/registry\/(.+)\/components/,t.aliases.components):t.aliases.lib&&e.match(/^@\/registry\/(.+)\/lib/)?e.replace(/^@\/registry\/(.+)\/lib/,t.aliases.lib):t.aliases.hooks&&e.match(/^@\/registry\/(.+)\/hooks/)?e.replace(/^@\/registry\/(.+)\/hooks/,t.aliases.hooks):e.replace(/^@\/registry\/[^/]+/,t.aliases.components)}function ni(e){if(e.startsWith("#"))return"";if(e.endsWith("/lib/utils"))return e.slice(0,-10);if(e.startsWith("@")){let[r,s]=e.split("/");return r&&s?`${r}/${s}`:e}let t=e.indexOf("/");return t===-1?e:e.slice(0,t)}function ii(e,t){if(e==="#registry")return"@/registry";if(e.startsWith("#/"))return e.replace(/^#\//,"@/");if(e.startsWith("#registry/"))return e.replace(/^#registry\//,"@/registry/");for(let{alias:r,normalized:s}of oi(t)){if(e===r)return s;if(e.startsWith(`${r}/`))return`${s}${e.slice(r.length)}`}return e}function oi(e){return e.aliases?[{alias:e.aliases.ui,normalized:"@/components/ui"},{alias:e.aliases.components,normalized:"@/components"},{alias:e.aliases.hooks,normalized:"@/hooks"},{alias:e.aliases.lib,normalized:"@/lib"},{alias:e.aliases.utils,normalized:"@/lib/utils"}].filter(t=>typeof t.alias=="string"&&t.alias.startsWith("#")).sort((t,r)=>r.alias.length-t.alias.length):[]}import{transformFromAstSync as ai}from"@babel/core";import{parse as ci}from"@babel/parser";import li from"@babel/plugin-transform-typescript";import*as vt from"recast";var pi={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Kr=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=vt.parse(r,{parser:{parse:i=>ci(i,pi)}}),n=ai(s,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[li],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return vt.print(n.ast).code};import{SyntaxKind as gi}from"ts-morph";var mi=/^["']use client["']$/g,Rt=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(gi.ExpressionStatement);return r&&mi.test(r.getText())&&r.remove(),e};import{Project as Ti,ScriptKind as Pi}from"ts-morph";import{Project as ul,ScriptKind as fl,SyntaxKind as ee}from"ts-morph";var ui=new Set(["cn-font-heading"]),fi=/\bcn-[a-z-]+\b/;function Dr(e){return fi.test(e)&&!ui.has(e)}function Mr(e){return e.split(/\s+/).filter(t=>t.length>0&&!Dr(t)).join(" ")}function Wr(e){return e.split(/\s+/).some(Dr)}function St(e){let t=e.getLiteralValue();if(!Wr(t))return;let r=Mr(t);r!==t&&e.setLiteralValue(r)}function Ht(e){for(let t of e.getDescendantsOfKind(ee.StringLiteral))St(t);for(let t of e.getDescendantsOfKind(ee.NoSubstitutionTemplateLiteral))St(t)}function di(e){let t=[];for(let r of e.getDescendantsOfKind(ee.JsxAttribute)){let s=r.getNameNode().getText();if(s!=="className"&&s!=="classNames")continue;let n=r.getInitializer();if(n?.isKind(ee.StringLiteral)){let i=n.getLiteralValue();if(Wr(i)){let o=Mr(i);o===""?t.push(r):o!==i&&n.setLiteralValue(o)}}n?.isKind(ee.JsxExpression)&&Ht(n)}for(let r of t)r.remove();for(let r of e.getDescendantsOfKind(ee.CallExpression))if(r.getExpression().getText()==="cva")for(let s of r.getArguments()){if(s.isKind(ee.StringLiteral)){St(s);continue}if(s.isKind(ee.NoSubstitutionTemplateLiteral)){St(s);continue}Ht(s)}for(let r of e.getDescendantsOfKind(ee.CallExpression))r.getExpression().getText()==="mergeProps"&&Ht(r)}var Et=async({sourceFile:e})=>(di(e),e);import{Project as hi,ScriptKind as yi,SyntaxKind as v}from"ts-morph";var xi=[["-ml-","-ms-"],["-mr-","-me-"],["ml-","ms-"],["mr-","me-"],["pl-","ps-"],["pr-","pe-"],["-left-","-start-"],["-right-","-end-"],["left-","start-"],["right-","end-"],["inset-l-","inset-inline-start-"],["inset-r-","inset-inline-end-"],["rounded-tl-","rounded-ss-"],["rounded-tr-","rounded-se-"],["rounded-bl-","rounded-es-"],["rounded-br-","rounded-ee-"],["rounded-l-","rounded-s-"],["rounded-r-","rounded-e-"],["border-l-","border-s-"],["border-r-","border-e-"],["border-l","border-s"],["border-r","border-e"],["text-left","text-start"],["text-right","text-end"],["scroll-ml-","scroll-ms-"],["scroll-mr-","scroll-me-"],["scroll-pl-","scroll-ps-"],["scroll-pr-","scroll-pe-"],["float-left","float-start"],["float-right","float-end"],["clear-left","clear-start"],["clear-right","clear-end"],["origin-top-left","origin-top-start"],["origin-top-right","origin-top-end"],["origin-bottom-left","origin-bottom-start"],["origin-bottom-right","origin-bottom-end"],["origin-left","origin-start"],["origin-right","origin-end"]],wi=[["-translate-x-","translate-x-"],["translate-x-","-translate-x-"]],bi=[["space-x-","space-x-reverse"],["divide-x-","divide-x-reverse"]],Ii=[["cursor-w-resize","cursor-e-resize"],["cursor-e-resize","cursor-w-resize"]],vi=[["data-[side=inline-start]","slide-in-from-right","slide-in-from-end"],["data-[side=inline-start]","slide-out-to-right","slide-out-to-end"],["data-[side=inline-end]","slide-in-from-left","slide-in-from-start"],["data-[side=inline-end]","slide-out-to-left","slide-out-to-start"]],Ri="cn-rtl-flip",zr=["ContextMenuContent","ContextMenuSubContent","DropdownMenuSubContent"],Vr={right:"inline-end",left:"inline-start"},Si=["-left-","-right-","left-","right-"],kt=async({sourceFile:e,config:t})=>(t.rtl&&Br(e),e);async function Il(e,t){if(!t)return e;let s=new hi({useInMemoryFileSystem:!0}).createSourceFile("component.tsx",e,{scriptKind:yi.TSX,overwrite:!0});return Br(s),s.getText()}function Ur(e){return e.replace(/^["']|["']$/g,"")}function q(e){let t=e.getLiteralText();e.setLiteralValue(Ei(t))}function Ei(e){return e.split(" ").flatMap(t=>{if(t.startsWith("rtl:")||t.startsWith("ltr:"))return[t];if(t===Ri)return["rtl:rotate-180"];let[r,s,n]=Be(t);if(!s)return[t];for(let[l,p]of wi)if(s.startsWith(l)){let g=s.replace(l,p),m=r?`rtl:${r}:${g}${n?`/${n}`:""}`:`rtl:${g}${n?`/${n}`:""}`;return[t,m]}for(let[l,p]of bi)if(s.startsWith(l)){let g=r?`rtl:${r}:${p}`:`rtl:${p}`;return[t,g]}for(let[l,p]of Ii)if(s===l){let g=r?`rtl:${r}:${p}`:`rtl:${p}`;return[t,g]}for(let[l,p,g]of vi)if(r?.includes(l)&&s.startsWith(p)){let m=s.replace(p,g);return[n?`${r}:${m}/${n}`:`${r}:${m}`]}let i=r?.includes("data-[side=left]")||r?.includes("data-[side=right]"),o=s;for(let[l,p]of xi)if(!(i&&Si.some(g=>l.startsWith(g)))&&s.startsWith(l)){if(!l.endsWith("-")&&s!==l)continue;o=s.replace(l,p);break}let a;return r?a=n?`${r}:${o}/${n}`:`${r}:${o}`:a=n?`${o}/${n}`:o,[a]}).join(" ")}function Br(e){e.getDescendantsOfKind(v.CallExpression).filter(t=>t.getExpression().getText()==="cva").forEach(t=>{let r=t.getArguments()[0];r?.isKind(v.StringLiteral)&&q(r),t.getArguments()[1]?.isKind(v.ObjectLiteralExpression)&&t.getArguments()[1]?.getDescendantsOfKind(v.PropertyAssignment).find(s=>s.getName()==="variants")?.getDescendantsOfKind(v.PropertyAssignment).forEach(s=>{s.getDescendantsOfKind(v.PropertyAssignment).forEach(n=>{let i=n.getInitializerIfKind(v.StringLiteral);i&&q(i)})})}),e.getDescendantsOfKind(v.JsxAttribute).forEach(t=>{if(t.getNameNode().getText()==="className"){let r=t.getInitializer();if(r?.isKind(v.StringLiteral)&&q(r),t.getInitializer()?.isKind(v.JsxExpression)){let s=t.getInitializer()?.getDescendantsOfKind(v.CallExpression).find(n=>n.getExpression().getText()==="cn");s&&s.getArguments().forEach(n=>{(n.isKind(v.ConditionalExpression)||n.isKind(v.BinaryExpression))&&n.getChildrenOfKind(v.StringLiteral).forEach(q),n.isKind(v.StringLiteral)&&q(n)})}}t.getNameNode().getText()==="classNames"&&t.getInitializer()?.isKind(v.JsxExpression)&&t.getDescendantsOfKind(v.PropertyAssignment).forEach(r=>{if(r.getInitializer()?.isKind(v.CallExpression)){let n=r.getInitializerIfKind(v.CallExpression);n&&n.getArguments().forEach(i=>{i.isKind(v.ConditionalExpression)&&i.getChildrenOfKind(v.StringLiteral).forEach(q),i.isKind(v.StringLiteral)&&q(i)})}let s=r.getInitializer();s?.isKind(v.StringLiteral)&&r.getNameNode().getText()!=="variant"&&q(s)})}),e.getDescendantsOfKind(v.CallExpression).filter(t=>t.getExpression().getText()==="mergeProps").forEach(t=>{let r=t.getArguments()[0];if(r?.isKind(v.ObjectLiteralExpression)){let s=r.getProperties().find(n=>n.isKind(v.PropertyAssignment)&&n.getName()==="className");if(s?.isKind(v.PropertyAssignment)){let n=s.getInitializer();n?.isKind(v.CallExpression)&&n.getExpression().getText()==="cn"&&n.getArguments().forEach(i=>{i.isKind(v.StringLiteral)&&q(i),(i.isKind(v.ConditionalExpression)||i.isKind(v.BinaryExpression))&&i.getChildrenOfKind(v.StringLiteral).forEach(q)}),n?.isKind(v.StringLiteral)&&q(n)}}}),[...e.getDescendantsOfKind(v.JsxSelfClosingElement),...e.getDescendantsOfKind(v.JsxOpeningElement)].forEach(t=>{let r=t.getTagNameNode().getText();if(!zr.includes(r))return;let s=t.getAttributes().find(a=>a.isKind(v.JsxAttribute)&&a.getNameNode().getText()==="side");if(!s?.isKind(v.JsxAttribute))return;let n=s.getInitializer();if(!n?.isKind(v.StringLiteral))return;let i=Ur(n.getText()??""),o=Vr[i];o&&n.replaceWithText(`"${o}"`)}),e.getDescendantsOfKind(v.BindingElement).forEach(t=>{if(t.getNameNode().getText()!=="side")return;let n=t.getFirstAncestorByKind(v.FunctionDeclaration)?.getName();if(!n||!zr.includes(n))return;let i=t.getInitializer();if(!i?.isKind(v.StringLiteral))return;let o=Ur(i.getText()??""),a=Vr[o];a&&i.replaceWithText(`"${a}"`)})}import{SyntaxKind as T}from"ts-morph";var Ct=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await xt(t);return e.getDescendantsOfKind(T.CallExpression).filter(s=>s.getExpression().getText()==="cva").forEach(s=>{if(s.getArguments()[0]?.isKind(T.StringLiteral)){let n=s.getArguments()[0];n&&n.replaceWithText(`"${oe(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}s.getArguments()[1]?.isKind(T.ObjectLiteralExpression)&&s.getArguments()[1]?.getDescendantsOfKind(T.PropertyAssignment).find(n=>n.getName()==="variants")?.getDescendantsOfKind(T.PropertyAssignment).forEach(n=>{n.getDescendantsOfKind(T.PropertyAssignment).forEach(i=>{let o=i.getInitializerIfKind(T.StringLiteral);o&&o?.replaceWithText(`"${oe(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})})}),e.getDescendantsOfKind(T.JsxAttribute).forEach(s=>{if(s.getNameNode().getText()==="className"){if(s.getInitializer()?.isKind(T.StringLiteral)){let n=s.getInitializer();n&&n.replaceWithText(`"${oe(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}if(s.getInitializer()?.isKind(T.JsxExpression)){let n=s.getInitializer()?.getDescendantsOfKind(T.CallExpression).find(i=>i.getExpression().getText()==="cn");n&&n.getArguments().forEach(i=>{(i.isKind(T.ConditionalExpression)||i.isKind(T.BinaryExpression))&&i.getChildrenOfKind(T.StringLiteral).forEach(o=>{o.replaceWithText(`"${oe(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}),i.isKind(T.StringLiteral)&&i.replaceWithText(`"${oe(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})}}s.getNameNode().getText()==="classNames"&&s.getInitializer()?.isKind(T.JsxExpression)&&s.getDescendantsOfKind(T.PropertyAssignment).forEach(n=>{if(n.getInitializer()?.isKind(T.CallExpression)){let i=n.getInitializerIfKind(T.CallExpression);i&&i.getArguments().forEach(o=>{o.isKind(T.ConditionalExpression)&&o.getChildrenOfKind(T.StringLiteral).forEach(a=>{a.replaceWithText(`"${oe(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}),o.isKind(T.StringLiteral)&&o.replaceWithText(`"${oe(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})}if(n.getInitializer()?.isKind(T.StringLiteral)&&n.getNameNode().getText()!=="variant"){let i=n.getInitializer();i&&i.replaceWithText(`"${oe(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}})}),e};function oe(e,t="",r){return r==="v3"?e.split(" ").map(s=>{let[n,i,o]=Be(s);return n?o?`${n}:${t}${i}/${o}`:`${n}:${t}${i}`:o?`${t}${i}/${o}`:`${t}${i}`}).join(" "):e.split(" ").map(s=>s.indexOf(`${t}:`)===0?s:`${t}:${s.trim()}`).join(" ")}var $i=new Ti({compilerOptions:{}});async function ji(e){let t=await ki.mkdtemp(Jr.join(Ci(),"love-ui-"));return Jr.join(t,e)}async function qr(e,t=[It,Rt,wt,Ct,kt,bt,Et]){let r=await ji(e.filename),s=$i.createSourceFile(r,e.raw,{scriptKind:Pi.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await Kr({sourceFile:s,...e}):s.getText()}import{SyntaxKind as te}from"ts-morph";var Ai=["a","span","div","Link","label","Label"],Gr=async({sourceFile:e,config:t})=>{if(!t.style?.startsWith("base-"))return e;let r=10;for(let s=0;s<r;s++){let i=e.getDescendantsOfKind(te.JsxElement).filter(l=>l.getOpeningElement().getAttribute("asChild"));if(i.length===0)break;let o=i.filter(l=>!l.getDescendantsOfKind(te.JsxElement).some(g=>g.getOpeningElement().getAttribute("asChild"))),a=[];for(let l of o){let p=l.getOpeningElement(),g=p.getAttribute("asChild");if(!g)continue;let m=p.getTagNameNode().getText(),d=l.getJsxChildren().find(u=>u.getKind()===te.JsxElement||u.getKind()===te.JsxSelfClosingElement);if(!d){g.remove();continue}let x,b,E;if(d.getKind()===te.JsxSelfClosingElement){let u=d.asKindOrThrow(te.JsxSelfClosingElement);x=u.getTagNameNode().getText(),b=u.getAttributes().map(f=>f.getText()).join(" "),E=""}else{let u=d.asKindOrThrow(te.JsxElement),f=u.getOpeningElement();x=f.getTagNameNode().getText(),b=f.getAttributes().map(P=>P.getText()).join(" "),E=u.getJsxChildren().map(P=>P.getText()).join("")}let R=m==="Button"&&Ai.includes(x);a.push({parentElement:l,parentTagName:m,childTagName:x,childProps:b,childChildren:E,needsNativeButton:R})}for(let l of a.reverse()){let g=l.parentElement.getOpeningElement().getAttributes().filter(b=>b.getKind()===te.JsxAttribute?b.asKindOrThrow(te.JsxAttribute).getNameNode().getText()!=="asChild":!0).map(b=>b.getText()).join(" "),m=l.childProps?`{<${l.childTagName} ${l.childProps} />}`:`{<${l.childTagName} />}`,h=g?`${g} `:"";h+=`render=${m}`,l.needsNativeButton&&(h+=" nativeButton={false}");let d=l.childChildren.trim()?`${l.childChildren}`:"",x=`<${l.parentTagName} ${h}>${d}</${l.parentTagName}>`;l.parentElement.replaceWithText(x)}}return e};import{promises as Ni}from"fs";import{SyntaxKind as ae}from"ts-morph";var Yr=[{marker:"cn-font-heading",utility:"font-heading",supportToken:"--font-heading:"}],Zr=/\bcn-font-heading\b/,Hr=new Map;async function Li(e,t=[]){let r=new Set(t);if(!e)return r;let s=Hr.get(e);return s||(s=Ni.readFile(e,"utf8").then(n=>{let i=new Set;for(let o of Yr)n.includes(o.supportToken)&&i.add(o.marker);return i}).catch(()=>new Set),Hr.set(e,s)),(await s).forEach(n=>{r.add(n)}),r}function Xr(e,t){let r=e;for(let s of Yr)r.includes(s.marker)&&(r=r.replace(new RegExp(`\\b${s.marker}\\b`,"g"),t.has(s.marker)?s.utility:""));return r.replace(/\s+/g," ").trim()}function Tt(e,t){let r=e.getLiteralValue();if(!Zr.test(r))return;let s=Xr(r,t);s!==r&&e.setLiteralValue(s)}function Yt(e,t){for(let r of e.getDescendantsOfKind(ae.StringLiteral))Tt(r,t);for(let r of e.getDescendantsOfKind(ae.NoSubstitutionTemplateLiteral))Tt(r,t)}var Qr=async({sourceFile:e,config:t,supportedFontMarkers:r})=>{let s=await Li(t.resolvedPaths.tailwindCss,r),n=[];for(let i of e.getDescendantsOfKind(ae.JsxAttribute)){let o=i.getNameNode().getText();if(o!=="className"&&o!=="classNames")continue;let a=i.getInitializer();if(a?.isKind(ae.StringLiteral)){let l=a.getLiteralValue();if(Zr.test(l)){let p=Xr(l,s);p===""?n.push(i):p!==l&&a.setLiteralValue(p)}}a?.isKind(ae.JsxExpression)&&Yt(a,s)}for(let i of n)i.remove();for(let i of e.getDescendantsOfKind(ae.CallExpression)){if(i.getExpression().getText()==="cva"){for(let o of i.getArguments()){if(o.isKind(ae.StringLiteral)){Tt(o,s);continue}if(o.isKind(ae.NoSubstitutionTemplateLiteral)){Tt(o,s);continue}Yt(o,s)}continue}i.getExpression().getText()==="mergeProps"&&Yt(i,s)}return e};import{twMerge as Oi}from"tailwind-merge";import{SyntaxKind as _i}from"ts-morph";var Fi="animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!",es=async({sourceFile:e,config:t})=>{let r=t.menuColor,s=r==="default-translucent"||r==="inverted-translucent";for(let n of e.getDescendantsOfKind(_i.JsxAttribute)){if(n.getNameNode().getText()!=="className")continue;let o=n.getInitializer();if(!o)continue;let a=o.getText();if(!a.includes("cn-menu-target")&&!a.includes("cn-menu-translucent"))continue;let l=a,p=!1;r==="inverted"||r==="inverted-translucent"?l=l.replace(/cn-menu-target/g,"dark"):(l=l.replace(/cn-menu-target/g,""),p=!0),s?l=l.replace(/"([^"]*cn-menu-translucent[^"]*)"/g,(g,m)=>`"${Oi(m,Fi).replace(/\s*\bcn-menu-translucent\b\s*/g," ").trim()}"`):l.includes("cn-menu-translucent")&&(l=l.replace(/cn-menu-translucent/g,""),p=!0),p&&(l=l.replace(/\s{2,}/g," "),l=l.replace(/"\s+/g,'"'),l=l.replace(/\s+"/g,'"'),l=l.replace(/,\s*""\s*,/g,","),l=l.replace(/\(\s*""\s*,/g,"("),l=l.replace(/,\s*""\s*\)/g,")")),n.setInitializer(l)}return e};var ts=async({sourceFile:e})=>(e.getFunctions().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy")}),e.getVariableDeclarations().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy")}),e.getExportDeclarations().forEach(t=>{t.getNamedExports().forEach(s=>{s.getName()==="middleware"&&s.setName("proxy"),s.getAliasNode()?.getText()==="middleware"&&s.setAlias("proxy")})}),e);import Di from"prompts";import{Project as ns,ScriptKind as is}from"ts-morph";import{loadConfig as os}from"tsconfig-paths";var Xt=[".ts",".tsx",".js",".jsx"],Mi=new Set(["tailwindConfig","tailwindCss"]),Wi=["components","ui","lib","hooks"];async function Tp(e,t,r){if(!e?.length)return{filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:!1,force:!1,silent:!1,isRemote:!1,isWorkspace:!1,...r};let s=ue("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([Q(t.resolvedPaths.cwd),t.tailwind.baseColor?jt(t.tailwind.baseColor):Promise.resolve(void 0)]),o=os(t.resolvedPaths.cwd),a=Gi(r.plannedFiles??e,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,path:r.path}),l=new ns({compilerOptions:{}}),p=[],g=[],m=[],h=[],d=null;for(let R=0;R<e.length;R++){let u=e[R];if(!u.content)continue;let f=Pt(u,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:$t(e.map(N=>N.path),u.path),path:r.path,fileIndex:R});if(!f)continue;let P=Zt(u.path),A=y.dirname(f);if(t.tsx||(f=f.replace(/\.tsx?$/,N=>N===".tsx"?".jsx":".js")),me(f)&&!Re(f)){let N=Or(A);N&&(f=N)}let L=Re(f);if(u.type==="registry:lib"&&Zt(u.path)==="utils.ts"&&n?.framework.name==="laravel"&&L){m.push(y.relative(t.resolvedPaths.cwd,f));continue}if(L&&Ki(f).isDirectory())throw new Error(`Cannot write to ${f}: path exists and is a directory. Please provide a file path instead.`);let ye=u.type==="registry:file"||u.type==="registry:item",V=me(f)||ye?u.content:await qr({filename:u.path,raw:u.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote,supportedFontMarkers:r.supportedFontMarkers},[It,Rt,wt,Ct,bt,es,Gr,kt,...rs(f,n,t)?[ts]:[],Qr,Et]);if(L&&!me(f)){let N=await as({config:t,content:V,filePaths:a,project:l,projectInfo:n,resolvedPath:f,tsConfig:o}),Pe=await ce.readFile(f,"utf-8");if(Nr(Pe,N,{ignoreImports:r.isWorkspace})){m.push(y.relative(t.resolvedPaths.cwd,f));continue}}if(L&&!r.overwrite&&!me(f)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:N}=await Di({type:"confirm",name:"overwrite",message:`The file ${k.info(P)} already exists. Would you like to overwrite?`,initial:!1});if(!N){m.push(y.relative(t.resolvedPaths.cwd,f)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start()}if(rs(f,n,t)&&(f=f.replace(/middleware\.(ts|js)$/,"proxy.$1")),Re(A)||await ce.mkdir(A,{recursive:!0}),me(f)&&L){let N=await ce.readFile(f,"utf-8"),Pe=Fr(N,V);if(h=_r(N,V),d=y.relative(t.resolvedPaths.cwd,f),!h.length){m.push(y.relative(t.resolvedPaths.cwd,f));continue}await ce.writeFile(f,Pe,"utf-8"),g.push(y.relative(t.resolvedPaths.cwd,f));continue}await ce.writeFile(f,V,"utf-8"),L?g.push(y.relative(t.resolvedPaths.cwd,f)):(p.push(y.relative(t.resolvedPaths.cwd,f)),me(f)&&(h=Object.keys(Ie(V)),d=y.relative(t.resolvedPaths.cwd,f)))}let x=[...p,...g,...m],b=await qi(x,t,a);if(g.push(...b),p=Array.from(new Set(p)),g=Array.from(new Set(g.filter(R=>!p.includes(R)))),m=Array.from(new Set(m)),!(p.length||g.length)&&!m.length&&s?.info("No files updated."),p.length){if(s?.succeed(`Created ${p.length} ${p.length===1?"file":"files"}:`),!r.silent)for(let R of p)S.log(` - ${R}`)}else s?.stop();if(g.length&&(ue(`Updated ${g.length} ${g.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let R of g)S.log(` - ${R}`);if(m.length&&(ue(`Skipped ${m.length} ${m.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let R of m)S.log(` - ${R}`);if(h.length&&d&&(ue(`Added the following variables to ${k.info(d)}:`)?.info(),!r.silent))for(let R of h)S.log(` ${k.success("+")} ${R}`);return{filesCreated:p,filesUpdated:g,filesSkipped:m}}function Pt(e,t,r){if(r.path){let i=y.isAbsolute(r.path)?r.path:y.join(t.resolvedPaths.cwd,r.path);if(/\.[^/\\]+$/.test(i)){if(r.fileIndex===0)return i}else{let a=y.basename(e.path);return y.join(i,a)}}if(e.target){if(e.target.startsWith("~/"))return y.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target,o=zi(i,t);return o?.resolvedPath?o.resolvedPath:(o?.target&&(i=o.target),e.type==="registry:page"&&(i=Ji(i,r.framework),!i)?"":r.isSrcDir?y.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):y.join(t.resolvedPaths.cwd,i.replace("src/","")))}let s=Ui(e,t),n=Bi(e.path,s);return y.join(s,n)}function zi(e,t){let r=e.match(/^@([^/]+)\/(.+)$/);if(!r)return null;let[,s,n]=r;if(!Vi(s))return{target:`${s}/${n}`};let i=y.resolve(t.resolvedPaths[s]),o=y.resolve(i,n);if(o!==i&&!o.startsWith(`${i}${y.sep}`))throw new Error(`Invalid target path "${e}". Target paths using @${s}/ must stay within the ${s} alias root.`);return{resolvedPath:o}}function Vi(e){return Wi.includes(e)}function Ui(e,t){return e.type==="registry:ui"?t.resolvedPaths.ui:e.type==="registry:lib"?t.resolvedPaths.lib:e.type==="registry:block"||e.type==="registry:component"?t.resolvedPaths.components:e.type==="registry:hook"?t.resolvedPaths.hooks:t.resolvedPaths.components}function $t(e,t){let r=e.map(o=>o.replace(/^\//,"")),s=t.replace(/^\//,""),n=s.split("/").slice(0,-1).join("/");if(!n)return"";let i=n.split("/");for(let o=i.length;o>0;o--){let a=i.slice(0,o).join("/");if(r.some(p=>p!==s&&p.startsWith(a+"/")))return"/"+a}return"/"+n}function Bi(e,t){let r=e.replace(/^\/|\/$/g,""),s=t.replace(/^\/|\/$/g,""),n=r.split("/"),i=s.split("/"),o=i[i.length-1],a=n.findIndex(l=>l===o);return a===-1?n[n.length-1]:n.slice(a+1).join("/")}function Ji(e,t){if(!t)return"";if(t==="next-app")return e;if(t==="next-pages"){let r=e.replace(/^app\//,"pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="react-router"){let r=e.replace(/^app\//,"app/routes/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="laravel"){let r=e.replace(/^app\//,"resources/js/pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}return""}async function qi(e,t,r=e){let s=new ns({compilerOptions:{}}),n=await Q(t.resolvedPaths.cwd),i=os(t.resolvedPaths.cwd),o=[];if(!n||i.resultType==="failed")return[];for(let a of e){let l=y.resolve(t.resolvedPaths.cwd,a);if(!Re(l))continue;let p=await ce.readFile(l,"utf-8"),g=await ce.mkdtemp(y.join(ss(),"love-ui-")),m=s.createSourceFile(y.join(g,Zt(l)),p,{scriptKind:is.TSX});if(![".tsx",".ts",".jsx",".js"].includes(m.getExtension()))continue;let h=await as({config:t,content:p,filePaths:r,project:s,projectInfo:n,resolvedPath:l,sourceFile:m,tsConfig:i});h!==p&&(await ce.writeFile(l,h,"utf-8"),o.push(a))}return o}function Gi(e,t,r){return(e??[])?.filter(s=>!!s?.content).map((s,n)=>{let i=Pt(s,t,{isSrcDir:r.isSrcDir,framework:r.framework,commonRoot:$t((e??[]).map(o=>o.path),s.path),path:r.path,fileIndex:n});return i?(t.tsx||(i=i.replace(/\.tsx?$/,o=>o===".tsx"?".jsx":".js")),y.relative(t.resolvedPaths.cwd,i)):null}).filter(s=>!!s)}async function as({content:e,resolvedPath:t,filePaths:r,config:s,projectInfo:n,tsConfig:i,project:o,sourceFile:a}){if(!n||i.resultType==="failed")return e;let l=y.extname(t);if(![".tsx",".ts",".jsx",".js"].includes(l))return e;let p=a===void 0?o.createSourceFile(y.join(ss(),`love-ui-${Math.random().toString(36).slice(2)}${l||".tsx"}`),e,{scriptKind:is.TSX,overwrite:!0}):null,g=a??p;try{let m=!1;for(let h of g.getImportDeclarations()){let d=h.getModuleSpecifierValue();if(!Gt(d,n.aliasPrefix??null))continue;let x=await Hi(d,r,s,i);if(!x)continue;let b=Zi(x,s,n,t);!b||b===d||(h.setModuleSpecifier(b),m=!0)}return m?g.getFullText():e}finally{p&&o.removeSourceFile(p)}}async function Hi(e,t,r,s){let n=(await ze(e,{...s,cwd:r.resolvedPaths.cwd}))?.path,i=!n&&!e.startsWith(".")?Qi(e,r):null;return!n&&!i?null:Yi(n??i,t,r)}function Yi(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=y.normalize(r.resolvedPaths.cwd),i=t.map(E=>E.split(y.sep).join(y.posix.sep)),o=new Set(i),a=y.extname(e),l=a!=="",p=l?e.slice(0,-a.length):e,m=y.relative(n,p).split(y.sep).join(y.posix.sep),h=l?[a]:s,d=new Set;for(let E of h){let R=p+E,u=y.posix.normalize(y.relative(n,R));(o.has(u)||Re(R))&&d.add(u);let f=y.join(p,`index${E}`),P=y.posix.normalize(y.relative(n,f));(o.has(P)||Re(f))&&d.add(P)}let x=y.basename(p);for(let E of i)h.some(R=>E.endsWith(`/${x}${R}`))&&d.add(E);return d.size===0?null:Array.from(d).sort((E,R)=>{let u=y.posix.extname(E),f=y.posix.extname(R),P=h.indexOf(u)-h.indexOf(f);if(P!==0)return P;let A=m&&E.startsWith(m)?-1:1,L=m&&R.startsWith(m)?-1:1;return A-L})[0]}function Zi(e,t,r,s){let n=y.normalize(y.join(t.resolvedPaths.cwd,e)),i=Object.entries(t.resolvedPaths).filter(([x,b])=>{if(!b||Mi.has(x))return!1;let E=y.normalize(b);if(n===E){let R=t.aliases[x];if(typeof R!="string"||!R.startsWith("#"))return!0;let u=We(R,t.resolvedPaths.cwd);return u!==null&&!u.matchedAlias.includes("*")}return n.startsWith(y.normalize(b+y.sep))}).sort((x,b)=>b[1].length-x[1].length);if(i.length===0)return null;let[o,a]=i[0],l=y.relative(a,n);l=l.split(y.sep).join("/");let p=o==="cwd"?r.aliasPrefix:t.aliases[o];if(!p)return null;if(p.startsWith("#")){let x=We(p,t.resolvedPaths.cwd);if(x)return Xi(p,l,x)??(s?to(s,n):null)}let g=y.posix.extname(l),m=Xt.includes(g)?"":g,h=l.slice(0,l.length-g.length);h.endsWith("/index")&&(h=h.slice(0,-6));let d=h===""?"":`/${h}`;return d=d.replace("/src",""),`${p}${d}${m}`}function Xi(e,t,r){let s=y.posix.extname(t),n=Xt.includes(s)&&r.emitMode==="strip_extension"?"":s,i=t?t.slice(0,t.length-s.length)+n:"";return r.matchedAlias.includes("*")?i?`${e}/${i}`:e:i===""||i==="index"?e:null}function Qi(e,t){let r=eo(t);for(let s of r){if(e===s.alias||e===s.canonical)return s.rootPath;if(e.startsWith(`${s.alias}/`))return y.join(s.rootPath,e.slice(s.alias.length+1));if(e.startsWith(`${s.canonical}/`))return y.join(s.rootPath,e.slice(s.canonical.length+1))}return null}function eo(e){return[{alias:e.aliases.ui,canonical:"@/components/ui",rootPath:e.resolvedPaths.ui},{alias:e.aliases.components,canonical:"@/components",rootPath:e.resolvedPaths.components},{alias:e.aliases.hooks,canonical:"@/hooks",rootPath:e.resolvedPaths.hooks},{alias:e.aliases.lib,canonical:"@/lib",rootPath:e.resolvedPaths.lib},{alias:e.aliases.utils,canonical:"@/lib/utils",rootPath:e.resolvedPaths.utils}].filter(t=>typeof t.alias=="string"&&typeof t.rootPath=="string").sort((t,r)=>r.alias.length-t.alias.length||r.canonical.length-t.canonical.length)}function to(e,t){let r=y.relative(y.dirname(e),t);r=r.split(y.sep).join("/");let s=y.posix.extname(r),n=Xt.includes(s)?"":s,i=r.slice(0,r.length-s.length);return i.endsWith("/index")&&(i=i.slice(0,-6)),i.startsWith(".")||(i=`./${i}`),`${i}${n}`}function rs(e,t,r){let s=e===y.join(r.resolvedPaths.cwd,"middleware.ts")||e===y.join(r.resolvedPaths.cwd,"middleware.js"),n=t?.framework.name==="next-app"||t?.framework.name==="next-pages";if(!s||!n||!t?.frameworkVersion)return!1;let i=parseInt(t.frameworkVersion.split(".")[0]);return!isNaN(i)&&i>=16}import{Project as ro,ScriptKind as Kp}from"ts-morph";import{loadConfig as Mp}from"tsconfig-paths";import{z as cs}from"zod";var zp=new ro({compilerOptions:{}});function F(e){try{return new URL(e),!0}catch{return!1}}function Se(e){return e.endsWith(".json")&&!F(e)}function Vp(e){return!e||e.type!=="registry:item"&&e.type!=="registry:file"?!1:(e.files??[]).every(r=>!!r.target&&(r.type==="registry:file"||r.type==="registry:item"))}async function ls(e,t){if(!so(t))return cs.array(it).parse(e.flat().filter(Boolean));let r=await Q(t.resolvedPaths.cwd),s=new Map,n=cs.array(it).parse(e.flat().filter(Boolean));return n.forEach(i=>{let o=Pt(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:$t(n.map(a=>a.path),i.path)});o&&s.set(o,i)}),Array.from(s.values())}function so(e){return!!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}import no from"deepmerge";function io(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?et:e.style:et}function Ee(e){let t=$r({style:et,registries:U});return e?De.parse(no(t,{...e,style:io(e),registries:{...U,...e.registries}})):t}var At={headers:{}};function Nt(e){At.headers={...At.headers,...e}}function ps(e){return At.headers[e]||{}}function Je(){At.headers={}}function oo(e){let t=new Set;return typeof e=="string"?Ke(e).forEach(r=>t.add(r)):(Ke(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{Ke(r).forEach(s=>t.add(s))}),e.headers&&Object.values(e.headers).forEach(r=>{Ke(r).forEach(s=>t.add(s))})),Array.from(t)}function gs(e,t){let s=oo(t).filter(n=>!process.env[n]);if(s.length>0)throw new Ne(e,s)}function ng(e,t){for(let r of e)ke(r,Ee(t));Je()}var ms="{name}",Lt="{style}",us=/\${(\w+)}/g,fs="?",ao="&";function co(e){return e.startsWith("./")||e.startsWith("/")}function ke(e,t){let{registry:r,item:s}=we(e);if(!r){if(F(e)||Se(e)||co(e))return null;r="@love-ui"}let i={...U,...t?.registries}[r];if(!i)throw new re(r);return gs(r,i),{url:lo(s,i,t),headers:po(i)}}function lo(e,t,r){if(typeof t=="string"){let n=t.replace(ms,e);return r?.style&&n.includes(Lt)&&(n=n.replace(Lt,r.style)),Fe(n)}let s=t.url.replace(ms,e);return r?.style&&s.includes(Lt)&&(s=s.replace(Lt,r.style)),s=Fe(s),t.params?go(s,t.params):s}function po(e){if(typeof e=="string"||!e.headers)return{};let t={};for(let[r,s]of Object.entries(e.headers)){let n=Fe(s);mo(s,n)&&(t[r]=n)}return t}function go(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let a=Fe(o);a&&r.append(i,a)}let s=r.toString();if(!s)return e;let n=e.includes(fs)?ao:fs;return`${e}${n}${s}`}function mo(e,t){let r=t.trim();if(!r)return!1;if(e.includes("${")&&e.match(us)){let n=e.replace(us,"").trim();return r!==n}return!0}function Ot(e){if(F(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return`${pe}/${e}`}import{promises as uo}from"fs";import{homedir as fo}from"os";import ds from"path";import{HttpsProxyAgent as ho}from"https-proxy-agent";import yo,{Headers as xo}from"node-fetch";import{z as qe}from"zod";var wo=process.env.https_proxy?new ho(process.env.https_proxy):void 0,Qt=new Map;async function O(e,t={}){t={useCache:!0,...t};try{return await Promise.all(e.map(async s=>{let n=Ot(s);if(t.useCache&&Qt.has(n))return Qt.get(n);let i=(async()=>{let o=ps(n),a=new xo({Accept:"application/vnd.loveui.v1+json, application/json;q=0.9","User-Agent":"love-ui"});for(let[p,g]of Object.entries(o))a.set(p,g);let l=await yo(n,{agent:wo,headers:a});if(!l.ok){let p;if(l.headers.get("content-type")?.includes("application/json")){let g=await l.json(),m=qe.object({detail:qe.string().optional(),title:qe.string().optional(),message:qe.string().optional(),error:qe.string().optional()}).safeParse(g);m.success&&(p=m.data.detail||m.data.message,m.data.error&&(p=`[${m.data.error}] ${p}`))}throw l.status===401?new $e(n,p):l.status===404?new Y(n,p):l.status===410?new tt(n,p):l.status===403?new je(n,p):new Ae(n,l.status,p)}return l.json()})();return t.useCache&&Qt.set(n,i),i}))}catch(r){throw r}}async function hs(e){try{let t=e;e.startsWith("~/")&&(t=ds.join(fo(),e.slice(2)));let r=ds.resolve(t),s=await uo.readFile(r,"utf8"),n=JSON.parse(s);try{return M.parse(n)}catch(i){throw new D(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new Z(e,t):t instanceof D?t:new Z(e,t)}}import{createHash as jo}from"crypto";import Rs from"path";import{promises as er}from"fs";import{tmpdir as bo}from"os";import Ge from"path";import Io from"deepmerge";import vo from"stringify-object";import{Project as Ro,QuoteKind as So,ScriptKind as ys,SyntaxKind as w}from"ts-morph";async function _g(e,t,r){if(!e||(r={silent:!1,tailwindVersion:"v3",...r},r.tailwindVersion==="v4"))return;let s=Ge.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=ue(`Updating ${k.info(s)}`,{silent:r.silent}).start(),i=await er.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Eo(i,e,t);await er.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function Eo(e,t,r){let s=await xs(e,r),n=s.getDescendantsOfKind(w.ObjectLiteralExpression).find(o=>o.getProperties().some(a=>a.isKind(w.PropertyAssignment)&&a.getName()==="content"));if(!n)return e;let i=Po(n);return ko(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{To(n,o)}),t.theme&&await Co(n,t.theme),s.getFullText()}function ko(e,t,{quoteChar:r}){let s=e.getProperty("darkMode");if(!s){let n={name:t.name,initializer:`[${r}${t.value}${r}]`};return t.name==="darkMode"?(e.insertPropertyAssignment(0,n),e):(e.addPropertyAssignment(n),e)}if(s.isKind(w.PropertyAssignment)){let n=s.getInitializer(),i=`${r}${t.value}${r}`;if(n?.isKind(w.StringLiteral)){let o=n.getText();return n.replaceWithText(`[${o}, ${i}]`),e}if(n?.isKind(w.ArrayLiteralExpression)){if(n.getElements().map(o=>o.getText()).includes(i))return e;n.addElement(i)}return e}return e}async function Co(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),tr(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(w.PropertyAssignment)).getInitializer();if(s?.isKind(w.ObjectLiteralExpression)){let n=s.getText(),i=await $o(n),o=Io(i,t??{},{arrayMerge:(l,p)=>p}),a=vo(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");s.replaceWithText(a)}rr(e)}function To(e,t){let r=e.getProperty("plugins");if(!r)return e.addPropertyAssignment({name:"plugins",initializer:`[${t}]`}),e;if(r.isKind(w.PropertyAssignment)){let s=r.getInitializer();if(s?.isKind(w.ArrayLiteralExpression)){if(s.getElements().map(n=>n.getText().replace(/["']/g,"")).includes(t.replace(/["']/g,"")))return e;s.addElement(t)}return e}return e}async function xs(e,t){let r=await er.mkdtemp(Ge.join(bo(),"love-ui-")),s=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=Ge.join(r,`love-ui-${Ge.basename(s)}`);return new Ro({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:Ge.extname(s)===".ts"?ys.TS:ys.JS})}function Po(e){return e.getFirstDescendantByKind(w.StringLiteral)?.getQuoteKind()===So.Single?"'":'"'}function tr(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(w.SpreadAssignment)){let n=s.asKindOrThrow(w.SpreadAssignment),i=n.getExpression().getText();e.insertPropertyAssignment(r,{name:`"___${i.replace(/^\.\.\./,"")}"`,initializer:`"...${i.replace(/^\.\.\./,"")}"`}),n.remove()}else if(s.isKind(w.PropertyAssignment)){let i=s.asKindOrThrow(w.PropertyAssignment).getInitializer();i&&i.isKind(w.ObjectLiteralExpression)?tr(i.asKindOrThrow(w.ObjectLiteralExpression)):i&&i.isKind(w.ArrayLiteralExpression)&&ws(i.asKindOrThrow(w.ArrayLiteralExpression))}}}function ws(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(w.ObjectLiteralExpression))tr(s.asKindOrThrow(w.ObjectLiteralExpression));else if(s.isKind(w.ArrayLiteralExpression))ws(s.asKindOrThrow(w.ArrayLiteralExpression));else if(s.isKind(w.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`)}}}function rr(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(w.PropertyAssignment)){let n=s,i=n.getInitializer();if(i&&i.isKind(w.StringLiteral)){let o=i.asKindOrThrow(w.StringLiteral).getLiteralValue();o.startsWith("...")&&(e.insertSpreadAssignment(r,{expression:o.slice(3)}),n.remove())}else i?.isKind(w.ObjectLiteralExpression)?rr(i):i&&i.isKind(w.ArrayLiteralExpression)&&bs(i.asKindOrThrow(w.ArrayLiteralExpression))}}}function bs(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(w.ObjectLiteralExpression))rr(s.asKindOrThrow(w.ObjectLiteralExpression));else if(s.isKind(w.ArrayLiteralExpression))bs(s.asKindOrThrow(w.ArrayLiteralExpression));else if(s.isKind(w.StringLiteral)){let n=s.getText(),i=/(?:^['"])(\.\.\..*)(?:['"]$)/g;i.test(n)&&(e.removeElement(r),e.insertElement(r,n.replace(i,"$1")))}}}async function $o(e){let r=(await xs(`const theme = ${e}`,null)).getStatements()[0];if(r?.getKind()===w.VariableStatement){let n=(r.getDeclarationList()?.getDeclarations()[0]).getInitializer();if(n?.isKind(w.ObjectLiteralExpression))return await _t(n)}throw new Error("Invalid input: not an object literal")}function _t(e){let t={};for(let r of e.getProperties())if(r.isKind(w.PropertyAssignment)){let s=r.getName().replace(/\'/g,"");r.getInitializer()?.isKind(w.ObjectLiteralExpression)?t[s]=_t(r.getInitializer()):r.getInitializer()?.isKind(w.ArrayLiteralExpression)?t[s]=Is(r.getInitializer()):t[s]=sr(r.getInitializer())}return t}function Is(e){let t=[];for(let r of e.getElements())r.isKind(w.ObjectLiteralExpression)?t.push(_t(r.asKindOrThrow(w.ObjectLiteralExpression))):r.isKind(w.ArrayLiteralExpression)?t.push(Is(r.asKindOrThrow(w.ArrayLiteralExpression))):t.push(sr(r));return t}function sr(e){switch(e.getKind()){case w.StringLiteral:return e.getText();case w.NumericLiteral:return Number(e.getText());case w.TrueKeyword:return!0;case w.FalseKeyword:return!1;case w.NullKeyword:return null;case w.ArrayLiteralExpression:return e.getElements().map(sr);case w.ObjectLiteralExpression:return _t(e);default:return e.getText()}}function vs(e){let t={};for(let r of Object.keys(e)){let s=r.split("-"),n=s[0],i=s.slice(1).join("-");i===""?typeof t[n]=="object"?t[n].DEFAULT=`hsl(var(--${r}))`:t[n]=`hsl(var(--${r}))`:(typeof t[n]!="object"&&(t[n]={DEFAULT:`hsl(var(--${n}))`}),t[n][i]=`hsl(var(--${r}))`)}for(let[r,s]of Object.entries(t))typeof s=="object"&&s.DEFAULT===`hsl(var(--${r}))`&&!(r in e)&&delete s.DEFAULT;return t}import Ce from"deepmerge";import{z as nr}from"zod";function He(e,t){let r={},s=[...e];for(let n=0;n<s.length;n++){let i=ke(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers))}return Nt(r),s}async function fe(e,t,r={}){return await Promise.all(e.map(async n=>{if(Se(n))return hs(n);if(F(n)){let[a]=await O([n],r);try{return M.parse(a)}catch(l){throw new D(n,l)}}let i=He([n],t),[o]=await O(i,r);try{return M.parse(o)}catch(a){throw new D(n,a)}}))}var tm=ge.extend({type:nt,_source:nr.string().optional(),font:ot.optional(),config:nr.any().optional()}).passthrough();async function Ss(e,t,r={}){r={useCache:!0,...r};let s=[],n=[],i=[],o=Array.from(new Set(e)),a=await fe(o,t,r),l=new Map;for(let u=0;u<a.length;u++)a[u]&&l.set(o[u],a[u]);for(let[u,f]of Array.from(l.entries())){let P={...f,_source:u};if(s.push(P),f.registryDependencies){let A=f.registryDependencies;if(t?.registries)A=He(f.registryDependencies,t);else{let V=f.registryDependencies.filter(N=>N.startsWith("@"));if(V.length>0){let{registry:N}=we(V[0]);throw new re(N)}}let{items:L,registryNames:ye}=await Ye(A,t,r,new Set(o));n.push(...L),i.push(...ye)}}if(s.push(...n),i.length>0){let u=Array.from(new Set(i)),f=u.filter(A=>!A.startsWith("@")),P=u.filter(A=>A.startsWith("@"));if(P.length>0){let A=await fe(P,t,r);for(let L=0;L<A.length;L++){let V={...A[L],_source:P[L]};s.push(V)}}if(f.length>0){let A=await dt();if(!A&&s.length===0)return null;if(A){f.includes("index")&&f.unshift("index");let L=[];for(let Pe of f){let Ws=await Ao(Pe,t,r);L.push(...Ws)}let ye=Array.from(new Set(L)),V=await O(ye,r),N=nr.array(M).parse(V);s.push(...N)}}}if(!s.length)return null;if((o.includes("index")||i.includes("index"))&&t.tailwind.baseColor){let u=await No(t.tailwind.baseColor,t);u&&s.unshift(u)}let p=new Map;s.forEach(u=>{let f=u._source||u.name;p.set(u,f)}),s=Oo(s,p),s.sort((u,f)=>u.type==="registry:theme"&&f.type!=="registry:theme"?-1:u.type!=="registry:theme"&&f.type==="registry:theme"?1:0);let g={};s.forEach(u=>{g=Ce(g,u.tailwind??{})});let m={};s.forEach(u=>{m=Ce(m,u.cssVars??{})});let h={};s.forEach(u=>{h=Ce(h,u.css??{})});let d="";s.forEach(u=>{u.docs&&(d+=`${u.docs}
|
|
39
|
+
`)});let x={};s.forEach(u=>{x=Ce(x,u.envVars??{})});let b=await ls(s.map(u=>u.files??[]),t),E=s.filter(u=>u.type==="registry:font"&&u.font).map(u=>({...u,type:"registry:font",font:u.font})),R=wr.parse({dependencies:Ce.all(s.map(u=>u.dependencies??[])),devDependencies:Ce.all(s.map(u=>u.devDependencies??[])),files:b,tailwind:g,cssVars:m,css:h,docs:d,fonts:E.length>0?E:void 0});return Object.keys(x).length>0&&(R.envVars=x),R}async function Ye(e,t,r={},s=new Set){let n=[],i=[];for(let o of e)if(!s.has(o)){if(s.add(o),F(o)||Se(o)){let[a]=await fe([o],t,r);if(a&&(n.push(a),a.registryDependencies)){let l=t?.registries?He(a.registryDependencies,t):a.registryDependencies,p=await Ye(l,t,r,s);n.push(...p.items),i.push(...p.registryNames)}}else if(o.startsWith("@")&&t?.registries){let{registry:a}=we(o);if(a&&!(a in t.registries))throw new re(a);let[l]=await fe([o],t,r);if(l&&(n.push(l),l.registryDependencies)){let p=t?.registries?He(l.registryDependencies,t):l.registryDependencies,g=await Ye(p,t,r,s);n.push(...g.items),i.push(...g.registryNames)}}else if(i.push(o),t)try{let[a]=await fe([o],t,r);if(a&&a.registryDependencies){let l=t?.registries?He(a.registryDependencies,t):a.registryDependencies,p=await Ye(l,t,r,s);n.push(...p.items),i.push(...p.registryNames)}}catch{}}return{items:n,registryNames:i}}async function Ao(e,t,r={}){if(F(e))return[e];let{registryNames:s}=await Ye([e],t,r,new Set),n=t.resolvedPaths?.cwd?await Pr(t.resolvedPaths.cwd,t.style):t.style,i=s.map(o=>Ot(F(o)?o:`styles/${n}/${o}.json`));return Array.from(new Set(i))}async function No(e,t){let[r,s]=await Promise.all([jt(e),xt(t)]);if(!r)return null;let n={name:e,type:"registry:theme",tailwind:{config:{theme:{extend:{borderRadius:{lg:"var(--radius)",md:"calc(var(--radius) - 2px)",sm:"calc(var(--radius) - 4px)"},colors:{}}}}},cssVars:{theme:{},light:{radius:"0.5rem"},dark:{}}};return t.tailwind.cssVariables&&(n.tailwind.config.theme.extend.colors={...n.tailwind.config.theme.extend.colors,...vs(r.cssVars.dark??{})},n.cssVars={theme:{...r.cssVars.theme,...n.cssVars.theme},light:{...r.cssVars.light,...n.cssVars.light},dark:{...r.cssVars.dark,...n.cssVars.dark}},s==="v4"&&r.cssVarsV4&&(n.cssVars={theme:{...r.cssVarsV4.theme,...n.cssVars.theme},light:{radius:"0.625rem",...r.cssVarsV4.light},dark:{...r.cssVarsV4.dark}})),n}function le(e,t){let r=t||e.name,s=jo("sha256").update(r).digest("hex").substring(0,8);return`${e.name}::${s}`}function Lo(e){if(F(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:Rs.basename(s,".json");return{name:i,hash:le({name:i},e)}}if(Se(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:Rs.basename(e,".json");return{name:s,hash:le({name:s},e)}}let{item:t}=we(e);return{name:t,hash:le({name:t},e)}}function Oo(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(p=>{let g=t.get(p)||p.name,m=le(p,g);r.set(m,p),s.set(m,p),n.set(m,0),i.set(m,[])});let o=new Map;e.forEach(p=>{let g=t.get(p)||p.name,m=le(p,g);o.has(p.name)||o.set(p.name,[]),o.get(p.name).push(m),g!==p.name&&(o.has(g)||o.set(g,[]),o.get(g).push(m))}),e.forEach(p=>{let g=t.get(p)||p.name,m=le(p,g);p.registryDependencies&&p.registryDependencies.forEach(h=>{let d,x=o.get(h)||[];if(x.length===1)d=x[0];else if(x.length>1)d=x[0];else{let{name:b}=Lo(h),E=o.get(b)||[];E.length>0&&(d=E[0])}d&&r.has(d)&&(i.get(d).push(m),n.set(m,n.get(m)+1))})});let a=[],l=[];for(n.forEach((p,g)=>{p===0&&a.push(g)});a.length>0;){let p=a.shift(),g=r.get(p);l.push(g),i.get(p).forEach(m=>{let h=n.get(m)-1;n.set(m,h),h===0&&a.push(m)})}if(l.length!==e.length){let p=new Set(l.map(g=>{let m=t.get(g)||g.name;return le(g,m)}));e.forEach(g=>{let m=t.get(g)||g.name,h=le(g,m);p.has(h)||l.push(g)})}return l}import{z as ks}from"zod";async function ir(e,t){let{config:r,useCache:s}=t||{};if(F(e)){let[a]=await O([e],{useCache:s});return Es(e,a)}if(!e.startsWith("@"))throw new Le(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let i=ke(n,Ee(r));if(!i?.url)throw new Y(n);i.headers&&Object.keys(i.headers).length>0&&Nt({[i.url]:i.headers});let[o]=await O([i.url],{useCache:s});return Es(n,o)}function Es(e,t){try{let r=fr.parse(t);if(r.include?.length)throw new C(`Registry catalog "${e}" uses "include", but consumer registry endpoints must serve a resolved registry catalog. Run "npx love-ui build" and serve the built registry.json, or use loadRegistry() in a dynamic route.`,{context:{registry:e,include:r.include},suggestion:"Serve a flattened registry.json for CLI consumers. Source registry.json files with include are supported by love-ui build and loadRegistry()."});return r}catch(r){throw r instanceof C?r:new D(e,r,{subject:"registry catalog",suggestion:"The registry catalog may be corrupted or have an invalid format. Please make sure it returns a valid registry.json object. See https://www.loveui.dev/schema/registry.json."})}}async function Ft(e,t){let{config:r,useCache:s=!1}=t||{};return Je(),fe(e,Ee(r),{useCache:s})}async function Fo(e,t){let{config:r,useCache:s=!1}=t||{};return Je(),Ss(e,Ee(r),{useCache:s})}async function Cs(e,t){let{useCache:r=!0}=t||{};r||ut.clearCaches();let s=await ut.search(e);if(!s)return{registries:U};let n=ks.object({registries:zt.optional()}).safeParse(s.config);if(!n.success)throw new rt(e,n.error);return{registries:{...U,...n.data.registries||{}}}}async function dt(){try{let[e]=await O(["index.json"]);return dr.parse(e)}catch(e){S.error(`
|
|
40
|
+
`),xe(e)}}async function wm(){try{let[e]=await O(["styles/index.json"]);return hr.parse(e)}catch(e){return S.error(`
|
|
41
|
+
`),xe(e),[]}}async function bm(){try{let[e]=await O(["icons/index.json"]);return yr.parse(e)}catch(e){return xe(e),{}}}async function Im(){return pr}async function jt(e){try{let[t]=await O([`colors/${e}.json`]).catch(async r=>{if(!(r instanceof Y))throw r;return O([`colors-${e}.json`]).catch(async s=>{if(!(s instanceof Y))throw s;return O(["colors-zinc.json"])})});return xr.parse(t)}catch(t){xe(t)}}async function Ko(e,t){let r=[];for(let s of t){let n=e.find(i=>i.name===s);if(n&&(r.push(n),n.registryDependencies)){let i=await Ko(e,n.registryDependencies);r.push(...i)}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function vm(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return(await O(r)).map(n=>M.parse(n))}catch(r){return xe(r),[]}}async function Rm(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[s,n]=t.type?.split(":")??[];return s in e.resolvedPaths?_o.join(e.resolvedPaths[s],n):null}async function Ts(e){e={useCache:!0,...e};let t=`${pe}/registries.json`,[r]=await O([t],{useCache:e.useCache});try{return Ir.parse(r)}catch(s){throw s instanceof ks.ZodError?new Oe(s):s}}async function Do(e){let t=await Ts(e);return t?Object.fromEntries(t.map(r=>[r.name,r.url])):null}async function Mo(e){e={useCache:!0,...e};let t=`${pe}/config.json`,[r]=await O([t],{useCache:e.useCache});return vr.parse(r).presets}async function Sm(e,t){return(await Mo(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}import Wo from"fuzzysort";import{z as de}from"zod";async function Ze(e,t){let{query:r,limit:s,offset:n,config:i,useCache:o}=t||{},a=[];for(let h of e){let x=((await ir(h,{config:i,useCache:o})).items||[]).map(b=>({name:b.name,type:b.type,description:b.description,registry:h,addCommandArgument:Bo(b.name,h)}));a=a.concat(x)}r&&(a=Vo(a,{query:r,limit:a.length,keys:["name","description"]}));let l=n||0,p=s||a.length,g=a.length,m={pagination:{total:g,offset:l,limit:p,hasMore:l+p<g},items:a.slice(l,l+p)};return br.parse(m)}var zo=de.object({name:de.string(),type:de.string().optional(),description:de.string().optional(),registry:de.string().optional(),addCommandArgument:de.string().optional()}).passthrough();function Vo(e,t){t={limit:100,threshold:-1e4,...t};let s=Wo.go(t.query,e,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(n=>n.obj);return de.array(zo).parse(s)}function Uo(e){try{return new URL(e),!0}catch{return!1}}function Bo(e,t){if(!Uo(t))return`${t}/${e}`;let r=t.indexOf("://")+3,s=t.indexOf("/",r);if(s===-1){let h=t.indexOf("?",r);if(h!==-1){let d=t.substring(0,h),b=t.substring(h).replace(/\bregistry\b/g,e);return d+b}return t}let n=t.substring(0,s),i=t.substring(s),o=i.indexOf("?")!==-1?i.indexOf("?"):i.length,a=i.substring(0,o),l=i.substring(o),p=a.lastIndexOf("registry"),g=a;p!==-1&&(g=a.substring(0,p)+e+a.substring(p+8));let m=l.replace(/\bregistry\b/g,e);return n+g+m}import*as ar from"fs/promises";import*as j from"path";var or=32;async function Om(e,t){let r=j.resolve(t.cwd,e),s=await Ns(r),n=Ls(s,r);Ps(n,r);let i={cwd:j.resolve(t.cwd),itemSources:new Map,itemSourcesByItem:new Map,firstIncludedFrom:new Map},o=!!n.include?.length;if(!o)return n.items.forEach((g,m)=>{let h={registryFile:r,registryDir:i.cwd,itemIndex:m};i.itemSources.set(g.name,h),i.itemSourcesByItem.set(g,h)}),{registry:n,itemSources:i.itemSources,itemSourcesByItem:i.itemSourcesByItem,usesInclude:o};if(j.basename(r)!=="registry.json")throw new C(`Invalid registry file at ${r}: registries that use include must be named registry.json.`,{registryFile:r});let a=await As(r,n,i,[]);Xo(a.items,i.itemSourcesByItem);let{include:l,...p}=a;return Ps(p,r),{registry:p,itemSources:i.itemSources,itemSourcesByItem:i.itemSourcesByItem,usesInclude:o}}function _m(e,t,r){return{...e.registry,items:e.registry.items.map(s=>Go($s(s,e.itemSourcesByItem,t,r)))}}async function Fm(e,t,r,s){let n={...$s(e,t.itemSourcesByItem,r,s),$schema:"https://www.loveui.dev/schema/registry-item.json"};for(let i=0;i<(e.files?.length??0);i++){let o=e.files?.[i],a=n.files?.[i];if(!a||!o)continue;let l=t.itemSourcesByItem.get(e),p=js(e,o.path,t.itemSourcesByItem,s);a.content=await qo(e.name,o.path,p,l)}return M.parse(n)}async function qo(e,t,r,s){try{return await ar.readFile(r,"utf-8")}catch(n){throw new Z(r,n,{message:`Failed to read file "${t}" for registry item "${e}" (${Xe(s)}). Expected file at ${r}.`,context:{itemName:e,itemFilePath:t,sourcePath:r},suggestion:"Make sure the file path is relative to the registry.json file that declares the item."})}}function $s(e,t,r,s){return{...e,files:e.files?.map(n=>({...n,path:Ho(e,n.path,t,r,s)}))}}function Go(e){return{...e,files:e.files?.map(({content:t,...r})=>r)}}function js(e,t,r,s){let n=r.get(e);return j.resolve(n?.registryDir??s,t)}function Ho(e,t,r,s,n){let i=js(e,t,r,n);return j.relative(s,i).split(j.sep).join("/")}async function As(e,t,r,s){if(Os(e,r.cwd),s.length>=or)throw new C(`Registry include tree is too deep at ${e}. The maximum include depth is ${or}.`,{registryFile:e,context:{maxDepth:or},suggestion:"Flatten part of the registry include tree or reduce nested include depth."});if(s.includes(e))throw new C(Qo([...s,e]),{registryFile:e});let n=s.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)throw new C(`Registry file included more than once: ${e}.
|
|
42
|
+
- first included from ${i}
|
|
43
|
+
- included again from ${n}
|
|
44
|
+
Each registry.json file can only appear once in the resolved include tree. Remove one include or move shared items into a single included registry.json.`,{registryFile:e,context:{firstSource:i,secondSource:n}});r.firstIncludedFrom.set(e,n);let o=[...s,e],a=j.dirname(e),l=[];for(let p of t.include??[]){let g=Yo(p,a,r.cwd,e),m=await Ns(g),h=Ls(m,g),d=await As(g,h,r,o);l.push(...d.items)}return t.items.forEach((p,g)=>{Zo(p,e,a),r.itemSources.set(p.name,{registryFile:e,registryDir:a,itemIndex:g}),r.itemSourcesByItem.set(p,{registryFile:e,registryDir:a,itemIndex:g})}),{...t,items:[...l,...t.items]}}async function Ns(e){try{return await ar.readFile(e,"utf-8")}catch(t){throw new Z(e,t,{message:`Failed to read registry file at ${e}.`,context:{registryFile:e},suggestion:"Check that the registry.json file exists and that the path is correct."})}}function Ls(e,t){let r;try{r=JSON.parse(e)}catch(n){throw new D(t,n,{subject:"registry file",context:{registryFile:t},suggestion:"Fix the JSON syntax in the registry.json file and try again."})}let s=Vt.safeParse(r);if(!s.success)throw new C(`Invalid registry file at ${t}:
|
|
45
|
+
${ea(s.error)}`,{registryFile:t,cause:s.error,suggestion:"Update the registry.json file so it matches the registry schema."});return s.data}function Ps(e,t){let r=[];if(e.name||r.push("name"),e.homepage||r.push("homepage"),r.length)throw new C(`Invalid root registry file at ${t}: root registry.json must define ${r.map(s=>`"${s}"`).join(" and ")}. Included registry.json files may omit these fields.`,{registryFile:t})}function Yo(e,t,r,s){if(F(e))throw new C(`Invalid include "${e}" in ${s}: remote includes are not supported by love-ui build. Use a relative path to a registry.json file in the same repository.`,{registryFile:s,context:{includePath:e}});if(j.isAbsolute(e))throw new C(`Invalid include "${e}" in ${s}: include paths must be relative. Use a path like "./registry/ui/registry.json".`,{registryFile:s,context:{includePath:e}});if(_s(e))throw new C(`Invalid include "${e}" in ${s}: include paths cannot use parent-directory traversal. Keep included registry.json files inside the registry root.`,{registryFile:s,context:{includePath:e}});if(j.basename(e)!=="registry.json")throw new C(`Invalid include "${e}" in ${s}: include paths must explicitly reference a registry.json file. Use a path like "./registry/ui/registry.json".`,{registryFile:s,context:{includePath:e}});let n=j.resolve(t,e);return Os(n,r),n}function Os(e,t){if(!Fs(e,t))throw new C(`Invalid registry file at ${e}: registry includes must stay inside ${t}.`,{registryFile:e,context:{cwd:t}})}function Zo(e,t,r){for(let s of e.files??[]){if(F(s.path))throw new C(`Invalid file path "${s.path}" for item "${e.name}" in ${t}: remote file paths are not supported by love-ui build.`,{registryFile:t,context:{itemName:e.name,filePath:s.path}});if(j.isAbsolute(s.path))throw new C(`Invalid file path "${s.path}" for item "${e.name}" in ${t}: file paths must be relative.`,{registryFile:t,context:{itemName:e.name,filePath:s.path}});if(_s(s.path))throw new C(`Invalid file path "${s.path}" for item "${e.name}" in ${t}: file paths cannot use parent-directory traversal.`,{registryFile:t,context:{itemName:e.name,filePath:s.path}});let n=j.resolve(r,s.path);if(!Fs(n,r))throw new C(`Invalid file path "${s.path}" for item "${e.name}" in ${t}: file paths must stay inside the registry chunk directory.`,{registryFile:t,context:{itemName:e.name,filePath:s.path}})}}function Xo(e,t){let r=new Map;for(let s of e){let n=r.get(s.name);if(!n){r.set(s.name,s);continue}let i=t.get(n),o=t.get(s);throw new C(`Duplicate registry item name "${s.name}". Registry item names must be unique.
|
|
46
|
+
- ${Xe(i)}
|
|
47
|
+
- ${Xe(o)}
|
|
48
|
+
Rename one of these items so each name is unique across the resolved registry.`,{context:{itemName:s.name,firstSource:Xe(i),secondSource:Xe(o)}})}}function _s(e){return e.split(/[\\/]+/).includes("..")}function Fs(e,t){let r=j.relative(t,e);return!!r&&!r.startsWith("..")&&!j.isAbsolute(r)}function Qo(e){return`Registry include cycle detected:
|
|
49
|
+
${e.map(t=>` - ${t}`).join(`
|
|
50
|
+
`)}`}function Xe(e){return e?`${e.registryFile} items[${e.itemIndex}]`:"unknown source"}function ea(e){return e.errors.map(t=>` - ${t.path.length?t.path.join("."):"(root)"}: ${t.message}`).join(`
|
|
51
|
+
`)}import{Server as ra}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as sa,ListToolsRequestSchema as na}from"@modelcontextprotocol/sdk/types.js";import G from"dedent";import{z as I}from"zod";import{zodToJsonSchema as he}from"zod-to-json-schema";var ta="love-ui@latest";async function Qe(e){return`${await gr(process.cwd())} ${ta} ${e}`}async function Te(e=process.cwd()){return{registries:(await Cs(e,{useCache:!1})).registries}}function cr(e,t){let{query:r,registries:s}=t||{},n=e.items.map(l=>{let p=[`- ${l.name}`];return l.type&&p.push(`(${l.type})`),l.description&&p.push(`- ${l.description}`),l.registry&&p.push(`[${l.registry}]`),p.push(`
|
|
52
|
+
Add command: \`npx love-ui@latest add ${l.addCommandArgument}\``),p.join(" ")}),i=`Found ${e.pagination.total} items`;r&&(i+=` matching "${r}"`),s&&s.length>0&&(i+=` in registries ${s.join(", ")}`),i+=":";let o=`Showing items ${e.pagination.offset+1}-${Math.min(e.pagination.offset+e.pagination.limit,e.pagination.total)} of ${e.pagination.total}:`,a=`${i}
|
|
53
|
+
|
|
54
|
+
${o}
|
|
55
|
+
|
|
56
|
+
${n.join(`
|
|
57
|
+
|
|
58
|
+
`)}`;return e.pagination.hasMore&&(a+=`
|
|
59
|
+
|
|
60
|
+
More items available. Use offset: ${e.pagination.offset+e.pagination.limit} to see the next page.`),a}function Ks(e){return e.map(t=>[`## ${t.name}`,t.description?`
|
|
61
|
+
${t.description}
|
|
62
|
+
`:"",t.type?`**Type:** ${t.type}`:"",t.files&&t.files.length>0?`**Files:** ${t.files.length} file(s)`:"",t.dependencies&&t.dependencies.length>0?`**Dependencies:** ${t.dependencies.join(", ")}`:"",t.devDependencies&&t.devDependencies.length>0?`**Dev Dependencies:** ${t.devDependencies.join(", ")}`:""].filter(Boolean).join(`
|
|
63
|
+
`))}function Ds(e,t){let r=e.map(n=>{let i=[`## Example: ${n.name}`,n.description?`
|
|
64
|
+
${n.description}
|
|
65
|
+
`:""];return n.files?.length&&n.files.forEach(o=>{o.content&&(i.push(`### Code (${o.path}):
|
|
66
|
+
`),i.push("```tsx"),i.push(o.content),i.push("```"))}),i.filter(Boolean).join(`
|
|
67
|
+
`)});return`# Usage Examples
|
|
68
|
+
|
|
69
|
+
Found ${e.length} example${e.length>1?"s":""} matching "${t}":
|
|
70
|
+
`+r.join(`
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
`)}var Ms=new ra({name:"loveui",version:"1.0.0"},{capabilities:{resources:{},tools:{}}});Ms.setRequestHandler(na,async()=>({tools:[{name:"get_project_registries",description:"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)",inputSchema:he(I.object({}))},{name:"list_items_in_registries",description:"List items from registries (requires components.json - use init_project if missing)",inputSchema:he(I.object({registries:I.array(I.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),limit:I.number().optional().describe("Maximum number of items to return"),offset:I.number().optional().describe("Number of items to skip for pagination")}))},{name:"search_items_in_registries",description:"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.",inputSchema:he(I.object({registries:I.array(I.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),query:I.string().describe("Search query string for fuzzy matching against item names and descriptions"),limit:I.number().optional().describe("Maximum number of items to return"),offset:I.number().optional().describe("Number of items to skip for pagination")}))},{name:"view_items_in_registries",description:"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.",inputSchema:he(I.object({items:I.array(I.string()).describe("Array of item names with registry prefix (e.g., ['@love-ui/button', '@love-ui/card'])")}))},{name:"get_item_examples_from_registries",description:"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.",inputSchema:he(I.object({registries:I.array(I.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),query:I.string().describe("Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'")}))},{name:"get_add_command_for_items",description:"Get the Love UI CLI add command for specific items in a registry. This is useful for adding one or more components to your project.",inputSchema:he(I.object({items:I.array(I.string()).describe("Array of items to get the add command for prefixed with the registry name (e.g., ['@love-ui/button', '@love-ui/card'])")}))},{name:"get_audit_checklist",description:"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.",inputSchema:he(I.object({}))}]}));Ms.setRequestHandler(sa,async e=>{try{if(!e.params.arguments)throw new Error("No tool arguments provided.");switch(e.params.name){case"get_project_registries":{let t=await Te(process.cwd());return t?.registries?{content:[{type:"text",text:G`The following registries are configured in the current project:
|
|
75
|
+
|
|
76
|
+
${Object.keys(t.registries).map(r=>`- ${r}`).join(`
|
|
77
|
+
`)}
|
|
78
|
+
|
|
79
|
+
You can view the items in a registry by running:
|
|
80
|
+
\`${await Qe("view @name-of-registry")}\`
|
|
81
|
+
|
|
82
|
+
For example: \`${await Qe("view @love-ui")}\` or \`${await Qe("view @love-ui @acme")}\` to view multiple registries.
|
|
83
|
+
`}]}:{content:[{type:"text",text:G`No components.json found or no registries configured.
|
|
84
|
+
|
|
85
|
+
To fix this:
|
|
86
|
+
1. Use the \`init\` command to create a components.json file
|
|
87
|
+
2. Or manually create components.json with a registries section`}]}}case"search_items_in_registries":{let r=I.object({registries:I.array(I.string()),query:I.string(),limit:I.number().optional(),offset:I.number().optional()}).parse(e.params.arguments),s=await Ze(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await Te(process.cwd()),useCache:!1});return s.items.length===0?{content:[{type:"text",text:G`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:cr(s,{query:r.query,registries:r.registries})}]}}case"list_items_in_registries":{let r=I.object({registries:I.array(I.string()),limit:I.number().optional(),offset:I.number().optional(),cwd:I.string().optional()}).parse(e.params.arguments),s=await Ze(r.registries,{limit:r.limit,offset:r.offset,config:await Te(process.cwd()),useCache:!1});return s.items.length===0?{content:[{type:"text",text:G`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:cr(s,{registries:r.registries})}]}}case"view_items_in_registries":{let r=I.object({items:I.array(I.string())}).parse(e.params.arguments),s=await Ft(r.items,{config:await Te(process.cwd()),useCache:!1});if(s?.length===0)return{content:[{type:"text",text:G`No items found for: ${r.items.join(", ")}
|
|
88
|
+
|
|
89
|
+
Make sure the item names are correct and include the registry prefix (e.g., @love-ui/button).`}]};let n=Ks(s);return{content:[{type:"text",text:G`Item Details:
|
|
90
|
+
|
|
91
|
+
${n.join(`
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
`)}`}]}}case"get_item_examples_from_registries":{let r=I.object({query:I.string(),registries:I.array(I.string())}).parse(e.params.arguments),s=await Te(),n=await Ze(r.registries,{query:r.query,config:s,useCache:!1});if(n.items.length===0)return{content:[{type:"text",text:G`No examples found for query "${r.query}".
|
|
96
|
+
|
|
97
|
+
Try searching with patterns like:
|
|
98
|
+
- "accordion-demo" for accordion examples
|
|
99
|
+
- "button demo" or "button example"
|
|
100
|
+
- Component name followed by "-demo" or "example"
|
|
101
|
+
|
|
102
|
+
You can also:
|
|
103
|
+
1. Use search_items_in_registries to find all items matching your query
|
|
104
|
+
2. View the main component with view_items_in_registries for inline usage documentation`}]};let i=n.items.map(a=>a.addCommandArgument),o=await Ft(i,{config:s,useCache:!1});return{content:[{type:"text",text:Ds(o,r.query)}]}}case"get_add_command_for_items":{let t=I.object({items:I.array(I.string())}).parse(e.params.arguments);return{content:[{type:"text",text:await Qe(`add ${t.items.join(" ")}`)}]}}case"get_audit_checklist":return{content:[{type:"text",text:G`## Component Audit Checklist
|
|
105
|
+
|
|
106
|
+
After adding or generating components, check the following common issues:
|
|
107
|
+
|
|
108
|
+
- [ ] Ensure imports are correct i.e named vs default imports
|
|
109
|
+
- [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.
|
|
110
|
+
- [ ] Ensure all dependencies are installed.
|
|
111
|
+
- [ ] Check for linting errors or warnings
|
|
112
|
+
- [ ] Check for TypeScript errors
|
|
113
|
+
- [ ] Use the Playwright MCP if available.
|
|
114
|
+
`}]};default:throw new Error(`Tool ${e.params.name} not found`)}}catch(t){if(t instanceof I.ZodError)return{content:[{type:"text",text:G`Invalid input parameters:
|
|
115
|
+
${t.errors.map(s=>`- ${s.path.join(".")}: ${s.message}`).join(`
|
|
116
|
+
`)}
|
|
117
|
+
`}],isError:!0};if(t instanceof $){let s=t.message;return t.suggestion&&(s+=`
|
|
118
|
+
|
|
119
|
+
\u{1F4A1} ${t.suggestion}`),t.context&&(s+=`
|
|
120
|
+
|
|
121
|
+
Context: ${JSON.stringify(t.context,null,2)}`),{content:[{type:"text",text:G`Error (${t.code}): ${s}`}],isError:!0}}let r=t instanceof Error?t.message:String(t);return{content:[{type:"text",text:G`Error: ${r}`}],isError:!0}}});export{K as a,U as b,pa as c,k as d,S as e,qa as f,Ga as g,Ha as h,hn as i,re as j,we as k,st as l,nt as m,M as n,se as o,Nr as p,me as q,Or as r,_r as s,Fr as t,ue as u,wt as v,ve as w,bt as x,It as y,Rt as z,Et as A,kt as B,Il as C,Ct as D,qr as E,Gr as F,Qr as G,es as H,Tp as I,Pt as J,$t as K,Gi as L,as as M,F as N,Vp as O,xc as P,wc as Q,bc as R,Ic as S,ut as T,Ue as U,ft as V,vc as W,On as X,Fn as Y,Rc as Z,$r as _,Ee as $,Je as aa,ng as ba,ke as ca,_g as da,fe as ea,Ss as fa,Gs as ga,lr as ha,xe as ia,ir as ja,Ft as ka,Fo as la,Cs as ma,dt as na,wm as oa,bm as pa,Im as qa,jt as ra,Ko as sa,vm as ta,Rm as ua,Ts as va,Do as wa,Mo as xa,Sm as ya,Q as za,Kc as Aa,xt as Ba,Dc as Ca,Om as Da,_m as Ea,Fm as Fa,Ze as Ga,Ms as Ha};
|