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