love-ui 1.2.12 → 1.2.14

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 (988) hide show
  1. package/dist/index.js +8 -7
  2. package/dist/mcp-server.js +1 -1
  3. package/package.json +3 -2
  4. package/packages/loveui-skills/SKILL.md +99 -0
  5. package/packages/loveui-skills/agents/openai.yaml +11 -0
  6. package/packages/loveui-skills/references/design-directions.md +60 -0
  7. package/packages/loveui-skills/references/mcp-catalog-workflow.md +68 -0
  8. package/packages/loveui-skills/references/page-blueprints.md +76 -0
  9. package/packages/loveui-skills/references/quality-gates.md +51 -0
  10. package/public/r/accordion-controlled.json +1 -1
  11. package/public/r/accordion-demo.json +1 -1
  12. package/public/r/accordion-multiple.json +1 -1
  13. package/public/r/accordion-single.json +1 -1
  14. package/public/r/alert-demo.json +1 -1
  15. package/public/r/alert-dialog-demo.json +1 -1
  16. package/public/r/alert-error.json +1 -1
  17. package/public/r/alert-info.json +1 -1
  18. package/public/r/alert-success.json +1 -1
  19. package/public/r/alert-warning.json +1 -1
  20. package/public/r/alert-with-icon-action.json +1 -1
  21. package/public/r/alert-with-icon.json +1 -1
  22. package/public/r/announcement-tagless.json +1 -1
  23. package/public/r/announcement-themes.json +1 -1
  24. package/public/r/announcement.json +1 -1
  25. package/public/r/autocomplete-async.json +1 -1
  26. package/public/r/autocomplete-autohighlight.json +1 -1
  27. package/public/r/autocomplete-demo.json +1 -1
  28. package/public/r/autocomplete-disabled.json +1 -1
  29. package/public/r/autocomplete-form.json +1 -1
  30. package/public/r/autocomplete-grouped.json +1 -1
  31. package/public/r/autocomplete-inline.json +1 -1
  32. package/public/r/autocomplete-lg.json +1 -1
  33. package/public/r/autocomplete-limit.json +1 -1
  34. package/public/r/autocomplete-sm.json +1 -1
  35. package/public/r/autocomplete-with-clear.json +1 -1
  36. package/public/r/autocomplete-with-label.json +1 -1
  37. package/public/r/autocomplete-with-trigger-clear.json +1 -1
  38. package/public/r/avatar-demo.json +1 -1
  39. package/public/r/avatar-fallback.json +1 -1
  40. package/public/r/avatar-group.json +1 -1
  41. package/public/r/avatar-radius.json +1 -1
  42. package/public/r/avatar-size.json +1 -1
  43. package/public/r/avatar-stack-hover.json +1 -1
  44. package/public/r/avatar-stack.json +1 -1
  45. package/public/r/badge-demo.json +1 -1
  46. package/public/r/badge-destructive.json +1 -1
  47. package/public/r/badge-error.json +1 -1
  48. package/public/r/badge-info.json +1 -1
  49. package/public/r/badge-lg.json +1 -1
  50. package/public/r/badge-outline.json +1 -1
  51. package/public/r/badge-secondary.json +1 -1
  52. package/public/r/badge-sm.json +1 -1
  53. package/public/r/badge-success.json +1 -1
  54. package/public/r/badge-warning.json +1 -1
  55. package/public/r/badge-with-icon.json +1 -1
  56. package/public/r/badge-with-link.json +1 -1
  57. package/public/r/banner-inset.json +1 -1
  58. package/public/r/banner-themes.json +1 -1
  59. package/public/r/banner.json +1 -1
  60. package/public/r/bookmarks.json +206 -0
  61. package/public/r/breadcrumb-custom-separator.json +1 -1
  62. package/public/r/breadcrumb-demo.json +1 -1
  63. package/public/r/button-demo.json +1 -1
  64. package/public/r/button-destructive-outline.json +1 -1
  65. package/public/r/button-destructive.json +1 -1
  66. package/public/r/button-disabled.json +1 -1
  67. package/public/r/button-ghost.json +1 -1
  68. package/public/r/button-lg.json +1 -1
  69. package/public/r/button-link.json +1 -1
  70. package/public/r/button-loading.json +1 -1
  71. package/public/r/button-outline.json +1 -1
  72. package/public/r/button-secondary.json +1 -1
  73. package/public/r/button-sm.json +1 -1
  74. package/public/r/button-with-icon.json +1 -1
  75. package/public/r/button-with-link.json +1 -1
  76. package/public/r/button-xl.json +1 -1
  77. package/public/r/button-xs.json +1 -1
  78. package/public/r/calendar-headless.json +1 -1
  79. package/public/r/calendar-rac.json +16 -0
  80. package/public/r/calendar.json +1 -1
  81. package/public/r/card-demo.json +1 -1
  82. package/public/r/chart.json +15 -0
  83. package/public/r/checkbox-card.json +1 -1
  84. package/public/r/checkbox-demo.json +1 -1
  85. package/public/r/checkbox-disabled.json +1 -1
  86. package/public/r/checkbox-form.json +1 -1
  87. package/public/r/checkbox-group-demo.json +1 -1
  88. package/public/r/checkbox-group-disabled.json +1 -1
  89. package/public/r/checkbox-group-form.json +1 -1
  90. package/public/r/checkbox-group-nested-parent.json +1 -1
  91. package/public/r/checkbox-group-parent.json +1 -1
  92. package/public/r/checkbox-tree.json +12 -0
  93. package/public/r/checkbox-with-description.json +1 -1
  94. package/public/r/choicebox-inline.json +1 -1
  95. package/public/r/choicebox.json +1 -1
  96. package/public/r/codebase.json +1 -1
  97. package/public/r/collaborative-canvas.json +1 -1
  98. package/public/r/collapsible-demo.json +1 -1
  99. package/public/r/combobox-autohighlight.json +1 -1
  100. package/public/r/combobox-controlled.json +1 -1
  101. package/public/r/combobox-create-new.json +1 -1
  102. package/public/r/combobox-demo.json +1 -1
  103. package/public/r/combobox-disabled.json +1 -1
  104. package/public/r/combobox-fixed-width.json +1 -1
  105. package/public/r/combobox-form.json +1 -1
  106. package/public/r/combobox-grouped.json +1 -1
  107. package/public/r/combobox-lg.json +1 -1
  108. package/public/r/combobox-multiple-form.json +1 -1
  109. package/public/r/combobox-multiple.json +1 -1
  110. package/public/r/combobox-sm.json +1 -1
  111. package/public/r/combobox-with-clear.json +1 -1
  112. package/public/r/combobox-with-inner-input.json +1 -1
  113. package/public/r/combobox-with-label.json +1 -1
  114. package/public/r/command.json +18 -0
  115. package/public/r/comp-01.json +22 -0
  116. package/public/r/comp-02.json +23 -0
  117. package/public/r/comp-03.json +23 -0
  118. package/public/r/comp-04.json +23 -0
  119. package/public/r/comp-05.json +22 -0
  120. package/public/r/comp-06.json +23 -0
  121. package/public/r/comp-07.json +22 -0
  122. package/public/r/comp-08.json +23 -0
  123. package/public/r/comp-09.json +22 -0
  124. package/public/r/comp-10.json +22 -0
  125. package/public/r/comp-100.json +23 -0
  126. package/public/r/comp-101.json +23 -0
  127. package/public/r/comp-102.json +23 -0
  128. package/public/r/comp-103.json +23 -0
  129. package/public/r/comp-104.json +23 -0
  130. package/public/r/comp-105.json +23 -0
  131. package/public/r/comp-106.json +22 -0
  132. package/public/r/comp-107.json +22 -0
  133. package/public/r/comp-108.json +23 -0
  134. package/public/r/comp-109.json +22 -0
  135. package/public/r/comp-11.json +22 -0
  136. package/public/r/comp-110.json +22 -0
  137. package/public/r/comp-111.json +21 -0
  138. package/public/r/comp-112.json +21 -0
  139. package/public/r/comp-113.json +22 -0
  140. package/public/r/comp-114.json +23 -0
  141. package/public/r/comp-115.json +22 -0
  142. package/public/r/comp-116.json +22 -0
  143. package/public/r/comp-117.json +23 -0
  144. package/public/r/comp-118.json +23 -0
  145. package/public/r/comp-119.json +27 -0
  146. package/public/r/comp-12.json +22 -0
  147. package/public/r/comp-120.json +27 -0
  148. package/public/r/comp-121.json +27 -0
  149. package/public/r/comp-122.json +27 -0
  150. package/public/r/comp-123.json +22 -0
  151. package/public/r/comp-124.json +22 -0
  152. package/public/r/comp-125.json +31 -0
  153. package/public/r/comp-126.json +31 -0
  154. package/public/r/comp-127.json +21 -0
  155. package/public/r/comp-128.json +21 -0
  156. package/public/r/comp-129.json +24 -0
  157. package/public/r/comp-13.json +22 -0
  158. package/public/r/comp-130.json +23 -0
  159. package/public/r/comp-131.json +23 -0
  160. package/public/r/comp-132.json +23 -0
  161. package/public/r/comp-133.json +23 -0
  162. package/public/r/comp-134.json +23 -0
  163. package/public/r/comp-135.json +24 -0
  164. package/public/r/comp-136.json +23 -0
  165. package/public/r/comp-137.json +23 -0
  166. package/public/r/comp-138.json +25 -0
  167. package/public/r/comp-139.json +23 -0
  168. package/public/r/comp-14.json +22 -0
  169. package/public/r/comp-140.json +23 -0
  170. package/public/r/comp-141.json +23 -0
  171. package/public/r/comp-142.json +25 -0
  172. package/public/r/comp-143.json +23 -0
  173. package/public/r/comp-144.json +24 -0
  174. package/public/r/comp-145.json +24 -0
  175. package/public/r/comp-146.json +24 -0
  176. package/public/r/comp-147.json +24 -0
  177. package/public/r/comp-148.json +25 -0
  178. package/public/r/comp-149.json +24 -0
  179. package/public/r/comp-15.json +22 -0
  180. package/public/r/comp-150.json +21 -0
  181. package/public/r/comp-151.json +23 -0
  182. package/public/r/comp-152.json +23 -0
  183. package/public/r/comp-153.json +23 -0
  184. package/public/r/comp-154.json +23 -0
  185. package/public/r/comp-155.json +23 -0
  186. package/public/r/comp-156.json +25 -0
  187. package/public/r/comp-157.json +27 -0
  188. package/public/r/comp-158.json +24 -0
  189. package/public/r/comp-159.json +24 -0
  190. package/public/r/comp-16.json +22 -0
  191. package/public/r/comp-160.json +24 -0
  192. package/public/r/comp-161.json +24 -0
  193. package/public/r/comp-162.json +24 -0
  194. package/public/r/comp-163.json +28 -0
  195. package/public/r/comp-164.json +24 -0
  196. package/public/r/comp-165.json +24 -0
  197. package/public/r/comp-166.json +25 -0
  198. package/public/r/comp-167.json +24 -0
  199. package/public/r/comp-168.json +24 -0
  200. package/public/r/comp-169.json +23 -0
  201. package/public/r/comp-17.json +25 -0
  202. package/public/r/comp-170.json +25 -0
  203. package/public/r/comp-171.json +28 -0
  204. package/public/r/comp-172.json +23 -0
  205. package/public/r/comp-173.json +23 -0
  206. package/public/r/comp-174.json +23 -0
  207. package/public/r/comp-175.json +23 -0
  208. package/public/r/comp-176.json +23 -0
  209. package/public/r/comp-177.json +23 -0
  210. package/public/r/comp-178.json +23 -0
  211. package/public/r/comp-179.json +24 -0
  212. package/public/r/comp-18.json +25 -0
  213. package/public/r/comp-180.json +23 -0
  214. package/public/r/comp-181.json +25 -0
  215. package/public/r/comp-182.json +24 -0
  216. package/public/r/comp-183.json +25 -0
  217. package/public/r/comp-184.json +25 -0
  218. package/public/r/comp-185.json +24 -0
  219. package/public/r/comp-186.json +25 -0
  220. package/public/r/comp-187.json +25 -0
  221. package/public/r/comp-188.json +25 -0
  222. package/public/r/comp-189.json +23 -0
  223. package/public/r/comp-19.json +23 -0
  224. package/public/r/comp-190.json +23 -0
  225. package/public/r/comp-191.json +24 -0
  226. package/public/r/comp-192.json +23 -0
  227. package/public/r/comp-193.json +23 -0
  228. package/public/r/comp-194.json +24 -0
  229. package/public/r/comp-195.json +23 -0
  230. package/public/r/comp-196.json +24 -0
  231. package/public/r/comp-197.json +23 -0
  232. package/public/r/comp-198.json +23 -0
  233. package/public/r/comp-199.json +23 -0
  234. package/public/r/comp-20.json +23 -0
  235. package/public/r/comp-200.json +25 -0
  236. package/public/r/comp-201.json +22 -0
  237. package/public/r/comp-202.json +22 -0
  238. package/public/r/comp-203.json +23 -0
  239. package/public/r/comp-204.json +23 -0
  240. package/public/r/comp-205.json +23 -0
  241. package/public/r/comp-206.json +24 -0
  242. package/public/r/comp-207.json +23 -0
  243. package/public/r/comp-208.json +23 -0
  244. package/public/r/comp-209.json +23 -0
  245. package/public/r/comp-21.json +23 -0
  246. package/public/r/comp-210.json +24 -0
  247. package/public/r/comp-211.json +24 -0
  248. package/public/r/comp-212.json +23 -0
  249. package/public/r/comp-213.json +23 -0
  250. package/public/r/comp-214.json +23 -0
  251. package/public/r/comp-215.json +24 -0
  252. package/public/r/comp-216.json +22 -0
  253. package/public/r/comp-217.json +22 -0
  254. package/public/r/comp-218.json +25 -0
  255. package/public/r/comp-219.json +23 -0
  256. package/public/r/comp-22.json +23 -0
  257. package/public/r/comp-220.json +24 -0
  258. package/public/r/comp-221.json +23 -0
  259. package/public/r/comp-222.json +26 -0
  260. package/public/r/comp-223.json +26 -0
  261. package/public/r/comp-224.json +23 -0
  262. package/public/r/comp-225.json +24 -0
  263. package/public/r/comp-226.json +26 -0
  264. package/public/r/comp-227.json +26 -0
  265. package/public/r/comp-228.json +26 -0
  266. package/public/r/comp-229.json +30 -0
  267. package/public/r/comp-23.json +24 -0
  268. package/public/r/comp-230.json +30 -0
  269. package/public/r/comp-231.json +32 -0
  270. package/public/r/comp-232.json +31 -0
  271. package/public/r/comp-233.json +30 -0
  272. package/public/r/comp-234.json +28 -0
  273. package/public/r/comp-235.json +28 -0
  274. package/public/r/comp-236.json +24 -0
  275. package/public/r/comp-237.json +26 -0
  276. package/public/r/comp-238.json +26 -0
  277. package/public/r/comp-239.json +26 -0
  278. package/public/r/comp-24.json +23 -0
  279. package/public/r/comp-240.json +23 -0
  280. package/public/r/comp-241.json +24 -0
  281. package/public/r/comp-242.json +23 -0
  282. package/public/r/comp-243.json +23 -0
  283. package/public/r/comp-244.json +23 -0
  284. package/public/r/comp-245.json +23 -0
  285. package/public/r/comp-246.json +23 -0
  286. package/public/r/comp-247.json +23 -0
  287. package/public/r/comp-248.json +23 -0
  288. package/public/r/comp-249.json +24 -0
  289. package/public/r/comp-25.json +24 -0
  290. package/public/r/comp-250.json +25 -0
  291. package/public/r/comp-251.json +25 -0
  292. package/public/r/comp-252.json +25 -0
  293. package/public/r/comp-253.json +25 -0
  294. package/public/r/comp-254.json +35 -0
  295. package/public/r/comp-255.json +30 -0
  296. package/public/r/comp-256.json +25 -0
  297. package/public/r/comp-257.json +25 -0
  298. package/public/r/comp-258.json +32 -0
  299. package/public/r/comp-259.json +26 -0
  300. package/public/r/comp-26.json +24 -0
  301. package/public/r/comp-260.json +26 -0
  302. package/public/r/comp-261.json +24 -0
  303. package/public/r/comp-262.json +31 -0
  304. package/public/r/comp-263.json +25 -0
  305. package/public/r/comp-264.json +33 -0
  306. package/public/r/comp-265.json +32 -0
  307. package/public/r/comp-266.json +24 -0
  308. package/public/r/comp-267.json +19 -0
  309. package/public/r/comp-268.json +19 -0
  310. package/public/r/comp-269.json +19 -0
  311. package/public/r/comp-27.json +24 -0
  312. package/public/r/comp-270.json +19 -0
  313. package/public/r/comp-271.json +19 -0
  314. package/public/r/comp-272.json +19 -0
  315. package/public/r/comp-273.json +19 -0
  316. package/public/r/comp-274.json +19 -0
  317. package/public/r/comp-275.json +19 -0
  318. package/public/r/comp-276.json +19 -0
  319. package/public/r/comp-277.json +21 -0
  320. package/public/r/comp-278.json +21 -0
  321. package/public/r/comp-279.json +23 -0
  322. package/public/r/comp-28.json +24 -0
  323. package/public/r/comp-280.json +23 -0
  324. package/public/r/comp-281.json +23 -0
  325. package/public/r/comp-282.json +23 -0
  326. package/public/r/comp-283.json +23 -0
  327. package/public/r/comp-284.json +23 -0
  328. package/public/r/comp-285.json +23 -0
  329. package/public/r/comp-286.json +23 -0
  330. package/public/r/comp-287.json +24 -0
  331. package/public/r/comp-288.json +23 -0
  332. package/public/r/comp-289.json +24 -0
  333. package/public/r/comp-29.json +24 -0
  334. package/public/r/comp-290.json +24 -0
  335. package/public/r/comp-291.json +24 -0
  336. package/public/r/comp-292.json +24 -0
  337. package/public/r/comp-293.json +26 -0
  338. package/public/r/comp-294.json +24 -0
  339. package/public/r/comp-295.json +23 -0
  340. package/public/r/comp-296.json +23 -0
  341. package/public/r/comp-297.json +30 -0
  342. package/public/r/comp-298.json +26 -0
  343. package/public/r/comp-299.json +28 -0
  344. package/public/r/comp-30.json +23 -0
  345. package/public/r/comp-300.json +29 -0
  346. package/public/r/comp-301.json +24 -0
  347. package/public/r/comp-302.json +18 -0
  348. package/public/r/comp-303.json +18 -0
  349. package/public/r/comp-304.json +18 -0
  350. package/public/r/comp-305.json +21 -0
  351. package/public/r/comp-306.json +21 -0
  352. package/public/r/comp-307.json +21 -0
  353. package/public/r/comp-308.json +21 -0
  354. package/public/r/comp-309.json +21 -0
  355. package/public/r/comp-31.json +21 -0
  356. package/public/r/comp-310.json +23 -0
  357. package/public/r/comp-311.json +20 -0
  358. package/public/r/comp-312.json +21 -0
  359. package/public/r/comp-313.json +26 -0
  360. package/public/r/comp-314.json +26 -0
  361. package/public/r/comp-315.json +24 -0
  362. package/public/r/comp-316.json +25 -0
  363. package/public/r/comp-317.json +24 -0
  364. package/public/r/comp-318.json +24 -0
  365. package/public/r/comp-319.json +24 -0
  366. package/public/r/comp-32.json +21 -0
  367. package/public/r/comp-320.json +27 -0
  368. package/public/r/comp-321.json +28 -0
  369. package/public/r/comp-322.json +27 -0
  370. package/public/r/comp-323.json +30 -0
  371. package/public/r/comp-324.json +28 -0
  372. package/public/r/comp-325.json +29 -0
  373. package/public/r/comp-326.json +30 -0
  374. package/public/r/comp-327.json +30 -0
  375. package/public/r/comp-328.json +37 -0
  376. package/public/r/comp-329.json +38 -0
  377. package/public/r/comp-33.json +18 -0
  378. package/public/r/comp-330.json +27 -0
  379. package/public/r/comp-331.json +42 -0
  380. package/public/r/comp-332.json +25 -0
  381. package/public/r/comp-333.json +29 -0
  382. package/public/r/comp-334.json +22 -0
  383. package/public/r/comp-335.json +22 -0
  384. package/public/r/comp-336.json +22 -0
  385. package/public/r/comp-337.json +22 -0
  386. package/public/r/comp-338.json +22 -0
  387. package/public/r/comp-339.json +22 -0
  388. package/public/r/comp-34.json +27 -0
  389. package/public/r/comp-340.json +22 -0
  390. package/public/r/comp-341.json +22 -0
  391. package/public/r/comp-342.json +22 -0
  392. package/public/r/comp-343.json +22 -0
  393. package/public/r/comp-344.json +22 -0
  394. package/public/r/comp-345.json +22 -0
  395. package/public/r/comp-346.json +22 -0
  396. package/public/r/comp-347.json +22 -0
  397. package/public/r/comp-348.json +22 -0
  398. package/public/r/comp-349.json +22 -0
  399. package/public/r/comp-35.json +27 -0
  400. package/public/r/comp-350.json +22 -0
  401. package/public/r/comp-351.json +22 -0
  402. package/public/r/comp-352.json +24 -0
  403. package/public/r/comp-353.json +24 -0
  404. package/public/r/comp-354.json +23 -0
  405. package/public/r/comp-355.json +23 -0
  406. package/public/r/comp-356.json +23 -0
  407. package/public/r/comp-357.json +23 -0
  408. package/public/r/comp-358.json +23 -0
  409. package/public/r/comp-359.json +24 -0
  410. package/public/r/comp-36.json +26 -0
  411. package/public/r/comp-360.json +25 -0
  412. package/public/r/comp-361.json +23 -0
  413. package/public/r/comp-362.json +24 -0
  414. package/public/r/comp-363.json +27 -0
  415. package/public/r/comp-364.json +26 -0
  416. package/public/r/comp-365.json +24 -0
  417. package/public/r/comp-366.json +23 -0
  418. package/public/r/comp-367.json +23 -0
  419. package/public/r/comp-368.json +23 -0
  420. package/public/r/comp-369.json +23 -0
  421. package/public/r/comp-37.json +23 -0
  422. package/public/r/comp-370.json +23 -0
  423. package/public/r/comp-371.json +24 -0
  424. package/public/r/comp-372.json +24 -0
  425. package/public/r/comp-373.json +25 -0
  426. package/public/r/comp-374.json +26 -0
  427. package/public/r/comp-375.json +25 -0
  428. package/public/r/comp-376.json +26 -0
  429. package/public/r/comp-377.json +27 -0
  430. package/public/r/comp-378.json +24 -0
  431. package/public/r/comp-379.json +24 -0
  432. package/public/r/comp-38.json +23 -0
  433. package/public/r/comp-380.json +24 -0
  434. package/public/r/comp-381.json +26 -0
  435. package/public/r/comp-382.json +25 -0
  436. package/public/r/comp-383.json +26 -0
  437. package/public/r/comp-384.json +24 -0
  438. package/public/r/comp-385.json +24 -0
  439. package/public/r/comp-386.json +24 -0
  440. package/public/r/comp-387.json +28 -0
  441. package/public/r/comp-388.json +26 -0
  442. package/public/r/comp-389.json +24 -0
  443. package/public/r/comp-39.json +23 -0
  444. package/public/r/comp-390.json +23 -0
  445. package/public/r/comp-391.json +23 -0
  446. package/public/r/comp-392.json +23 -0
  447. package/public/r/comp-393.json +23 -0
  448. package/public/r/comp-394.json +24 -0
  449. package/public/r/comp-395.json +24 -0
  450. package/public/r/comp-396.json +24 -0
  451. package/public/r/comp-397.json +25 -0
  452. package/public/r/comp-398.json +26 -0
  453. package/public/r/comp-399.json +26 -0
  454. package/public/r/comp-40.json +23 -0
  455. package/public/r/comp-400.json +20 -0
  456. package/public/r/comp-401.json +19 -0
  457. package/public/r/comp-402.json +19 -0
  458. package/public/r/comp-403.json +19 -0
  459. package/public/r/comp-404.json +19 -0
  460. package/public/r/comp-405.json +19 -0
  461. package/public/r/comp-406.json +19 -0
  462. package/public/r/comp-407.json +19 -0
  463. package/public/r/comp-408.json +19 -0
  464. package/public/r/comp-409.json +22 -0
  465. package/public/r/comp-41.json +29 -0
  466. package/public/r/comp-410.json +22 -0
  467. package/public/r/comp-411.json +22 -0
  468. package/public/r/comp-412.json +19 -0
  469. package/public/r/comp-413.json +22 -0
  470. package/public/r/comp-414.json +22 -0
  471. package/public/r/comp-415.json +22 -0
  472. package/public/r/comp-416.json +23 -0
  473. package/public/r/comp-417.json +22 -0
  474. package/public/r/comp-418.json +23 -0
  475. package/public/r/comp-419.json +23 -0
  476. package/public/r/comp-42.json +30 -0
  477. package/public/r/comp-420.json +23 -0
  478. package/public/r/comp-421.json +23 -0
  479. package/public/r/comp-422.json +23 -0
  480. package/public/r/comp-423.json +24 -0
  481. package/public/r/comp-424.json +22 -0
  482. package/public/r/comp-425.json +23 -0
  483. package/public/r/comp-426.json +23 -0
  484. package/public/r/comp-427.json +23 -0
  485. package/public/r/comp-428.json +23 -0
  486. package/public/r/comp-429.json +23 -0
  487. package/public/r/comp-43.json +32 -0
  488. package/public/r/comp-430.json +23 -0
  489. package/public/r/comp-431.json +23 -0
  490. package/public/r/comp-432.json +23 -0
  491. package/public/r/comp-433.json +24 -0
  492. package/public/r/comp-434.json +24 -0
  493. package/public/r/comp-435.json +24 -0
  494. package/public/r/comp-436.json +24 -0
  495. package/public/r/comp-437.json +25 -0
  496. package/public/r/comp-438.json +23 -0
  497. package/public/r/comp-439.json +24 -0
  498. package/public/r/comp-44.json +25 -0
  499. package/public/r/comp-440.json +25 -0
  500. package/public/r/comp-441.json +25 -0
  501. package/public/r/comp-442.json +24 -0
  502. package/public/r/comp-443.json +24 -0
  503. package/public/r/comp-444.json +24 -0
  504. package/public/r/comp-445.json +24 -0
  505. package/public/r/comp-446.json +24 -0
  506. package/public/r/comp-447.json +25 -0
  507. package/public/r/comp-448.json +23 -0
  508. package/public/r/comp-449.json +23 -0
  509. package/public/r/comp-45.json +25 -0
  510. package/public/r/comp-450.json +23 -0
  511. package/public/r/comp-451.json +23 -0
  512. package/public/r/comp-452.json +23 -0
  513. package/public/r/comp-453.json +25 -0
  514. package/public/r/comp-454.json +22 -0
  515. package/public/r/comp-455.json +22 -0
  516. package/public/r/comp-456.json +22 -0
  517. package/public/r/comp-457.json +21 -0
  518. package/public/r/comp-458.json +22 -0
  519. package/public/r/comp-459.json +26 -0
  520. package/public/r/comp-46.json +26 -0
  521. package/public/r/comp-460.json +26 -0
  522. package/public/r/comp-461.json +27 -0
  523. package/public/r/comp-462.json +27 -0
  524. package/public/r/comp-463.json +30 -0
  525. package/public/r/comp-464.json +29 -0
  526. package/public/r/comp-465.json +29 -0
  527. package/public/r/comp-466.json +21 -0
  528. package/public/r/comp-467.json +23 -0
  529. package/public/r/comp-468.json +21 -0
  530. package/public/r/comp-469.json +21 -0
  531. package/public/r/comp-47.json +32 -0
  532. package/public/r/comp-470.json +21 -0
  533. package/public/r/comp-471.json +21 -0
  534. package/public/r/comp-472.json +23 -0
  535. package/public/r/comp-473.json +24 -0
  536. package/public/r/comp-474.json +22 -0
  537. package/public/r/comp-475.json +22 -0
  538. package/public/r/comp-476.json +21 -0
  539. package/public/r/comp-477.json +31 -0
  540. package/public/r/comp-478.json +36 -0
  541. package/public/r/comp-479.json +28 -0
  542. package/public/r/comp-48.json +32 -0
  543. package/public/r/comp-480.json +30 -0
  544. package/public/r/comp-481.json +34 -0
  545. package/public/r/comp-482.json +33 -0
  546. package/public/r/comp-483.json +37 -0
  547. package/public/r/comp-484.json +41 -0
  548. package/public/r/comp-485.json +43 -0
  549. package/public/r/comp-486.json +23 -0
  550. package/public/r/comp-487.json +26 -0
  551. package/public/r/comp-488.json +27 -0
  552. package/public/r/comp-489.json +28 -0
  553. package/public/r/comp-49.json +32 -0
  554. package/public/r/comp-490.json +23 -0
  555. package/public/r/comp-491.json +24 -0
  556. package/public/r/comp-492.json +25 -0
  557. package/public/r/comp-493.json +23 -0
  558. package/public/r/comp-494.json +23 -0
  559. package/public/r/comp-495.json +24 -0
  560. package/public/r/comp-496.json +23 -0
  561. package/public/r/comp-497.json +24 -0
  562. package/public/r/comp-498.json +24 -0
  563. package/public/r/comp-499.json +24 -0
  564. package/public/r/comp-50.json +32 -0
  565. package/public/r/comp-500.json +25 -0
  566. package/public/r/comp-501.json +25 -0
  567. package/public/r/comp-502.json +26 -0
  568. package/public/r/comp-503.json +27 -0
  569. package/public/r/comp-504.json +28 -0
  570. package/public/r/comp-505.json +28 -0
  571. package/public/r/comp-506.json +26 -0
  572. package/public/r/comp-507.json +27 -0
  573. package/public/r/comp-508.json +25 -0
  574. package/public/r/comp-509.json +25 -0
  575. package/public/r/comp-51.json +23 -0
  576. package/public/r/comp-510.json +24 -0
  577. package/public/r/comp-511.json +27 -0
  578. package/public/r/comp-512.json +27 -0
  579. package/public/r/comp-513.json +21 -0
  580. package/public/r/comp-514.json +21 -0
  581. package/public/r/comp-515.json +21 -0
  582. package/public/r/comp-516.json +22 -0
  583. package/public/r/comp-517.json +22 -0
  584. package/public/r/comp-518.json +21 -0
  585. package/public/r/comp-519.json +21 -0
  586. package/public/r/comp-52.json +23 -0
  587. package/public/r/comp-520.json +22 -0
  588. package/public/r/comp-521.json +22 -0
  589. package/public/r/comp-522.json +21 -0
  590. package/public/r/comp-523.json +21 -0
  591. package/public/r/comp-524.json +21 -0
  592. package/public/r/comp-525.json +21 -0
  593. package/public/r/comp-526.json +22 -0
  594. package/public/r/comp-527.json +23 -0
  595. package/public/r/comp-528.json +22 -0
  596. package/public/r/comp-529.json +22 -0
  597. package/public/r/comp-53.json +24 -0
  598. package/public/r/comp-530.json +22 -0
  599. package/public/r/comp-531.json +22 -0
  600. package/public/r/comp-532.json +22 -0
  601. package/public/r/comp-533.json +22 -0
  602. package/public/r/comp-534.json +22 -0
  603. package/public/r/comp-535.json +22 -0
  604. package/public/r/comp-536.json +22 -0
  605. package/public/r/comp-537.json +22 -0
  606. package/public/r/comp-538.json +22 -0
  607. package/public/r/comp-539.json +22 -0
  608. package/public/r/comp-54.json +26 -0
  609. package/public/r/comp-540.json +21 -0
  610. package/public/r/comp-541.json +21 -0
  611. package/public/r/comp-542.json +124 -0
  612. package/public/r/comp-543.json +29 -0
  613. package/public/r/comp-544.json +26 -0
  614. package/public/r/comp-545.json +29 -0
  615. package/public/r/comp-546.json +29 -0
  616. package/public/r/comp-547.json +29 -0
  617. package/public/r/comp-548.json +29 -0
  618. package/public/r/comp-549.json +29 -0
  619. package/public/r/comp-55.json +27 -0
  620. package/public/r/comp-550.json +29 -0
  621. package/public/r/comp-551.json +30 -0
  622. package/public/r/comp-552.json +29 -0
  623. package/public/r/comp-553.json +29 -0
  624. package/public/r/comp-554.json +36 -0
  625. package/public/r/comp-555.json +23 -0
  626. package/public/r/comp-556.json +23 -0
  627. package/public/r/comp-557.json +23 -0
  628. package/public/r/comp-558.json +23 -0
  629. package/public/r/comp-559.json +23 -0
  630. package/public/r/comp-56.json +26 -0
  631. package/public/r/comp-560.json +23 -0
  632. package/public/r/comp-561.json +25 -0
  633. package/public/r/comp-562.json +23 -0
  634. package/public/r/comp-563.json +23 -0
  635. package/public/r/comp-564.json +24 -0
  636. package/public/r/comp-565.json +20 -0
  637. package/public/r/comp-566.json +20 -0
  638. package/public/r/comp-567.json +20 -0
  639. package/public/r/comp-568.json +20 -0
  640. package/public/r/comp-569.json +20 -0
  641. package/public/r/comp-57.json +26 -0
  642. package/public/r/comp-570.json +20 -0
  643. package/public/r/comp-571.json +23 -0
  644. package/public/r/comp-572.json +23 -0
  645. package/public/r/comp-573.json +20 -0
  646. package/public/r/comp-574.json +22 -0
  647. package/public/r/comp-575.json +20 -0
  648. package/public/r/comp-576.json +21 -0
  649. package/public/r/comp-577.json +23 -0
  650. package/public/r/comp-578.json +28 -0
  651. package/public/r/comp-579.json +28 -0
  652. package/public/r/comp-58.json +25 -0
  653. package/public/r/comp-580.json +29 -0
  654. package/public/r/comp-581.json +45 -0
  655. package/public/r/comp-582.json +42 -0
  656. package/public/r/comp-583.json +41 -0
  657. package/public/r/comp-584.json +41 -0
  658. package/public/r/comp-585.json +41 -0
  659. package/public/r/comp-586.json +34 -0
  660. package/public/r/comp-587.json +29 -0
  661. package/public/r/comp-588.json +33 -0
  662. package/public/r/comp-589.json +37 -0
  663. package/public/r/comp-59.json +22 -0
  664. package/public/r/comp-590.json +40 -0
  665. package/public/r/comp-591.json +29 -0
  666. package/public/r/comp-592.json +41 -0
  667. package/public/r/comp-593.json +36 -0
  668. package/public/r/comp-594.json +33 -0
  669. package/public/r/comp-595.json +22 -0
  670. package/public/r/comp-596.json +26 -0
  671. package/public/r/comp-597.json +22 -0
  672. package/public/r/comp-598.json +22 -0
  673. package/public/r/comp-599.json +22 -0
  674. package/public/r/comp-60.json +23 -0
  675. package/public/r/comp-600.json +17 -0
  676. package/public/r/comp-601.json +20 -0
  677. package/public/r/comp-602.json +17 -0
  678. package/public/r/comp-603.json +20 -0
  679. package/public/r/comp-604.json +17 -0
  680. package/public/r/comp-605.json +17 -0
  681. package/public/r/comp-606.json +20 -0
  682. package/public/r/comp-607.json +20 -0
  683. package/public/r/comp-608.json +20 -0
  684. package/public/r/comp-609.json +20 -0
  685. package/public/r/comp-61.json +23 -0
  686. package/public/r/comp-610.json +23 -0
  687. package/public/r/comp-611.json +23 -0
  688. package/public/r/comp-612.json +17 -0
  689. package/public/r/comp-613.json +20 -0
  690. package/public/r/comp-614.json +17 -0
  691. package/public/r/comp-615.json +26 -0
  692. package/public/r/comp-616.json +26 -0
  693. package/public/r/comp-617.json +26 -0
  694. package/public/r/comp-62.json +23 -0
  695. package/public/r/comp-63.json +22 -0
  696. package/public/r/comp-64.json +23 -0
  697. package/public/r/comp-65.json +22 -0
  698. package/public/r/comp-66.json +22 -0
  699. package/public/r/comp-67.json +23 -0
  700. package/public/r/comp-68.json +24 -0
  701. package/public/r/comp-69.json +24 -0
  702. package/public/r/comp-70.json +24 -0
  703. package/public/r/comp-71.json +22 -0
  704. package/public/r/comp-72.json +21 -0
  705. package/public/r/comp-73.json +18 -0
  706. package/public/r/comp-74.json +27 -0
  707. package/public/r/comp-75.json +22 -0
  708. package/public/r/comp-76.json +23 -0
  709. package/public/r/comp-77.json +22 -0
  710. package/public/r/comp-78.json +21 -0
  711. package/public/r/comp-79.json +22 -0
  712. package/public/r/comp-80.json +21 -0
  713. package/public/r/comp-81.json +21 -0
  714. package/public/r/comp-82.json +22 -0
  715. package/public/r/comp-83.json +21 -0
  716. package/public/r/comp-84.json +21 -0
  717. package/public/r/comp-85.json +22 -0
  718. package/public/r/comp-86.json +22 -0
  719. package/public/r/comp-87.json +21 -0
  720. package/public/r/comp-88.json +22 -0
  721. package/public/r/comp-89.json +21 -0
  722. package/public/r/comp-90.json +22 -0
  723. package/public/r/comp-91.json +22 -0
  724. package/public/r/comp-92.json +22 -0
  725. package/public/r/comp-93.json +22 -0
  726. package/public/r/comp-94.json +24 -0
  727. package/public/r/comp-95.json +26 -0
  728. package/public/r/comp-96.json +21 -0
  729. package/public/r/comp-97.json +21 -0
  730. package/public/r/comp-98.json +22 -0
  731. package/public/r/comp-99.json +23 -0
  732. package/public/r/comparison-event-handlers.json +1 -1
  733. package/public/r/comparison-hover.json +1 -1
  734. package/public/r/comparison.json +1 -1
  735. package/public/r/context-menu.json +16 -0
  736. package/public/r/contribution-graph-custom-footer.json +1 -1
  737. package/public/r/credit-card-apple.json +1 -1
  738. package/public/r/credit-card-back.json +1 -1
  739. package/public/r/credit-card.json +1 -1
  740. package/public/r/cropper.json +15 -0
  741. package/public/r/cursor-color.json +1 -1
  742. package/public/r/cursor-message.json +1 -1
  743. package/public/r/cursor-name-message.json +1 -1
  744. package/public/r/cursor-name.json +1 -1
  745. package/public/r/cursor.json +1 -1
  746. package/public/r/dashboard-1.json +263 -0
  747. package/public/r/dashboard-2.json +264 -0
  748. package/public/r/dashboard-3.json +225 -0
  749. package/public/r/datefield-rac.json +15 -0
  750. package/public/r/deck-controlled.json +1 -1
  751. package/public/r/deck-product-cards.json +1 -1
  752. package/public/r/deck.json +1 -1
  753. package/public/r/dialog-close-confirmation.json +1 -1
  754. package/public/r/dialog-demo.json +1 -1
  755. package/public/r/dialog-from-menu.json +1 -1
  756. package/public/r/dialog-nested.json +1 -1
  757. package/public/r/dialog-stack-controlled.json +1 -1
  758. package/public/r/dialog-stack-navigation.json +1 -1
  759. package/public/r/dialog-stack-six.json +1 -1
  760. package/public/r/dialog-stack.json +1 -1
  761. package/public/r/dropdown-menu.json +15 -0
  762. package/public/r/dropzone-custom-empty-state.json +1 -1
  763. package/public/r/dropzone-image-preview.json +1 -1
  764. package/public/r/editor.json +1 -1
  765. package/public/r/emails.json +243 -0
  766. package/public/r/empty-demo.json +1 -1
  767. package/public/r/example-app-calendar.json +323 -0
  768. package/public/r/field-2.json +19 -0
  769. package/public/r/field-autocomplete.json +1 -1
  770. package/public/r/field-checkbox-group.json +1 -1
  771. package/public/r/field-checkbox.json +1 -1
  772. package/public/r/field-combobox-multiple.json +1 -1
  773. package/public/r/field-combobox.json +1 -1
  774. package/public/r/field-complete-form.json +1 -1
  775. package/public/r/field-demo.json +1 -1
  776. package/public/r/field-disabled.json +1 -1
  777. package/public/r/field-error.json +1 -1
  778. package/public/r/field-number-field.json +1 -1
  779. package/public/r/field-radio.json +1 -1
  780. package/public/r/field-required.json +1 -1
  781. package/public/r/field-select.json +1 -1
  782. package/public/r/field-slider.json +1 -1
  783. package/public/r/field-switch.json +1 -1
  784. package/public/r/field-textarea.json +1 -1
  785. package/public/r/field-validity.json +1 -1
  786. package/public/r/fieldset-demo.json +1 -1
  787. package/public/r/files.json +195 -0
  788. package/public/r/form-demo.json +1 -1
  789. package/public/r/form-zod.json +1 -1
  790. package/public/r/form.json +1 -1
  791. package/public/r/frame-demo.json +1 -1
  792. package/public/r/gantt-lanes.json +1 -1
  793. package/public/r/gantt-no-sidebar.json +1 -1
  794. package/public/r/gantt-read-only.json +1 -1
  795. package/public/r/gantt.json +1 -1
  796. package/public/r/glimpse-custom.json +1 -1
  797. package/public/r/glimpse.json +1 -1
  798. package/public/r/gooey-toast-demo.json +1 -1
  799. package/public/r/gooey-toast-promise.json +1 -1
  800. package/public/r/gooey-toast-states.json +1 -1
  801. package/public/r/gooey-toast-with-button.json +1 -1
  802. package/public/r/group-demo.json +1 -1
  803. package/public/r/group-with-input.json +1 -1
  804. package/public/r/hero.json +1 -1
  805. package/public/r/hover-card.json +15 -0
  806. package/public/r/image-crop-circular.json +1 -1
  807. package/public/r/image-crop-custom.json +1 -1
  808. package/public/r/image-crop.json +1 -1
  809. package/public/r/image-zoom-background.json +1 -1
  810. package/public/r/image-zoom-margin.json +1 -1
  811. package/public/r/image-zoom.json +1 -1
  812. package/public/r/input-demo.json +1 -1
  813. package/public/r/input-disabled.json +1 -1
  814. package/public/r/input-file.json +1 -1
  815. package/public/r/input-group.json +20 -0
  816. package/public/r/input-lg.json +1 -1
  817. package/public/r/input-sm.json +1 -1
  818. package/public/r/input-with-button.json +1 -1
  819. package/public/r/input-with-label.json +1 -1
  820. package/public/r/kanban-simple.json +1 -1
  821. package/public/r/kanban.json +1 -1
  822. package/public/r/kbd.json +12 -0
  823. package/public/r/leads.json +271 -0
  824. package/public/r/list-simple.json +1 -1
  825. package/public/r/list.json +1 -1
  826. package/public/r/maps.json +188 -0
  827. package/public/r/menu-checkbox.json +1 -1
  828. package/public/r/menu-close-on-click.json +1 -1
  829. package/public/r/menu-demo.json +1 -1
  830. package/public/r/menu-group-labels.json +1 -1
  831. package/public/r/menu-hover.json +1 -1
  832. package/public/r/menu-link.json +1 -1
  833. package/public/r/menu-nested.json +1 -1
  834. package/public/r/menu-radio-group.json +1 -1
  835. package/public/r/meter-demo.json +1 -1
  836. package/public/r/meter-with-formatted-value.json +1 -1
  837. package/public/r/meter-with-range.json +1 -1
  838. package/public/r/mini-calendar-controlled.json +1 -1
  839. package/public/r/multiselect.json +15 -0
  840. package/public/r/navigation-menu.json +12 -0
  841. package/public/r/number-field-form.json +1 -1
  842. package/public/r/number-field-with-label.json +1 -1
  843. package/public/r/number-field-with-scrub.json +1 -1
  844. package/public/r/number-field-with-step.json +1 -1
  845. package/public/r/pill-avatar-group.json +1 -1
  846. package/public/r/pill-delta.json +1 -1
  847. package/public/r/pill-icon.json +1 -1
  848. package/public/r/pill-indicator.json +1 -1
  849. package/public/r/pill-status.json +1 -1
  850. package/public/r/pill.json +1 -1
  851. package/public/r/popover-demo.json +1 -1
  852. package/public/r/popover-with-close.json +1 -1
  853. package/public/r/preview-card-demo.json +1 -1
  854. package/public/r/pricing.json +1 -1
  855. package/public/r/progress-with-formatted-value.json +1 -1
  856. package/public/r/progress-with-label-value.json +1 -1
  857. package/public/r/radio-group-card.json +1 -1
  858. package/public/r/radio-group-demo.json +1 -1
  859. package/public/r/radio-group-disabled.json +1 -1
  860. package/public/r/radio-group-form.json +1 -1
  861. package/public/r/radio-group-with-description.json +1 -1
  862. package/public/r/reel-custom.json +1 -1
  863. package/public/r/reel-images.json +1 -1
  864. package/public/r/reel-minimal.json +1 -1
  865. package/public/r/reel.json +1 -1
  866. package/public/r/registry.json +18217 -0
  867. package/public/r/relative-time-controlled.json +1 -1
  868. package/public/r/relative-time-format-date.json +1 -1
  869. package/public/r/relative-time-format-time.json +1 -1
  870. package/public/r/relative-time.json +1 -1
  871. package/public/r/rentals.json +187 -0
  872. package/public/r/roadmap.json +1 -1
  873. package/public/r/sandbox-no-file-explorer.json +1 -1
  874. package/public/r/sandbox.json +1 -1
  875. package/public/r/scroll-area-both.json +1 -1
  876. package/public/r/scroll-area-demo.json +1 -1
  877. package/public/r/scroll-area-horizontal.json +1 -1
  878. package/public/r/select-demo.json +1 -1
  879. package/public/r/select-disabled.json +1 -1
  880. package/public/r/select-form.json +1 -1
  881. package/public/r/select-lg.json +1 -1
  882. package/public/r/select-native.json +12 -0
  883. package/public/r/select-sm.json +1 -1
  884. package/public/r/select-with-groups.json +1 -1
  885. package/public/r/select-without-alignment.json +1 -1
  886. package/public/r/select.json +1 -1
  887. package/public/r/separator-demo.json +1 -1
  888. package/public/r/sheet-demo.json +1 -1
  889. package/public/r/sheet-position.json +1 -1
  890. package/public/r/sidebar-nav.json +22 -0
  891. package/public/r/skeleton-demo.json +1 -1
  892. package/public/r/skeleton.json +1 -1
  893. package/public/r/slider-form.json +1 -1
  894. package/public/r/slider-with-label-value.json +1 -1
  895. package/public/r/sonner.json +16 -0
  896. package/public/r/stats-card.json +22 -0
  897. package/public/r/status-custom.json +1 -1
  898. package/public/r/stepper.json +15 -0
  899. package/public/r/stories-images.json +1 -1
  900. package/public/r/switch-card.json +1 -1
  901. package/public/r/switch-demo.json +1 -1
  902. package/public/r/switch-disabled.json +1 -1
  903. package/public/r/switch-form.json +1 -1
  904. package/public/r/switch-with-description.json +1 -1
  905. package/public/r/table-demo.json +1 -1
  906. package/public/r/table-framed.json +1 -1
  907. package/public/r/table-simple.json +1 -1
  908. package/public/r/table.json +1 -1
  909. package/public/r/tabs-demo.json +1 -1
  910. package/public/r/tabs-underline-vertical.json +1 -1
  911. package/public/r/tabs-underline.json +1 -1
  912. package/public/r/tabs-vertical.json +1 -1
  913. package/public/r/tags-create.json +1 -1
  914. package/public/r/tags-filter.json +1 -1
  915. package/public/r/tags.json +1 -1
  916. package/public/r/template-auth-eight.json +28 -0
  917. package/public/r/template-auth-five.json +28 -0
  918. package/public/r/template-auth-four.json +29 -0
  919. package/public/r/template-auth-nine.json +28 -0
  920. package/public/r/template-auth-one.json +49 -0
  921. package/public/r/template-auth-seven.json +29 -0
  922. package/public/r/template-auth-six.json +28 -0
  923. package/public/r/template-auth-three.json +49 -0
  924. package/public/r/template-auth-two.json +44 -0
  925. package/public/r/template-hero-eight.json +83 -0
  926. package/public/r/template-hero-eleven.json +29 -0
  927. package/public/r/template-hero-five.json +35 -0
  928. package/public/r/template-hero-four.json +35 -0
  929. package/public/r/template-hero-fourteen.json +101 -0
  930. package/public/r/template-hero-nine.json +74 -0
  931. package/public/r/template-hero-one.json +90 -0
  932. package/public/r/template-hero-seven.json +83 -0
  933. package/public/r/template-hero-six.json +83 -0
  934. package/public/r/template-hero-ten.json +77 -0
  935. package/public/r/template-hero-thirteen.json +101 -0
  936. package/public/r/template-hero-three.json +35 -0
  937. package/public/r/template-hero-twelve.json +30 -0
  938. package/public/r/template-hero-two.json +96 -0
  939. package/public/r/template-logo-cloud-five.json +68 -0
  940. package/public/r/template-logo-cloud-four.json +71 -0
  941. package/public/r/template-logo-cloud-one.json +89 -0
  942. package/public/r/template-logo-cloud-three.json +71 -0
  943. package/public/r/template-logo-cloud-two.json +74 -0
  944. package/public/r/textarea-demo.json +1 -1
  945. package/public/r/textarea-disabled.json +1 -1
  946. package/public/r/textarea-form.json +1 -1
  947. package/public/r/textarea-lg.json +1 -1
  948. package/public/r/textarea-sm.json +1 -1
  949. package/public/r/textarea-with-label.json +1 -1
  950. package/public/r/ticker-inline.json +1 -1
  951. package/public/r/timeline.json +15 -0
  952. package/public/r/toast-demo.json +1 -1
  953. package/public/r/toast-heights.json +1 -1
  954. package/public/r/toast-loading.json +1 -1
  955. package/public/r/toast-promise.json +1 -1
  956. package/public/r/toast-with-action.json +1 -1
  957. package/public/r/toast-with-status.json +1 -1
  958. package/public/r/toggle-demo.json +1 -1
  959. package/public/r/toggle-disabled.json +1 -1
  960. package/public/r/toggle-group-demo.json +1 -1
  961. package/public/r/toggle-group-disabled.json +1 -1
  962. package/public/r/toggle-group-lg.json +1 -1
  963. package/public/r/toggle-group-multiple.json +1 -1
  964. package/public/r/toggle-group-outline-with-separator.json +1 -1
  965. package/public/r/toggle-group-outline.json +1 -1
  966. package/public/r/toggle-group-sm.json +1 -1
  967. package/public/r/toggle-group-with-disabled-item.json +1 -1
  968. package/public/r/toggle-icon-group.json +1 -1
  969. package/public/r/toggle-lg.json +1 -1
  970. package/public/r/toggle-outline.json +1 -1
  971. package/public/r/toggle-sm.json +1 -1
  972. package/public/r/toggle-with-icon.json +1 -1
  973. package/public/r/toolbar-demo.json +1 -1
  974. package/public/r/tooltip-demo.json +1 -1
  975. package/public/r/tooltip-grouped.json +1 -1
  976. package/public/r/tree-controlled.json +1 -1
  977. package/public/r/tree-custom-icons.json +1 -1
  978. package/public/r/tree-no-lines.json +1 -1
  979. package/public/r/tree-simple.json +1 -1
  980. package/public/r/tree.json +1 -1
  981. package/public/r/typography.json +1 -1
  982. package/public/r/ui.json +5 -0
  983. package/public/r/use-character-limit.json +12 -0
  984. package/public/r/use-file-upload.json +12 -0
  985. package/public/r/use-pagination.json +12 -0
  986. package/public/r/use-slider-with-input.json +12 -0
  987. package/public/r/use-toast.json +12 -0
  988. package/public/r/utils.json +16 -0
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-581",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
9
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
10
+ "https://loveui.dev/building-blocks/r/popover.json"
11
+ ],
12
+ "files": [
13
+ {
14
+ "path": "registry/default/components/comp-581.tsx",
15
+ "content": "import InfoMenu from \"@/registry/building-blocks/default/components/navbar-components/info-menu\"\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Home\" },\n { href: \"#\", label: \"Features\" },\n { href: \"#\", label: \"Pricing\" },\n { href: \"#\", label: \"About\" },\n]\n\nexport default function Component() {\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-36 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink href={link.href} className=\"py-1.5\">\n {link.label}\n </NavigationMenuLink>\n </NavigationMenuItem>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n {/* Main nav */}\n <div className=\"flex items-center gap-6\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n {/* Navigation menu */}\n <NavigationMenu className=\"max-md:hidden\">\n <NavigationMenuList className=\"gap-2\">\n {navigationLinks.map((link, index) => (\n <NavigationMenuItem key={index}>\n <NavigationMenuLink\n href={link.href}\n className=\"py-1.5 font-medium text-muted-foreground hover:text-primary\"\n >\n {link.label}\n </NavigationMenuLink>\n </NavigationMenuItem>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </div>\n </div>\n {/* Right side */}\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n {/* Info menu */}\n <InfoMenu />\n {/* Notification */}\n <NotificationMenu />\n </div>\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
16
+ "type": "registry:component"
17
+ },
18
+ {
19
+ "path": "registry/default/components/navbar-components/info-menu.tsx",
20
+ "content": "import {\n BookIcon,\n InfoIcon,\n LifeBuoyIcon,\n MessageCircleMoreIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function InfoMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full shadow-none\"\n aria-label=\"Open edit menu\"\n >\n <InfoIcon\n className=\"text-muted-foreground\"\n size={16}\n aria-hidden=\"true\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"pb-2\">\n <DropdownMenuLabel>Need help?</DropdownMenuLabel>\n <DropdownMenuItem\n className=\"cursor-pointer py-1 focus:bg-transparent focus:underline\"\n asChild\n >\n <a href=\"#\">\n <BookIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n Documentation\n </a>\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"cursor-pointer py-1 focus:bg-transparent focus:underline\"\n asChild\n >\n <a href=\"#\">\n <LifeBuoyIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n Support\n </a>\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"cursor-pointer py-1 focus:bg-transparent focus:underline\"\n asChild\n >\n <a href=\"#\">\n <MessageCircleMoreIcon\n size={16}\n className=\"opacity-60\"\n aria-hidden=\"true\"\n />\n Contact us\n </a>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
21
+ "type": "registry:component"
22
+ },
23
+ {
24
+ "path": "registry/default/components/navbar-components/logo.tsx",
25
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
26
+ "type": "registry:component"
27
+ },
28
+ {
29
+ "path": "registry/default/components/navbar-components/notification-menu.tsx",
30
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n user: \"Connor Love\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n user: \"Nathan Wickersham\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n user: \"Ian Shroeter\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n user: \"Thomas Raklovits\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n user: \"Sampson Addae\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n user: \"Sam Altman\",\n action: \"mentioned you in\",\n target: \"loveui open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n <svg\n width=\"6\"\n height=\"6\"\n fill=\"currentColor\"\n viewBox=\"0 0 6 6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n )\n}\n\nexport default function NotificationMenu() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open notifications\"\n >\n <BellIcon size={16} aria-hidden=\"true\" />\n {unreadCount > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-1 rounded-full bg-primary\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-1\">\n <div className=\"flex items-baseline justify-between gap-4 px-3 py-2\">\n <div className=\"text-sm font-semibold\">Notifications</div>\n {unreadCount > 0 && (\n <button\n className=\"text-xs font-medium hover:underline\"\n onClick={handleMarkAllAsRead}\n >\n Mark all as read\n </button>\n )}\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className=\"-mx-1 my-1 h-px bg-border\"\n ></div>\n {notifications.map((notification) => (\n <div\n key={notification.id}\n className=\"rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent\"\n >\n <div className=\"relative flex items-start pe-3\">\n <div className=\"flex-1 space-y-1\">\n <button\n className=\"text-left text-foreground/80 after:absolute after:inset-0\"\n onClick={() => handleNotificationClick(notification.id)}\n >\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.user}\n </span>{\" \"}\n {notification.action}{\" \"}\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.target}\n </span>\n .\n </button>\n <div className=\"text-xs text-muted-foreground\">\n {notification.timestamp}\n </div>\n </div>\n {notification.unread && (\n <div className=\"absolute end-0 self-center\">\n <span className=\"sr-only\">Unread</span>\n <Dot />\n </div>\n )}\n </div>\n </div>\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n",
31
+ "type": "registry:component"
32
+ },
33
+ {
34
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
35
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
36
+ "type": "registry:component"
37
+ }
38
+ ],
39
+ "meta": {
40
+ "tags": [
41
+ "navbar, navigation"
42
+ ],
43
+ "colSpan": 3
44
+ }
45
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-582",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
9
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
10
+ "https://loveui.dev/building-blocks/r/popover.json",
11
+ "https://loveui.dev/building-blocks/r/select.json",
12
+ "https://loveui.dev/building-blocks/r/tooltip.json"
13
+ ],
14
+ "files": [
15
+ {
16
+ "path": "registry/default/components/comp-582.tsx",
17
+ "content": "import { useId } from \"react\"\nimport {\n FileTextIcon,\n GlobeIcon,\n HomeIcon,\n LayersIcon,\n UsersIcon,\n} from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport ThemeToggle from \"@/registry/building-blocks/default/components/navbar-components/theme-toggle\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/building-blocks/default/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/building-blocks/default/ui/tooltip\"\n\n// Navigation links with icons for desktop icon-only navigation\nconst navigationLinks = [\n { href: \"#\", label: \"Dashboard\", icon: HomeIcon, active: true },\n { href: \"#\", label: \"Projects\", icon: LayersIcon },\n { href: \"#\", label: \"Documentation\", icon: FileTextIcon },\n { href: \"#\", label: \"Team\", icon: UsersIcon },\n]\n\n// Language options\nconst languages = [\n { value: \"en\", label: \"En\" },\n { value: \"es\", label: \"Es\" },\n { value: \"fr\", label: \"Fr\" },\n { value: \"de\", label: \"De\" },\n { value: \"ja\", label: \"Ja\" },\n]\n\nexport default function Component() {\n const id = useId()\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex flex-1 items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-36 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5\"\n active={link.active}\n >\n <Icon\n size={16}\n className=\"text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n <div className=\"flex items-center gap-6\">\n {/* Logo */}\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n {/* Desktop navigation - icon only */}\n <NavigationMenu className=\"hidden md:flex\">\n <NavigationMenuList className=\"gap-2\">\n <TooltipProvider>\n {navigationLinks.map((link) => (\n <NavigationMenuItem key={link.label}>\n <Tooltip>\n <TooltipTrigger asChild>\n <NavigationMenuLink\n href={link.href}\n className=\"flex size-8 items-center justify-center p-1.5\"\n >\n <link.icon size={20} aria-hidden=\"true\" />\n <span className=\"sr-only\">{link.label}</span>\n </NavigationMenuLink>\n </TooltipTrigger>\n <TooltipContent\n side=\"bottom\"\n className=\"px-2 py-1 text-xs\"\n >\n <p>{link.label}</p>\n </TooltipContent>\n </Tooltip>\n </NavigationMenuItem>\n ))}\n </TooltipProvider>\n </NavigationMenuList>\n </NavigationMenu>\n </div>\n </div>\n {/* Right side */}\n <div className=\"flex items-center gap-2\">\n {/* Theme toggle */}\n <ThemeToggle />\n {/* Language selector */}\n <Select defaultValue=\"en\">\n <SelectTrigger\n id={`language-${id}`}\n className=\"h-8 border-none px-2 shadow-none hover:bg-accent hover:text-accent-foreground [&>svg]:shrink-0 [&>svg]:text-muted-foreground/80\"\n aria-label=\"Select language\"\n >\n <GlobeIcon size={16} aria-hidden=\"true\" />\n <SelectValue className=\"hidden sm:inline-flex\" />\n </SelectTrigger>\n <SelectContent className=\"[&_*[role=option]]:ps-2 [&_*[role=option]]:pe-8 [&_*[role=option]>span]:start-auto [&_*[role=option]>span]:end-2 [&_*[role=option]>span]:flex [&_*[role=option]>span]:items-center [&_*[role=option]>span]:gap-2\">\n {languages.map((lang) => (\n <SelectItem key={lang.value} value={lang.value}>\n <span className=\"flex items-center gap-2\">\n <span className=\"truncate\">{lang.label}</span>\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
18
+ "type": "registry:component"
19
+ },
20
+ {
21
+ "path": "registry/default/components/navbar-components/logo.tsx",
22
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
23
+ "type": "registry:component"
24
+ },
25
+ {
26
+ "path": "registry/default/components/navbar-components/theme-toggle.tsx",
27
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { MoonIcon, SunIcon } from \"lucide-react\"\n\nimport { Toggle } from \"@/registry/building-blocks/default/ui/toggle\"\n\nexport default function ThemeToggle() {\n const [theme, setTheme] = useState<string>(\"light\")\n\n return (\n <div>\n <Toggle\n variant=\"outline\"\n className=\"group size-8 rounded-full border-none text-muted-foreground shadow-none data-[state=on]:bg-transparent data-[state=on]:text-muted-foreground data-[state=on]:hover:bg-muted data-[state=on]:hover:text-foreground\"\n pressed={theme === \"dark\"}\n onPressedChange={() =>\n setTheme((prev) => (prev === \"dark\" ? \"light\" : \"dark\"))\n }\n aria-label={`Switch to ${theme === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {/* Note: After dark mode implementation, rely on dark: prefix rather than group-data-[state=on]: */}\n <MoonIcon\n size={16}\n className=\"shrink-0 scale-0 opacity-0 transition-all group-data-[state=on]:scale-100 group-data-[state=on]:opacity-100\"\n aria-hidden=\"true\"\n />\n <SunIcon\n size={16}\n className=\"absolute shrink-0 scale-100 opacity-100 transition-all group-data-[state=on]:scale-0 group-data-[state=on]:opacity-0\"\n aria-hidden=\"true\"\n />\n </Toggle>\n </div>\n )\n}\n",
28
+ "type": "registry:component"
29
+ },
30
+ {
31
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
32
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
33
+ "type": "registry:component"
34
+ }
35
+ ],
36
+ "meta": {
37
+ "tags": [
38
+ "navbar, navigation"
39
+ ],
40
+ "colSpan": 3
41
+ }
42
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-583",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/breadcrumb.json",
9
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
10
+ "https://loveui.dev/building-blocks/r/popover.json",
11
+ "https://loveui.dev/building-blocks/r/select.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "registry/default/components/comp-583.tsx",
16
+ "content": "import { ChevronsUpDown } from \"lucide-react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/registry/building-blocks/default/ui/breadcrumb\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectValue,\n} from \"@/registry/building-blocks/default/ui/select\"\n\nexport default function Component() {\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex items-center gap-2\">\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#\" className=\"text-foreground\">\n <Logo />\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator> / </BreadcrumbSeparator>\n <BreadcrumbItem className=\"md:hidden\">\n <DropdownMenu>\n <DropdownMenuTrigger className=\"hover:text-foreground\">\n <BreadcrumbEllipsis />\n <span className=\"sr-only\">Toggle menu</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem asChild>\n <a href=\"#\">Personal Account</a>\n </DropdownMenuItem>\n <DropdownMenuItem asChild>\n <a href=\"#\">Projects</a>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </BreadcrumbItem>\n <BreadcrumbItem className=\"max-md:hidden\">\n <BreadcrumbLink href=\"#\">Personal Account</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator className=\"max-md:hidden\">\n {\" \"}\n /{\" \"}\n </BreadcrumbSeparator>\n <BreadcrumbItem className=\"max-md:hidden\">\n <BreadcrumbLink href=\"#\">Projects</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator> / </BreadcrumbSeparator>\n <BreadcrumbItem>\n <Select defaultValue=\"1\">\n <SelectPrimitive.SelectTrigger\n aria-label=\"Select project\"\n asChild\n >\n <Button\n variant=\"ghost\"\n className=\"h-8 px-1.5 text-foreground focus-visible:bg-accent focus-visible:ring-0\"\n >\n <SelectValue placeholder=\"Select project\" />\n <ChevronsUpDown\n size={14}\n className=\"text-muted-foreground/80\"\n />\n </Button>\n </SelectPrimitive.SelectTrigger>\n <SelectContent className=\"[&_*[role=option]]:ps-2 [&_*[role=option]]:pe-8 [&_*[role=option]>span]:start-auto [&_*[role=option]>span]:end-2\">\n <SelectItem value=\"1\">Main project</SelectItem>\n <SelectItem value=\"2\">Origin project</SelectItem>\n </SelectContent>\n </Select>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n {/* Right side */}\n <div className=\"flex items-center gap-4\">\n {/* Notification */}\n <NotificationMenu />\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
17
+ "type": "registry:component"
18
+ },
19
+ {
20
+ "path": "registry/default/components/navbar-components/logo.tsx",
21
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
22
+ "type": "registry:component"
23
+ },
24
+ {
25
+ "path": "registry/default/components/navbar-components/notification-menu.tsx",
26
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n user: \"Connor Love\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n user: \"Nathan Wickersham\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n user: \"Ian Shroeter\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n user: \"Thomas Raklovits\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n user: \"Sampson Addae\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n user: \"Sam Altman\",\n action: \"mentioned you in\",\n target: \"loveui open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n <svg\n width=\"6\"\n height=\"6\"\n fill=\"currentColor\"\n viewBox=\"0 0 6 6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n )\n}\n\nexport default function NotificationMenu() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open notifications\"\n >\n <BellIcon size={16} aria-hidden=\"true\" />\n {unreadCount > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-1 rounded-full bg-primary\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-1\">\n <div className=\"flex items-baseline justify-between gap-4 px-3 py-2\">\n <div className=\"text-sm font-semibold\">Notifications</div>\n {unreadCount > 0 && (\n <button\n className=\"text-xs font-medium hover:underline\"\n onClick={handleMarkAllAsRead}\n >\n Mark all as read\n </button>\n )}\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className=\"-mx-1 my-1 h-px bg-border\"\n ></div>\n {notifications.map((notification) => (\n <div\n key={notification.id}\n className=\"rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent\"\n >\n <div className=\"relative flex items-start pe-3\">\n <div className=\"flex-1 space-y-1\">\n <button\n className=\"text-left text-foreground/80 after:absolute after:inset-0\"\n onClick={() => handleNotificationClick(notification.id)}\n >\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.user}\n </span>{\" \"}\n {notification.action}{\" \"}\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.target}\n </span>\n .\n </button>\n <div className=\"text-xs text-muted-foreground\">\n {notification.timestamp}\n </div>\n </div>\n {notification.unread && (\n <div className=\"absolute end-0 self-center\">\n <span className=\"sr-only\">Unread</span>\n <Dot />\n </div>\n )}\n </div>\n </div>\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n",
27
+ "type": "registry:component"
28
+ },
29
+ {
30
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
31
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
32
+ "type": "registry:component"
33
+ }
34
+ ],
35
+ "meta": {
36
+ "tags": [
37
+ "navbar, navigation"
38
+ ],
39
+ "colSpan": 3
40
+ }
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-584",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
9
+ "https://loveui.dev/building-blocks/r/input.json",
10
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
11
+ "https://loveui.dev/building-blocks/r/popover.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "registry/default/components/comp-584.tsx",
16
+ "content": "import { useId } from \"react\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Home\", active: true },\n { href: \"#\", label: \"Features\" },\n { href: \"#\", label: \"Pricing\" },\n { href: \"#\", label: \"About\" },\n]\n\nexport default function Component() {\n const id = useId()\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex flex-1 items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-36 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink\n href={link.href}\n className=\"py-1.5\"\n active={link.active}\n >\n {link.label}\n </NavigationMenuLink>\n </NavigationMenuItem>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n {/* Logo */}\n <div className=\"flex items-center\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n </div>\n </div>\n {/* Middle area */}\n <div className=\"grow\">\n {/* Search form */}\n <div className=\"relative mx-auto w-full max-w-xs\">\n <Input\n id={id}\n className=\"peer h-8 ps-8 pe-10\"\n placeholder=\"Search...\"\n type=\"search\"\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-2 text-muted-foreground/80 peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <div className=\"pointer-events-none absolute inset-y-0 end-0 flex items-center justify-center pe-2 text-muted-foreground\">\n <kbd className=\"inline-flex h-5 max-h-full items-center rounded border px-1 font-[inherit] text-[0.625rem] font-medium text-muted-foreground/70\">\n ⌘K\n </kbd>\n </div>\n </div>\n </div>\n {/* Right side */}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n {/* Notification */}\n <NotificationMenu />\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n {/* Bottom navigation */}\n <div className=\"border-t py-2 max-md:hidden\">\n {/* Navigation menu */}\n <NavigationMenu>\n <NavigationMenuList className=\"gap-2\">\n {navigationLinks.map((link, index) => (\n <NavigationMenuItem key={index}>\n <NavigationMenuLink\n active={link.active}\n href={link.href}\n className=\"py-1.5 font-medium text-muted-foreground hover:text-primary\"\n >\n {link.label}\n </NavigationMenuLink>\n </NavigationMenuItem>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </div>\n </header>\n )\n}\n",
17
+ "type": "registry:component"
18
+ },
19
+ {
20
+ "path": "registry/default/components/navbar-components/logo.tsx",
21
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
22
+ "type": "registry:component"
23
+ },
24
+ {
25
+ "path": "registry/default/components/navbar-components/notification-menu.tsx",
26
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n user: \"Connor Love\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n user: \"Nathan Wickersham\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n user: \"Ian Shroeter\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n user: \"Thomas Raklovits\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n user: \"Sampson Addae\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n user: \"Sam Altman\",\n action: \"mentioned you in\",\n target: \"loveui open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n <svg\n width=\"6\"\n height=\"6\"\n fill=\"currentColor\"\n viewBox=\"0 0 6 6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n )\n}\n\nexport default function NotificationMenu() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open notifications\"\n >\n <BellIcon size={16} aria-hidden=\"true\" />\n {unreadCount > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-1 rounded-full bg-primary\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-1\">\n <div className=\"flex items-baseline justify-between gap-4 px-3 py-2\">\n <div className=\"text-sm font-semibold\">Notifications</div>\n {unreadCount > 0 && (\n <button\n className=\"text-xs font-medium hover:underline\"\n onClick={handleMarkAllAsRead}\n >\n Mark all as read\n </button>\n )}\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className=\"-mx-1 my-1 h-px bg-border\"\n ></div>\n {notifications.map((notification) => (\n <div\n key={notification.id}\n className=\"rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent\"\n >\n <div className=\"relative flex items-start pe-3\">\n <div className=\"flex-1 space-y-1\">\n <button\n className=\"text-left text-foreground/80 after:absolute after:inset-0\"\n onClick={() => handleNotificationClick(notification.id)}\n >\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.user}\n </span>{\" \"}\n {notification.action}{\" \"}\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.target}\n </span>\n .\n </button>\n <div className=\"text-xs text-muted-foreground\">\n {notification.timestamp}\n </div>\n </div>\n {notification.unread && (\n <div className=\"absolute end-0 self-center\">\n <span className=\"sr-only\">Unread</span>\n <Dot />\n </div>\n )}\n </div>\n </div>\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n",
27
+ "type": "registry:component"
28
+ },
29
+ {
30
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
31
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
32
+ "type": "registry:component"
33
+ }
34
+ ],
35
+ "meta": {
36
+ "tags": [
37
+ "navbar, navigation"
38
+ ],
39
+ "colSpan": 3
40
+ }
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-585",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
9
+ "https://loveui.dev/building-blocks/r/input.json",
10
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
11
+ "https://loveui.dev/building-blocks/r/popover.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "registry/default/components/comp-585.tsx",
16
+ "content": "import { useId } from \"react\"\nimport {\n HashIcon,\n HouseIcon,\n MailIcon,\n SearchIcon,\n UsersRound,\n} from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nconst teams = [\"Acme Inc.\", \"loveui\", \"Junon\"]\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Home\", icon: HouseIcon },\n { href: \"#\", label: \"Hash\", icon: HashIcon },\n { href: \"#\", label: \"Groups\", icon: UsersRound },\n]\n\nexport default function Component() {\n const id = useId()\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex flex-1 items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-48 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5\"\n >\n <Icon\n size={16}\n className=\"text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n <div className=\"flex items-center gap-6\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n {/* Search form */}\n <div className=\"relative\">\n <Input\n id={id}\n className=\"peer h-8 ps-8 pe-2\"\n placeholder=\"Search...\"\n type=\"search\"\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-2 text-muted-foreground/80 peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n </div>\n </div>\n </div>\n {/* Middle area */}\n <NavigationMenu className=\"max-md:hidden\">\n <NavigationMenuList className=\"gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index}>\n <NavigationMenuLink\n href={link.href}\n className=\"flex size-8 items-center justify-center p-1.5\"\n title={link.label}\n >\n <Icon aria-hidden=\"true\" />\n <span className=\"sr-only\">{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n {/* Right side */}\n <div className=\"flex flex-1 items-center justify-end gap-4\">\n <div className=\"flex items-center gap-2\">\n {/* Messages */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open notifications\"\n >\n <MailIcon size={16} aria-hidden=\"true\" />\n <div\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-1 rounded-full bg-primary\"\n />\n </Button>\n {/* Notification menu */}\n <NotificationMenu />\n </div>\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
17
+ "type": "registry:component"
18
+ },
19
+ {
20
+ "path": "registry/default/components/navbar-components/logo.tsx",
21
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
22
+ "type": "registry:component"
23
+ },
24
+ {
25
+ "path": "registry/default/components/navbar-components/notification-menu.tsx",
26
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { BellIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nconst initialNotifications = [\n {\n id: 1,\n user: \"Connor Love\",\n action: \"requested review on\",\n target: \"PR #42: Feature implementation\",\n timestamp: \"15 minutes ago\",\n unread: true,\n },\n {\n id: 2,\n user: \"Nathan Wickersham\",\n action: \"shared\",\n target: \"New component library\",\n timestamp: \"45 minutes ago\",\n unread: true,\n },\n {\n id: 3,\n user: \"Ian Shroeter\",\n action: \"assigned you to\",\n target: \"API integration task\",\n timestamp: \"4 hours ago\",\n unread: false,\n },\n {\n id: 4,\n user: \"Thomas Raklovits\",\n action: \"replied to your comment in\",\n target: \"Authentication flow\",\n timestamp: \"12 hours ago\",\n unread: false,\n },\n {\n id: 5,\n user: \"Sampson Addae\",\n action: \"commented on\",\n target: \"Dashboard redesign\",\n timestamp: \"2 days ago\",\n unread: false,\n },\n {\n id: 6,\n user: \"Sam Altman\",\n action: \"mentioned you in\",\n target: \"loveui open graph image\",\n timestamp: \"2 weeks ago\",\n unread: false,\n },\n]\n\nfunction Dot({ className }: { className?: string }) {\n return (\n <svg\n width=\"6\"\n height=\"6\"\n fill=\"currentColor\"\n viewBox=\"0 0 6 6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n )\n}\n\nexport default function NotificationMenu() {\n const [notifications, setNotifications] = useState(initialNotifications)\n const unreadCount = notifications.filter((n) => n.unread).length\n\n const handleMarkAllAsRead = () => {\n setNotifications(\n notifications.map((notification) => ({\n ...notification,\n unread: false,\n }))\n )\n }\n\n const handleNotificationClick = (id: number) => {\n setNotifications(\n notifications.map((notification) =>\n notification.id === id\n ? { ...notification, unread: false }\n : notification\n )\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open notifications\"\n >\n <BellIcon size={16} aria-hidden=\"true\" />\n {unreadCount > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-1 rounded-full bg-primary\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-1\">\n <div className=\"flex items-baseline justify-between gap-4 px-3 py-2\">\n <div className=\"text-sm font-semibold\">Notifications</div>\n {unreadCount > 0 && (\n <button\n className=\"text-xs font-medium hover:underline\"\n onClick={handleMarkAllAsRead}\n >\n Mark all as read\n </button>\n )}\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className=\"-mx-1 my-1 h-px bg-border\"\n ></div>\n {notifications.map((notification) => (\n <div\n key={notification.id}\n className=\"rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent\"\n >\n <div className=\"relative flex items-start pe-3\">\n <div className=\"flex-1 space-y-1\">\n <button\n className=\"text-left text-foreground/80 after:absolute after:inset-0\"\n onClick={() => handleNotificationClick(notification.id)}\n >\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.user}\n </span>{\" \"}\n {notification.action}{\" \"}\n <span className=\"font-medium text-foreground hover:underline\">\n {notification.target}\n </span>\n .\n </button>\n <div className=\"text-xs text-muted-foreground\">\n {notification.timestamp}\n </div>\n </div>\n {notification.unread && (\n <div className=\"absolute end-0 self-center\">\n <span className=\"sr-only\">Unread</span>\n <Dot />\n </div>\n )}\n </div>\n </div>\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n",
27
+ "type": "registry:component"
28
+ },
29
+ {
30
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
31
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
32
+ "type": "registry:component"
33
+ }
34
+ ],
35
+ "meta": {
36
+ "tags": [
37
+ "navbar, navigation"
38
+ ],
39
+ "colSpan": 3
40
+ }
41
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-586",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/avatar.json",
7
+ "https://loveui.dev/building-blocks/r/button.json",
8
+ "https://loveui.dev/building-blocks/r/dropdown-menu.json",
9
+ "https://loveui.dev/building-blocks/r/input.json"
10
+ ],
11
+ "files": [
12
+ {
13
+ "path": "registry/default/components/comp-586.tsx",
14
+ "content": "import { useId } from \"react\"\nimport { MicIcon, SearchIcon } from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport ThemeToggle from \"@/registry/building-blocks/default/components/navbar-components/theme-toggle\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\n\nexport default function Component() {\n const id = useId()\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Logo */}\n <div className=\"flex-1\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n </div>\n {/* Middle area */}\n <div className=\"grow max-sm:hidden\">\n {/* Search form */}\n <div className=\"relative mx-auto w-full max-w-xs\">\n <Input\n id={id}\n className=\"peer h-8 px-8\"\n placeholder=\"Search...\"\n type=\"search\"\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-2 text-muted-foreground/80 peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-muted-foreground/80 transition-[color,box-shadow] outline-none hover:text-foreground focus:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Press to speak\"\n type=\"submit\"\n >\n <MicIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n {/* Right side */}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"text-sm\">\n <a href=\"#\">Community</a>\n </Button>\n <Button asChild size=\"sm\" className=\"text-sm\">\n <a href=\"#\">Get Started</a>\n </Button>\n <ThemeToggle />\n </div>\n </div>\n </header>\n )\n}\n",
15
+ "type": "registry:component"
16
+ },
17
+ {
18
+ "path": "registry/default/components/navbar-components/logo.tsx",
19
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
20
+ "type": "registry:component"
21
+ },
22
+ {
23
+ "path": "registry/default/components/navbar-components/theme-toggle.tsx",
24
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { MoonIcon, SunIcon } from \"lucide-react\"\n\nimport { Toggle } from \"@/registry/building-blocks/default/ui/toggle\"\n\nexport default function ThemeToggle() {\n const [theme, setTheme] = useState<string>(\"light\")\n\n return (\n <div>\n <Toggle\n variant=\"outline\"\n className=\"group size-8 rounded-full border-none text-muted-foreground shadow-none data-[state=on]:bg-transparent data-[state=on]:text-muted-foreground data-[state=on]:hover:bg-muted data-[state=on]:hover:text-foreground\"\n pressed={theme === \"dark\"}\n onPressedChange={() =>\n setTheme((prev) => (prev === \"dark\" ? \"light\" : \"dark\"))\n }\n aria-label={`Switch to ${theme === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {/* Note: After dark mode implementation, rely on dark: prefix rather than group-data-[state=on]: */}\n <MoonIcon\n size={16}\n className=\"shrink-0 scale-0 opacity-0 transition-all group-data-[state=on]:scale-100 group-data-[state=on]:opacity-100\"\n aria-hidden=\"true\"\n />\n <SunIcon\n size={16}\n className=\"absolute shrink-0 scale-100 opacity-100 transition-all group-data-[state=on]:scale-0 group-data-[state=on]:opacity-0\"\n aria-hidden=\"true\"\n />\n </Toggle>\n </div>\n )\n}\n",
25
+ "type": "registry:component"
26
+ }
27
+ ],
28
+ "meta": {
29
+ "tags": [
30
+ "navbar, navigation"
31
+ ],
32
+ "colSpan": 3
33
+ }
34
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-587",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/button.json",
7
+ "https://loveui.dev/building-blocks/r/input.json",
8
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
9
+ "https://loveui.dev/building-blocks/r/popover.json"
10
+ ],
11
+ "files": [
12
+ {
13
+ "path": "registry/default/components/comp-587.tsx",
14
+ "content": "import { useId } from \"react\"\nimport { HouseIcon, InboxIcon, SearchIcon, ZapIcon } from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Home\", icon: HouseIcon, active: true },\n { href: \"#\", label: \"Inbox\", icon: InboxIcon },\n { href: \"#\", label: \"Insights\", icon: ZapIcon },\n]\n\nexport default function Component() {\n const id = useId()\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex flex-1 items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-36 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5\"\n active={link.active}\n >\n <Icon\n size={16}\n className=\"text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n {/* Logo */}\n <div className=\"flex items-center\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n </div>\n </div>\n {/* Middle area */}\n <NavigationMenu className=\"max-md:hidden\">\n <NavigationMenuList className=\"gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index}>\n <NavigationMenuLink\n active={link.active}\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5 font-medium text-foreground hover:text-primary\"\n >\n <Icon\n size={16}\n className=\"text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n {/* Right side */}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n <div className=\"relative\">\n <Input\n id={id}\n className=\"peer h-8 ps-8 pe-2\"\n placeholder=\"Search...\"\n type=\"search\"\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-2 text-muted-foreground/80 peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n </div>\n </div>\n </div>\n </header>\n )\n}\n",
15
+ "type": "registry:component"
16
+ },
17
+ {
18
+ "path": "registry/default/components/navbar-components/logo.tsx",
19
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
20
+ "type": "registry:component"
21
+ }
22
+ ],
23
+ "meta": {
24
+ "tags": [
25
+ "navbar, navigation"
26
+ ],
27
+ "colSpan": 3
28
+ }
29
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "comp-588",
4
+ "type": "registry:component",
5
+ "registryDependencies": [
6
+ "https://loveui.dev/building-blocks/r/button.json",
7
+ "https://loveui.dev/building-blocks/r/navigation-menu.json",
8
+ "https://loveui.dev/building-blocks/r/popover.json"
9
+ ],
10
+ "files": [
11
+ {
12
+ "path": "registry/default/components/comp-588.tsx",
13
+ "content": "import { HouseIcon, InboxIcon, SparklesIcon, ZapIcon } from \"lucide-react\"\n\nimport Logo from \"@/registry/building-blocks/default/components/navbar-components/logo\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n} from \"@/registry/building-blocks/default/ui/navigation-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\n// Navigation links array\nconst navigationLinks = [\n { href: \"#\", label: \"Home\", icon: HouseIcon, active: true },\n { href: \"#\", label: \"Inbox\", icon: InboxIcon },\n { href: \"#\", label: \"Insights\", icon: ZapIcon },\n]\n\nexport default function Component() {\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 items-center justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex flex-1 items-center gap-2\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className=\"group size-8 md:hidden\"\n variant=\"ghost\"\n size=\"icon\"\n >\n <svg\n className=\"pointer-events-none\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 12L20 12\"\n className=\"origin-center -translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-x-0 group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[315deg]\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.8)] group-aria-expanded:rotate-45\"\n />\n <path\n d=\"M4 12H20\"\n className=\"origin-center translate-y-[7px] transition-all duration-300 ease-[cubic-bezier(.5,.85,.25,1.1)] group-aria-expanded:translate-y-0 group-aria-expanded:rotate-[135deg]\"\n />\n </svg>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-36 p-1 md:hidden\">\n <NavigationMenu className=\"max-w-none *:w-full\">\n <NavigationMenuList className=\"flex-col items-start gap-0 md:gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index} className=\"w-full\">\n <NavigationMenuLink\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5\"\n active={link.active}\n >\n <Icon\n size={16}\n className=\"text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n </PopoverContent>\n </Popover>\n\n <NavigationMenu className=\"max-md:hidden\">\n <NavigationMenuList className=\"gap-2\">\n {navigationLinks.map((link, index) => {\n const Icon = link.icon\n return (\n <NavigationMenuItem key={index}>\n <NavigationMenuLink\n active={link.active}\n href={link.href}\n className=\"flex-row items-center gap-2 py-1.5 font-medium text-foreground hover:text-primary\"\n >\n <Icon\n size={16}\n className=\"text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n <span>{link.label}</span>\n </NavigationMenuLink>\n </NavigationMenuItem>\n )\n })}\n </NavigationMenuList>\n </NavigationMenu>\n </div>\n\n {/* Middle side: Logo */}\n <div className=\"flex items-center\">\n <a href=\"#\" className=\"text-primary hover:text-primary/90\">\n <Logo />\n </a>\n </div>\n\n {/* Right side: Actions */}\n <div className=\"flex flex-1 items-center justify-end gap-4\">\n {/* User menu */}\n <UserMenu />\n {/* Upgrade button */}\n <Button size=\"sm\" className=\"text-sm sm:aspect-square\">\n <SparklesIcon\n className=\"opacity-60 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"sm:sr-only\">Upgrade</span>\n </Button>\n </div>\n </div>\n </header>\n )\n}\n",
14
+ "type": "registry:component"
15
+ },
16
+ {
17
+ "path": "registry/default/components/navbar-components/logo.tsx",
18
+ "content": "export default function Logo() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"33\"\n height=\"33\"\n fill=\"currentColor\"\n >\n <path d=\"M20.46 1.766 17.303.923l-2.66 9.896-2.403-8.934-3.157.843 2.595 9.652-6.464-6.442-2.311 2.304 7.09 7.066-8.83-2.358-.846 3.146 9.648 2.577a6.516 6.516 0 0 1-.169-1.478c0-3.598 2.927-6.515 6.537-6.515s6.537 2.917 6.537 6.515c0 .505-.057.997-.167 1.468l8.768 2.342.846-3.147-9.686-2.586 8.83-2.358-.845-3.147-9.686 2.587 6.464-6.442-2.311-2.304-6.992 6.969 2.369-8.81Z\" />\n <path d=\"M22.695 18.7a6.495 6.495 0 0 1-1.626 2.986l6.352 6.33 2.31-2.303-7.036-7.013ZM21.005 21.752a6.538 6.538 0 0 1-2.922 1.722l2.312 8.596 3.157-.843-2.547-9.475ZM17.965 23.505a6.569 6.569 0 0 1-1.632.205 6.566 6.566 0 0 1-1.743-.235l-2.314 8.605 3.157.843 2.532-9.418ZM14.478 23.444a6.54 6.54 0 0 1-2.87-1.747l-6.367 6.346 2.31 2.303 6.927-6.902ZM11.555 21.64a6.492 6.492 0 0 1-1.585-2.948L1.173 21.04l.846 3.146 9.536-2.546Z\" />\n </svg>\n )\n}\n",
19
+ "type": "registry:component"
20
+ },
21
+ {
22
+ "path": "registry/default/components/navbar-components/user-menu.tsx",
23
+ "content": "import {\n BoltIcon,\n BookOpenIcon,\n Layers2Icon,\n LogOutIcon,\n PinIcon,\n UserPenIcon,\n} from \"lucide-react\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport default function UserMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-auto p-0 hover:bg-transparent\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=21\"} alt=\"Profile image\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\" align=\"end\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n Connor Love\n </span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n clove@loveui.dev\n </span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BoltIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Layers2Icon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BookOpenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 3</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <PinIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 4</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <UserPenIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Option 5</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon size={16} className=\"opacity-60\" aria-hidden=\"true\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
24
+ "type": "registry:component"
25
+ }
26
+ ],
27
+ "meta": {
28
+ "tags": [
29
+ "navbar, navigation"
30
+ ],
31
+ "colSpan": 3
32
+ }
33
+ }