love-ui 1.2.17 → 1.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/dist/index.js +20 -20
  2. package/dist/mcp-server.js +1 -1
  3. package/package.json +1 -1
  4. package/registry/__index__.tsx +73 -0
  5. package/registry/default/blocks/404-1/app/page.tsx +5 -0
  6. package/registry/default/blocks/404-1/components/full-width-divider.tsx +33 -0
  7. package/registry/default/blocks/404-1/components/not-found.tsx +51 -0
  8. package/registry/default/blocks/404-2/app/page.tsx +5 -0
  9. package/registry/default/blocks/404-2/components/not-found.tsx +44 -0
  10. package/registry/default/blocks/auth1/app/page.tsx +5 -0
  11. package/registry/default/blocks/auth1/components/auth-page.tsx +66 -0
  12. package/registry/default/blocks/auth1/components/icons/github-icon.tsx +10 -0
  13. package/registry/default/blocks/auth1/components/icons/google-icon.tsx +14 -0
  14. package/registry/default/blocks/auth1/components/logo.tsx +88 -0
  15. package/registry/default/blocks/auth1/components/particles.tsx +321 -0
  16. package/registry/default/blocks/auth2/app/page.tsx +5 -0
  17. package/registry/default/blocks/auth2/components/auth.tsx +87 -0
  18. package/registry/default/blocks/auth2/components/icons/github-icon.tsx +10 -0
  19. package/registry/default/blocks/auth2/components/icons/google-icon.tsx +14 -0
  20. package/registry/default/blocks/auth2/components/ui/auth-divider.tsx +16 -0
  21. package/registry/default/blocks/auth2/components/ui/decor-icon.tsx +45 -0
  22. package/registry/default/blocks/auth3/app/page.tsx +5 -0
  23. package/registry/default/blocks/auth3/components/auth-page.tsx +84 -0
  24. package/registry/default/blocks/auth3/components/icons/github-icon.tsx +10 -0
  25. package/registry/default/blocks/auth3/components/icons/google-icon.tsx +14 -0
  26. package/registry/default/blocks/auth3/components/logo.tsx +88 -0
  27. package/registry/default/blocks/auth3/components/ui/auth-divider.tsx +16 -0
  28. package/registry/default/blocks/auth3/components/ui/decor-icon.tsx +45 -0
  29. package/registry/default/blocks/blogs1/app/page.tsx +5 -0
  30. package/registry/default/blocks/blogs1/components/blogs.tsx +97 -0
  31. package/registry/default/blocks/blogs1/components/full-width-divider.tsx +33 -0
  32. package/registry/default/blocks/blogs2/app/page.tsx +5 -0
  33. package/registry/default/blocks/blogs2/components/blogs.tsx +158 -0
  34. package/registry/default/blocks/blogs2/components/full-width-divider.tsx +33 -0
  35. package/registry/default/blocks/blogs2/components/grid-filler.tsx +74 -0
  36. package/registry/default/blocks/blogs3/app/page.tsx +5 -0
  37. package/registry/default/blocks/blogs3/components/aspect-ratio.tsx +22 -0
  38. package/registry/default/blocks/blogs3/components/blogs.tsx +224 -0
  39. package/registry/default/blocks/blogs3/components/full-width-divider.tsx +33 -0
  40. package/registry/default/blocks/blogs3/components/lazy-image.tsx +94 -0
  41. package/registry/default/blocks/contact1/app/page.tsx +9 -0
  42. package/registry/default/blocks/contact1/components/contact.tsx +65 -0
  43. package/registry/default/blocks/contact1/components/full-width-divider.tsx +33 -0
  44. package/registry/default/blocks/contact2/app/page.tsx +9 -0
  45. package/registry/default/blocks/contact2/components/contact.tsx +74 -0
  46. package/registry/default/blocks/contact2/components/full-width-divider.tsx +33 -0
  47. package/registry/default/blocks/contact2/components/icons/x-icon.tsx +12 -0
  48. package/registry/default/blocks/contact3/app/page.tsx +9 -0
  49. package/registry/default/blocks/contact3/components/contact.tsx +152 -0
  50. package/registry/default/blocks/contact3/components/full-width-divider.tsx +33 -0
  51. package/registry/default/blocks/contact3/components/icons/github-icon.tsx +10 -0
  52. package/registry/default/blocks/contact3/components/icons/x-icon.tsx +12 -0
  53. package/registry/default/blocks/contact4/app/page.tsx +9 -0
  54. package/registry/default/blocks/contact4/components/contact.tsx +120 -0
  55. package/registry/default/blocks/contact5/app/page.tsx +9 -0
  56. package/registry/default/blocks/contact5/components/contact.tsx +119 -0
  57. package/registry/default/blocks/contact5/components/decor-icon.tsx +45 -0
  58. package/registry/default/blocks/cta-1/app/page.tsx +9 -0
  59. package/registry/default/blocks/cta-1/components/cta.tsx +20 -0
  60. package/registry/default/blocks/cta-1/components/full-width-divider.tsx +33 -0
  61. package/registry/default/blocks/cta-2/app/page.tsx +9 -0
  62. package/registry/default/blocks/cta-2/components/cta.tsx +27 -0
  63. package/registry/default/blocks/cta-2/components/full-width-divider.tsx +33 -0
  64. package/registry/default/blocks/cta-3/app/page.tsx +9 -0
  65. package/registry/default/blocks/cta-3/components/cta.tsx +35 -0
  66. package/registry/default/blocks/cta-3/components/decor-icon.tsx +45 -0
  67. package/registry/default/blocks/cta-4/app/page.tsx +9 -0
  68. package/registry/default/blocks/cta-4/components/cta.tsx +28 -0
  69. package/registry/default/blocks/cta-5/app/page.tsx +9 -0
  70. package/registry/default/blocks/cta-5/components/cta.tsx +72 -0
  71. package/registry/default/blocks/cta-5/components/full-width-divider.tsx +33 -0
  72. package/registry/default/blocks/faq-1/app/page.tsx +9 -0
  73. package/registry/default/blocks/faq-1/components/faq.tsx +86 -0
  74. package/registry/default/blocks/faq-2/app/page.tsx +9 -0
  75. package/registry/default/blocks/faq-2/components/faq.tsx +93 -0
  76. package/registry/default/blocks/faq-3/app/page.tsx +9 -0
  77. package/registry/default/blocks/faq-3/components/decor-icon.tsx +45 -0
  78. package/registry/default/blocks/faq-3/components/faq.tsx +110 -0
  79. package/registry/default/blocks/faq-4/app/page.tsx +9 -0
  80. package/registry/default/blocks/faq-4/components/faq.tsx +181 -0
  81. package/registry/default/blocks/faq-5/app/page.tsx +9 -0
  82. package/registry/default/blocks/faq-5/components/faq.tsx +211 -0
  83. package/registry/default/blocks/faq-5/components/full-width-divider.tsx +33 -0
  84. package/registry/default/blocks/features1/app/page.tsx +9 -0
  85. package/registry/default/blocks/features1/components/feature-section.tsx +73 -0
  86. package/registry/default/blocks/features2/app/page.tsx +9 -0
  87. package/registry/default/blocks/features2/components/decor-icon.tsx +45 -0
  88. package/registry/default/blocks/features2/components/feature-section.tsx +97 -0
  89. package/registry/default/blocks/features3/app/page.tsx +9 -0
  90. package/registry/default/blocks/features3/components/feature-section.tsx +93 -0
  91. package/registry/default/blocks/features3/components/full-width-divider.tsx +21 -0
  92. package/registry/default/blocks/features4/app/page.tsx +9 -0
  93. package/registry/default/blocks/features4/components/decor-icon.tsx +45 -0
  94. package/registry/default/blocks/features4/components/feature-section.tsx +114 -0
  95. package/registry/default/blocks/features5/app/page.tsx +9 -0
  96. package/registry/default/blocks/features5/components/feature-section.tsx +115 -0
  97. package/registry/default/blocks/features5/components/grid-pattern.tsx +70 -0
  98. package/registry/default/blocks/features6/app/page.tsx +9 -0
  99. package/registry/default/blocks/features6/components/cobe-globe.tsx +86 -0
  100. package/registry/default/blocks/features6/components/feature-section.tsx +309 -0
  101. package/registry/default/blocks/footer1/app/page.tsx +9 -0
  102. package/registry/default/blocks/footer1/components/footer.tsx +85 -0
  103. package/registry/default/blocks/footer1/components/icons/github-icon.tsx +10 -0
  104. package/registry/default/blocks/footer1/components/icons/x-icon.tsx +12 -0
  105. package/registry/default/blocks/footer1/components/logo.tsx +88 -0
  106. package/registry/default/blocks/footer2/app/page.tsx +9 -0
  107. package/registry/default/blocks/footer2/components/footer.tsx +139 -0
  108. package/registry/default/blocks/footer2/components/full-width-divider.tsx +21 -0
  109. package/registry/default/blocks/footer2/components/icons/github-icon.tsx +10 -0
  110. package/registry/default/blocks/footer2/components/icons/instagram-icon.tsx +12 -0
  111. package/registry/default/blocks/footer2/components/icons/x-icon.tsx +12 -0
  112. package/registry/default/blocks/footer2/components/logo.tsx +88 -0
  113. package/registry/default/blocks/footer3/app/page.tsx +9 -0
  114. package/registry/default/blocks/footer3/components/footer.tsx +155 -0
  115. package/registry/default/blocks/footer3/components/icons/github-icon.tsx +10 -0
  116. package/registry/default/blocks/footer3/components/icons/instagram-icon.tsx +12 -0
  117. package/registry/default/blocks/footer3/components/icons/linkedin-icon.tsx +12 -0
  118. package/registry/default/blocks/footer3/components/icons/x-icon.tsx +12 -0
  119. package/registry/default/blocks/footer3/components/logo.tsx +88 -0
  120. package/registry/default/blocks/footer4/app/page.tsx +9 -0
  121. package/registry/default/blocks/footer4/components/footer.tsx +137 -0
  122. package/registry/default/blocks/footer4/components/icons/github-icon.tsx +10 -0
  123. package/registry/default/blocks/footer4/components/icons/instagram-icon.tsx +12 -0
  124. package/registry/default/blocks/footer4/components/icons/linkedin-icon.tsx +12 -0
  125. package/registry/default/blocks/footer4/components/icons/x-icon.tsx +12 -0
  126. package/registry/default/blocks/footer4/components/logo.tsx +88 -0
  127. package/registry/default/blocks/footer5/app/page.tsx +9 -0
  128. package/registry/default/blocks/footer5/components/footer.tsx +152 -0
  129. package/registry/default/blocks/footer5/components/icons/apple-icon.tsx +18 -0
  130. package/registry/default/blocks/footer5/components/icons/facebook-icon.tsx +12 -0
  131. package/registry/default/blocks/footer5/components/icons/google-play-icon.tsx +10 -0
  132. package/registry/default/blocks/footer5/components/icons/instagram-icon.tsx +12 -0
  133. package/registry/default/blocks/footer5/components/icons/linkedin-icon.tsx +12 -0
  134. package/registry/default/blocks/footer5/components/icons/x-icon.tsx +12 -0
  135. package/registry/default/blocks/footer5/components/logo.tsx +88 -0
  136. package/registry/default/blocks/footer6/app/page.tsx +16 -0
  137. package/registry/default/blocks/footer6/components/footer.tsx +220 -0
  138. package/registry/default/blocks/footer6/components/icons/apple-icon.tsx +18 -0
  139. package/registry/default/blocks/footer6/components/icons/facebook-icon.tsx +12 -0
  140. package/registry/default/blocks/footer6/components/icons/github-icon.tsx +10 -0
  141. package/registry/default/blocks/footer6/components/icons/google-play-icon.tsx +10 -0
  142. package/registry/default/blocks/footer6/components/icons/instagram-icon.tsx +12 -0
  143. package/registry/default/blocks/footer6/components/icons/linkedin-icon.tsx +12 -0
  144. package/registry/default/blocks/footer6/components/icons/x-icon.tsx +12 -0
  145. package/registry/default/blocks/footer6/components/logo.tsx +88 -0
  146. package/registry/default/blocks/header1/app/page.tsx +12 -0
  147. package/registry/default/blocks/header1/components/demo-layout.tsx +33 -0
  148. package/registry/default/blocks/header1/components/header.tsx +58 -0
  149. package/registry/default/blocks/header1/components/logo.tsx +88 -0
  150. package/registry/default/blocks/header1/components/mobile-nav.tsx +61 -0
  151. package/registry/default/blocks/header1/components/ui/portal.tsx +27 -0
  152. package/registry/default/blocks/header1/hooks/use-scroll.ts +54 -0
  153. package/registry/default/blocks/header2/app/page.tsx +11 -0
  154. package/registry/default/blocks/header2/components/demo-layout.tsx +33 -0
  155. package/registry/default/blocks/header2/components/header.tsx +70 -0
  156. package/registry/default/blocks/header2/components/logo.tsx +88 -0
  157. package/registry/default/blocks/header2/components/mobile-nav.tsx +61 -0
  158. package/registry/default/blocks/header2/components/ui/portal.tsx +27 -0
  159. package/registry/default/blocks/header2/hooks/use-scroll.ts +54 -0
  160. package/registry/default/blocks/header3/app/page.tsx +11 -0
  161. package/registry/default/blocks/header3/components/demo-layout.tsx +33 -0
  162. package/registry/default/blocks/header3/components/desktop-nav.tsx +70 -0
  163. package/registry/default/blocks/header3/components/header.tsx +41 -0
  164. package/registry/default/blocks/header3/components/logo.tsx +88 -0
  165. package/registry/default/blocks/header3/components/mobile-nav.tsx +88 -0
  166. package/registry/default/blocks/header3/components/nav-links.tsx +132 -0
  167. package/registry/default/blocks/header3/components/sheard.tsx +41 -0
  168. package/registry/default/blocks/header3/components/ui/navigation-menu.tsx +171 -0
  169. package/registry/default/blocks/header3/components/ui/portal.tsx +27 -0
  170. package/registry/default/blocks/header3/hooks/use-scroll.ts +54 -0
  171. package/registry/default/blocks/hero1/app/page.tsx +15 -0
  172. package/registry/default/blocks/hero1/components/header.tsx +70 -0
  173. package/registry/default/blocks/hero1/components/hero.tsx +80 -0
  174. package/registry/default/blocks/hero1/components/infinite-slider.tsx +109 -0
  175. package/registry/default/blocks/hero1/components/logo-cloud.tsx +69 -0
  176. package/registry/default/blocks/hero1/components/logo.tsx +88 -0
  177. package/registry/default/blocks/hero1/components/logos/claude-wordmark.svg +1 -0
  178. package/registry/default/blocks/hero1/components/logos/clerk-wordmark.svg +1 -0
  179. package/registry/default/blocks/hero1/components/logos/github-wordmark.svg +6 -0
  180. package/registry/default/blocks/hero1/components/logos/nvidia-wordmark.svg +1 -0
  181. package/registry/default/blocks/hero1/components/logos/openai-wordmark.svg +1 -0
  182. package/registry/default/blocks/hero1/components/logos/supabase-wordmark.svg +23 -0
  183. package/registry/default/blocks/hero1/components/logos/turso-wordmark.svg +1 -0
  184. package/registry/default/blocks/hero1/components/logos/vercel-wordmark.svg +1 -0
  185. package/registry/default/blocks/hero1/components/logos-section.tsx +14 -0
  186. package/registry/default/blocks/hero1/components/mobile-nav.tsx +61 -0
  187. package/registry/default/blocks/hero1/components/ui/portal.tsx +27 -0
  188. package/registry/default/blocks/hero1/hooks/use-scroll.ts +54 -0
  189. package/registry/default/blocks/hero2/app/page.tsx +23 -0
  190. package/registry/default/blocks/hero2/components/decor-icon.tsx +45 -0
  191. package/registry/default/blocks/hero2/components/full-width-divider.tsx +21 -0
  192. package/registry/default/blocks/hero2/components/header.tsx +70 -0
  193. package/registry/default/blocks/hero2/components/hero.tsx +104 -0
  194. package/registry/default/blocks/hero2/components/infinite-slider.tsx +109 -0
  195. package/registry/default/blocks/hero2/components/logo-cloud.tsx +120 -0
  196. package/registry/default/blocks/hero2/components/logo.tsx +88 -0
  197. package/registry/default/blocks/hero2/components/logos/claude-wordmark.svg +1 -0
  198. package/registry/default/blocks/hero2/components/logos/clerk-wordmark.svg +1 -0
  199. package/registry/default/blocks/hero2/components/logos/github-wordmark.svg +6 -0
  200. package/registry/default/blocks/hero2/components/logos/nvidia-wordmark.svg +1 -0
  201. package/registry/default/blocks/hero2/components/logos/openai-wordmark.svg +1 -0
  202. package/registry/default/blocks/hero2/components/logos/supabase-wordmark.svg +23 -0
  203. package/registry/default/blocks/hero2/components/logos/turso-wordmark.svg +1 -0
  204. package/registry/default/blocks/hero2/components/logos/vercel-wordmark.svg +1 -0
  205. package/registry/default/blocks/hero2/components/logos-section.tsx +23 -0
  206. package/registry/default/blocks/hero2/components/mobile-nav.tsx +61 -0
  207. package/registry/default/blocks/hero2/components/ui/portal.tsx +27 -0
  208. package/registry/default/blocks/hero2/hooks/use-scroll.ts +54 -0
  209. package/registry/default/blocks/hero3/app/page.tsx +15 -0
  210. package/registry/default/blocks/hero3/components/header.tsx +70 -0
  211. package/registry/default/blocks/hero3/components/hero.tsx +104 -0
  212. package/registry/default/blocks/hero3/components/infinite-slider.tsx +109 -0
  213. package/registry/default/blocks/hero3/components/logo-cloud.tsx +67 -0
  214. package/registry/default/blocks/hero3/components/logo.tsx +88 -0
  215. package/registry/default/blocks/hero3/components/logos/claude-wordmark.svg +1 -0
  216. package/registry/default/blocks/hero3/components/logos/clerk-wordmark.svg +1 -0
  217. package/registry/default/blocks/hero3/components/logos/github-wordmark.svg +6 -0
  218. package/registry/default/blocks/hero3/components/logos/nvidia-wordmark.svg +1 -0
  219. package/registry/default/blocks/hero3/components/logos/openai-wordmark.svg +1 -0
  220. package/registry/default/blocks/hero3/components/logos/supabase-wordmark.svg +23 -0
  221. package/registry/default/blocks/hero3/components/logos/turso-wordmark.svg +1 -0
  222. package/registry/default/blocks/hero3/components/logos/vercel-wordmark.svg +1 -0
  223. package/registry/default/blocks/hero3/components/logos-section.tsx +12 -0
  224. package/registry/default/blocks/hero3/components/mobile-nav.tsx +61 -0
  225. package/registry/default/blocks/hero3/components/ui/portal.tsx +27 -0
  226. package/registry/default/blocks/hero3/hooks/use-scroll.ts +54 -0
  227. package/registry/default/blocks/image-gallery-1/app/page.tsx +5 -0
  228. package/registry/default/blocks/image-gallery-1/components/aspect-ratio.tsx +22 -0
  229. package/registry/default/blocks/image-gallery-1/components/image-gallery.tsx +135 -0
  230. package/registry/default/blocks/image-gallery-1/components/lazy-image.tsx +94 -0
  231. package/registry/default/blocks/integrations1/app/page.tsx +9 -0
  232. package/registry/default/blocks/integrations1/components/integrations.tsx +86 -0
  233. package/registry/default/blocks/integrations1/components/logos/adobe.svg +1 -0
  234. package/registry/default/blocks/integrations1/components/logos/canva.svg +1 -0
  235. package/registry/default/blocks/integrations1/components/logos/cursor.svg +1 -0
  236. package/registry/default/blocks/integrations1/components/logos/gmail.svg +1 -0
  237. package/registry/default/blocks/integrations1/components/logos/notion.svg +1 -0
  238. package/registry/default/blocks/integrations1/components/logos/planetscale.svg +1 -0
  239. package/registry/default/blocks/integrations1/components/logos/polar.svg +1 -0
  240. package/registry/default/blocks/integrations1/components/logos/supabase.svg +1 -0
  241. package/registry/default/blocks/integrations1/components/logos/vercel.svg +1 -0
  242. package/registry/default/blocks/integrations2/app/page.tsx +9 -0
  243. package/registry/default/blocks/integrations2/components/decor-icon.tsx +45 -0
  244. package/registry/default/blocks/integrations2/components/integrations.tsx +118 -0
  245. package/registry/default/blocks/integrations2/components/logos/adobe.svg +1 -0
  246. package/registry/default/blocks/integrations2/components/logos/canva.svg +1 -0
  247. package/registry/default/blocks/integrations2/components/logos/cursor.svg +1 -0
  248. package/registry/default/blocks/integrations2/components/logos/gmail.svg +1 -0
  249. package/registry/default/blocks/integrations2/components/logos/notion.svg +1 -0
  250. package/registry/default/blocks/integrations2/components/logos/planetscale.svg +1 -0
  251. package/registry/default/blocks/integrations2/components/logos/polar.svg +1 -0
  252. package/registry/default/blocks/integrations2/components/logos/supabase.svg +1 -0
  253. package/registry/default/blocks/integrations2/components/logos/vercel.svg +1 -0
  254. package/registry/default/blocks/integrations3/app/page.tsx +9 -0
  255. package/registry/default/blocks/integrations3/components/full-width-divider.tsx +33 -0
  256. package/registry/default/blocks/integrations3/components/integrations.tsx +190 -0
  257. package/registry/default/blocks/integrations3/components/logos/adobe.svg +1 -0
  258. package/registry/default/blocks/integrations3/components/logos/canva.svg +1 -0
  259. package/registry/default/blocks/integrations3/components/logos/cursor.svg +1 -0
  260. package/registry/default/blocks/integrations3/components/logos/gmail.svg +1 -0
  261. package/registry/default/blocks/integrations3/components/logos/notion.svg +1 -0
  262. package/registry/default/blocks/integrations3/components/logos/planetscale.svg +1 -0
  263. package/registry/default/blocks/integrations3/components/logos/polar.svg +1 -0
  264. package/registry/default/blocks/integrations3/components/logos/supabase.svg +1 -0
  265. package/registry/default/blocks/integrations3/components/logos/vercel.svg +1 -0
  266. package/registry/default/blocks/integrations4/app/page.tsx +9 -0
  267. package/registry/default/blocks/integrations4/components/integrations.tsx +177 -0
  268. package/registry/default/blocks/integrations4/components/logos/adobe.svg +1 -0
  269. package/registry/default/blocks/integrations4/components/logos/canva.svg +1 -0
  270. package/registry/default/blocks/integrations4/components/logos/cursor.svg +1 -0
  271. package/registry/default/blocks/integrations4/components/logos/gmail.svg +1 -0
  272. package/registry/default/blocks/integrations4/components/logos/notion.svg +1 -0
  273. package/registry/default/blocks/integrations4/components/logos/planetscale.svg +1 -0
  274. package/registry/default/blocks/integrations4/components/logos/polar.svg +1 -0
  275. package/registry/default/blocks/integrations4/components/logos/supabase.svg +1 -0
  276. package/registry/default/blocks/integrations4/components/logos/vercel.svg +1 -0
  277. package/registry/default/blocks/integrations5/app/page.tsx +9 -0
  278. package/registry/default/blocks/integrations5/components/integrations.tsx +112 -0
  279. package/registry/default/blocks/integrations5/components/logos/adobe.svg +1 -0
  280. package/registry/default/blocks/integrations5/components/logos/canva.svg +1 -0
  281. package/registry/default/blocks/integrations5/components/logos/cursor.svg +1 -0
  282. package/registry/default/blocks/integrations5/components/logos/gmail.svg +1 -0
  283. package/registry/default/blocks/integrations5/components/logos/notion.svg +1 -0
  284. package/registry/default/blocks/integrations5/components/logos/planetscale.svg +1 -0
  285. package/registry/default/blocks/integrations5/components/logos/polar.svg +1 -0
  286. package/registry/default/blocks/integrations5/components/logos/supabase.svg +1 -0
  287. package/registry/default/blocks/integrations5/components/logos/vercel.svg +1 -0
  288. package/registry/default/blocks/logo-cloud-1/app/page.tsx +17 -0
  289. package/registry/default/blocks/logo-cloud-1/components/logo-cloud.tsx +70 -0
  290. package/registry/default/blocks/logo-cloud-1/components/logos/claude-wordmark.svg +1 -0
  291. package/registry/default/blocks/logo-cloud-1/components/logos/clerk-wordmark.svg +1 -0
  292. package/registry/default/blocks/logo-cloud-1/components/logos/github-wordmark.svg +6 -0
  293. package/registry/default/blocks/logo-cloud-1/components/logos/nvidia-wordmark.svg +1 -0
  294. package/registry/default/blocks/logo-cloud-1/components/logos/openai-wordmark.svg +1 -0
  295. package/registry/default/blocks/logo-cloud-1/components/logos/supabase-wordmark.svg +23 -0
  296. package/registry/default/blocks/logo-cloud-1/components/logos/turso-wordmark.svg +1 -0
  297. package/registry/default/blocks/logo-cloud-1/components/logos/vercel-wordmark.svg +1 -0
  298. package/registry/default/blocks/logo-cloud-2/app/page.tsx +19 -0
  299. package/registry/default/blocks/logo-cloud-2/components/decor-icon.tsx +45 -0
  300. package/registry/default/blocks/logo-cloud-2/components/logo-cloud.tsx +120 -0
  301. package/registry/default/blocks/logo-cloud-2/components/logos/claude-wordmark.svg +1 -0
  302. package/registry/default/blocks/logo-cloud-2/components/logos/clerk-wordmark.svg +1 -0
  303. package/registry/default/blocks/logo-cloud-2/components/logos/github-wordmark.svg +6 -0
  304. package/registry/default/blocks/logo-cloud-2/components/logos/nvidia-wordmark.svg +1 -0
  305. package/registry/default/blocks/logo-cloud-2/components/logos/openai-wordmark.svg +1 -0
  306. package/registry/default/blocks/logo-cloud-2/components/logos/supabase-wordmark.svg +23 -0
  307. package/registry/default/blocks/logo-cloud-2/components/logos/turso-wordmark.svg +1 -0
  308. package/registry/default/blocks/logo-cloud-2/components/logos/vercel-wordmark.svg +1 -0
  309. package/registry/default/blocks/logo-cloud-3/app/page.tsx +18 -0
  310. package/registry/default/blocks/logo-cloud-3/components/infinite-slider.tsx +109 -0
  311. package/registry/default/blocks/logo-cloud-3/components/logo-cloud.tsx +69 -0
  312. package/registry/default/blocks/logo-cloud-3/components/logos/claude-wordmark.svg +1 -0
  313. package/registry/default/blocks/logo-cloud-3/components/logos/clerk-wordmark.svg +1 -0
  314. package/registry/default/blocks/logo-cloud-3/components/logos/github-wordmark.svg +6 -0
  315. package/registry/default/blocks/logo-cloud-3/components/logos/nvidia-wordmark.svg +1 -0
  316. package/registry/default/blocks/logo-cloud-3/components/logos/openai-wordmark.svg +1 -0
  317. package/registry/default/blocks/logo-cloud-3/components/logos/supabase-wordmark.svg +23 -0
  318. package/registry/default/blocks/logo-cloud-3/components/logos/turso-wordmark.svg +1 -0
  319. package/registry/default/blocks/logo-cloud-3/components/logos/vercel-wordmark.svg +1 -0
  320. package/registry/default/blocks/logo-cloud-4/app/page.tsx +23 -0
  321. package/registry/default/blocks/logo-cloud-4/components/infinite-slider.tsx +109 -0
  322. package/registry/default/blocks/logo-cloud-4/components/logo-cloud.tsx +83 -0
  323. package/registry/default/blocks/logo-cloud-4/components/logos/claude-wordmark.svg +1 -0
  324. package/registry/default/blocks/logo-cloud-4/components/logos/clerk-wordmark.svg +1 -0
  325. package/registry/default/blocks/logo-cloud-4/components/logos/github-wordmark.svg +6 -0
  326. package/registry/default/blocks/logo-cloud-4/components/logos/nvidia-wordmark.svg +1 -0
  327. package/registry/default/blocks/logo-cloud-4/components/logos/openai-wordmark.svg +1 -0
  328. package/registry/default/blocks/logo-cloud-4/components/logos/supabase-wordmark.svg +23 -0
  329. package/registry/default/blocks/logo-cloud-4/components/logos/turso-wordmark.svg +1 -0
  330. package/registry/default/blocks/logo-cloud-4/components/logos/vercel-wordmark.svg +1 -0
  331. package/registry/default/blocks/logo-cloud-4/components/progressive-blur.tsx +63 -0
  332. package/registry/default/blocks/logo-cloud-5/app/page.tsx +17 -0
  333. package/registry/default/blocks/logo-cloud-5/components/logo-cloud.tsx +67 -0
  334. package/registry/default/blocks/logo-cloud-5/components/logos/claude-wordmark.svg +1 -0
  335. package/registry/default/blocks/logo-cloud-5/components/logos/clerk-wordmark.svg +1 -0
  336. package/registry/default/blocks/logo-cloud-5/components/logos/github-wordmark.svg +6 -0
  337. package/registry/default/blocks/logo-cloud-5/components/logos/nvidia-wordmark.svg +1 -0
  338. package/registry/default/blocks/logo-cloud-5/components/logos/openai-wordmark.svg +1 -0
  339. package/registry/default/blocks/logo-cloud-5/components/logos/supabase-wordmark.svg +23 -0
  340. package/registry/default/blocks/logo-cloud-5/components/logos/turso-wordmark.svg +1 -0
  341. package/registry/default/blocks/logo-cloud-5/components/logos/vercel-wordmark.svg +1 -0
  342. package/registry/default/blocks/pricing1/app/page.tsx +9 -0
  343. package/registry/default/blocks/pricing1/components/decor-icon.tsx +45 -0
  344. package/registry/default/blocks/pricing1/components/pricing.tsx +94 -0
  345. package/registry/default/blocks/pricing2/app/page.tsx +9 -0
  346. package/registry/default/blocks/pricing2/components/full-width-divider.tsx +33 -0
  347. package/registry/default/blocks/pricing2/components/pricing.tsx +117 -0
  348. package/registry/default/blocks/pricing3/app/page.tsx +9 -0
  349. package/registry/default/blocks/pricing3/components/pricing-card.tsx +171 -0
  350. package/registry/default/blocks/pricing3/components/pricing.tsx +143 -0
  351. package/registry/default/blocks/pricing4/app/page.tsx +9 -0
  352. package/registry/default/blocks/pricing4/components/frequency-toggle.tsx +47 -0
  353. package/registry/default/blocks/pricing4/components/pricing.tsx +230 -0
  354. package/registry/default/blocks/testimonials1/app/page.tsx +9 -0
  355. package/registry/default/blocks/testimonials1/components/logo.tsx +74 -0
  356. package/registry/default/blocks/testimonials1/components/testimonials.tsx +41 -0
  357. package/registry/default/blocks/testimonials2/app/page.tsx +9 -0
  358. package/registry/default/blocks/testimonials2/components/testimonials.tsx +65 -0
  359. package/registry/default/blocks/testimonials3/app/page.tsx +9 -0
  360. package/registry/default/blocks/testimonials3/components/decor-icon.tsx +45 -0
  361. package/registry/default/blocks/testimonials3/components/testimonials.tsx +114 -0
  362. package/registry/default/blocks/testimonials4/app/page.tsx +9 -0
  363. package/registry/default/blocks/testimonials4/components/full-width-divider.tsx +33 -0
  364. package/registry/default/blocks/testimonials4/components/testimonials.tsx +81 -0
  365. package/registry/default/blocks/testimonials5/app/page.tsx +9 -0
  366. package/registry/default/blocks/testimonials5/components/full-width-divider.tsx +33 -0
  367. package/registry/default/blocks/testimonials5/components/grid-filler.tsx +74 -0
  368. package/registry/default/blocks/testimonials5/components/grid-pattern.tsx +70 -0
  369. package/registry/default/blocks/testimonials5/components/testimonials.tsx +186 -0
  370. package/registry/default/blocks/testimonials6/app/page.tsx +9 -0
  371. package/registry/default/blocks/testimonials6/components/infinite-slider.tsx +109 -0
  372. package/registry/default/blocks/testimonials6/components/testimonials.tsx +193 -0
  373. package/registry/default/examples/accordion-disabled.tsx +58 -0
  374. package/registry/default/examples/accordion-in-card.tsx +92 -0
  375. package/registry/default/examples/accordion-leading-icon.tsx +51 -0
  376. package/registry/default/examples/accordion-user-roles.tsx +97 -0
  377. package/registry/default/examples/accordion-with-icons.tsx +67 -0
  378. package/registry/default/examples/avatar-badge-icons.tsx +60 -0
  379. package/registry/default/examples/avatar-badge-position.tsx +47 -0
  380. package/registry/default/examples/avatar-empty-collaborators.tsx +55 -0
  381. package/registry/default/examples/avatar-group-trust.tsx +49 -0
  382. package/registry/default/examples/avatar-loading.tsx +33 -0
  383. package/registry/default/examples/avatar-menu.tsx +81 -0
  384. package/registry/default/examples/avatar-profile-badge.tsx +30 -0
  385. package/registry/default/examples/avatar-status.tsx +47 -0
  386. package/registry/default/examples/breadcrumb-bullet-separator.tsx +38 -0
  387. package/registry/default/examples/breadcrumb-buttons.tsx +61 -0
  388. package/registry/default/examples/breadcrumb-card.tsx +40 -0
  389. package/registry/default/examples/button-default-icons.tsx +18 -0
  390. package/registry/default/examples/button-default.tsx +5 -0
  391. package/registry/default/examples/button-demo.tsx +11 -1
  392. package/registry/default/examples/button-destructive-icons.tsx +18 -0
  393. package/registry/default/examples/button-destructive-outline-icons.tsx +18 -0
  394. package/registry/default/examples/button-ghost-icons.tsx +18 -0
  395. package/registry/default/examples/button-link-icons.tsx +18 -0
  396. package/registry/default/examples/button-outline-icons.tsx +18 -0
  397. package/registry/default/examples/button-secondary-icons.tsx +18 -0
  398. package/registry/default/examples/button-theme-toggle.tsx +38 -0
  399. package/registry/default/examples/card-author-profile.tsx +66 -0
  400. package/registry/default/examples/card-default-size.tsx +33 -0
  401. package/registry/default/examples/card-depth.tsx +37 -0
  402. package/registry/default/examples/card-help-link.tsx +32 -0
  403. package/registry/default/examples/card-help-menu.tsx +78 -0
  404. package/registry/default/examples/card-image-centered.tsx +38 -0
  405. package/registry/default/examples/card-image-feature.tsx +44 -0
  406. package/registry/default/examples/card-metric-actions.tsx +102 -0
  407. package/registry/default/examples/card-resource-link.tsx +40 -0
  408. package/registry/default/examples/card-team-member.tsx +38 -14
  409. package/registry/default/examples/card-usage-expandable.tsx +98 -0
  410. package/registry/default/examples/card-with-borders.tsx +29 -0
  411. package/registry/default/ui/accordion.tsx +82 -2
  412. package/registry/default/ui/avatar.tsx +45 -1
  413. package/registry/default/ui/input-group.tsx +158 -0
@@ -0,0 +1,181 @@
1
+ "use client";
2
+ import React from "react";
3
+ import {
4
+ Accordion,
5
+ AccordionContent,
6
+ AccordionItem,
7
+ AccordionTrigger,
8
+ } from "@/registry/default/ui/accordion";
9
+ import { Button } from "@/registry/default/ui/button";
10
+ import { LayoutGridIcon, PowerIcon, FeatherIcon, CreditCardIcon, LifeBuoyIcon } from "lucide-react";
11
+
12
+ const categories = [
13
+ {
14
+ icon: (
15
+ <LayoutGridIcon className="size-4" />
16
+ ),
17
+ id: "all",
18
+ label: "All Topics",
19
+ },
20
+ {
21
+ icon: (
22
+ <PowerIcon className="size-4" />
23
+ ),
24
+ id: "getting-started",
25
+ label: "Getting Started",
26
+ },
27
+ {
28
+ icon: (
29
+ <FeatherIcon className="size-4" />
30
+ ),
31
+ id: "features",
32
+ label: "Features",
33
+ },
34
+ {
35
+ icon: (
36
+ <CreditCardIcon className="size-4" />
37
+ ),
38
+ id: "license",
39
+ label: "License",
40
+ },
41
+ {
42
+ icon: (
43
+ <LifeBuoyIcon className="size-4" />
44
+ ),
45
+ id: "support",
46
+ label: "Support",
47
+ },
48
+ ];
49
+
50
+ export function FaqsSection() {
51
+ const [activeCategory, setActiveCategory] = React.useState("all");
52
+
53
+ const filtered = faqs.filter((faq) => {
54
+ const matchesCategory =
55
+ activeCategory === "all" || faq.category === activeCategory;
56
+ return matchesCategory;
57
+ });
58
+
59
+ const currentCategory = React.useMemo(
60
+ () => categories.find((cat) => cat.id === activeCategory),
61
+ [activeCategory]
62
+ );
63
+
64
+ return (
65
+ <section className="mx-auto min-h-screen w-full max-w-5xl">
66
+ <div className="flex flex-col items-center justify-center gap-4 px-4 py-16">
67
+ <h2 className="text-balance font-black font-mono text-4xl md:text-5xl lg:font-black">
68
+ FAQs
69
+ </h2>
70
+ <p className="text-muted-foreground">Answers about using LoveUI.</p>
71
+ </div>
72
+ <div className="relative grid min-h-full grid-cols-1 py-12 md:grid-cols-3">
73
+ <div className="flex h-full items-start justify-center border-b pb-2 md:border-b-0">
74
+ <div className="flex w-max flex-wrap items-start justify-start gap-2 md:flex-col md:justify-center">
75
+ {categories.map((cat) => (
76
+ <Button
77
+ key={cat.id}
78
+ onClick={() => setActiveCategory(cat.id)}
79
+ variant={activeCategory === cat.id ? "outline" : "ghost"}
80
+ >
81
+ {cat.icon}
82
+ {cat.label}
83
+ </Button>
84
+ ))}
85
+ </div>
86
+ </div>
87
+ <div className="col-span-2 space-y-5 px-4 py-5">
88
+ {currentCategory && (
89
+ <div className="flex items-center gap-2">
90
+ {currentCategory.icon}
91
+ <span className="font-medium">{currentCategory.label}</span>
92
+ </div>
93
+ )}
94
+ <Accordion className="space-y-2" collapsible type="single">
95
+ {filtered.map((item) => (
96
+ <AccordionItem
97
+ className="border-b-0"
98
+ key={item.id}
99
+ value={item.id.toString()}
100
+ >
101
+ <AccordionTrigger className="bg-muted px-4 hover:no-underline dark:bg-muted/50">
102
+ {item.title}
103
+ </AccordionTrigger>
104
+
105
+ <AccordionContent className="p-4">
106
+ {item.content}
107
+ </AccordionContent>
108
+ </AccordionItem>
109
+ ))}
110
+ </Accordion>
111
+ </div>
112
+ </div>
113
+ </section>
114
+ );
115
+ }
116
+
117
+ const faqs = [
118
+ {
119
+ id: 1,
120
+ category: "getting-started",
121
+ title: "How do I add my first component?",
122
+ content:
123
+ "Run npx love-ui@latest add loveui to install the shared setup, then add a component such as npx love-ui@latest add button.",
124
+ },
125
+ {
126
+ id: 2,
127
+ category: "getting-started",
128
+ title: "What are the system requirements?",
129
+ content:
130
+ "LoveUI is designed for React projects that use Tailwind CSS. If your project uses a different import alias, update the copied imports after installation.",
131
+ },
132
+ {
133
+ id: 3,
134
+ category: "features",
135
+ title: "Can I use LoveUI with a product team?",
136
+ content:
137
+ "Yes. Because LoveUI components live in your codebase, teams can review, edit, and version them like any other application source.",
138
+ },
139
+ {
140
+ id: 4,
141
+ category: "features",
142
+ title: "What does the component library include?",
143
+ content:
144
+ "LoveUI includes primitives, examples, and full-page blocks for common product interfaces, from forms and dialogs to auth screens and FAQ sections.",
145
+ },
146
+ {
147
+ id: 5,
148
+ category: "features",
149
+ title: "Does LoveUI include AI agent guidance?",
150
+ content:
151
+ "Yes. LoveUI Skills gives AI coding agents design rules, workflow steps, and quality checks for building better interfaces with LoveUI.",
152
+ },
153
+ {
154
+ id: 6,
155
+ category: "license",
156
+ title: "Is LoveUI free to use?",
157
+ content:
158
+ "Yes. LoveUI is open source under the MIT license, so you can use it in personal, internal, and commercial projects.",
159
+ },
160
+ {
161
+ id: 7,
162
+ category: "license",
163
+ title: "Do I have to keep the generated files unchanged?",
164
+ content:
165
+ "No. The source is copied into your app specifically so you can rename, restyle, and reshape it for your product.",
166
+ },
167
+ {
168
+ id: 8,
169
+ category: "support",
170
+ title: "How do I report a bug?",
171
+ content:
172
+ "Open a GitHub issue with a small reproduction, the component name, and the behavior you expected to see.",
173
+ },
174
+ {
175
+ id: 9,
176
+ category: "support",
177
+ title: "Where should I look for examples?",
178
+ content:
179
+ "Start with the component docs and block gallery. Each item shows the install command and source files you can copy or customize.",
180
+ },
181
+ ];
@@ -0,0 +1,9 @@
1
+ import { FaqsSection } from "../components/faq";
2
+
3
+ export default function Page() {
4
+ return (
5
+ <div className="min-h-screen w-full place-content-center">
6
+ <FaqsSection />
7
+ </div>
8
+ );
9
+ }
@@ -0,0 +1,211 @@
1
+ "use client";
2
+ import { cn } from "@/lib/utils";
3
+
4
+ import React from "react";
5
+ import {
6
+ Accordion,
7
+ AccordionContent,
8
+ AccordionItem,
9
+ AccordionTrigger,
10
+ } from "@/registry/default/ui/accordion";
11
+ import { Button } from "@/registry/default/ui/button";
12
+ import {
13
+ Empty,
14
+ EmptyContent,
15
+ EmptyHeader,
16
+ EmptyMedia,
17
+ EmptyTitle,
18
+ } from "@/registry/default/ui/empty";
19
+ import {
20
+ InputGroup,
21
+ InputGroupAddon,
22
+ InputGroupInput,
23
+ } from "@/registry/default/ui/input-group";
24
+ import { FullWidthDivider } from "./full-width-divider";
25
+ import { SearchIcon, SearchSlashIcon } from "lucide-react";
26
+
27
+ export function FaqsSection() {
28
+ const [searchTerm, setSearchTerm] = React.useState("");
29
+ const [activeCategory, setActiveCategory] = React.useState("all");
30
+
31
+ const categories = [
32
+ { id: "all", label: "All" },
33
+ { id: "getting-started", label: "Getting Started" },
34
+ { id: "features", label: "Features" },
35
+ { id: "license", label: "License" },
36
+ { id: "support", label: "Support" },
37
+ ];
38
+
39
+ const filtered = faqs.filter((faq) => {
40
+ const matchesCategory =
41
+ activeCategory === "all" || faq.category === activeCategory;
42
+ const matchesSearch =
43
+ faq.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
44
+ faq.content.toLowerCase().includes(searchTerm.toLowerCase());
45
+ return matchesCategory && matchesSearch;
46
+ });
47
+
48
+ return (
49
+ <div className="mx-auto min-h-screen w-full max-w-3xl md:border-x">
50
+ <div className="px-4 py-16 lg:px-6">
51
+ <h1 className="mb-4 font-semibold text-3xl md:text-4xl">
52
+ Frequently Asked Questions
53
+ </h1>
54
+ <p className="mb-8 max-w-2xl text-muted-foreground">
55
+ Find answers to common questions about LoveUI. Can't find what you're
56
+ looking for? Our support team is here to help.
57
+ </p>
58
+
59
+ <InputGroup className="max-w-sm">
60
+ <InputGroupInput
61
+ onChange={(e) => setSearchTerm(e.target.value)}
62
+ placeholder="Search FAQs..."
63
+ value={searchTerm}
64
+ />
65
+ <InputGroupAddon>
66
+ <SearchIcon data-icon="inline-start" />
67
+ </InputGroupAddon>
68
+ </InputGroup>
69
+ </div>
70
+
71
+ <FullWidthDivider contained />
72
+
73
+ <div className="flex flex-wrap gap-1 border-b px-4 md:gap-3">
74
+ {categories.map((cat) => (
75
+ <button
76
+ className="flex flex-col"
77
+ key={cat.id}
78
+ onClick={() => setActiveCategory(cat.id)}
79
+ type="button"
80
+ >
81
+ <span
82
+ className={cn(
83
+ "p-1 text-muted-foreground text-sm hover:text-primary md:p-2 md:text-base",
84
+ activeCategory === cat.id && "text-primary"
85
+ )}
86
+ >
87
+ {cat.label}
88
+ </span>
89
+ {activeCategory === cat.id && (
90
+ <span className="h-0.5 w-full rounded-full bg-primary" />
91
+ )}
92
+ </button>
93
+ ))}
94
+ </div>
95
+
96
+ <Accordion
97
+ className="space-y-2 border-0! px-4 py-12 lg:px-6"
98
+ collapsible
99
+ type="single"
100
+ >
101
+ {filtered.map((faq) => (
102
+ <AccordionItem
103
+ className="rounded-lg border px-4 shadow-xs"
104
+ key={faq.id}
105
+ value={faq.id.toString()}
106
+ >
107
+ <AccordionTrigger className="hover:no-underline">
108
+ {faq.title}
109
+ </AccordionTrigger>
110
+ <AccordionContent className="pt-2 pb-4 text-muted-foreground">
111
+ {faq.content}
112
+ </AccordionContent>
113
+ </AccordionItem>
114
+ ))}
115
+ </Accordion>
116
+
117
+ {filtered.length === 0 && (
118
+ <Empty>
119
+ <EmptyHeader>
120
+ <EmptyMedia variant="icon">
121
+ <SearchIcon
122
+ />
123
+ </EmptyMedia>
124
+ <EmptyTitle>No FAQs found matching your search.</EmptyTitle>
125
+ </EmptyHeader>
126
+ <EmptyContent>
127
+ <Button onClick={() => setSearchTerm("")} variant="outline">
128
+ <SearchSlashIcon data-icon="inline-start" />
129
+ Clear search
130
+ </Button>
131
+ </EmptyContent>
132
+ </Empty>
133
+ )}
134
+
135
+ <div className="flex items-center px-4 py-6 lg:px-6">
136
+ <p className="text-muted-foreground">
137
+ Can't find what you're looking for?{" "}
138
+ <a className="text-primary hover:underline" href="#">
139
+ Contact Us
140
+ </a>
141
+ </p>
142
+ </div>
143
+ </div>
144
+ );
145
+ }
146
+
147
+ const faqs = [
148
+ {
149
+ id: 1,
150
+ category: "getting-started",
151
+ title: "How do I add my first component?",
152
+ content:
153
+ "Run npx love-ui@latest add loveui to install the shared setup, then add a component such as npx love-ui@latest add button.",
154
+ },
155
+ {
156
+ id: 2,
157
+ category: "getting-started",
158
+ title: "What are the system requirements?",
159
+ content:
160
+ "LoveUI is designed for React projects that use Tailwind CSS. If your project uses a different import alias, update the copied imports after installation.",
161
+ },
162
+ {
163
+ id: 3,
164
+ category: "features",
165
+ title: "Can I use LoveUI with a product team?",
166
+ content:
167
+ "Yes. Because LoveUI components live in your codebase, teams can review, edit, and version them like any other application source.",
168
+ },
169
+ {
170
+ id: 4,
171
+ category: "features",
172
+ title: "What does the component library include?",
173
+ content:
174
+ "LoveUI includes primitives, examples, and full-page blocks for common product interfaces, from forms and dialogs to auth screens and FAQ sections.",
175
+ },
176
+ {
177
+ id: 5,
178
+ category: "features",
179
+ title: "Does LoveUI include AI agent guidance?",
180
+ content:
181
+ "Yes. LoveUI Skills gives AI coding agents design rules, workflow steps, and quality checks for building better interfaces with LoveUI.",
182
+ },
183
+ {
184
+ id: 6,
185
+ category: "license",
186
+ title: "Is LoveUI free to use?",
187
+ content:
188
+ "Yes. LoveUI is open source under the MIT license, so you can use it in personal, internal, and commercial projects.",
189
+ },
190
+ {
191
+ id: 7,
192
+ category: "license",
193
+ title: "Do I have to keep the generated files unchanged?",
194
+ content:
195
+ "No. The source is copied into your app specifically so you can rename, restyle, and reshape it for your product.",
196
+ },
197
+ {
198
+ id: 8,
199
+ category: "support",
200
+ title: "How do I report a bug?",
201
+ content:
202
+ "Open a GitHub issue with a small reproduction, the component name, and the behavior you expected to see.",
203
+ },
204
+ {
205
+ id: 9,
206
+ category: "support",
207
+ title: "Where should I look for examples?",
208
+ content:
209
+ "Start with the component docs and block gallery. Each item shows the install command and source files you can copy or customize.",
210
+ },
211
+ ];
@@ -0,0 +1,33 @@
1
+ import { cn } from "@/lib/utils";
2
+
3
+ type FullWidthDividerProps = React.ComponentProps<"div"> & {
4
+ contained?: boolean;
5
+ position?: "top" | "bottom";
6
+ };
7
+
8
+ export function FullWidthDivider({
9
+ className,
10
+ contained = false,
11
+ position,
12
+ ...props
13
+ }: FullWidthDividerProps) {
14
+ return (
15
+ <div
16
+ aria-hidden="true"
17
+ className={cn(
18
+ "pointer-events-none absolute h-px bg-border",
19
+ // full-bleed (default)
20
+ "data-[contained=false]:left-1/2 data-[contained=false]:w-screen data-[contained=false]:-translate-x-1/2",
21
+ // contained
22
+ "data-[contained=true]:inset-x-0 data-[contained=true]:w-full",
23
+ // position
24
+ position &&
25
+ "data-[position=top]:-top-px data-[position=bottom]:-bottom-px",
26
+ className
27
+ )}
28
+ data-contained={contained}
29
+ data-position={position}
30
+ {...props}
31
+ />
32
+ );
33
+ }
@@ -0,0 +1,9 @@
1
+ import { FeatureSection } from "../components/feature-section";
2
+
3
+ export default function Page() {
4
+ return (
5
+ <section className="min-h-screen place-content-center px-4">
6
+ <FeatureSection />
7
+ </section>
8
+ );
9
+ }
@@ -0,0 +1,73 @@
1
+ import { cn } from "@/lib/utils";
2
+ import type React from "react";
3
+ import { ZapIcon, ShieldCheckIcon, ActivityIcon, GlobeIcon } from "lucide-react";
4
+
5
+ type FeatureType = {
6
+ title: string;
7
+ icon: React.ReactNode;
8
+ description: string;
9
+ };
10
+
11
+ export function FeatureSection() {
12
+ return (
13
+ <div className="mx-auto grid max-w-5xl grid-cols-2 gap-4 py-4 md:grid-cols-4">
14
+ {features.map((feature, index) => (
15
+ <div
16
+ className={cn(
17
+ "relative flex flex-col items-center justify-center p-2",
18
+ "after:absolute after:inset-y-0 after:right-0 after:h-full after:w-px after:bg-linear-to-b after:from-foreground/6 after:via-foreground/25 after:to-foreground/6",
19
+ "[&_svg]:size-6 [&_svg]:text-muted-foreground",
20
+ {
21
+ "after:hidden": index === features.length - 1,
22
+ "after:hidden after:md:block": index === 1,
23
+ }
24
+ )}
25
+ key={feature.title}
26
+ >
27
+ {feature.icon}
28
+ <h3 className="mt-4 text-center font-medium text-xs md:text-sm lg:text-base">
29
+ {feature.title}
30
+ </h3>
31
+ <p className="mt-1 text-center text-[10px] text-muted-foreground md:text-xs">
32
+ {feature.description}
33
+ </p>
34
+ </div>
35
+ ))}
36
+ </div>
37
+ );
38
+ }
39
+
40
+ const features: FeatureType[] = [
41
+ {
42
+ title: "Lightning Fast",
43
+ icon: (
44
+ <ZapIcon
45
+ />
46
+ ),
47
+ description: "Blazing fast edge performance.",
48
+ },
49
+ {
50
+ title: "Secure by Design",
51
+ icon: (
52
+ <ShieldCheckIcon
53
+ />
54
+ ),
55
+ description: "Security by design, zero config.",
56
+ },
57
+ {
58
+ title: "Real-time Sync",
59
+ icon: (
60
+ <ActivityIcon
61
+ />
62
+ ),
63
+ description: "Real-time sync across devices.",
64
+ },
65
+ {
66
+ title: "Global Scale",
67
+ icon: (
68
+ <GlobeIcon
69
+ />
70
+ ),
71
+ description: "Instant global deployment.",
72
+ },
73
+ ];
@@ -0,0 +1,9 @@
1
+ import { FeatureSection } from "../components/feature-section";
2
+
3
+ export default function Page() {
4
+ return (
5
+ <section className="min-h-screen place-content-center p-4">
6
+ <FeatureSection />
7
+ </section>
8
+ );
9
+ }
@@ -0,0 +1,45 @@
1
+ import { cn } from "@/lib/utils";
2
+ import { cva, type VariantProps } from "class-variance-authority";
3
+
4
+ const DecorIconVariants = cva(
5
+ "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
+ {
7
+ variants: {
8
+ position: {
9
+ "top-left":
10
+ "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
+ "top-right":
12
+ "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
+ "bottom-right":
14
+ "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
+ "bottom-left":
16
+ "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ position: "top-left",
21
+ },
22
+ }
23
+ );
24
+
25
+ type DecorIconProps = React.ComponentProps<"svg"> &
26
+ VariantProps<typeof DecorIconVariants>;
27
+
28
+ export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
+ return (
30
+ <svg
31
+ aria-hidden="true"
32
+ className={cn(DecorIconVariants({ position, className }))}
33
+ fill="none"
34
+ stroke="currentColor"
35
+ strokeLinecap="round"
36
+ strokeLinejoin="round"
37
+ viewBox="0 0 24 24"
38
+ xmlns="http://www.w3.org/2000/svg"
39
+ {...props}
40
+ >
41
+ <path d="M5 12h14" />
42
+ <path d="M12 5v14" />
43
+ </svg>
44
+ );
45
+ }
@@ -0,0 +1,97 @@
1
+ import { cn } from "@/lib/utils";
2
+ import type React from "react";
3
+ import { DecorIcon } from "./decor-icon";
4
+ import { HistoryIcon, SquareDashedIcon, CommandIcon } from "lucide-react";
5
+
6
+ type FeatureType = {
7
+ title: string;
8
+ icon: React.ReactNode;
9
+ description: string;
10
+ };
11
+
12
+ export function FeatureSection() {
13
+ return (
14
+ <div className="mx-auto max-w-5xl">
15
+ <h2 className="mb-5 text-center font-medium text-2xl md:text-3xl">
16
+ Ensuring your speedy workflow
17
+ </h2>
18
+
19
+ <div className="relative">
20
+ {/* Corner Icons */}
21
+ <DecorIcon
22
+ className="size-6 stroke-2 stroke-border"
23
+ position="top-left"
24
+ />
25
+ <DecorIcon
26
+ className="size-6 stroke-2 stroke-border"
27
+ position="top-right"
28
+ />
29
+ <DecorIcon
30
+ className="size-6 stroke-2 stroke-border"
31
+ position="bottom-left"
32
+ />
33
+ <DecorIcon
34
+ className="size-6 stroke-2 stroke-border"
35
+ position="bottom-right"
36
+ />
37
+
38
+ <DashedLine className="-top-[1.5px] right-3 left-3" />
39
+ <DashedLine className="top-3 -right-[1.5px] bottom-3" />
40
+ <DashedLine className="top-3 bottom-3 -left-[1.5px]" />
41
+ <DashedLine className="right-3 -bottom-[1.5px] left-3" />
42
+
43
+ <div className="grid grid-cols-1 md:grid-cols-3">
44
+ {features.map((feature) => (
45
+ <div
46
+ className="group [&_svg]:mask-b-from-0% relative p-8 [&_svg]:size-7 [&_svg]:text-muted-foreground"
47
+ key={feature.title}
48
+ >
49
+ {feature.icon}
50
+ <h3 className="font-medium text-lg">{feature.title}</h3>
51
+ <p className="text-muted-foreground text-sm leading-relaxed">
52
+ {feature.description}
53
+ </p>
54
+ <DashedLine className="right-5 bottom-0 left-5 group-last:hidden md:top-5 md:right-0 md:bottom-5 md:left-full" />
55
+ </div>
56
+ ))}
57
+ </div>
58
+ </div>
59
+ </div>
60
+ );
61
+ }
62
+
63
+ function DashedLine({ className, ...props }: React.ComponentProps<"div">) {
64
+ return (
65
+ <div
66
+ className={cn("absolute border-collapse border border-dashed", className)}
67
+ {...props}
68
+ />
69
+ );
70
+ }
71
+
72
+ const features: FeatureType[] = [
73
+ {
74
+ title: "Auto-Save Everything",
75
+ icon: (
76
+ <HistoryIcon
77
+ />
78
+ ),
79
+ description: "Write without worry, every time.",
80
+ },
81
+ {
82
+ title: "Drag-and-Drop Blocks",
83
+ icon: (
84
+ <SquareDashedIcon
85
+ />
86
+ ),
87
+ description: "Rearrange sections with the block editor.",
88
+ },
89
+ {
90
+ title: "Keyboard Shortcuts",
91
+ icon: (
92
+ <CommandIcon
93
+ />
94
+ ),
95
+ description: "Speed up your workflow with quick keys.",
96
+ },
97
+ ];
@@ -0,0 +1,9 @@
1
+ import { FeatureSection } from "../components/feature-section";
2
+
3
+ export default function Page() {
4
+ return (
5
+ <section className="min-h-screen place-content-center overflow-hidden px-4">
6
+ <FeatureSection />
7
+ </section>
8
+ );
9
+ }