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.
- package/dist/index.js +8 -7
- package/dist/mcp-server.js +1 -1
- package/package.json +3 -2
- package/packages/loveui-skills/SKILL.md +99 -0
- package/packages/loveui-skills/agents/openai.yaml +11 -0
- package/packages/loveui-skills/references/design-directions.md +60 -0
- package/packages/loveui-skills/references/mcp-catalog-workflow.md +68 -0
- package/packages/loveui-skills/references/page-blueprints.md +76 -0
- package/packages/loveui-skills/references/quality-gates.md +51 -0
- package/public/r/accordion-controlled.json +1 -1
- package/public/r/accordion-demo.json +1 -1
- package/public/r/accordion-multiple.json +1 -1
- package/public/r/accordion-single.json +1 -1
- package/public/r/alert-demo.json +1 -1
- package/public/r/alert-dialog-demo.json +1 -1
- package/public/r/alert-error.json +1 -1
- package/public/r/alert-info.json +1 -1
- package/public/r/alert-success.json +1 -1
- package/public/r/alert-warning.json +1 -1
- package/public/r/alert-with-icon-action.json +1 -1
- package/public/r/alert-with-icon.json +1 -1
- package/public/r/announcement-tagless.json +1 -1
- package/public/r/announcement-themes.json +1 -1
- package/public/r/announcement.json +1 -1
- package/public/r/autocomplete-async.json +1 -1
- package/public/r/autocomplete-autohighlight.json +1 -1
- package/public/r/autocomplete-demo.json +1 -1
- package/public/r/autocomplete-disabled.json +1 -1
- package/public/r/autocomplete-form.json +1 -1
- package/public/r/autocomplete-grouped.json +1 -1
- package/public/r/autocomplete-inline.json +1 -1
- package/public/r/autocomplete-lg.json +1 -1
- package/public/r/autocomplete-limit.json +1 -1
- package/public/r/autocomplete-sm.json +1 -1
- package/public/r/autocomplete-with-clear.json +1 -1
- package/public/r/autocomplete-with-label.json +1 -1
- package/public/r/autocomplete-with-trigger-clear.json +1 -1
- package/public/r/avatar-demo.json +1 -1
- package/public/r/avatar-fallback.json +1 -1
- package/public/r/avatar-group.json +1 -1
- package/public/r/avatar-radius.json +1 -1
- package/public/r/avatar-size.json +1 -1
- package/public/r/avatar-stack-hover.json +1 -1
- package/public/r/avatar-stack.json +1 -1
- package/public/r/badge-demo.json +1 -1
- package/public/r/badge-destructive.json +1 -1
- package/public/r/badge-error.json +1 -1
- package/public/r/badge-info.json +1 -1
- package/public/r/badge-lg.json +1 -1
- package/public/r/badge-outline.json +1 -1
- package/public/r/badge-secondary.json +1 -1
- package/public/r/badge-sm.json +1 -1
- package/public/r/badge-success.json +1 -1
- package/public/r/badge-warning.json +1 -1
- package/public/r/badge-with-icon.json +1 -1
- package/public/r/badge-with-link.json +1 -1
- package/public/r/banner-inset.json +1 -1
- package/public/r/banner-themes.json +1 -1
- package/public/r/banner.json +1 -1
- package/public/r/bookmarks.json +206 -0
- package/public/r/breadcrumb-custom-separator.json +1 -1
- package/public/r/breadcrumb-demo.json +1 -1
- package/public/r/button-demo.json +1 -1
- package/public/r/button-destructive-outline.json +1 -1
- package/public/r/button-destructive.json +1 -1
- package/public/r/button-disabled.json +1 -1
- package/public/r/button-ghost.json +1 -1
- package/public/r/button-lg.json +1 -1
- package/public/r/button-link.json +1 -1
- package/public/r/button-loading.json +1 -1
- package/public/r/button-outline.json +1 -1
- package/public/r/button-secondary.json +1 -1
- package/public/r/button-sm.json +1 -1
- package/public/r/button-with-icon.json +1 -1
- package/public/r/button-with-link.json +1 -1
- package/public/r/button-xl.json +1 -1
- package/public/r/button-xs.json +1 -1
- package/public/r/calendar-headless.json +1 -1
- package/public/r/calendar-rac.json +16 -0
- package/public/r/calendar.json +1 -1
- package/public/r/card-demo.json +1 -1
- package/public/r/chart.json +15 -0
- package/public/r/checkbox-card.json +1 -1
- package/public/r/checkbox-demo.json +1 -1
- package/public/r/checkbox-disabled.json +1 -1
- package/public/r/checkbox-form.json +1 -1
- package/public/r/checkbox-group-demo.json +1 -1
- package/public/r/checkbox-group-disabled.json +1 -1
- package/public/r/checkbox-group-form.json +1 -1
- package/public/r/checkbox-group-nested-parent.json +1 -1
- package/public/r/checkbox-group-parent.json +1 -1
- package/public/r/checkbox-tree.json +12 -0
- package/public/r/checkbox-with-description.json +1 -1
- package/public/r/choicebox-inline.json +1 -1
- package/public/r/choicebox.json +1 -1
- package/public/r/codebase.json +1 -1
- package/public/r/collaborative-canvas.json +1 -1
- package/public/r/collapsible-demo.json +1 -1
- package/public/r/combobox-autohighlight.json +1 -1
- package/public/r/combobox-controlled.json +1 -1
- package/public/r/combobox-create-new.json +1 -1
- package/public/r/combobox-demo.json +1 -1
- package/public/r/combobox-disabled.json +1 -1
- package/public/r/combobox-fixed-width.json +1 -1
- package/public/r/combobox-form.json +1 -1
- package/public/r/combobox-grouped.json +1 -1
- package/public/r/combobox-lg.json +1 -1
- package/public/r/combobox-multiple-form.json +1 -1
- package/public/r/combobox-multiple.json +1 -1
- package/public/r/combobox-sm.json +1 -1
- package/public/r/combobox-with-clear.json +1 -1
- package/public/r/combobox-with-inner-input.json +1 -1
- package/public/r/combobox-with-label.json +1 -1
- package/public/r/command.json +18 -0
- package/public/r/comp-01.json +22 -0
- package/public/r/comp-02.json +23 -0
- package/public/r/comp-03.json +23 -0
- package/public/r/comp-04.json +23 -0
- package/public/r/comp-05.json +22 -0
- package/public/r/comp-06.json +23 -0
- package/public/r/comp-07.json +22 -0
- package/public/r/comp-08.json +23 -0
- package/public/r/comp-09.json +22 -0
- package/public/r/comp-10.json +22 -0
- package/public/r/comp-100.json +23 -0
- package/public/r/comp-101.json +23 -0
- package/public/r/comp-102.json +23 -0
- package/public/r/comp-103.json +23 -0
- package/public/r/comp-104.json +23 -0
- package/public/r/comp-105.json +23 -0
- package/public/r/comp-106.json +22 -0
- package/public/r/comp-107.json +22 -0
- package/public/r/comp-108.json +23 -0
- package/public/r/comp-109.json +22 -0
- package/public/r/comp-11.json +22 -0
- package/public/r/comp-110.json +22 -0
- package/public/r/comp-111.json +21 -0
- package/public/r/comp-112.json +21 -0
- package/public/r/comp-113.json +22 -0
- package/public/r/comp-114.json +23 -0
- package/public/r/comp-115.json +22 -0
- package/public/r/comp-116.json +22 -0
- package/public/r/comp-117.json +23 -0
- package/public/r/comp-118.json +23 -0
- package/public/r/comp-119.json +27 -0
- package/public/r/comp-12.json +22 -0
- package/public/r/comp-120.json +27 -0
- package/public/r/comp-121.json +27 -0
- package/public/r/comp-122.json +27 -0
- package/public/r/comp-123.json +22 -0
- package/public/r/comp-124.json +22 -0
- package/public/r/comp-125.json +31 -0
- package/public/r/comp-126.json +31 -0
- package/public/r/comp-127.json +21 -0
- package/public/r/comp-128.json +21 -0
- package/public/r/comp-129.json +24 -0
- package/public/r/comp-13.json +22 -0
- package/public/r/comp-130.json +23 -0
- package/public/r/comp-131.json +23 -0
- package/public/r/comp-132.json +23 -0
- package/public/r/comp-133.json +23 -0
- package/public/r/comp-134.json +23 -0
- package/public/r/comp-135.json +24 -0
- package/public/r/comp-136.json +23 -0
- package/public/r/comp-137.json +23 -0
- package/public/r/comp-138.json +25 -0
- package/public/r/comp-139.json +23 -0
- package/public/r/comp-14.json +22 -0
- package/public/r/comp-140.json +23 -0
- package/public/r/comp-141.json +23 -0
- package/public/r/comp-142.json +25 -0
- package/public/r/comp-143.json +23 -0
- package/public/r/comp-144.json +24 -0
- package/public/r/comp-145.json +24 -0
- package/public/r/comp-146.json +24 -0
- package/public/r/comp-147.json +24 -0
- package/public/r/comp-148.json +25 -0
- package/public/r/comp-149.json +24 -0
- package/public/r/comp-15.json +22 -0
- package/public/r/comp-150.json +21 -0
- package/public/r/comp-151.json +23 -0
- package/public/r/comp-152.json +23 -0
- package/public/r/comp-153.json +23 -0
- package/public/r/comp-154.json +23 -0
- package/public/r/comp-155.json +23 -0
- package/public/r/comp-156.json +25 -0
- package/public/r/comp-157.json +27 -0
- package/public/r/comp-158.json +24 -0
- package/public/r/comp-159.json +24 -0
- package/public/r/comp-16.json +22 -0
- package/public/r/comp-160.json +24 -0
- package/public/r/comp-161.json +24 -0
- package/public/r/comp-162.json +24 -0
- package/public/r/comp-163.json +28 -0
- package/public/r/comp-164.json +24 -0
- package/public/r/comp-165.json +24 -0
- package/public/r/comp-166.json +25 -0
- package/public/r/comp-167.json +24 -0
- package/public/r/comp-168.json +24 -0
- package/public/r/comp-169.json +23 -0
- package/public/r/comp-17.json +25 -0
- package/public/r/comp-170.json +25 -0
- package/public/r/comp-171.json +28 -0
- package/public/r/comp-172.json +23 -0
- package/public/r/comp-173.json +23 -0
- package/public/r/comp-174.json +23 -0
- package/public/r/comp-175.json +23 -0
- package/public/r/comp-176.json +23 -0
- package/public/r/comp-177.json +23 -0
- package/public/r/comp-178.json +23 -0
- package/public/r/comp-179.json +24 -0
- package/public/r/comp-18.json +25 -0
- package/public/r/comp-180.json +23 -0
- package/public/r/comp-181.json +25 -0
- package/public/r/comp-182.json +24 -0
- package/public/r/comp-183.json +25 -0
- package/public/r/comp-184.json +25 -0
- package/public/r/comp-185.json +24 -0
- package/public/r/comp-186.json +25 -0
- package/public/r/comp-187.json +25 -0
- package/public/r/comp-188.json +25 -0
- package/public/r/comp-189.json +23 -0
- package/public/r/comp-19.json +23 -0
- package/public/r/comp-190.json +23 -0
- package/public/r/comp-191.json +24 -0
- package/public/r/comp-192.json +23 -0
- package/public/r/comp-193.json +23 -0
- package/public/r/comp-194.json +24 -0
- package/public/r/comp-195.json +23 -0
- package/public/r/comp-196.json +24 -0
- package/public/r/comp-197.json +23 -0
- package/public/r/comp-198.json +23 -0
- package/public/r/comp-199.json +23 -0
- package/public/r/comp-20.json +23 -0
- package/public/r/comp-200.json +25 -0
- package/public/r/comp-201.json +22 -0
- package/public/r/comp-202.json +22 -0
- package/public/r/comp-203.json +23 -0
- package/public/r/comp-204.json +23 -0
- package/public/r/comp-205.json +23 -0
- package/public/r/comp-206.json +24 -0
- package/public/r/comp-207.json +23 -0
- package/public/r/comp-208.json +23 -0
- package/public/r/comp-209.json +23 -0
- package/public/r/comp-21.json +23 -0
- package/public/r/comp-210.json +24 -0
- package/public/r/comp-211.json +24 -0
- package/public/r/comp-212.json +23 -0
- package/public/r/comp-213.json +23 -0
- package/public/r/comp-214.json +23 -0
- package/public/r/comp-215.json +24 -0
- package/public/r/comp-216.json +22 -0
- package/public/r/comp-217.json +22 -0
- package/public/r/comp-218.json +25 -0
- package/public/r/comp-219.json +23 -0
- package/public/r/comp-22.json +23 -0
- package/public/r/comp-220.json +24 -0
- package/public/r/comp-221.json +23 -0
- package/public/r/comp-222.json +26 -0
- package/public/r/comp-223.json +26 -0
- package/public/r/comp-224.json +23 -0
- package/public/r/comp-225.json +24 -0
- package/public/r/comp-226.json +26 -0
- package/public/r/comp-227.json +26 -0
- package/public/r/comp-228.json +26 -0
- package/public/r/comp-229.json +30 -0
- package/public/r/comp-23.json +24 -0
- package/public/r/comp-230.json +30 -0
- package/public/r/comp-231.json +32 -0
- package/public/r/comp-232.json +31 -0
- package/public/r/comp-233.json +30 -0
- package/public/r/comp-234.json +28 -0
- package/public/r/comp-235.json +28 -0
- package/public/r/comp-236.json +24 -0
- package/public/r/comp-237.json +26 -0
- package/public/r/comp-238.json +26 -0
- package/public/r/comp-239.json +26 -0
- package/public/r/comp-24.json +23 -0
- package/public/r/comp-240.json +23 -0
- package/public/r/comp-241.json +24 -0
- package/public/r/comp-242.json +23 -0
- package/public/r/comp-243.json +23 -0
- package/public/r/comp-244.json +23 -0
- package/public/r/comp-245.json +23 -0
- package/public/r/comp-246.json +23 -0
- package/public/r/comp-247.json +23 -0
- package/public/r/comp-248.json +23 -0
- package/public/r/comp-249.json +24 -0
- package/public/r/comp-25.json +24 -0
- package/public/r/comp-250.json +25 -0
- package/public/r/comp-251.json +25 -0
- package/public/r/comp-252.json +25 -0
- package/public/r/comp-253.json +25 -0
- package/public/r/comp-254.json +35 -0
- package/public/r/comp-255.json +30 -0
- package/public/r/comp-256.json +25 -0
- package/public/r/comp-257.json +25 -0
- package/public/r/comp-258.json +32 -0
- package/public/r/comp-259.json +26 -0
- package/public/r/comp-26.json +24 -0
- package/public/r/comp-260.json +26 -0
- package/public/r/comp-261.json +24 -0
- package/public/r/comp-262.json +31 -0
- package/public/r/comp-263.json +25 -0
- package/public/r/comp-264.json +33 -0
- package/public/r/comp-265.json +32 -0
- package/public/r/comp-266.json +24 -0
- package/public/r/comp-267.json +19 -0
- package/public/r/comp-268.json +19 -0
- package/public/r/comp-269.json +19 -0
- package/public/r/comp-27.json +24 -0
- package/public/r/comp-270.json +19 -0
- package/public/r/comp-271.json +19 -0
- package/public/r/comp-272.json +19 -0
- package/public/r/comp-273.json +19 -0
- package/public/r/comp-274.json +19 -0
- package/public/r/comp-275.json +19 -0
- package/public/r/comp-276.json +19 -0
- package/public/r/comp-277.json +21 -0
- package/public/r/comp-278.json +21 -0
- package/public/r/comp-279.json +23 -0
- package/public/r/comp-28.json +24 -0
- package/public/r/comp-280.json +23 -0
- package/public/r/comp-281.json +23 -0
- package/public/r/comp-282.json +23 -0
- package/public/r/comp-283.json +23 -0
- package/public/r/comp-284.json +23 -0
- package/public/r/comp-285.json +23 -0
- package/public/r/comp-286.json +23 -0
- package/public/r/comp-287.json +24 -0
- package/public/r/comp-288.json +23 -0
- package/public/r/comp-289.json +24 -0
- package/public/r/comp-29.json +24 -0
- package/public/r/comp-290.json +24 -0
- package/public/r/comp-291.json +24 -0
- package/public/r/comp-292.json +24 -0
- package/public/r/comp-293.json +26 -0
- package/public/r/comp-294.json +24 -0
- package/public/r/comp-295.json +23 -0
- package/public/r/comp-296.json +23 -0
- package/public/r/comp-297.json +30 -0
- package/public/r/comp-298.json +26 -0
- package/public/r/comp-299.json +28 -0
- package/public/r/comp-30.json +23 -0
- package/public/r/comp-300.json +29 -0
- package/public/r/comp-301.json +24 -0
- package/public/r/comp-302.json +18 -0
- package/public/r/comp-303.json +18 -0
- package/public/r/comp-304.json +18 -0
- package/public/r/comp-305.json +21 -0
- package/public/r/comp-306.json +21 -0
- package/public/r/comp-307.json +21 -0
- package/public/r/comp-308.json +21 -0
- package/public/r/comp-309.json +21 -0
- package/public/r/comp-31.json +21 -0
- package/public/r/comp-310.json +23 -0
- package/public/r/comp-311.json +20 -0
- package/public/r/comp-312.json +21 -0
- package/public/r/comp-313.json +26 -0
- package/public/r/comp-314.json +26 -0
- package/public/r/comp-315.json +24 -0
- package/public/r/comp-316.json +25 -0
- package/public/r/comp-317.json +24 -0
- package/public/r/comp-318.json +24 -0
- package/public/r/comp-319.json +24 -0
- package/public/r/comp-32.json +21 -0
- package/public/r/comp-320.json +27 -0
- package/public/r/comp-321.json +28 -0
- package/public/r/comp-322.json +27 -0
- package/public/r/comp-323.json +30 -0
- package/public/r/comp-324.json +28 -0
- package/public/r/comp-325.json +29 -0
- package/public/r/comp-326.json +30 -0
- package/public/r/comp-327.json +30 -0
- package/public/r/comp-328.json +37 -0
- package/public/r/comp-329.json +38 -0
- package/public/r/comp-33.json +18 -0
- package/public/r/comp-330.json +27 -0
- package/public/r/comp-331.json +42 -0
- package/public/r/comp-332.json +25 -0
- package/public/r/comp-333.json +29 -0
- package/public/r/comp-334.json +22 -0
- package/public/r/comp-335.json +22 -0
- package/public/r/comp-336.json +22 -0
- package/public/r/comp-337.json +22 -0
- package/public/r/comp-338.json +22 -0
- package/public/r/comp-339.json +22 -0
- package/public/r/comp-34.json +27 -0
- package/public/r/comp-340.json +22 -0
- package/public/r/comp-341.json +22 -0
- package/public/r/comp-342.json +22 -0
- package/public/r/comp-343.json +22 -0
- package/public/r/comp-344.json +22 -0
- package/public/r/comp-345.json +22 -0
- package/public/r/comp-346.json +22 -0
- package/public/r/comp-347.json +22 -0
- package/public/r/comp-348.json +22 -0
- package/public/r/comp-349.json +22 -0
- package/public/r/comp-35.json +27 -0
- package/public/r/comp-350.json +22 -0
- package/public/r/comp-351.json +22 -0
- package/public/r/comp-352.json +24 -0
- package/public/r/comp-353.json +24 -0
- package/public/r/comp-354.json +23 -0
- package/public/r/comp-355.json +23 -0
- package/public/r/comp-356.json +23 -0
- package/public/r/comp-357.json +23 -0
- package/public/r/comp-358.json +23 -0
- package/public/r/comp-359.json +24 -0
- package/public/r/comp-36.json +26 -0
- package/public/r/comp-360.json +25 -0
- package/public/r/comp-361.json +23 -0
- package/public/r/comp-362.json +24 -0
- package/public/r/comp-363.json +27 -0
- package/public/r/comp-364.json +26 -0
- package/public/r/comp-365.json +24 -0
- package/public/r/comp-366.json +23 -0
- package/public/r/comp-367.json +23 -0
- package/public/r/comp-368.json +23 -0
- package/public/r/comp-369.json +23 -0
- package/public/r/comp-37.json +23 -0
- package/public/r/comp-370.json +23 -0
- package/public/r/comp-371.json +24 -0
- package/public/r/comp-372.json +24 -0
- package/public/r/comp-373.json +25 -0
- package/public/r/comp-374.json +26 -0
- package/public/r/comp-375.json +25 -0
- package/public/r/comp-376.json +26 -0
- package/public/r/comp-377.json +27 -0
- package/public/r/comp-378.json +24 -0
- package/public/r/comp-379.json +24 -0
- package/public/r/comp-38.json +23 -0
- package/public/r/comp-380.json +24 -0
- package/public/r/comp-381.json +26 -0
- package/public/r/comp-382.json +25 -0
- package/public/r/comp-383.json +26 -0
- package/public/r/comp-384.json +24 -0
- package/public/r/comp-385.json +24 -0
- package/public/r/comp-386.json +24 -0
- package/public/r/comp-387.json +28 -0
- package/public/r/comp-388.json +26 -0
- package/public/r/comp-389.json +24 -0
- package/public/r/comp-39.json +23 -0
- package/public/r/comp-390.json +23 -0
- package/public/r/comp-391.json +23 -0
- package/public/r/comp-392.json +23 -0
- package/public/r/comp-393.json +23 -0
- package/public/r/comp-394.json +24 -0
- package/public/r/comp-395.json +24 -0
- package/public/r/comp-396.json +24 -0
- package/public/r/comp-397.json +25 -0
- package/public/r/comp-398.json +26 -0
- package/public/r/comp-399.json +26 -0
- package/public/r/comp-40.json +23 -0
- package/public/r/comp-400.json +20 -0
- package/public/r/comp-401.json +19 -0
- package/public/r/comp-402.json +19 -0
- package/public/r/comp-403.json +19 -0
- package/public/r/comp-404.json +19 -0
- package/public/r/comp-405.json +19 -0
- package/public/r/comp-406.json +19 -0
- package/public/r/comp-407.json +19 -0
- package/public/r/comp-408.json +19 -0
- package/public/r/comp-409.json +22 -0
- package/public/r/comp-41.json +29 -0
- package/public/r/comp-410.json +22 -0
- package/public/r/comp-411.json +22 -0
- package/public/r/comp-412.json +19 -0
- package/public/r/comp-413.json +22 -0
- package/public/r/comp-414.json +22 -0
- package/public/r/comp-415.json +22 -0
- package/public/r/comp-416.json +23 -0
- package/public/r/comp-417.json +22 -0
- package/public/r/comp-418.json +23 -0
- package/public/r/comp-419.json +23 -0
- package/public/r/comp-42.json +30 -0
- package/public/r/comp-420.json +23 -0
- package/public/r/comp-421.json +23 -0
- package/public/r/comp-422.json +23 -0
- package/public/r/comp-423.json +24 -0
- package/public/r/comp-424.json +22 -0
- package/public/r/comp-425.json +23 -0
- package/public/r/comp-426.json +23 -0
- package/public/r/comp-427.json +23 -0
- package/public/r/comp-428.json +23 -0
- package/public/r/comp-429.json +23 -0
- package/public/r/comp-43.json +32 -0
- package/public/r/comp-430.json +23 -0
- package/public/r/comp-431.json +23 -0
- package/public/r/comp-432.json +23 -0
- package/public/r/comp-433.json +24 -0
- package/public/r/comp-434.json +24 -0
- package/public/r/comp-435.json +24 -0
- package/public/r/comp-436.json +24 -0
- package/public/r/comp-437.json +25 -0
- package/public/r/comp-438.json +23 -0
- package/public/r/comp-439.json +24 -0
- package/public/r/comp-44.json +25 -0
- package/public/r/comp-440.json +25 -0
- package/public/r/comp-441.json +25 -0
- package/public/r/comp-442.json +24 -0
- package/public/r/comp-443.json +24 -0
- package/public/r/comp-444.json +24 -0
- package/public/r/comp-445.json +24 -0
- package/public/r/comp-446.json +24 -0
- package/public/r/comp-447.json +25 -0
- package/public/r/comp-448.json +23 -0
- package/public/r/comp-449.json +23 -0
- package/public/r/comp-45.json +25 -0
- package/public/r/comp-450.json +23 -0
- package/public/r/comp-451.json +23 -0
- package/public/r/comp-452.json +23 -0
- package/public/r/comp-453.json +25 -0
- package/public/r/comp-454.json +22 -0
- package/public/r/comp-455.json +22 -0
- package/public/r/comp-456.json +22 -0
- package/public/r/comp-457.json +21 -0
- package/public/r/comp-458.json +22 -0
- package/public/r/comp-459.json +26 -0
- package/public/r/comp-46.json +26 -0
- package/public/r/comp-460.json +26 -0
- package/public/r/comp-461.json +27 -0
- package/public/r/comp-462.json +27 -0
- package/public/r/comp-463.json +30 -0
- package/public/r/comp-464.json +29 -0
- package/public/r/comp-465.json +29 -0
- package/public/r/comp-466.json +21 -0
- package/public/r/comp-467.json +23 -0
- package/public/r/comp-468.json +21 -0
- package/public/r/comp-469.json +21 -0
- package/public/r/comp-47.json +32 -0
- package/public/r/comp-470.json +21 -0
- package/public/r/comp-471.json +21 -0
- package/public/r/comp-472.json +23 -0
- package/public/r/comp-473.json +24 -0
- package/public/r/comp-474.json +22 -0
- package/public/r/comp-475.json +22 -0
- package/public/r/comp-476.json +21 -0
- package/public/r/comp-477.json +31 -0
- package/public/r/comp-478.json +36 -0
- package/public/r/comp-479.json +28 -0
- package/public/r/comp-48.json +32 -0
- package/public/r/comp-480.json +30 -0
- package/public/r/comp-481.json +34 -0
- package/public/r/comp-482.json +33 -0
- package/public/r/comp-483.json +37 -0
- package/public/r/comp-484.json +41 -0
- package/public/r/comp-485.json +43 -0
- package/public/r/comp-486.json +23 -0
- package/public/r/comp-487.json +26 -0
- package/public/r/comp-488.json +27 -0
- package/public/r/comp-489.json +28 -0
- package/public/r/comp-49.json +32 -0
- package/public/r/comp-490.json +23 -0
- package/public/r/comp-491.json +24 -0
- package/public/r/comp-492.json +25 -0
- package/public/r/comp-493.json +23 -0
- package/public/r/comp-494.json +23 -0
- package/public/r/comp-495.json +24 -0
- package/public/r/comp-496.json +23 -0
- package/public/r/comp-497.json +24 -0
- package/public/r/comp-498.json +24 -0
- package/public/r/comp-499.json +24 -0
- package/public/r/comp-50.json +32 -0
- package/public/r/comp-500.json +25 -0
- package/public/r/comp-501.json +25 -0
- package/public/r/comp-502.json +26 -0
- package/public/r/comp-503.json +27 -0
- package/public/r/comp-504.json +28 -0
- package/public/r/comp-505.json +28 -0
- package/public/r/comp-506.json +26 -0
- package/public/r/comp-507.json +27 -0
- package/public/r/comp-508.json +25 -0
- package/public/r/comp-509.json +25 -0
- package/public/r/comp-51.json +23 -0
- package/public/r/comp-510.json +24 -0
- package/public/r/comp-511.json +27 -0
- package/public/r/comp-512.json +27 -0
- package/public/r/comp-513.json +21 -0
- package/public/r/comp-514.json +21 -0
- package/public/r/comp-515.json +21 -0
- package/public/r/comp-516.json +22 -0
- package/public/r/comp-517.json +22 -0
- package/public/r/comp-518.json +21 -0
- package/public/r/comp-519.json +21 -0
- package/public/r/comp-52.json +23 -0
- package/public/r/comp-520.json +22 -0
- package/public/r/comp-521.json +22 -0
- package/public/r/comp-522.json +21 -0
- package/public/r/comp-523.json +21 -0
- package/public/r/comp-524.json +21 -0
- package/public/r/comp-525.json +21 -0
- package/public/r/comp-526.json +22 -0
- package/public/r/comp-527.json +23 -0
- package/public/r/comp-528.json +22 -0
- package/public/r/comp-529.json +22 -0
- package/public/r/comp-53.json +24 -0
- package/public/r/comp-530.json +22 -0
- package/public/r/comp-531.json +22 -0
- package/public/r/comp-532.json +22 -0
- package/public/r/comp-533.json +22 -0
- package/public/r/comp-534.json +22 -0
- package/public/r/comp-535.json +22 -0
- package/public/r/comp-536.json +22 -0
- package/public/r/comp-537.json +22 -0
- package/public/r/comp-538.json +22 -0
- package/public/r/comp-539.json +22 -0
- package/public/r/comp-54.json +26 -0
- package/public/r/comp-540.json +21 -0
- package/public/r/comp-541.json +21 -0
- package/public/r/comp-542.json +124 -0
- package/public/r/comp-543.json +29 -0
- package/public/r/comp-544.json +26 -0
- package/public/r/comp-545.json +29 -0
- package/public/r/comp-546.json +29 -0
- package/public/r/comp-547.json +29 -0
- package/public/r/comp-548.json +29 -0
- package/public/r/comp-549.json +29 -0
- package/public/r/comp-55.json +27 -0
- package/public/r/comp-550.json +29 -0
- package/public/r/comp-551.json +30 -0
- package/public/r/comp-552.json +29 -0
- package/public/r/comp-553.json +29 -0
- package/public/r/comp-554.json +36 -0
- package/public/r/comp-555.json +23 -0
- package/public/r/comp-556.json +23 -0
- package/public/r/comp-557.json +23 -0
- package/public/r/comp-558.json +23 -0
- package/public/r/comp-559.json +23 -0
- package/public/r/comp-56.json +26 -0
- package/public/r/comp-560.json +23 -0
- package/public/r/comp-561.json +25 -0
- package/public/r/comp-562.json +23 -0
- package/public/r/comp-563.json +23 -0
- package/public/r/comp-564.json +24 -0
- package/public/r/comp-565.json +20 -0
- package/public/r/comp-566.json +20 -0
- package/public/r/comp-567.json +20 -0
- package/public/r/comp-568.json +20 -0
- package/public/r/comp-569.json +20 -0
- package/public/r/comp-57.json +26 -0
- package/public/r/comp-570.json +20 -0
- package/public/r/comp-571.json +23 -0
- package/public/r/comp-572.json +23 -0
- package/public/r/comp-573.json +20 -0
- package/public/r/comp-574.json +22 -0
- package/public/r/comp-575.json +20 -0
- package/public/r/comp-576.json +21 -0
- package/public/r/comp-577.json +23 -0
- package/public/r/comp-578.json +28 -0
- package/public/r/comp-579.json +28 -0
- package/public/r/comp-58.json +25 -0
- package/public/r/comp-580.json +29 -0
- package/public/r/comp-581.json +45 -0
- package/public/r/comp-582.json +42 -0
- package/public/r/comp-583.json +41 -0
- package/public/r/comp-584.json +41 -0
- package/public/r/comp-585.json +41 -0
- package/public/r/comp-586.json +34 -0
- package/public/r/comp-587.json +29 -0
- package/public/r/comp-588.json +33 -0
- package/public/r/comp-589.json +37 -0
- package/public/r/comp-59.json +22 -0
- package/public/r/comp-590.json +40 -0
- package/public/r/comp-591.json +29 -0
- package/public/r/comp-592.json +41 -0
- package/public/r/comp-593.json +36 -0
- package/public/r/comp-594.json +33 -0
- package/public/r/comp-595.json +22 -0
- package/public/r/comp-596.json +26 -0
- package/public/r/comp-597.json +22 -0
- package/public/r/comp-598.json +22 -0
- package/public/r/comp-599.json +22 -0
- package/public/r/comp-60.json +23 -0
- package/public/r/comp-600.json +17 -0
- package/public/r/comp-601.json +20 -0
- package/public/r/comp-602.json +17 -0
- package/public/r/comp-603.json +20 -0
- package/public/r/comp-604.json +17 -0
- package/public/r/comp-605.json +17 -0
- package/public/r/comp-606.json +20 -0
- package/public/r/comp-607.json +20 -0
- package/public/r/comp-608.json +20 -0
- package/public/r/comp-609.json +20 -0
- package/public/r/comp-61.json +23 -0
- package/public/r/comp-610.json +23 -0
- package/public/r/comp-611.json +23 -0
- package/public/r/comp-612.json +17 -0
- package/public/r/comp-613.json +20 -0
- package/public/r/comp-614.json +17 -0
- package/public/r/comp-615.json +26 -0
- package/public/r/comp-616.json +26 -0
- package/public/r/comp-617.json +26 -0
- package/public/r/comp-62.json +23 -0
- package/public/r/comp-63.json +22 -0
- package/public/r/comp-64.json +23 -0
- package/public/r/comp-65.json +22 -0
- package/public/r/comp-66.json +22 -0
- package/public/r/comp-67.json +23 -0
- package/public/r/comp-68.json +24 -0
- package/public/r/comp-69.json +24 -0
- package/public/r/comp-70.json +24 -0
- package/public/r/comp-71.json +22 -0
- package/public/r/comp-72.json +21 -0
- package/public/r/comp-73.json +18 -0
- package/public/r/comp-74.json +27 -0
- package/public/r/comp-75.json +22 -0
- package/public/r/comp-76.json +23 -0
- package/public/r/comp-77.json +22 -0
- package/public/r/comp-78.json +21 -0
- package/public/r/comp-79.json +22 -0
- package/public/r/comp-80.json +21 -0
- package/public/r/comp-81.json +21 -0
- package/public/r/comp-82.json +22 -0
- package/public/r/comp-83.json +21 -0
- package/public/r/comp-84.json +21 -0
- package/public/r/comp-85.json +22 -0
- package/public/r/comp-86.json +22 -0
- package/public/r/comp-87.json +21 -0
- package/public/r/comp-88.json +22 -0
- package/public/r/comp-89.json +21 -0
- package/public/r/comp-90.json +22 -0
- package/public/r/comp-91.json +22 -0
- package/public/r/comp-92.json +22 -0
- package/public/r/comp-93.json +22 -0
- package/public/r/comp-94.json +24 -0
- package/public/r/comp-95.json +26 -0
- package/public/r/comp-96.json +21 -0
- package/public/r/comp-97.json +21 -0
- package/public/r/comp-98.json +22 -0
- package/public/r/comp-99.json +23 -0
- package/public/r/comparison-event-handlers.json +1 -1
- package/public/r/comparison-hover.json +1 -1
- package/public/r/comparison.json +1 -1
- package/public/r/context-menu.json +16 -0
- package/public/r/contribution-graph-custom-footer.json +1 -1
- package/public/r/credit-card-apple.json +1 -1
- package/public/r/credit-card-back.json +1 -1
- package/public/r/credit-card.json +1 -1
- package/public/r/cropper.json +15 -0
- package/public/r/cursor-color.json +1 -1
- package/public/r/cursor-message.json +1 -1
- package/public/r/cursor-name-message.json +1 -1
- package/public/r/cursor-name.json +1 -1
- package/public/r/cursor.json +1 -1
- package/public/r/dashboard-1.json +263 -0
- package/public/r/dashboard-2.json +264 -0
- package/public/r/dashboard-3.json +225 -0
- package/public/r/datefield-rac.json +15 -0
- package/public/r/deck-controlled.json +1 -1
- package/public/r/deck-product-cards.json +1 -1
- package/public/r/deck.json +1 -1
- package/public/r/dialog-close-confirmation.json +1 -1
- package/public/r/dialog-demo.json +1 -1
- package/public/r/dialog-from-menu.json +1 -1
- package/public/r/dialog-nested.json +1 -1
- package/public/r/dialog-stack-controlled.json +1 -1
- package/public/r/dialog-stack-navigation.json +1 -1
- package/public/r/dialog-stack-six.json +1 -1
- package/public/r/dialog-stack.json +1 -1
- package/public/r/dropdown-menu.json +15 -0
- package/public/r/dropzone-custom-empty-state.json +1 -1
- package/public/r/dropzone-image-preview.json +1 -1
- package/public/r/editor.json +1 -1
- package/public/r/emails.json +243 -0
- package/public/r/empty-demo.json +1 -1
- package/public/r/example-app-calendar.json +323 -0
- package/public/r/field-2.json +19 -0
- package/public/r/field-autocomplete.json +1 -1
- package/public/r/field-checkbox-group.json +1 -1
- package/public/r/field-checkbox.json +1 -1
- package/public/r/field-combobox-multiple.json +1 -1
- package/public/r/field-combobox.json +1 -1
- package/public/r/field-complete-form.json +1 -1
- package/public/r/field-demo.json +1 -1
- package/public/r/field-disabled.json +1 -1
- package/public/r/field-error.json +1 -1
- package/public/r/field-number-field.json +1 -1
- package/public/r/field-radio.json +1 -1
- package/public/r/field-required.json +1 -1
- package/public/r/field-select.json +1 -1
- package/public/r/field-slider.json +1 -1
- package/public/r/field-switch.json +1 -1
- package/public/r/field-textarea.json +1 -1
- package/public/r/field-validity.json +1 -1
- package/public/r/fieldset-demo.json +1 -1
- package/public/r/files.json +195 -0
- package/public/r/form-demo.json +1 -1
- package/public/r/form-zod.json +1 -1
- package/public/r/form.json +1 -1
- package/public/r/frame-demo.json +1 -1
- package/public/r/gantt-lanes.json +1 -1
- package/public/r/gantt-no-sidebar.json +1 -1
- package/public/r/gantt-read-only.json +1 -1
- package/public/r/gantt.json +1 -1
- package/public/r/glimpse-custom.json +1 -1
- package/public/r/glimpse.json +1 -1
- package/public/r/gooey-toast-demo.json +1 -1
- package/public/r/gooey-toast-promise.json +1 -1
- package/public/r/gooey-toast-states.json +1 -1
- package/public/r/gooey-toast-with-button.json +1 -1
- package/public/r/group-demo.json +1 -1
- package/public/r/group-with-input.json +1 -1
- package/public/r/hero.json +1 -1
- package/public/r/hover-card.json +15 -0
- package/public/r/image-crop-circular.json +1 -1
- package/public/r/image-crop-custom.json +1 -1
- package/public/r/image-crop.json +1 -1
- package/public/r/image-zoom-background.json +1 -1
- package/public/r/image-zoom-margin.json +1 -1
- package/public/r/image-zoom.json +1 -1
- package/public/r/input-demo.json +1 -1
- package/public/r/input-disabled.json +1 -1
- package/public/r/input-file.json +1 -1
- package/public/r/input-group.json +20 -0
- package/public/r/input-lg.json +1 -1
- package/public/r/input-sm.json +1 -1
- package/public/r/input-with-button.json +1 -1
- package/public/r/input-with-label.json +1 -1
- package/public/r/kanban-simple.json +1 -1
- package/public/r/kanban.json +1 -1
- package/public/r/kbd.json +12 -0
- package/public/r/leads.json +271 -0
- package/public/r/list-simple.json +1 -1
- package/public/r/list.json +1 -1
- package/public/r/maps.json +188 -0
- package/public/r/menu-checkbox.json +1 -1
- package/public/r/menu-close-on-click.json +1 -1
- package/public/r/menu-demo.json +1 -1
- package/public/r/menu-group-labels.json +1 -1
- package/public/r/menu-hover.json +1 -1
- package/public/r/menu-link.json +1 -1
- package/public/r/menu-nested.json +1 -1
- package/public/r/menu-radio-group.json +1 -1
- package/public/r/meter-demo.json +1 -1
- package/public/r/meter-with-formatted-value.json +1 -1
- package/public/r/meter-with-range.json +1 -1
- package/public/r/mini-calendar-controlled.json +1 -1
- package/public/r/multiselect.json +15 -0
- package/public/r/navigation-menu.json +12 -0
- package/public/r/number-field-form.json +1 -1
- package/public/r/number-field-with-label.json +1 -1
- package/public/r/number-field-with-scrub.json +1 -1
- package/public/r/number-field-with-step.json +1 -1
- package/public/r/pill-avatar-group.json +1 -1
- package/public/r/pill-delta.json +1 -1
- package/public/r/pill-icon.json +1 -1
- package/public/r/pill-indicator.json +1 -1
- package/public/r/pill-status.json +1 -1
- package/public/r/pill.json +1 -1
- package/public/r/popover-demo.json +1 -1
- package/public/r/popover-with-close.json +1 -1
- package/public/r/preview-card-demo.json +1 -1
- package/public/r/pricing.json +1 -1
- package/public/r/progress-with-formatted-value.json +1 -1
- package/public/r/progress-with-label-value.json +1 -1
- package/public/r/radio-group-card.json +1 -1
- package/public/r/radio-group-demo.json +1 -1
- package/public/r/radio-group-disabled.json +1 -1
- package/public/r/radio-group-form.json +1 -1
- package/public/r/radio-group-with-description.json +1 -1
- package/public/r/reel-custom.json +1 -1
- package/public/r/reel-images.json +1 -1
- package/public/r/reel-minimal.json +1 -1
- package/public/r/reel.json +1 -1
- package/public/r/registry.json +18217 -0
- package/public/r/relative-time-controlled.json +1 -1
- package/public/r/relative-time-format-date.json +1 -1
- package/public/r/relative-time-format-time.json +1 -1
- package/public/r/relative-time.json +1 -1
- package/public/r/rentals.json +187 -0
- package/public/r/roadmap.json +1 -1
- package/public/r/sandbox-no-file-explorer.json +1 -1
- package/public/r/sandbox.json +1 -1
- package/public/r/scroll-area-both.json +1 -1
- package/public/r/scroll-area-demo.json +1 -1
- package/public/r/scroll-area-horizontal.json +1 -1
- package/public/r/select-demo.json +1 -1
- package/public/r/select-disabled.json +1 -1
- package/public/r/select-form.json +1 -1
- package/public/r/select-lg.json +1 -1
- package/public/r/select-native.json +12 -0
- package/public/r/select-sm.json +1 -1
- package/public/r/select-with-groups.json +1 -1
- package/public/r/select-without-alignment.json +1 -1
- package/public/r/select.json +1 -1
- package/public/r/separator-demo.json +1 -1
- package/public/r/sheet-demo.json +1 -1
- package/public/r/sheet-position.json +1 -1
- package/public/r/sidebar-nav.json +22 -0
- package/public/r/skeleton-demo.json +1 -1
- package/public/r/skeleton.json +1 -1
- package/public/r/slider-form.json +1 -1
- package/public/r/slider-with-label-value.json +1 -1
- package/public/r/sonner.json +16 -0
- package/public/r/stats-card.json +22 -0
- package/public/r/status-custom.json +1 -1
- package/public/r/stepper.json +15 -0
- package/public/r/stories-images.json +1 -1
- package/public/r/switch-card.json +1 -1
- package/public/r/switch-demo.json +1 -1
- package/public/r/switch-disabled.json +1 -1
- package/public/r/switch-form.json +1 -1
- package/public/r/switch-with-description.json +1 -1
- package/public/r/table-demo.json +1 -1
- package/public/r/table-framed.json +1 -1
- package/public/r/table-simple.json +1 -1
- package/public/r/table.json +1 -1
- package/public/r/tabs-demo.json +1 -1
- package/public/r/tabs-underline-vertical.json +1 -1
- package/public/r/tabs-underline.json +1 -1
- package/public/r/tabs-vertical.json +1 -1
- package/public/r/tags-create.json +1 -1
- package/public/r/tags-filter.json +1 -1
- package/public/r/tags.json +1 -1
- package/public/r/template-auth-eight.json +28 -0
- package/public/r/template-auth-five.json +28 -0
- package/public/r/template-auth-four.json +29 -0
- package/public/r/template-auth-nine.json +28 -0
- package/public/r/template-auth-one.json +49 -0
- package/public/r/template-auth-seven.json +29 -0
- package/public/r/template-auth-six.json +28 -0
- package/public/r/template-auth-three.json +49 -0
- package/public/r/template-auth-two.json +44 -0
- package/public/r/template-hero-eight.json +83 -0
- package/public/r/template-hero-eleven.json +29 -0
- package/public/r/template-hero-five.json +35 -0
- package/public/r/template-hero-four.json +35 -0
- package/public/r/template-hero-fourteen.json +101 -0
- package/public/r/template-hero-nine.json +74 -0
- package/public/r/template-hero-one.json +90 -0
- package/public/r/template-hero-seven.json +83 -0
- package/public/r/template-hero-six.json +83 -0
- package/public/r/template-hero-ten.json +77 -0
- package/public/r/template-hero-thirteen.json +101 -0
- package/public/r/template-hero-three.json +35 -0
- package/public/r/template-hero-twelve.json +30 -0
- package/public/r/template-hero-two.json +96 -0
- package/public/r/template-logo-cloud-five.json +68 -0
- package/public/r/template-logo-cloud-four.json +71 -0
- package/public/r/template-logo-cloud-one.json +89 -0
- package/public/r/template-logo-cloud-three.json +71 -0
- package/public/r/template-logo-cloud-two.json +74 -0
- package/public/r/textarea-demo.json +1 -1
- package/public/r/textarea-disabled.json +1 -1
- package/public/r/textarea-form.json +1 -1
- package/public/r/textarea-lg.json +1 -1
- package/public/r/textarea-sm.json +1 -1
- package/public/r/textarea-with-label.json +1 -1
- package/public/r/ticker-inline.json +1 -1
- package/public/r/timeline.json +15 -0
- package/public/r/toast-demo.json +1 -1
- package/public/r/toast-heights.json +1 -1
- package/public/r/toast-loading.json +1 -1
- package/public/r/toast-promise.json +1 -1
- package/public/r/toast-with-action.json +1 -1
- package/public/r/toast-with-status.json +1 -1
- package/public/r/toggle-demo.json +1 -1
- package/public/r/toggle-disabled.json +1 -1
- package/public/r/toggle-group-demo.json +1 -1
- package/public/r/toggle-group-disabled.json +1 -1
- package/public/r/toggle-group-lg.json +1 -1
- package/public/r/toggle-group-multiple.json +1 -1
- package/public/r/toggle-group-outline-with-separator.json +1 -1
- package/public/r/toggle-group-outline.json +1 -1
- package/public/r/toggle-group-sm.json +1 -1
- package/public/r/toggle-group-with-disabled-item.json +1 -1
- package/public/r/toggle-icon-group.json +1 -1
- package/public/r/toggle-lg.json +1 -1
- package/public/r/toggle-outline.json +1 -1
- package/public/r/toggle-sm.json +1 -1
- package/public/r/toggle-with-icon.json +1 -1
- package/public/r/toolbar-demo.json +1 -1
- package/public/r/tooltip-demo.json +1 -1
- package/public/r/tooltip-grouped.json +1 -1
- package/public/r/tree-controlled.json +1 -1
- package/public/r/tree-custom-icons.json +1 -1
- package/public/r/tree-no-lines.json +1 -1
- package/public/r/tree-simple.json +1 -1
- package/public/r/tree.json +1 -1
- package/public/r/typography.json +1 -1
- package/public/r/ui.json +5 -0
- package/public/r/use-character-limit.json +12 -0
- package/public/r/use-file-upload.json +12 -0
- package/public/r/use-pagination.json +12 -0
- package/public/r/use-slider-with-input.json +12 -0
- package/public/r/use-toast.json +12 -0
- package/public/r/utils.json +16 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-589",
|
|
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/navigation-menu.json",
|
|
11
|
+
"https://loveui.dev/building-blocks/r/popover.json",
|
|
12
|
+
"https://loveui.dev/building-blocks/r/select.json"
|
|
13
|
+
],
|
|
14
|
+
"files": [
|
|
15
|
+
{
|
|
16
|
+
"path": "registry/default/components/comp-589.tsx",
|
|
17
|
+
"content": "import { ChevronsUpDown } from \"lucide-react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport SettingsMenu from \"@/registry/building-blocks/default/components/navbar-components/settings-menu\"\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/registry/building-blocks/default/ui/breadcrumb\"\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 SelectValue,\n} from \"@/registry/building-blocks/default/ui/select\"\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Dashboard\" },\n { href: \"#\", label: \"Docs\" },\n { href: \"#\", label: \"API reference\" },\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 {/* Breadcrumb */}\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <Select defaultValue=\"personal\">\n <SelectPrimitive.SelectTrigger\n aria-label=\"Select account type\"\n asChild\n >\n <Button\n variant=\"ghost\"\n className=\"h-8 p-1.5 text-foreground focus-visible:bg-accent focus-visible:ring-0\"\n >\n <SelectValue placeholder=\"Select account type\" />\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=\"personal\">Personal</SelectItem>\n <SelectItem value=\"team\">Team</SelectItem>\n <SelectItem value=\"business\">Business</SelectItem>\n </SelectContent>\n </Select>\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 p-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 <div className=\"flex items-center gap-2\">\n {/* Nav 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 {/* Settings */}\n <SettingsMenu />\n </div>\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/settings-menu.tsx",
|
|
22
|
+
"content": "import { SettingsIcon } from \"lucide-react\"\n\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\"\n\nexport default function SettingsMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"rounded-full shadow-none\"\n aria-label=\"Open edit menu\"\n >\n <SettingsIcon\n className=\"text-muted-foreground\"\n size={16}\n aria-hidden=\"true\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\">\n <DropdownMenuItem>Appearance</DropdownMenuItem>\n <DropdownMenuItem>Preferences</DropdownMenuItem>\n <DropdownMenuItem>API Settings</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
|
|
23
|
+
"type": "registry:component"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "registry/default/components/navbar-components/user-menu.tsx",
|
|
27
|
+
"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",
|
|
28
|
+
"type": "registry:component"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"meta": {
|
|
32
|
+
"tags": [
|
|
33
|
+
"navbar, navigation"
|
|
34
|
+
],
|
|
35
|
+
"colSpan": 3
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-59",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/label.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/textarea.json"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-59.tsx",
|
|
12
|
+
"content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\nimport { Textarea } from \"@/registry/building-blocks/default/ui/textarea\"\n\nexport default function Component() {\n const id = useId()\n return (\n <div className=\"*:not-first:mt-2\">\n <Label htmlFor={id}>Simple textarea</Label>\n <Textarea id={id} placeholder=\"Leave a comment\" />\n </div>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"label",
|
|
19
|
+
"textarea"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-590",
|
|
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-590.tsx",
|
|
15
|
+
"content": "import {\n CompassIcon,\n FeatherIcon,\n HouseIcon,\n PlusIcon,\n SearchIcon,\n} from \"lucide-react\"\n\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport TeamSwitcher from \"@/registry/building-blocks/default/components/navbar-components/team-switcher\"\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\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: \"Dashboard\", icon: HouseIcon },\n { href: \"#\", label: \"Explore\", icon: CompassIcon },\n { href: \"#\", label: \"Write\", icon: FeatherIcon },\n { href: \"#\", label: \"Search\", icon: SearchIcon },\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-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 <TeamSwitcher teams={teams} defaultTeam={teams[0]} />\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 <Button size=\"sm\" className=\"text-sm max-sm:aspect-square max-sm:p-0\">\n <PlusIcon\n className=\"opacity-60 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-sm:sr-only\">Post</span>\n </Button>\n <NotificationMenu />\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
|
|
16
|
+
"type": "registry:component"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "registry/default/components/navbar-components/notification-menu.tsx",
|
|
20
|
+
"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",
|
|
21
|
+
"type": "registry:component"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "registry/default/components/navbar-components/team-switcher.tsx",
|
|
25
|
+
"content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronsUpDown } from \"lucide-react\"\n\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\"\n\nexport default function TeamSwitcher({\n teams,\n defaultTeam,\n}: {\n teams: string[]\n defaultTeam: string\n}) {\n const [selectedProject, setSelectedProject] = React.useState(defaultTeam)\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"p-0 hover:bg-transparent\">\n <span className=\"flex size-8 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n {selectedProject.charAt(0).toUpperCase()}\n </span>\n <div className=\"flex flex-col gap-0.5 leading-none\">\n <span className=\"\">{selectedProject}</span>\n </div>\n <ChevronsUpDown size={14} className=\"text-muted-foreground/80\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {teams.map((project) => (\n <DropdownMenuItem\n key={project}\n onSelect={() => setSelectedProject(project)}\n >\n {project}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n",
|
|
26
|
+
"type": "registry:component"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "registry/default/components/navbar-components/user-menu.tsx",
|
|
30
|
+
"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",
|
|
31
|
+
"type": "registry:component"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"meta": {
|
|
35
|
+
"tags": [
|
|
36
|
+
"navbar, navigation"
|
|
37
|
+
],
|
|
38
|
+
"colSpan": 3
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-591",
|
|
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/select.json"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
{
|
|
13
|
+
"path": "registry/default/components/comp-591.tsx",
|
|
14
|
+
"content": "import { BotMessageSquareIcon, MessageCircleDashedIcon } from \"lucide-react\"\n\nimport UserMenu from \"@/registry/building-blocks/default/components/navbar-components/user-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\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>\n <Select defaultValue=\"orion-alpha-45\" aria-label=\"Select AI model\">\n <SelectTrigger className=\"**:data-desc:hidden [&>svg]:shrink-0 [&>svg]:text-muted-foreground/80\">\n <BotMessageSquareIcon size={16} aria-hidden=\"true\" />\n <SelectValue placeholder=\"Choose an AI model\" />\n </SelectTrigger>\n <SelectContent className=\"[&_*[role=option]]:ps-2 [&_*[role=option]]:pe-8 [&_*[role=option]>span]:start-auto [&_*[role=option]>span]:end-2\">\n <SelectGroup>\n <SelectLabel className=\"ps-2\">Models</SelectLabel>\n <SelectItem value=\"orion-alpha-45\">\n Orion-Alpha 4.5\n <span\n className=\"mt-1 block text-xs text-muted-foreground\"\n data-desc\n >\n Balanced performance and creativity\n </span>\n </SelectItem>\n <SelectItem value=\"orion-code-4\">\n Orion-Code 4\n <span\n className=\"mt-1 block text-xs text-muted-foreground\"\n data-desc\n >\n Optimized for code generation and understanding\n </span>\n </SelectItem>\n <SelectItem value=\"nova-chat-4\">\n Nova-Chat 4\n <span\n className=\"mt-1 block text-xs text-muted-foreground\"\n data-desc\n >\n Excels at natural, engaging conversations\n </span>\n </SelectItem>\n <SelectItem value=\"galaxy-max-4\">\n Galaxy-Max 4\n <span\n className=\"mt-1 block text-xs text-muted-foreground\"\n data-desc\n >\n Most powerful model for complex tasks\n </span>\n </SelectItem>\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n\n {/* Right side: Actions */}\n <div className=\"flex items-center justify-end gap-2\">\n {/* Layout button */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Temporary chat\"\n >\n <MessageCircleDashedIcon size={16} aria-hidden=\"true\" />\n </Button>\n {/* User menu */}\n <UserMenu />\n </div>\n </div>\n </header>\n )\n}\n",
|
|
15
|
+
"type": "registry:component"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "registry/default/components/navbar-components/user-menu.tsx",
|
|
19
|
+
"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",
|
|
20
|
+
"type": "registry:component"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"meta": {
|
|
24
|
+
"tags": [
|
|
25
|
+
"navbar, navigation"
|
|
26
|
+
],
|
|
27
|
+
"colSpan": 3
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-592",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/button.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/dropdown-menu.json",
|
|
8
|
+
"https://loveui.dev/building-blocks/r/input.json",
|
|
9
|
+
"https://loveui.dev/building-blocks/r/label.json",
|
|
10
|
+
"https://loveui.dev/building-blocks/r/popover.json",
|
|
11
|
+
"https://loveui.dev/building-blocks/r/switch.json"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "registry/default/components/comp-592.tsx",
|
|
16
|
+
"content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { LayoutGridIcon, PlusIcon, SearchIcon } from \"lucide-react\"\n\nimport InfoMenu from \"@/registry/building-blocks/default/components/navbar-components/info-menu\"\nimport NotificationMenu from \"@/registry/building-blocks/default/components/navbar-components/notification-menu\"\nimport SettingsMenu from \"@/registry/building-blocks/default/components/navbar-components/settings-menu\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\nimport { Switch } from \"@/registry/building-blocks/default/ui/switch\"\n\nexport default function Component() {\n const id = useId()\n const [checked, setChecked] = useState<boolean>(true)\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=\"relative flex-1\">\n <Input\n id={`input-${id}`}\n className=\"peer h-8 w-full max-w-xs 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 {/* Right side */}\n <div className=\"flex items-center gap-4\">\n {/* Test mode */}\n <div className=\"inline-flex items-center gap-2 max-md:hidden\">\n <Label htmlFor={`switch-${id}`} className=\"text-sm font-medium\">\n Test mode\n </Label>\n <Switch\n id={`switch-${id}`}\n checked={checked}\n onCheckedChange={setChecked}\n className=\"h-5 w-8 [&_span]:size-4 data-[state=checked]:[&_span]:translate-x-3 data-[state=checked]:[&_span]:rtl:-translate-x-3\"\n aria-label=\"Toggle switch\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n {/* Layout button */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Open layout menu\"\n >\n <LayoutGridIcon size={16} aria-hidden=\"true\" />\n </Button>\n {/* Info menu */}\n <InfoMenu />\n {/* Notification */}\n <NotificationMenu />\n {/* Settings */}\n <SettingsMenu />\n </div>\n {/* Add button */}\n <Button\n className=\"size-8 rounded-full\"\n size=\"icon\"\n aria-label=\"Add new item\"\n >\n <PlusIcon size={16} aria-hidden=\"true\" />\n </Button>\n </div>\n </div>\n </header>\n )\n}\n",
|
|
17
|
+
"type": "registry:component"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "registry/default/components/navbar-components/info-menu.tsx",
|
|
21
|
+
"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",
|
|
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/settings-menu.tsx",
|
|
31
|
+
"content": "import { SettingsIcon } from \"lucide-react\"\n\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\"\n\nexport default function SettingsMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"rounded-full shadow-none\"\n aria-label=\"Open edit menu\"\n >\n <SettingsIcon\n className=\"text-muted-foreground\"\n size={16}\n aria-hidden=\"true\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-64\">\n <DropdownMenuItem>Appearance</DropdownMenuItem>\n <DropdownMenuItem>Preferences</DropdownMenuItem>\n <DropdownMenuItem>API Settings</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,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-593",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/breadcrumb.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/button.json",
|
|
8
|
+
"https://loveui.dev/building-blocks/r/calendar.json",
|
|
9
|
+
"https://loveui.dev/building-blocks/r/checkbox.json",
|
|
10
|
+
"https://loveui.dev/building-blocks/r/label.json",
|
|
11
|
+
"https://loveui.dev/building-blocks/r/popover.json"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "registry/default/components/comp-593.tsx",
|
|
16
|
+
"content": "import { BookmarkIcon, HomeIcon } from \"lucide-react\"\n\nimport DatePicker from \"@/registry/building-blocks/default/components/navbar-components/date-picker\"\nimport Filters from \"@/registry/building-blocks/default/components/navbar-components/filters\"\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/registry/building-blocks/default/ui/breadcrumb\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\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 <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#\">\n <HomeIcon size={16} aria-hidden=\"true\" />\n <span className=\"sr-only\">Home</span>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Reports</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n {/* Right side */}\n <div className=\"flex items-center gap-2\">\n {/* Date picker */}\n <DatePicker />\n {/* Filters */}\n <Filters />\n {/* Saved button */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"text-sm max-sm:aspect-square max-sm:p-0\"\n >\n <BookmarkIcon\n className=\"text-muted-foreground/80 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-sm:sr-only\">Saved</span>\n </Button>\n </div>\n </div>\n </header>\n )\n}\n",
|
|
17
|
+
"type": "registry:component"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "registry/default/components/navbar-components/date-picker.tsx",
|
|
21
|
+
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { format } from \"date-fns\"\nimport { CalendarIcon } from \"lucide-react\"\nimport { DateRange } from \"react-day-picker\"\n\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Calendar } from \"@/registry/building-blocks/default/ui/calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nexport default function DatePicker() {\n const [date, setDate] = useState<DateRange | undefined>()\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"group w-full justify-between border-input bg-background px-3 text-sm font-normal outline-offset-0 outline-none focus-visible:outline-[3px]\"\n >\n <CalendarIcon\n size={16}\n className=\"-ms-1 shrink-0 text-muted-foreground/80 transition-colors\"\n aria-hidden=\"true\"\n />\n <span className={cn(\"truncate\", !date && \"font-medium\")}>\n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n </>\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n \"Date\"\n )}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-2\" align=\"start\">\n <Calendar mode=\"range\" selected={date} onSelect={setDate} />\n </PopoverContent>\n </Popover>\n )\n}\n",
|
|
22
|
+
"type": "registry:component"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "registry/default/components/navbar-components/filters.tsx",
|
|
26
|
+
"content": "import { useId } from \"react\"\nimport { ListFilterIcon } from \"lucide-react\"\n\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Checkbox } from \"@/registry/building-blocks/default/ui/checkbox\"\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\nexport default function Component() {\n const id = useId()\n return (\n <div className=\"flex flex-col gap-4\">\n <Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"text-sm\">\n <ListFilterIcon\n size={16}\n className=\"-ms-1 text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n Filters\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-36 p-3\">\n <div className=\"space-y-3\">\n <div className=\"text-xs font-medium\">Filters</div>\n <form>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox id={`${id}-1`} />\n <Label htmlFor={`${id}-1`} className=\"font-normal\">\n Real Time\n </Label>\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox id={`${id}-2`} />\n <Label htmlFor={`${id}-2`} className=\"font-normal\">\n Top Channels\n </Label>\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox id={`${id}-3`} />\n <Label htmlFor={`${id}-3`} className=\"font-normal\">\n Last Orders\n </Label>\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox id={`${id}-4`} />\n <Label htmlFor={`${id}-4`} className=\"font-normal\">\n Total Spent\n </Label>\n </div>\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className=\"-mx-3 my-3 h-px bg-border\"\n ></div>\n <div className=\"flex justify-between gap-2\">\n <Button size=\"sm\" variant=\"outline\" className=\"h-7 px-2\">\n Clear\n </Button>\n <Button size=\"sm\" className=\"h-7 px-2\">\n Apply\n </Button>\n </div>\n </form>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n",
|
|
27
|
+
"type": "registry:component"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"meta": {
|
|
31
|
+
"tags": [
|
|
32
|
+
"navbar, navigation"
|
|
33
|
+
],
|
|
34
|
+
"colSpan": 3
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-594",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/button.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/dropdown-menu.json",
|
|
8
|
+
"https://loveui.dev/building-blocks/r/radio-group.json"
|
|
9
|
+
],
|
|
10
|
+
"files": [
|
|
11
|
+
{
|
|
12
|
+
"path": "registry/default/components/comp-594.tsx",
|
|
13
|
+
"content": "import { SparklesIcon, UploadIcon } from \"lucide-react\"\n\nimport AppToggle from \"@/registry/building-blocks/default/components/navbar-components/app-toggle\"\nimport TeamSwitcher from \"@/registry/building-blocks/default/components/navbar-components/team-switcher\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\n\nconst teams = [\"Acme Inc.\", \"loveui\", \"Junon\"]\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 <TeamSwitcher teams={teams} defaultTeam={teams[0]} />\n </div>\n {/* Middle area */}\n <AppToggle />\n {/* Right side */}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"text-sm max-sm:aspect-square max-sm:p-0\"\n >\n <UploadIcon\n className=\"opacity-60 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-sm:sr-only\">Export</span>\n </Button>\n <Button size=\"sm\" className=\"text-sm max-sm:aspect-square max-sm:p-0\">\n <SparklesIcon\n className=\"opacity-60 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-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/app-toggle.tsx",
|
|
18
|
+
"content": "\"use client\"\n\nimport { useId, useState } from \"react\"\n\nimport { RadioGroup, RadioGroupItem } from \"@/registry/building-blocks/default/ui/radio-group\"\n\nexport default function AppToggle() {\n const id = useId()\n const [selectedValue, setSelectedValue] = useState(\"on\")\n\n return (\n <div className=\"inline-flex h-8 rounded-md bg-input/50 p-0.5\">\n <RadioGroup\n value={selectedValue}\n onValueChange={setSelectedValue}\n className=\"group relative inline-grid grid-cols-[1fr_1fr] items-center gap-0 text-sm font-medium after:absolute after:inset-y-0 after:w-1/2 after:rounded-sm after:bg-background after:shadow-xs after:transition-[translate,box-shadow] after:duration-300 after:ease-[cubic-bezier(0.16,1,0.3,1)] has-focus-visible:after:border-ring has-focus-visible:after:ring-[3px] has-focus-visible:after:ring-ring/50 data-[state=off]:after:translate-x-0 data-[state=on]:after:translate-x-full\"\n data-state={selectedValue}\n >\n <label className=\"relative z-10 inline-flex h-full min-w-8 cursor-pointer items-center justify-center px-3 whitespace-nowrap transition-colors select-none group-data-[state=on]:text-muted-foreground/70\">\n Sitemap\n <RadioGroupItem id={`${id}-1`} value=\"off\" className=\"sr-only\" />\n </label>\n <label className=\"relative z-10 inline-flex h-full min-w-8 cursor-pointer items-center justify-center px-3 whitespace-nowrap transition-colors select-none group-data-[state=off]:text-muted-foreground/70\">\n Wireframe\n <RadioGroupItem id={`${id}-2`} value=\"on\" className=\"sr-only\" />\n </label>\n </RadioGroup>\n </div>\n )\n}\n",
|
|
19
|
+
"type": "registry:component"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "registry/default/components/navbar-components/team-switcher.tsx",
|
|
23
|
+
"content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronsUpDown } from \"lucide-react\"\n\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\"\n\nexport default function TeamSwitcher({\n teams,\n defaultTeam,\n}: {\n teams: string[]\n defaultTeam: string\n}) {\n const [selectedProject, setSelectedProject] = React.useState(defaultTeam)\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"p-0 hover:bg-transparent\">\n <span className=\"flex size-8 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n {selectedProject.charAt(0).toUpperCase()}\n </span>\n <div className=\"flex flex-col gap-0.5 leading-none\">\n <span className=\"\">{selectedProject}</span>\n </div>\n <ChevronsUpDown size={14} className=\"text-muted-foreground/80\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {teams.map((project) => (\n <DropdownMenuItem\n key={project}\n onSelect={() => setSelectedProject(project)}\n >\n {project}\n </DropdownMenuItem>\n ))}\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
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-595",
|
|
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
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-595.tsx",
|
|
12
|
+
"content": "import { assetPath } from \"@/lib/building-blocks/utils\"\nimport {\n ChevronLeftIcon,\n HistoryIcon,\n MessageSquareText,\n UserRoundPlus,\n} from \"lucide-react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/building-blocks/default/ui/avatar\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\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 <Button\n className=\"size-8\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Go back\"\n asChild\n >\n <a href=\"#\">\n <ChevronLeftIcon />\n </a>\n </Button>\n <h1 className=\"text-sm font-medium\">Love UI</h1>\n </div>\n {/* Right side */}\n <div className=\"flex items-center gap-2\">\n {/* History button */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"History\"\n >\n <HistoryIcon size={16} aria-hidden=\"true\" />\n </Button>\n {/* Comments button */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Save\"\n >\n <MessageSquareText size={16} aria-hidden=\"true\" />\n </Button>\n {/* Add user */}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 rounded-full text-muted-foreground shadow-none\"\n aria-label=\"Add user\"\n >\n <UserRoundPlus size={16} aria-hidden=\"true\" />\n </Button>\n {/* Online users */}\n <div className=\"ml-2 flex items-center gap-2\">\n <div className=\"relative\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=20\"} alt=\"Kelly King\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n <span className=\"absolute -end-0.5 -bottom-0.5 size-3 rounded-full border-2 border-background bg-emerald-500\">\n <span className=\"sr-only\">Online</span>\n </span>\n </div>\n <div className=\"relative\">\n <Avatar>\n <AvatarImage\n src={\"https://i.pravatar.cc/160?img=19\"}\n alt=\"Martha Johnson\"\n />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n <span className=\"absolute -end-0.5 -bottom-0.5 size-3 rounded-full border-2 border-background bg-muted-foreground\">\n <span className=\"sr-only\">Online</span>\n </span>\n </div>\n <div className=\"relative\">\n <Avatar>\n <AvatarImage src={\"https://i.pravatar.cc/160?img=18\"} alt=\"Linda Green\" />\n <AvatarFallback>CL</AvatarFallback>\n </Avatar>\n <span className=\"absolute -end-0.5 -bottom-0.5 size-3 rounded-full border-2 border-background bg-muted-foreground\">\n <span className=\"sr-only\">Online</span>\n </span>\n </div>\n <Button\n variant=\"secondary\"\n className=\"flex size-8 items-center justify-center rounded-full bg-secondary text-xs text-muted-foreground ring-background hover:bg-secondary hover:text-foreground\"\n size=\"icon\"\n >\n +3\n </Button>\n </div>\n </div>\n </div>\n </header>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"navbar, navigation"
|
|
19
|
+
],
|
|
20
|
+
"colSpan": 3
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-596",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/badge.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/button.json",
|
|
8
|
+
"https://loveui.dev/building-blocks/r/label.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/switch.json"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "registry/default/components/comp-596.tsx",
|
|
16
|
+
"content": "\"use client\"\n\nimport { useId, useState } from \"react\"\nimport { ClockIcon, PowerIcon, PowerOffIcon, ZapIcon } from \"lucide-react\"\n\nimport { Badge } from \"@/registry/building-blocks/default/ui/badge\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\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 { Switch } from \"@/registry/building-blocks/default/ui/switch\"\n\n// Navigation links array to be used in both desktop and mobile menus\nconst navigationLinks = [\n { href: \"#\", label: \"Overview\", active: true },\n { href: \"#\", label: \"Graphs\" },\n { href: \"#\", label: \"Backups\" },\n]\n\nexport default function Component() {\n const id = useId()\n const [checked, setChecked] = useState<boolean>(true)\n\n return (\n <header className=\"border-b px-4 md:px-6\">\n <div className=\"flex h-16 justify-between gap-4\">\n {/* Left side */}\n <div className=\"flex gap-2\">\n <div className=\"flex items-center md:hidden\">\n {/* Mobile menu trigger */}\n <Popover>\n <PopoverTrigger asChild>\n <Button className=\"group size-8\" variant=\"ghost\" size=\"icon\">\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 </div>\n {/* Main nav */}\n <div className=\"flex items-center gap-6\">\n {/* Navigation menu */}\n <NavigationMenu className=\"h-full *:h-full max-md:hidden\">\n <NavigationMenuList className=\"h-full gap-2\">\n {navigationLinks.map((link, index) => (\n <NavigationMenuItem key={index} className=\"h-full\">\n <NavigationMenuLink\n active={link.active}\n href={link.href}\n className=\"h-full justify-center rounded-none border-y-2 border-transparent border-b-primary py-1.5 font-medium text-muted-foreground hover:border-b-primary hover:bg-transparent hover:text-primary data-[active]:border-b-primary data-[active]:bg-transparent!\"\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 <Badge variant=\"outline\" className=\"gap-1.5 text-emerald-600\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n ></span>\n Online\n </Badge>\n <Badge variant=\"outline\" className=\"gap-1.5\">\n <ZapIcon\n className=\"-ms-0.5 opacity-60\"\n size={12}\n aria-hidden=\"true\"\n />\n 99.9%\n </Badge>\n <Badge variant=\"outline\" className=\"gap-1.5\">\n <ClockIcon\n className=\"-ms-0.5 opacity-60\"\n size={12}\n aria-hidden=\"true\"\n />\n 45ms\n </Badge>\n </div>\n {/* Switch */}\n <div>\n <div className=\"relative inline-grid h-7 grid-cols-[1fr_1fr] items-center text-sm font-medium\">\n <Switch\n id={id}\n checked={checked}\n onCheckedChange={setChecked}\n className=\"peer absolute inset-0 h-[inherit] w-auto data-[state=unchecked]:bg-input/50 [&_span]:z-10 [&_span]:h-full [&_span]:w-1/2 [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:data-[state=checked]:translate-x-full [&_span]:data-[state=checked]:rtl:-translate-x-full\"\n />\n <span className=\"pointer-events-none relative ms-0.5 flex w-6 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:invisible peer-data-[state=unchecked]:translate-x-full peer-data-[state=unchecked]:rtl:-translate-x-full\">\n <PowerOffIcon size={12} aria-hidden=\"true\" />\n </span>\n <span className=\"pointer-events-none relative me-0.5 flex w-6 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:-translate-x-full peer-data-[state=checked]:text-background peer-data-[state=unchecked]:invisible peer-data-[state=checked]:rtl:translate-x-full\">\n <PowerIcon size={12} aria-hidden=\"true\" />\n </span>\n </div>\n <Label htmlFor={id} className=\"sr-only\">\n Power\n </Label>\n </div>\n </div>\n </div>\n </header>\n )\n}\n",
|
|
17
|
+
"type": "registry:component"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"meta": {
|
|
21
|
+
"tags": [
|
|
22
|
+
"navbar, navigation"
|
|
23
|
+
],
|
|
24
|
+
"colSpan": 3
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-597",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/tree.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/checkbox.json"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-597.tsx",
|
|
12
|
+
"content": "\"use client\"\n\nimport React from \"react\"\nimport {\n checkboxesFeature,\n hotkeysCoreFeature,\n selectionFeature,\n syncDataLoaderFeature,\n} from \"@headless-tree/core\"\nimport { useTree } from \"@headless-tree/react\"\n\nimport { Checkbox } from \"@/registry/building-blocks/default/ui/checkbox\"\nimport { Tree, TreeItem, TreeItemLabel } from \"@/registry/building-blocks/default/ui/tree\"\n\ninterface Item {\n name: string\n children?: string[]\n}\n\nconst items: Record<string, Item> = {\n company: {\n name: \"Company\",\n children: [\"engineering\", \"marketing\", \"operations\"],\n },\n engineering: {\n name: \"Engineering\",\n children: [\"frontend\", \"backend\", \"platform-team\"],\n },\n frontend: { name: \"Frontend\", children: [\"design-system\", \"web-platform\"] },\n \"design-system\": {\n name: \"Design System\",\n children: [\"components\", \"tokens\", \"guidelines\"],\n },\n components: { name: \"Components\" },\n tokens: { name: \"Tokens\" },\n guidelines: { name: \"Guidelines\" },\n \"web-platform\": { name: \"Web Platform\" },\n backend: { name: \"Backend\", children: [\"apis\", \"infrastructure\"] },\n apis: { name: \"APIs\" },\n infrastructure: { name: \"Infrastructure\" },\n \"platform-team\": { name: \"Platform Team\" },\n marketing: { name: \"Marketing\", children: [\"content\", \"seo\"] },\n content: { name: \"Content\" },\n seo: { name: \"SEO\" },\n operations: { name: \"Operations\", children: [\"hr\", \"finance\"] },\n hr: { name: \"HR\" },\n finance: { name: \"Finance\" },\n}\n\nconst indent = 20\n\nexport default function Component() {\n const tree = useTree<Item>({\n initialState: {\n expandedItems: [\"engineering\", \"frontend\", \"design-system\"],\n checkedItems: [\"components\", \"tokens\"],\n },\n indent,\n rootItemId: \"company\",\n getItemName: (item) => item.getItemData().name,\n isItemFolder: (item) => (item.getItemData()?.children?.length ?? 0) > 0,\n dataLoader: {\n getItem: (itemId) => items[itemId],\n getChildren: (itemId) => items[itemId].children ?? [],\n },\n features: [\n syncDataLoaderFeature,\n selectionFeature,\n checkboxesFeature,\n hotkeysCoreFeature,\n ],\n })\n\n return (\n <div className=\"flex h-full flex-col gap-1.5 *:first:grow\">\n <Tree indent={indent} tree={tree}>\n {tree.getItems().map((item) => {\n return (\n <div\n key={item.getId()}\n className=\"flex items-center gap-2 not-last:pb-0.5\"\n >\n <TreeItem item={item} className=\"flex-1 not-last:pb-0\">\n <TreeItemLabel />\n </TreeItem>\n <Checkbox\n checked={\n {\n checked: true,\n unchecked: false,\n indeterminate: \"indeterminate\" as const,\n }[item.getCheckedState()]\n }\n onCheckedChange={(checked) => {\n const checkboxProps = item.getCheckboxProps()\n checkboxProps.onChange?.({ target: { checked } })\n }}\n />\n </div>\n )\n })}\n </Tree>\n\n <div className=\"space-y-2\">\n <p\n aria-live=\"polite\"\n role=\"region\"\n className=\"mt-2 text-xs text-muted-foreground\"\n >\n Tree with checkboxes on the right ∙{\" \"}\n <a\n href=\"https://headless-tree.lukasbach.com\"\n className=\"underline hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n API\n </a>\n </p>\n </div>\n </div>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"tree",
|
|
19
|
+
"checkbox"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-598",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/tree.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/checkbox.json"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-598.tsx",
|
|
12
|
+
"content": "\"use client\"\n\nimport React from \"react\"\nimport {\n checkboxesFeature,\n hotkeysCoreFeature,\n selectionFeature,\n syncDataLoaderFeature,\n} from \"@headless-tree/core\"\nimport { useTree } from \"@headless-tree/react\"\n\nimport { Checkbox } from \"@/registry/building-blocks/default/ui/checkbox\"\nimport { Tree, TreeItem, TreeItemLabel } from \"@/registry/building-blocks/default/ui/tree\"\n\ninterface Item {\n name: string\n children?: string[]\n}\n\nconst items: Record<string, Item> = {\n company: {\n name: \"Company\",\n children: [\"engineering\", \"marketing\", \"operations\"],\n },\n engineering: {\n name: \"Engineering\",\n children: [\"frontend\", \"backend\", \"platform-team\"],\n },\n frontend: { name: \"Frontend\", children: [\"design-system\", \"web-platform\"] },\n \"design-system\": {\n name: \"Design System\",\n children: [\"components\", \"tokens\", \"guidelines\"],\n },\n components: { name: \"Components\" },\n tokens: { name: \"Tokens\" },\n guidelines: { name: \"Guidelines\" },\n \"web-platform\": { name: \"Web Platform\" },\n backend: { name: \"Backend\", children: [\"apis\", \"infrastructure\"] },\n apis: { name: \"APIs\" },\n infrastructure: { name: \"Infrastructure\" },\n \"platform-team\": { name: \"Platform Team\" },\n marketing: { name: \"Marketing\", children: [\"content\", \"seo\"] },\n content: { name: \"Content\" },\n seo: { name: \"SEO\" },\n operations: { name: \"Operations\", children: [\"hr\", \"finance\"] },\n hr: { name: \"HR\" },\n finance: { name: \"Finance\" },\n}\n\nconst indent = 20\n\nexport default function Component() {\n const tree = useTree<Item>({\n initialState: {\n expandedItems: [\"engineering\", \"frontend\", \"design-system\"],\n checkedItems: [\"components\", \"tokens\"],\n },\n indent,\n rootItemId: \"company\",\n getItemName: (item) => item.getItemData().name,\n isItemFolder: (item) => (item.getItemData()?.children?.length ?? 0) > 0,\n dataLoader: {\n getItem: (itemId) => items[itemId],\n getChildren: (itemId) => items[itemId].children ?? [],\n },\n features: [\n syncDataLoaderFeature,\n selectionFeature,\n checkboxesFeature,\n hotkeysCoreFeature,\n ],\n })\n\n return (\n <div className=\"flex h-full flex-col gap-2 *:first:grow\">\n <Tree indent={indent} tree={tree}>\n {tree.getItems().map((item) => {\n return (\n <div\n key={item.getId()}\n className=\"flex items-center gap-1.5 not-last:pb-0.5\"\n >\n <Checkbox\n checked={\n {\n checked: true,\n unchecked: false,\n indeterminate: \"indeterminate\" as const,\n }[item.getCheckedState()]\n }\n onCheckedChange={(checked) => {\n const checkboxProps = item.getCheckboxProps()\n checkboxProps.onChange?.({ target: { checked } })\n }}\n />\n <TreeItem item={item} className=\"flex-1 not-last:pb-0\">\n <TreeItemLabel />\n </TreeItem>\n </div>\n )\n })}\n </Tree>\n\n <div className=\"space-y-2\">\n <p\n aria-live=\"polite\"\n role=\"region\"\n className=\"mt-2 text-xs text-muted-foreground\"\n >\n Tree with checkboxes on the left ∙{\" \"}\n <a\n href=\"https://headless-tree.lukasbach.com\"\n className=\"underline hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n API\n </a>\n </p>\n </div>\n </div>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"tree",
|
|
19
|
+
"checkbox"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-599",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/tree.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/checkbox.json"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-599.tsx",
|
|
12
|
+
"content": "\"use client\"\n\nimport React from \"react\"\nimport {\n checkboxesFeature,\n hotkeysCoreFeature,\n selectionFeature,\n syncDataLoaderFeature,\n} from \"@headless-tree/core\"\nimport { useTree } from \"@headless-tree/react\"\nimport { FileIcon, FolderIcon, FolderOpenIcon } from \"lucide-react\"\n\nimport { Checkbox } from \"@/registry/building-blocks/default/ui/checkbox\"\nimport { Tree, TreeItem, TreeItemLabel } from \"@/registry/building-blocks/default/ui/tree\"\n\ninterface Item {\n name: string\n children?: string[]\n}\n\nconst items: Record<string, Item> = {\n company: {\n name: \"Company\",\n children: [\"engineering\", \"marketing\", \"operations\"],\n },\n engineering: {\n name: \"Engineering\",\n children: [\"frontend\", \"backend\", \"platform-team\"],\n },\n frontend: { name: \"Frontend\", children: [\"design-system\", \"web-platform\"] },\n \"design-system\": {\n name: \"Design System\",\n children: [\"components\", \"tokens\", \"guidelines\"],\n },\n components: { name: \"Components\" },\n tokens: { name: \"Tokens\" },\n guidelines: { name: \"Guidelines\" },\n \"web-platform\": { name: \"Web Platform\" },\n backend: { name: \"Backend\", children: [\"apis\", \"infrastructure\"] },\n apis: { name: \"APIs\" },\n infrastructure: { name: \"Infrastructure\" },\n \"platform-team\": { name: \"Platform Team\" },\n marketing: { name: \"Marketing\", children: [\"content\", \"seo\"] },\n content: { name: \"Content\" },\n seo: { name: \"SEO\" },\n operations: { name: \"Operations\", children: [\"hr\", \"finance\"] },\n hr: { name: \"HR\" },\n finance: { name: \"Finance\" },\n}\n\nconst indent = 20\n\nexport default function Component() {\n const tree = useTree<Item>({\n initialState: {\n expandedItems: [\"engineering\", \"frontend\", \"design-system\"],\n checkedItems: [\"components\", \"tokens\"],\n },\n indent,\n rootItemId: \"company\",\n getItemName: (item) => item.getItemData().name,\n isItemFolder: (item) => (item.getItemData()?.children?.length ?? 0) > 0,\n dataLoader: {\n getItem: (itemId) => items[itemId],\n getChildren: (itemId) => items[itemId].children ?? [],\n },\n canCheckFolders: true,\n features: [\n syncDataLoaderFeature,\n selectionFeature,\n checkboxesFeature,\n hotkeysCoreFeature,\n ],\n })\n\n return (\n <div className=\"flex h-full flex-col gap-2 *:first:grow\">\n <div>\n <Tree\n className=\"relative before:absolute before:inset-0 before:ms-4.5 before:bg-[repeating-linear-gradient(to_right,transparent_0,transparent_calc(var(--tree-indent)-1px),var(--border)_calc(var(--tree-indent)-1px),var(--border)_calc(var(--tree-indent)))]\"\n indent={indent}\n tree={tree}\n >\n {tree.getItems().map((item) => {\n return (\n <div\n key={item.getId()}\n className=\"flex items-center gap-1.5 not-last:pb-0.5\"\n >\n <Checkbox\n checked={\n {\n checked: true,\n unchecked: false,\n indeterminate: \"indeterminate\" as const,\n }[item.getCheckedState()]\n }\n onCheckedChange={(checked) => {\n const checkboxProps = item.getCheckboxProps()\n checkboxProps.onChange?.({ target: { checked } })\n }}\n />\n <TreeItem item={item} className=\"flex-1 not-last:pb-0\">\n <TreeItemLabel className=\"relative before:absolute before:inset-x-0 before:-inset-y-0.5 before:-z-10 before:bg-background\">\n <span className=\"flex items-center gap-2\">\n {item.isFolder() ? (\n item.isExpanded() ? (\n <FolderOpenIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n ) : (\n <FolderIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n )\n ) : (\n <FileIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n )}\n {item.getItemName()}\n </span>\n </TreeItemLabel>\n </TreeItem>\n </div>\n )\n })}\n </Tree>\n </div>\n\n <div className=\"space-y-2\">\n <p\n aria-live=\"polite\"\n role=\"region\"\n className=\"mt-2 text-xs text-muted-foreground\"\n >\n Tree with canCheckFolders option ∙{\" \"}\n <a\n href=\"https://headless-tree.lukasbach.com\"\n className=\"underline hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n API\n </a>\n </p>\n </div>\n </div>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"tree",
|
|
19
|
+
"checkbox"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-60",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"registryDependencies": [
|
|
6
|
+
"https://loveui.dev/building-blocks/r/label.json",
|
|
7
|
+
"https://loveui.dev/building-blocks/r/textarea.json"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "registry/default/components/comp-60.tsx",
|
|
12
|
+
"content": "import { useId } from \"react\"\n\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\nimport { Textarea } from \"@/registry/building-blocks/default/ui/textarea\"\n\nexport default function Component() {\n const id = useId()\n return (\n <div className=\"*:not-first:mt-2\">\n <Label htmlFor={id}>\n Required textarea <span className=\"text-destructive\">*</span>\n </Label>\n <Textarea id={id} placeholder=\"Leave a message\" required />\n </div>\n )\n}\n",
|
|
13
|
+
"type": "registry:component"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"meta": {
|
|
17
|
+
"tags": [
|
|
18
|
+
"label",
|
|
19
|
+
"textarea",
|
|
20
|
+
"required"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "comp-600",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"files": [
|
|
6
|
+
{
|
|
7
|
+
"path": "registry/default/components/comp-600.tsx",
|
|
8
|
+
"content": "import { Card, CardContent } from \"@/registry/building-blocks/default/ui/card\";\nimport { cn } from \"@/lib/utils\";\n\nconst data = [\n {\n name: \"Profit\",\n value: \"$287,654.00\",\n change: \"+8.32%\",\n changeType: \"positive\",\n },\n {\n name: \"Late payments\",\n value: \"$9,435.00\",\n change: \"-12.64%\",\n changeType: \"negative\",\n },\n {\n name: \"Pending orders\",\n value: \"$173,229.00\",\n change: \"+2.87%\",\n changeType: \"positive\",\n },\n {\n name: \"Operating costs\",\n value: \"$52,891.00\",\n change: \"-5.73%\",\n changeType: \"negative\",\n },\n];\n\nexport default function Stats01() {\n return (\n <div className=\"flex items-center justify-center p-10\">\n <div className=\"mx-auto grid grid-cols-1 gap-px rounded-xl bg-border sm:grid-cols-2 lg:grid-cols-4\">\n {data.map((stat, index) => (\n <Card\n key={stat.name}\n className={cn(\n \"rounded-none border-0 shadow-none py-0\",\n index === 0 && \"rounded-l-xl\",\n index === data.length - 1 && \"rounded-r-xl\"\n )}\n >\n <CardContent className=\"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-2 p-4 sm:p-6\">\n <div className=\"text-sm font-medium text-muted-foreground\">\n {stat.name}\n </div>\n <div\n className={cn(\n \"tabular-nums text-xs font-medium\",\n stat.changeType === \"positive\"\n ? \"text-green-800 dark:text-green-400\"\n : \"text-red-800 dark:text-red-400\"\n )}\n >\n {stat.change}\n </div>\n <div className=\"tabular-nums w-full flex-none text-3xl font-medium tracking-tight text-foreground\">\n {stat.value}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}",
|
|
9
|
+
"type": "registry:component"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"meta": {
|
|
13
|
+
"tags": [
|
|
14
|
+
"stats"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|