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,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "stepper",
|
|
4
|
+
"type": "registry:ui",
|
|
5
|
+
"dependencies": [
|
|
6
|
+
"radix-ui"
|
|
7
|
+
],
|
|
8
|
+
"files": [
|
|
9
|
+
{
|
|
10
|
+
"path": "registry/default/ui/stepper.tsx",
|
|
11
|
+
"content": "\"use client\"\n\nimport * as React from \"react\"\nimport { createContext, useContext } from \"react\"\nimport { CheckIcon, LoaderCircleIcon } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/registry/default/lib/utils\"\n\n// Types\ntype StepperContextValue = {\n activeStep: number\n setActiveStep: (step: number) => void\n orientation: \"horizontal\" | \"vertical\"\n}\n\ntype StepItemContextValue = {\n step: number\n state: StepState\n isDisabled: boolean\n isLoading: boolean\n}\n\ntype StepState = \"active\" | \"completed\" | \"inactive\" | \"loading\"\n\n// Contexts\nconst StepperContext = createContext<StepperContextValue | undefined>(undefined)\nconst StepItemContext = createContext<StepItemContextValue | undefined>(\n undefined\n)\n\nconst useStepper = () => {\n const context = useContext(StepperContext)\n if (!context) {\n throw new Error(\"useStepper must be used within a Stepper\")\n }\n return context\n}\n\nconst useStepItem = () => {\n const context = useContext(StepItemContext)\n if (!context) {\n throw new Error(\"useStepItem must be used within a StepperItem\")\n }\n return context\n}\n\n// Components\ninterface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultValue?: number\n value?: number\n onValueChange?: (value: number) => void\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nfunction Stepper({\n defaultValue = 0,\n value,\n onValueChange,\n orientation = \"horizontal\",\n className,\n ...props\n}: StepperProps) {\n const [activeStep, setInternalStep] = React.useState(defaultValue)\n\n const setActiveStep = React.useCallback(\n (step: number) => {\n if (value === undefined) {\n setInternalStep(step)\n }\n onValueChange?.(step)\n },\n [value, onValueChange]\n )\n\n const currentStep = value ?? activeStep\n\n return (\n <StepperContext.Provider\n value={{\n activeStep: currentStep,\n setActiveStep,\n orientation,\n }}\n >\n <div\n data-slot=\"stepper\"\n className={cn(\n \"group/stepper inline-flex data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-row data-[orientation=vertical]:flex-col\",\n className\n )}\n data-orientation={orientation}\n {...props}\n />\n </StepperContext.Provider>\n )\n}\n\n// StepperItem\ninterface StepperItemProps extends React.HTMLAttributes<HTMLDivElement> {\n step: number\n completed?: boolean\n disabled?: boolean\n loading?: boolean\n}\n\nfunction StepperItem({\n step,\n completed = false,\n disabled = false,\n loading = false,\n className,\n children,\n ...props\n}: StepperItemProps) {\n const { activeStep } = useStepper()\n\n const state: StepState =\n completed || step < activeStep\n ? \"completed\"\n : activeStep === step\n ? \"active\"\n : \"inactive\"\n\n const isLoading = loading && step === activeStep\n\n return (\n <StepItemContext.Provider\n value={{ step, state, isDisabled: disabled, isLoading }}\n >\n <div\n data-slot=\"stepper-item\"\n className={cn(\n \"group/step flex items-center group-data-[orientation=horizontal]/stepper:flex-row group-data-[orientation=vertical]/stepper:flex-col\",\n className\n )}\n data-state={state}\n {...(isLoading ? { \"data-loading\": true } : {})}\n {...props}\n >\n {children}\n </div>\n </StepItemContext.Provider>\n )\n}\n\n// StepperTrigger\ninterface StepperTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nfunction StepperTrigger({\n asChild = false,\n className,\n children,\n ...props\n}: StepperTriggerProps) {\n const { setActiveStep } = useStepper()\n const { step, isDisabled } = useStepItem()\n\n if (asChild) {\n const Comp = asChild ? Slot.Root : \"span\"\n return (\n <Comp data-slot=\"stepper-trigger\" className={className}>\n {children}\n </Comp>\n )\n }\n\n return (\n <button\n data-slot=\"stepper-trigger\"\n className={cn(\n \"inline-flex items-center gap-3 rounded-full outline-none focus-visible:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={() => setActiveStep(step)}\n disabled={isDisabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// StepperIndicator\ninterface StepperIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n}\n\nfunction StepperIndicator({\n asChild = false,\n className,\n children,\n ...props\n}: StepperIndicatorProps) {\n const { state, step, isLoading } = useStepItem()\n\n return (\n <span\n data-slot=\"stepper-indicator\"\n className={cn(\n \"relative flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=completed]:bg-primary data-[state=completed]:text-primary-foreground\",\n className\n )}\n data-state={state}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n <span className=\"transition-all group-data-loading/step:scale-0 group-data-loading/step:opacity-0 group-data-loading/step:transition-none group-data-[state=completed]/step:scale-0 group-data-[state=completed]/step:opacity-0\">\n {step}\n </span>\n <CheckIcon\n className=\"absolute scale-0 opacity-0 transition-all group-data-[state=completed]/step:scale-100 group-data-[state=completed]/step:opacity-100\"\n size={16}\n aria-hidden=\"true\"\n />\n {isLoading && (\n <span className=\"absolute transition-all\">\n <LoaderCircleIcon\n className=\"animate-spin\"\n size={14}\n aria-hidden=\"true\"\n />\n </span>\n )}\n </>\n )}\n </span>\n )\n}\n\n// StepperTitle\nfunction StepperTitle({\n className,\n ...props\n}: React.HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n data-slot=\"stepper-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\n// StepperDescription\nfunction StepperDescription({\n className,\n ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) {\n return (\n <p\n data-slot=\"stepper-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\n// StepperSeparator\nfunction StepperSeparator({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"stepper-separator\"\n className={cn(\n \"m-0.5 bg-muted group-data-[orientation=horizontal]/stepper:h-0.5 group-data-[orientation=horizontal]/stepper:w-full group-data-[orientation=horizontal]/stepper:flex-1 group-data-[orientation=vertical]/stepper:h-12 group-data-[orientation=vertical]/stepper:w-0.5 group-data-[state=completed]/step:bg-primary\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Stepper,\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n}\n",
|
|
12
|
+
"type": "registry:ui"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/stories-images.tsx",
|
|
11
|
-
"content": "\"use client\"\n\nimport {\n Stories,\n StoriesContent,\n Story,\n StoryAuthor,\n StoryAuthorImage,\n StoryAuthorName,\n StoryImage,\n StoryOverlay,\n StoryTitle,\n} from \"../../../../../packages/stories\"\n\nconst stories = [\n {\n id: 1,\n author: \"Connor\",\n avatar:\n \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\",\n fallback: \"CL\",\n preview:\n \"https://images.unsplash.com/photo-1753731683731-1032f9457b02?w=1636&fit=crop\",\n title: \"Mountain Adventure\",\n },\n {\n id: 2,\n author: \"Thomas\",\n avatar:\n \"https://images.unsplash.com/photo-1494790108755-2616b612b786?w=40&h=40&fit=crop&crop=face\",\n fallback: \"MO\",\n preview:\n \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=300&h=533&fit=crop\",\n title: \"Ocean Waves\",\n },\n {\n id: 3,\n author: \"Nathan\",\n avatar:\n \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=40&h=40&fit=crop&crop=face\",\n fallback: \"N\",\n preview:\n \"https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=300&h=533&fit=crop\",\n title: \"Forest Trail\",\n },\n {\n id: 4,\n author: \"Tyler\",\n avatar:\n \"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=40&h=40&fit=crop&crop=face\",\n fallback: \"TY\",\n preview:\n \"https://images.unsplash.com/photo-1541336032412-2048a678540d?w=300&h=533&fit=crop\",\n title: \"City Lights\",\n },\n {\n id: 5,\n author: \"Owen\",\n avatar:\n \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=40&h=40&fit=crop&crop=face\",\n fallback: \"OW\",\n preview:\n \"https://images.unsplash.com/photo-1509316785289-025f5b846b35?w=300&fit=crop\",\n title: \"Desert Road\",\n },\n]\n\nconst Example = () => (\n <Stories>\n <StoriesContent>\n {stories.map((story) => (\n <Story className=\"aspect-[3/4] w-[200px]\" key={story.id}>\n <StoryImage alt={story.title} src={story.preview} />\n <StoryOverlay side=\"top\" />\n <StoryOverlay side=\"bottom\" />\n <StoryTitle className=\"truncate text-sm font-medium\">\n {story.title}\n </StoryTitle>\n <StoryAuthor>\n <StoryAuthorImage\n fallback={story.fallback}\n name={story.author}\n src={story.avatar}\n />\n <StoryAuthorName>{story.author}</StoryAuthorName>\n </StoryAuthor>\n </Story>\n ))}\n </StoriesContent>\n </Stories>\n)\n\nexport default Example\n",
|
|
11
|
+
"content": "\"use client\"\n\nimport {\n Stories,\n StoriesContent,\n Story,\n StoryAuthor,\n StoryAuthorImage,\n StoryAuthorName,\n StoryImage,\n StoryOverlay,\n StoryTitle,\n} from \"../../../../../packages/stories\"\n\nconst stories = [\n {\n id: 1,\n author: \"Connor\",\n avatar:\n \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\",\n fallback: \"CL\",\n preview:\n \"https://images.unsplash.com/photo-1753731683731-1032f9457b02?w=1636&fit=crop\",\n title: \"Updated Mountain Adventure\",\n },\n {\n id: 2,\n author: \"Thomas\",\n avatar:\n \"https://images.unsplash.com/photo-1494790108755-2616b612b786?w=40&h=40&fit=crop&crop=face\",\n fallback: \"MO\",\n preview:\n \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=300&h=533&fit=crop\",\n title: \"Updated Ocean Waves\",\n },\n {\n id: 3,\n author: \"Nathan\",\n avatar:\n \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=40&h=40&fit=crop&crop=face\",\n fallback: \"N\",\n preview:\n \"https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=300&h=533&fit=crop\",\n title: \"Updated Forest Trail\",\n },\n {\n id: 4,\n author: \"Tyler\",\n avatar:\n \"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=40&h=40&fit=crop&crop=face\",\n fallback: \"TY\",\n preview:\n \"https://images.unsplash.com/photo-1541336032412-2048a678540d?w=300&h=533&fit=crop\",\n title: \"Updated City Lights\",\n },\n {\n id: 5,\n author: \"Owen\",\n avatar:\n \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=40&h=40&fit=crop&crop=face\",\n fallback: \"OW\",\n preview:\n \"https://images.unsplash.com/photo-1509316785289-025f5b846b35?w=300&fit=crop\",\n title: \"Updated Desert Road\",\n },\n]\n\nconst Example = () => (\n <Stories>\n <StoriesContent>\n {stories.map((story) => (\n <Story className=\"aspect-[3/4] w-[200px]\" key={story.id}>\n <StoryImage alt={story.title} src={story.preview} />\n <StoryOverlay side=\"top\" />\n <StoryOverlay side=\"bottom\" />\n <StoryTitle className=\"truncate text-sm font-medium\">\n {story.title}\n </StoryTitle>\n <StoryAuthor>\n <StoryAuthorImage\n fallback={story.fallback}\n name={story.author}\n src={story.avatar}\n />\n <StoryAuthorName>{story.author}</StoryAuthorName>\n </StoryAuthor>\n </Story>\n ))}\n </StoriesContent>\n </Stories>\n)\n\nexport default Example\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/switch-card.tsx",
|
|
12
|
-
"content": "import * as React from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchCardDemo() {\n const id = React.useId()\n\n return (\n <Label\n htmlFor={id}\n className=\"flex items-center gap-6 rounded-lg border p-3 hover:bg-accent/50 has-data-checked:border-primary/48 has-data-checked:bg-accent/50\"\n >\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-sm leading-4\">Enable notifications</p>\n <p className=\"text-xs text-muted-foreground\">\n You can enable or disable notifications at any time.\n </p>\n </div>\n <Switch id={id} defaultChecked />\n </Label>\n )\n}\n",
|
|
12
|
+
"content": "import * as React from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchCardDemo() {\n const id = React.useId()\n\n return (\n <Label\n htmlFor={id}\n className=\"flex items-center gap-6 rounded-lg border p-3 hover:bg-accent/50 has-data-checked:border-primary/48 has-data-checked:bg-accent/50\"\n >\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-sm leading-4\">Updated Enable notifications</p>\n <p className=\"text-xs text-muted-foreground\">\n Updated You can enable or disable notifications at any time.\n </p>\n </div>\n <Switch id={id} defaultChecked />\n </Label>\n )\n}\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/switch-demo.tsx",
|
|
12
|
-
"content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithLabel() {\n return (\n <Label>\n <Switch />\n Marketing emails\n </Label>\n )\n}\n",
|
|
12
|
+
"content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithLabel() {\n return (\n <Label>\n <Switch />\n Updated Marketing emails\n </Label>\n )\n}\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/switch-disabled.tsx",
|
|
12
|
-
"content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithLabel() {\n return (\n <Label>\n <Switch disabled />\n Marketing emails\n </Label>\n )\n}\n",
|
|
12
|
+
"content": "import { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithLabel() {\n return (\n <Label>\n <Switch disabled />\n Updated Marketing emails\n </Label>\n )\n}\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
{
|
|
13
13
|
"path": "registry/default/examples/switch-form.tsx",
|
|
14
|
-
"content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Field, FieldLabel } from \"@/registry/default/ui/field\"\nimport { Form } from \"@/registry/default/ui/form\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchFormDemo() {\n const [loading, setLoading] = React.useState(false)\n\n const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n setLoading(true)\n await new Promise((r) => setTimeout(r, 800))\n setLoading(false)\n console.log(formData.get(\"marketing\"))\n\n const enabled = formData.get(\"marketing\")\n alert(`Marketing emails: ${enabled}`)\n }\n\n return (\n <Form onSubmit={onSubmit} className=\"w-auto\">\n <Field name=\"marketing\">\n <FieldLabel>\n <Switch name=\"marketing\" defaultChecked disabled={loading} />\n Enable marketing emails\n </FieldLabel>\n </Field>\n <Button type=\"submit\" disabled={loading}>\n Submit\n </Button>\n </Form>\n )\n}\n",
|
|
14
|
+
"content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Field, FieldLabel } from \"@/registry/default/ui/field\"\nimport { Form } from \"@/registry/default/ui/form\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchFormDemo() {\n const [loading, setLoading] = React.useState(false)\n\n const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n setLoading(true)\n await new Promise((r) => setTimeout(r, 800))\n setLoading(false)\n console.log(formData.get(\"marketing\"))\n\n const enabled = formData.get(\"marketing\")\n alert(`Marketing emails: ${enabled}`)\n }\n\n return (\n <Form onSubmit={onSubmit} className=\"w-auto\">\n <Field name=\"marketing\">\n <FieldLabel>\n <Switch name=\"marketing\" defaultChecked disabled={loading} />\n Updated Enable marketing emails\n </FieldLabel>\n </Field>\n <Button type=\"submit\" disabled={loading}>\n Updated Submit\n </Button>\n </Form>\n )\n}\n",
|
|
15
15
|
"type": "registry:example"
|
|
16
16
|
}
|
|
17
17
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/switch-with-description.tsx",
|
|
12
|
-
"content": "import * as React from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithDescriptionDemo() {\n const id = React.useId()\n\n return (\n <div className=\"flex items-start gap-2\">\n <Switch id={id} defaultChecked />\n <div className=\"flex flex-col gap-1\">\n <Label htmlFor={id}>Marketing emails</Label>\n <p className=\"text-xs text-muted-foreground\">\n By enabling marketing emails, you agree to receive emails.\n </p>\n </div>\n </div>\n )\n}\n",
|
|
12
|
+
"content": "import * as React from \"react\"\n\nimport { Label } from \"@/registry/default/ui/label\"\nimport { Switch } from \"@/registry/default/ui/switch\"\n\nexport default function SwitchWithDescriptionDemo() {\n const id = React.useId()\n\n return (\n <div className=\"flex items-start gap-2\">\n <Switch id={id} defaultChecked />\n <div className=\"flex flex-col gap-1\">\n <Label htmlFor={id}>Updated Marketing emails</Label>\n <p className=\"text-xs text-muted-foreground\">\n Updated By enabling marketing emails, you agree to receive emails.\n </p>\n </div>\n </div>\n )\n}\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
package/public/r/table-demo.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/table-demo.tsx",
|
|
12
|
-
"content": "import { Badge } from \"@/registry/default/ui/badge\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nexport default function TableDemo() {\n return (\n <Table>\n <TableCaption>A list of current projects.</TableCaption>\n <TableHeader>\n <TableRow>\n <TableHead>Project</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Team</TableHead>\n <TableHead className=\"text-right\">Budget</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"font-medium\"
|
|
12
|
+
"content": "import { Badge } from \"@/registry/default/ui/badge\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nexport default function TableDemo() {\n return (\n <Table>\n <TableCaption>Updated A list of current projects.</TableCaption>\n <TableHeader>\n <TableRow>\n <TableHead>Updated Project</TableHead>\n <TableHead>Updated Status</TableHead>\n <TableHead>Updated Team</TableHead>\n <TableHead className=\"text-right\">Updated Budget</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated Website Redesign\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated Frontend Team</TableCell>\n <TableCell className=\"text-right\">$12,500</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">Updated Mobile App</TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-muted-foreground/64\"\n aria-hidden=\"true\"\n />\n Updated Unpaid\n </Badge>\n </TableCell>\n <TableCell>Updated Mobile Team</TableCell>\n <TableCell className=\"text-right\">$8,750</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">Updated API Integration</TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-amber-500\"\n aria-hidden=\"true\"\n />\n Updated Pending\n </Badge>\n </TableCell>\n <TableCell>Updated Backend Team</TableCell>\n <TableCell className=\"text-right\">$5,200</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated Database Migration\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated DevOps Team</TableCell>\n <TableCell className=\"text-right\">$3,800</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">Updated User Dashboard</TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated UX Team</TableCell>\n <TableCell className=\"text-right\">$7,200</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">Updated Security Audit</TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-red-500\"\n aria-hidden=\"true\"\n />\n Updated Failed\n </Badge>\n </TableCell>\n <TableCell>Updated Security Team</TableCell>\n <TableCell className=\"text-right\">$2,100</TableCell>\n </TableRow>\n </TableBody>\n <TableFooter>\n <TableRow>\n <TableCell colSpan={3}>Updated Total Budget</TableCell>\n <TableCell className=\"text-right font-medium\">$39,550</TableCell>\n </TableRow>\n </TableFooter>\n </Table>\n )\n}\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
{
|
|
12
12
|
"path": "registry/default/examples/table-framed.tsx",
|
|
13
|
-
"content": "import { Badge } from \"@/registry/default/ui/badge\"\nimport { Frame, FramePanel } from \"@/registry/default/ui/frame\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nexport default function TableFramed() {\n return (\n <Frame className=\"w-full\">\n <FramePanel>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Project</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Team</TableHead>\n <TableHead className=\"text-right\">Budget</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"font-medium\"
|
|
13
|
+
"content": "import { Badge } from \"@/registry/default/ui/badge\"\nimport { Frame, FramePanel } from \"@/registry/default/ui/frame\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/default/ui/table\"\n\nexport default function TableFramed() {\n return (\n <Frame className=\"w-full\">\n <FramePanel>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Updated Project</TableHead>\n <TableHead>Updated Status</TableHead>\n <TableHead>Updated Team</TableHead>\n <TableHead className=\"text-right\">Updated Budget</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated Website Redesign\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated Frontend Team</TableCell>\n <TableCell className=\"text-right\">$12,500</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">Updated Mobile App</TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-muted-foreground/64\"\n aria-hidden=\"true\"\n />\n Updated Unpaid\n </Badge>\n </TableCell>\n <TableCell>Updated Mobile Team</TableCell>\n <TableCell className=\"text-right\">$8,750</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated API Integration\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-amber-500\"\n aria-hidden=\"true\"\n />\n Updated Pending\n </Badge>\n </TableCell>\n <TableCell>Updated Backend Team</TableCell>\n <TableCell className=\"text-right\">$5,200</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated Database Migration\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated DevOps Team</TableCell>\n <TableCell className=\"text-right\">$3,800</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated User Dashboard\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-emerald-500\"\n aria-hidden=\"true\"\n />\n Updated Paid\n </Badge>\n </TableCell>\n <TableCell>Updated UX Team</TableCell>\n <TableCell className=\"text-right\">$7,200</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"font-medium\">\n Updated Security Audit\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">\n <span\n className=\"size-1.5 rounded-full bg-red-500\"\n aria-hidden=\"true\"\n />\n Updated Failed\n </Badge>\n </TableCell>\n <TableCell>Updated Security Team</TableCell>\n <TableCell className=\"text-right\">$2,100</TableCell>\n </TableRow>\n </TableBody>\n <TableFooter>\n <TableRow>\n <TableCell colSpan={3}>Updated Total Budget</TableCell>\n <TableCell className=\"text-right font-medium\">$39,550</TableCell>\n </TableRow>\n </TableFooter>\n </Table>\n </FramePanel>\n </Frame>\n )\n}\n",
|
|
14
14
|
"type": "registry:example"
|
|
15
15
|
}
|
|
16
16
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/table-simple.tsx",
|
|
12
|
-
"content": "\"use client\"\n\nimport { faker } from \"@faker-js/faker\"\n\nimport type { ColumnDef } from \"../../../../../packages/table\"\nimport {\n TableBody,\n TableCell,\n TableColumnHeader,\n TableHead,\n TableHeader,\n TableHeaderGroup,\n TableProvider,\n TableRow,\n} from \"../../../../../packages/table\"\n\n// Seed faker to ensure consistent data between server and client\nfaker.seed(123)\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)\n\nconst statuses = [\n { id: faker.string.uuid(), name: \"Planned\", color: \"#6B7280\" },\n { id: faker.string.uuid(), name: \"In Progress\", color: \"#F59E0B\" },\n { id: faker.string.uuid(), name: \"Done\", color: \"#10B981\" },\n]\n\nconst users = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n image: faker.image.avatar(),\n }))\n\nconst exampleProducts = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleInitiatives = Array.from({ length: 2 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleReleases = Array.from({ length: 3 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleFeatures = Array.from({ length: 20 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n startAt: faker.date.past({ years: 0.5, refDate: new Date() }),\n endAt: faker.date.future({ years: 0.5, refDate: new Date() }),\n status: faker.helpers.arrayElement(statuses),\n owner: faker.helpers.arrayElement(users),\n product: faker.helpers.arrayElement(exampleProducts),\n initiative: faker.helpers.arrayElement(exampleInitiatives),\n release: faker.helpers.arrayElement(exampleReleases),\n }))\n\nconst Example = () => {\n const columns: ColumnDef<(typeof exampleFeatures)[number]>[] = [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Name\" />\n ),\n },\n {\n accessorKey: \"status\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Status\" />\n ),\n cell: ({ row }) => row.original.status.name,\n },\n {\n accessorKey: \"product\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Product\" />\n ),\n cell: ({ row }) => row.original.product.name,\n },\n {\n accessorKey: \"startAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Start At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.startAt),\n },\n {\n accessorKey: \"endAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"End At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.endAt),\n },\n {\n id: \"release\",\n accessorFn: (row) => row.release.id,\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Release\" />\n ),\n cell: ({ row }) => row.original.release.name,\n },\n ]\n\n return (\n <TableProvider columns={columns} data={exampleFeatures}>\n <TableHeader>\n {({ headerGroup }) => (\n <TableHeaderGroup headerGroup={headerGroup} key={headerGroup.id}>\n {({ header }) => <TableHead header={header} key={header.id} />}\n </TableHeaderGroup>\n )}\n </TableHeader>\n <TableBody>\n {({ row }) => (\n <TableRow key={row.id} row={row}>\n {({ cell }) => <TableCell cell={cell} key={cell.id} />}\n </TableRow>\n )}\n </TableBody>\n </TableProvider>\n )\n}\n\nexport default Example\n",
|
|
12
|
+
"content": "\"use client\"\n\nimport { faker } from \"@faker-js/faker\"\n\nimport type { ColumnDef } from \"../../../../../packages/table\"\nimport {\n TableBody,\n TableCell,\n TableColumnHeader,\n TableHead,\n TableHeader,\n TableHeaderGroup,\n TableProvider,\n TableRow,\n} from \"../../../../../packages/table\"\n\n// Seed faker to ensure consistent data between server and client\nfaker.seed(123)\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)\n\nconst statuses = [\n { id: faker.string.uuid(), name: \"Updated Planned\", color: \"#6B7280\" },\n { id: faker.string.uuid(), name: \"Updated In Progress\", color: \"#F59E0B\" },\n { id: faker.string.uuid(), name: \"Updated Done\", color: \"#10B981\" },\n]\n\nconst users = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n image: faker.image.avatar(),\n }))\n\nconst exampleProducts = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleInitiatives = Array.from({ length: 2 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleReleases = Array.from({ length: 3 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleFeatures = Array.from({ length: 20 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n startAt: faker.date.past({ years: 0.5, refDate: new Date() }),\n endAt: faker.date.future({ years: 0.5, refDate: new Date() }),\n status: faker.helpers.arrayElement(statuses),\n owner: faker.helpers.arrayElement(users),\n product: faker.helpers.arrayElement(exampleProducts),\n initiative: faker.helpers.arrayElement(exampleInitiatives),\n release: faker.helpers.arrayElement(exampleReleases),\n }))\n\nconst Example = () => {\n const columns: ColumnDef<(typeof exampleFeatures)[number]>[] = [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Name\" />\n ),\n },\n {\n accessorKey: \"status\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Status\" />\n ),\n cell: ({ row }) => row.original.status.name,\n },\n {\n accessorKey: \"product\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Product\" />\n ),\n cell: ({ row }) => row.original.product.name,\n },\n {\n accessorKey: \"startAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Start At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.startAt),\n },\n {\n accessorKey: \"endAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated End At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.endAt),\n },\n {\n id: \"release\",\n accessorFn: (row) => row.release.id,\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Release\" />\n ),\n cell: ({ row }) => row.original.release.name,\n },\n ]\n\n return (\n <TableProvider columns={columns} data={exampleFeatures}>\n <TableHeader>\n {({ headerGroup }) => (\n <TableHeaderGroup headerGroup={headerGroup} key={headerGroup.id}>\n {({ header }) => <TableHead header={header} key={header.id} />}\n </TableHeaderGroup>\n )}\n </TableHeader>\n <TableBody>\n {({ row }) => (\n <TableRow key={row.id} row={row}>\n {({ cell }) => <TableCell cell={cell} key={cell.id} />}\n </TableRow>\n )}\n </TableBody>\n </TableProvider>\n )\n}\n\nexport default Example\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
package/public/r/table.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "registry/default/examples/table.tsx",
|
|
12
|
-
"content": "\"use client\"\n\nimport { faker } from \"@faker-js/faker\"\nimport { ChevronRightIcon } from \"lucide-react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default//ui/avatar\"\n\nimport type { ColumnDef } from \"../../../../../packages/table\"\nimport {\n TableBody,\n TableCell,\n TableColumnHeader,\n TableHead,\n TableHeader,\n TableHeaderGroup,\n TableProvider,\n TableRow,\n} from \"../../../../../packages/table\"\n\n// Seed faker to ensure consistent data between server and client\nfaker.seed(123)\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)\n\nconst statuses = [\n { id: faker.string.uuid(), name: \"Planned\", color: \"#6B7280\" },\n { id: faker.string.uuid(), name: \"In Progress\", color: \"#F59E0B\" },\n { id: faker.string.uuid(), name: \"Done\", color: \"#10B981\" },\n]\n\nconst users = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n image: faker.image.avatar(),\n }))\n\nconst exampleGroups = Array.from({ length: 6 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleProducts = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleInitiatives = Array.from({ length: 2 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleReleases = Array.from({ length: 3 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleFeatures = Array.from({ length: 20 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n startAt: faker.date.past({ years: 0.5, refDate: new Date() }),\n endAt: faker.date.future({ years: 0.5, refDate: new Date() }),\n status: faker.helpers.arrayElement(statuses),\n owner: faker.helpers.arrayElement(users),\n group: faker.helpers.arrayElement(exampleGroups),\n product: faker.helpers.arrayElement(exampleProducts),\n initiative: faker.helpers.arrayElement(exampleInitiatives),\n release: faker.helpers.arrayElement(exampleReleases),\n }))\n\nconst Example = () => {\n const columns: ColumnDef<(typeof exampleFeatures)[number]>[] = [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Name\" />\n ),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <Avatar className=\"size-6\">\n <AvatarImage src={row.original.owner.image} />\n <AvatarFallback>\n {row.original.owner.name?.slice(0, 2)}\n </AvatarFallback>\n </Avatar>\n <div\n className=\"absolute right-0 bottom-0 h-2 w-2 rounded-full ring-2 ring-background\"\n style={{\n backgroundColor: row.original.status.color,\n }}\n />\n </div>\n <div>\n <span className=\"font-medium\">{row.original.name}</span>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>{row.original.product.name}</span>\n <ChevronRightIcon size={12} />\n <span>{row.original.group.name}</span>\n </div>\n </div>\n </div>\n ),\n },\n {\n accessorKey: \"startAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Start At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.startAt),\n },\n {\n accessorKey: \"endAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"End At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.endAt),\n },\n {\n id: \"release\",\n accessorFn: (row) => row.release.id,\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Release\" />\n ),\n cell: ({ row }) => row.original.release.name,\n },\n ]\n\n return (\n <TableProvider columns={columns} data={exampleFeatures}>\n <TableHeader>\n {({ headerGroup }) => (\n <TableHeaderGroup headerGroup={headerGroup} key={headerGroup.id}>\n {({ header }) => <TableHead header={header} key={header.id} />}\n </TableHeaderGroup>\n )}\n </TableHeader>\n <TableBody>\n {({ row }) => (\n <TableRow key={row.id} row={row}>\n {({ cell }) => <TableCell cell={cell} key={cell.id} />}\n </TableRow>\n )}\n </TableBody>\n </TableProvider>\n )\n}\n\nexport default Example\n",
|
|
12
|
+
"content": "\"use client\"\n\nimport { faker } from \"@faker-js/faker\"\nimport { ChevronRightIcon } from \"lucide-react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/default//ui/avatar\"\n\nimport type { ColumnDef } from \"../../../../../packages/table\"\nimport {\n TableBody,\n TableCell,\n TableColumnHeader,\n TableHead,\n TableHeader,\n TableHeaderGroup,\n TableProvider,\n TableRow,\n} from \"../../../../../packages/table\"\n\n// Seed faker to ensure consistent data between server and client\nfaker.seed(123)\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)\n\nconst statuses = [\n { id: faker.string.uuid(), name: \"Updated Planned\", color: \"#6B7280\" },\n { id: faker.string.uuid(), name: \"Updated In Progress\", color: \"#F59E0B\" },\n { id: faker.string.uuid(), name: \"Updated Done\", color: \"#10B981\" },\n]\n\nconst users = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n image: faker.image.avatar(),\n }))\n\nconst exampleGroups = Array.from({ length: 6 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleProducts = Array.from({ length: 4 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleInitiatives = Array.from({ length: 2 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleReleases = Array.from({ length: 3 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n }))\n\nconst exampleFeatures = Array.from({ length: 20 })\n .fill(null)\n .map(() => ({\n id: faker.string.uuid(),\n name: capitalize(faker.company.buzzPhrase()),\n startAt: faker.date.past({ years: 0.5, refDate: new Date() }),\n endAt: faker.date.future({ years: 0.5, refDate: new Date() }),\n status: faker.helpers.arrayElement(statuses),\n owner: faker.helpers.arrayElement(users),\n group: faker.helpers.arrayElement(exampleGroups),\n product: faker.helpers.arrayElement(exampleProducts),\n initiative: faker.helpers.arrayElement(exampleInitiatives),\n release: faker.helpers.arrayElement(exampleReleases),\n }))\n\nconst Example = () => {\n const columns: ColumnDef<(typeof exampleFeatures)[number]>[] = [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Name\" />\n ),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <Avatar className=\"size-6\">\n <AvatarImage src={row.original.owner.image} />\n <AvatarFallback>\n {row.original.owner.name?.slice(0, 2)}\n </AvatarFallback>\n </Avatar>\n <div\n className=\"absolute right-0 bottom-0 h-2 w-2 rounded-full ring-2 ring-background\"\n style={{\n backgroundColor: row.original.status.color,\n }}\n />\n </div>\n <div>\n <span className=\"font-medium\">{row.original.name}</span>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>{row.original.product.name}</span>\n <ChevronRightIcon size={12} />\n <span>{row.original.group.name}</span>\n </div>\n </div>\n </div>\n ),\n },\n {\n accessorKey: \"startAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Start At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.startAt),\n },\n {\n accessorKey: \"endAt\",\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated End At\" />\n ),\n cell: ({ row }) =>\n new Intl.DateTimeFormat(\"en-US\", {\n dateStyle: \"medium\",\n }).format(row.original.endAt),\n },\n {\n id: \"release\",\n accessorFn: (row) => row.release.id,\n header: ({ column }) => (\n <TableColumnHeader column={column} title=\"Updated Release\" />\n ),\n cell: ({ row }) => row.original.release.name,\n },\n ]\n\n return (\n <TableProvider columns={columns} data={exampleFeatures}>\n <TableHeader>\n {({ headerGroup }) => (\n <TableHeaderGroup headerGroup={headerGroup} key={headerGroup.id}>\n {({ header }) => <TableHead header={header} key={header.id} />}\n </TableHeaderGroup>\n )}\n </TableHeader>\n <TableBody>\n {({ row }) => (\n <TableRow key={row.id} row={row}>\n {({ cell }) => <TableCell cell={cell} key={cell.id} />}\n </TableRow>\n )}\n </TableBody>\n </TableProvider>\n )\n}\n\nexport default Example\n",
|
|
13
13
|
"type": "registry:example"
|
|
14
14
|
}
|
|
15
15
|
],
|
package/public/r/tabs-demo.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tabs-demo.tsx",
|
|
11
|
-
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsDemo() {\n return (\n <Tabs defaultValue=\"tab-1\">\n <TabsList>\n <TabsTab value=\"tab-1\">Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Tab 3</TabsTab>\n </TabsList>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
11
|
+
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsDemo() {\n return (\n <Tabs defaultValue=\"tab-1\">\n <TabsList>\n <TabsTab value=\"tab-1\">Updated Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Updated Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Updated Tab 3</TabsTab>\n </TabsList>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tabs-underline-vertical.tsx",
|
|
11
|
-
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsUnderlineVertical() {\n return (\n <Tabs\n defaultValue=\"tab-1\"\n orientation=\"vertical\"\n className=\"w-full flex-row\"\n >\n <div className=\"border-s\">\n <TabsList variant=\"underline\">\n <TabsTab value=\"tab-1\">Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Tab 3</TabsTab>\n </TabsList>\n </div>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
11
|
+
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsUnderlineVertical() {\n return (\n <Tabs\n defaultValue=\"tab-1\"\n orientation=\"vertical\"\n className=\"w-full flex-row\"\n >\n <div className=\"border-s\">\n <TabsList variant=\"underline\">\n <TabsTab value=\"tab-1\">Updated Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Updated Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Updated Tab 3</TabsTab>\n </TabsList>\n </div>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tabs-underline.tsx",
|
|
11
|
-
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsUnderline() {\n return (\n <Tabs defaultValue=\"tab-1\">\n <div className=\"border-b\">\n <TabsList variant=\"underline\">\n <TabsTab value=\"tab-1\">Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Tab 3</TabsTab>\n </TabsList>\n </div>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
11
|
+
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsUnderline() {\n return (\n <Tabs defaultValue=\"tab-1\">\n <div className=\"border-b\">\n <TabsList variant=\"underline\">\n <TabsTab value=\"tab-1\">Updated Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Updated Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Updated Tab 3</TabsTab>\n </TabsList>\n </div>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tabs-vertical.tsx",
|
|
11
|
-
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsVertical() {\n return (\n <Tabs defaultValue=\"tab-1\" orientation=\"vertical\" className=\"w-full\">\n <TabsList>\n <TabsTab value=\"tab-1\">Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Tab 3</TabsTab>\n </TabsList>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
11
|
+
"content": "import { Tabs, TabsList, TabsPanel, TabsTab } from \"@/registry/default/ui/tabs\"\n\nexport default function TabsVertical() {\n return (\n <Tabs defaultValue=\"tab-1\" orientation=\"vertical\" className=\"w-full\">\n <TabsList>\n <TabsTab value=\"tab-1\">Updated Tab 1</TabsTab>\n <TabsTab value=\"tab-2\">Updated Tab 2</TabsTab>\n <TabsTab value=\"tab-3\">Updated Tab 3</TabsTab>\n </TabsList>\n <TabsPanel value=\"tab-1\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 1 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-2\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 2 content\n </p>\n </TabsPanel>\n <TabsPanel value=\"tab-3\">\n <p className=\"p-4 text-center text-xs text-muted-foreground\">\n Updated Tab 3 content\n </p>\n </TabsPanel>\n </Tabs>\n )\n}\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tags-create.tsx",
|
|
11
|
-
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { CheckIcon, PlusIcon } from \"lucide-react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst defaultTags = [\n { id: \"react\", label: \"React\" },\n { id: \"typescript\", label: \"TypeScript\" },\n { id: \"javascript\", label: \"JavaScript\" },\n { id: \"nextjs\", label: \"Next.js\" },\n { id: \"vuejs\", label: \"Vue.js\" },\n { id: \"angular\", label: \"Angular\" },\n { id: \"svelte\", label: \"Svelte\" },\n { id: \"nodejs\", label: \"Node.js\" },\n { id: \"python\", label: \"Python\" },\n { id: \"ruby\", label: \"Ruby\" },\n { id: \"java\", label: \"Java\" },\n { id: \"csharp\", label: \"C#\" },\n { id: \"php\", label: \"PHP\" },\n { id: \"go\", label: \"Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n const [newTag, setNewTag] = useState<string>(\"\")\n const [tags, setTags] = useState<{ id: string; label: string }[]>(defaultTags)\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n const handleCreateTag = () => {\n console.log(`created: ${newTag}`)\n\n setTags((prev) => [\n ...prev,\n {\n id: newTag,\n label: newTag,\n },\n ])\n setSelected((prev) => [...prev, newTag])\n setNewTag(\"\")\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput
|
|
11
|
+
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { CheckIcon, PlusIcon } from \"lucide-react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst defaultTags = [\n { id: \"react\", label: \"Updated React\" },\n { id: \"typescript\", label: \"Updated TypeScript\" },\n { id: \"javascript\", label: \"Updated JavaScript\" },\n { id: \"nextjs\", label: \"Updated Next.js\" },\n { id: \"vuejs\", label: \"Updated Vue.js\" },\n { id: \"angular\", label: \"Updated Angular\" },\n { id: \"svelte\", label: \"Updated Svelte\" },\n { id: \"nodejs\", label: \"Updated Node.js\" },\n { id: \"python\", label: \"Updated Python\" },\n { id: \"ruby\", label: \"Updated Ruby\" },\n { id: \"java\", label: \"Updated Java\" },\n { id: \"csharp\", label: \"Updated C#\" },\n { id: \"php\", label: \"Updated PHP\" },\n { id: \"go\", label: \"Updated Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n const [newTag, setNewTag] = useState<string>(\"\")\n const [tags, setTags] = useState<{ id: string; label: string }[]>(defaultTags)\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n const handleCreateTag = () => {\n console.log(`created: ${newTag}`)\n\n setTags((prev) => [\n ...prev,\n {\n id: newTag,\n label: newTag,\n },\n ])\n setSelected((prev) => [...prev, newTag])\n setNewTag(\"\")\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput\n onValueChange={setNewTag}\n placeholder=\"Updated Search tag...\"\n />\n <TagsList>\n <TagsEmpty>\n <button\n className=\"mx-auto flex cursor-pointer items-center gap-2\"\n onClick={handleCreateTag}\n type=\"button\"\n >\n <PlusIcon className=\"text-muted-foreground\" size={14} />\n Updated Create new tag: {newTag}\n </button>\n </TagsEmpty>\n <TagsGroup>\n {tags.map((tag) => (\n <TagsItem key={tag.id} onSelect={handleSelect} value={tag.id}>\n {tag.label}\n {selected.includes(tag.id) && (\n <CheckIcon className=\"text-muted-foreground\" size={14} />\n )}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n )\n}\n\nexport default Example\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tags-filter.tsx",
|
|
11
|
-
"content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst defaultTags = [\n { id: \"react\", label: \"React\" },\n { id: \"typescript\", label: \"TypeScript\" },\n { id: \"javascript\", label: \"JavaScript\" },\n { id: \"nextjs\", label: \"Next.js\" },\n { id: \"vuejs\", label: \"Vue.js\" },\n { id: \"angular\", label: \"Angular\" },\n { id: \"svelte\", label: \"Svelte\" },\n { id: \"nodejs\", label: \"Node.js\" },\n { id: \"python\", label: \"Python\" },\n { id: \"ruby\", label: \"Ruby\" },\n { id: \"java\", label: \"Java\" },\n { id: \"csharp\", label: \"C#\" },\n { id: \"php\", label: \"PHP\" },\n { id: \"go\", label: \"Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n const [newTag, setNewTag] = useState<string>(\"\")\n const [tags, setTags] = useState<{ id: string; label: string }[]>(defaultTags)\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput
|
|
11
|
+
"content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst defaultTags = [\n { id: \"react\", label: \"Updated React\" },\n { id: \"typescript\", label: \"Updated TypeScript\" },\n { id: \"javascript\", label: \"Updated JavaScript\" },\n { id: \"nextjs\", label: \"Updated Next.js\" },\n { id: \"vuejs\", label: \"Updated Vue.js\" },\n { id: \"angular\", label: \"Updated Angular\" },\n { id: \"svelte\", label: \"Updated Svelte\" },\n { id: \"nodejs\", label: \"Updated Node.js\" },\n { id: \"python\", label: \"Updated Python\" },\n { id: \"ruby\", label: \"Updated Ruby\" },\n { id: \"java\", label: \"Updated Java\" },\n { id: \"csharp\", label: \"Updated C#\" },\n { id: \"php\", label: \"Updated PHP\" },\n { id: \"go\", label: \"Updated Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n const [newTag, setNewTag] = useState<string>(\"\")\n const [tags, setTags] = useState<{ id: string; label: string }[]>(defaultTags)\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput\n onValueChange={setNewTag}\n placeholder=\"Updated Search tag...\"\n />\n <TagsList>\n <TagsEmpty />\n <TagsGroup>\n {tags\n .filter((tag) => !selected.includes(tag.id))\n .map((tag) => (\n <TagsItem key={tag.id} onSelect={handleSelect} value={tag.id}>\n {tag.label}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n )\n}\n\nexport default Example\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
package/public/r/tags.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
{
|
|
10
10
|
"path": "registry/default/examples/tags.tsx",
|
|
11
|
-
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst tags = [\n { id: \"react\", label: \"React\" },\n { id: \"typescript\", label: \"TypeScript\" },\n { id: \"javascript\", label: \"JavaScript\" },\n { id: \"nextjs\", label: \"Next.js\" },\n { id: \"vuejs\", label: \"Vue.js\" },\n { id: \"angular\", label: \"Angular\" },\n { id: \"svelte\", label: \"Svelte\" },\n { id: \"nodejs\", label: \"Node.js\" },\n { id: \"python\", label: \"Python\" },\n { id: \"ruby\", label: \"Ruby\" },\n { id: \"java\", label: \"Java\" },\n { id: \"csharp\", label: \"C#\" },\n { id: \"php\", label: \"PHP\" },\n { id: \"go\", label: \"Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput placeholder=\"Search tag...\" />\n <TagsList>\n <TagsEmpty />\n <TagsGroup>\n {tags.map((tag) => (\n <TagsItem key={tag.id} onSelect={handleSelect} value={tag.id}>\n {tag.label}\n {selected.includes(tag.id) && (\n <CheckIcon className=\"text-muted-foreground\" size={14} />\n )}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n )\n}\n\nexport default Example\n",
|
|
11
|
+
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from \"../../../../../packages/tags\"\n\nconst tags = [\n { id: \"react\", label: \"Updated React\" },\n { id: \"typescript\", label: \"Updated TypeScript\" },\n { id: \"javascript\", label: \"Updated JavaScript\" },\n { id: \"nextjs\", label: \"Updated Next.js\" },\n { id: \"vuejs\", label: \"Updated Vue.js\" },\n { id: \"angular\", label: \"Updated Angular\" },\n { id: \"svelte\", label: \"Updated Svelte\" },\n { id: \"nodejs\", label: \"Updated Node.js\" },\n { id: \"python\", label: \"Updated Python\" },\n { id: \"ruby\", label: \"Updated Ruby\" },\n { id: \"java\", label: \"Updated Java\" },\n { id: \"csharp\", label: \"Updated C#\" },\n { id: \"php\", label: \"Updated PHP\" },\n { id: \"go\", label: \"Updated Go\" },\n]\n\nconst Example = () => {\n const [selected, setSelected] = useState<string[]>([])\n\n const handleRemove = (value: string) => {\n if (!selected.includes(value)) {\n return\n }\n\n console.log(`removed: ${value}`)\n setSelected((prev) => prev.filter((v) => v !== value))\n }\n\n const handleSelect = (value: string) => {\n if (selected.includes(value)) {\n handleRemove(value)\n return\n }\n\n console.log(`selected: ${value}`)\n setSelected((prev) => [...prev, value])\n }\n\n return (\n <Tags className=\"max-w-[300px]\">\n <TagsTrigger>\n {selected.map((tag) => (\n <TagsValue key={tag} onRemove={() => handleRemove(tag)}>\n {tags.find((t) => t.id === tag)?.label}\n </TagsValue>\n ))}\n </TagsTrigger>\n <TagsContent>\n <TagsInput placeholder=\"Updated Search tag...\" />\n <TagsList>\n <TagsEmpty />\n <TagsGroup>\n {tags.map((tag) => (\n <TagsItem key={tag.id} onSelect={handleSelect} value={tag.id}>\n {tag.label}\n {selected.includes(tag.id) && (\n <CheckIcon className=\"text-muted-foreground\" size={14} />\n )}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n )\n}\n\nexport default Example\n",
|
|
12
12
|
"type": "registry:example"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "template-auth-eight",
|
|
4
|
+
"type": "registry:block",
|
|
5
|
+
"title": "auth/eight",
|
|
6
|
+
"description": "Page template \"auth/eight\"",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "registry/page-templates/default/templates/auth/eight/app/page.tsx",
|
|
10
|
+
"type": "registry:page",
|
|
11
|
+
"target": "components/page-templates/auth/eight/app/page.tsx",
|
|
12
|
+
"content": "import Link from \"next/link\"\nimport { Button } from \"@/ui/button\"\nimport { Input } from \"@/ui/input\"\nimport { Label } from \"@/ui/label\"\n\nexport default function SignUp() {\n return (\n <section className=\"flex min-h-screen bg-background px-4 py-16 md:py-24\">\n <div className=\"m-auto w-full max-w-sm rounded-2xl border bg-muted p-8\">\n <div>\n <h1 className=\"mt-6 text-2xl font-medium\">Get started</h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Create your account in seconds\n </p>\n </div>\n\n <form action=\"\" className=\"mt-8 space-y-5\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-sm\">\n Email\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n\n <Button className=\"w-full\">Continue with Email</Button>\n </form>\n\n <div className=\"my-6 flex items-center gap-3\">\n <hr className=\"flex-1\" />\n <span className=\"text-xs text-muted-foreground\">or</span>\n <hr className=\"flex-1\" />\n </div>\n\n <div className=\"space-y-2\">\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 262\"\n >\n <path\n fill=\"#4285f4\"\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n ></path>\n <path\n fill=\"#34a853\"\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n ></path>\n <path\n fill=\"#fbbc05\"\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n ></path>\n <path\n fill=\"#eb4335\"\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n ></path>\n </svg>\n <span>Continue with Google</span>\n </Button>\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 256\"\n >\n <path\n fill=\"currentColor\"\n d=\"M128 0C57.317 0 0 57.317 0 128c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.117-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128C256 57.317 198.683 0 128 0\"\n />\n </svg>\n <span>Continue with GitHub</span>\n </Button>\n </div>\n\n <p className=\"mt-8 text-center text-sm text-muted-foreground\">\n Already have an account?{\" \"}\n <Link href=\"#\" className=\"font-medium text-primary hover:underline\">\n Sign in\n </Link>\n </p>\n </div>\n </section>\n )\n}\n"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"categories": [
|
|
16
|
+
"page-template",
|
|
17
|
+
"auth"
|
|
18
|
+
],
|
|
19
|
+
"registryDependencies": [
|
|
20
|
+
"https://www.loveui.dev/r/button.json",
|
|
21
|
+
"https://www.loveui.dev/r/input.json",
|
|
22
|
+
"https://www.loveui.dev/r/label.json"
|
|
23
|
+
],
|
|
24
|
+
"meta": {
|
|
25
|
+
"source": "page-template",
|
|
26
|
+
"templatePath": "auth/eight"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "template-auth-five",
|
|
4
|
+
"type": "registry:block",
|
|
5
|
+
"title": "auth/five",
|
|
6
|
+
"description": "Page template \"auth/five\"",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "registry/page-templates/default/templates/auth/five/app/page.tsx",
|
|
10
|
+
"type": "registry:page",
|
|
11
|
+
"target": "components/page-templates/auth/five/app/page.tsx",
|
|
12
|
+
"content": "import Link from \"next/link\"\nimport { Button } from \"@/ui/button\"\nimport { Input } from \"@/ui/input\"\nimport { Label } from \"@/ui/label\"\n\nexport default function Login() {\n return (\n <section className=\"flex min-h-screen bg-background px-4 py-16 md:py-24\">\n <div className=\"m-auto w-full max-w-sm rounded-2xl border bg-muted p-8\">\n <div>\n <h1 className=\"mt-6 text-2xl font-medium\">Sign in</h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Enter your email to continue\n </p>\n </div>\n\n <form action=\"\" className=\"mt-8 space-y-5\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-sm\">\n Email\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n\n <Button className=\"w-full\">Continue with Email</Button>\n </form>\n\n <div className=\"my-6 flex items-center gap-3\">\n <hr className=\"flex-1\" />\n <span className=\"text-xs text-muted-foreground\">or</span>\n <hr className=\"flex-1\" />\n </div>\n\n <div className=\"space-y-2\">\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 262\"\n >\n <path\n fill=\"#4285f4\"\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n ></path>\n <path\n fill=\"#34a853\"\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n ></path>\n <path\n fill=\"#fbbc05\"\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n ></path>\n <path\n fill=\"#eb4335\"\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n ></path>\n </svg>\n <span>Continue with Google</span>\n </Button>\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 256\"\n >\n <path\n fill=\"currentColor\"\n d=\"M128 0C57.317 0 0 57.317 0 128c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.117-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128C256 57.317 198.683 0 128 0\"\n />\n </svg>\n <span>Continue with GitHub</span>\n </Button>\n </div>\n\n <p className=\"mt-8 text-center text-sm text-muted-foreground\">\n Don't have an account?{\" \"}\n <Link href=\"#\" className=\"font-medium text-primary hover:underline\">\n Sign up\n </Link>\n </p>\n </div>\n </section>\n )\n}\n"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"categories": [
|
|
16
|
+
"page-template",
|
|
17
|
+
"auth"
|
|
18
|
+
],
|
|
19
|
+
"registryDependencies": [
|
|
20
|
+
"https://www.loveui.dev/r/button.json",
|
|
21
|
+
"https://www.loveui.dev/r/input.json",
|
|
22
|
+
"https://www.loveui.dev/r/label.json"
|
|
23
|
+
],
|
|
24
|
+
"meta": {
|
|
25
|
+
"source": "page-template",
|
|
26
|
+
"templatePath": "auth/five"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "template-auth-four",
|
|
4
|
+
"type": "registry:block",
|
|
5
|
+
"title": "auth/four",
|
|
6
|
+
"description": "Page template \"auth/four\"",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "registry/page-templates/default/templates/auth/four/app/page.tsx",
|
|
10
|
+
"type": "registry:page",
|
|
11
|
+
"target": "components/page-templates/auth/four/app/page.tsx",
|
|
12
|
+
"content": "import Link from \"next/link\"\nimport { Button } from \"@/ui/button\"\nimport { Card } from \"@/ui/card\"\nimport { Input } from \"@/ui/input\"\nimport { Label } from \"@/ui/label\"\n\nexport default function Login() {\n return (\n <section className=\"flex grid min-h-screen grid-rows-[auto_1fr] bg-background px-4 py-16 md:py-24\">\n <div className=\"m-auto w-full max-w-sm\">\n <div className=\"text-center\">\n <h1 className=\"text-4xl font-medium\">Welcome back</h1>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Sign in to your account to continue\n </p>\n </div>\n <Card variant=\"outline\" className=\"mt-6 p-8\">\n <form action=\"\" className=\"space-y-5\">\n <div className=\"space-y-3\">\n <Label htmlFor=\"email\" className=\"text-sm\">\n Email\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"password\" className=\"text-sm\">\n Password\n </Label>\n <Link\n href=\"#\"\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Forgot password?\n </Link>\n </div>\n <Input type=\"password\" id=\"password\" name=\"password\" required />\n </div>\n\n <Button className=\"w-full\">Sign In</Button>\n </form>\n\n <div className=\"my-6 flex items-center gap-3\">\n <hr className=\"flex-1\" />\n <span className=\"text-xs text-muted-foreground\">\n or continue with\n </span>\n <hr className=\"flex-1\" />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <Button type=\"button\" variant=\"outline\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 262\"\n >\n <path\n fill=\"#4285f4\"\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n ></path>\n <path\n fill=\"#34a853\"\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n ></path>\n <path\n fill=\"#fbbc05\"\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n ></path>\n <path\n fill=\"#eb4335\"\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n ></path>\n </svg>\n <span>Google</span>\n </Button>\n <Button type=\"button\" variant=\"outline\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 256\"\n >\n <path\n fill=\"currentColor\"\n d=\"M128 0C57.317 0 0 57.317 0 128c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.117-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128C256 57.317 198.683 0 128 0\"\n />\n </svg>\n <span>GitHub</span>\n </Button>\n </div>\n </Card>\n\n <p className=\"mt-6 text-center text-sm text-muted-foreground\">\n Don't have an account?{\" \"}\n <Link href=\"#\" className=\"font-medium text-primary hover:underline\">\n Sign up\n </Link>\n </p>\n </div>\n </section>\n )\n}\n"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"categories": [
|
|
16
|
+
"page-template",
|
|
17
|
+
"auth"
|
|
18
|
+
],
|
|
19
|
+
"registryDependencies": [
|
|
20
|
+
"https://www.loveui.dev/r/button.json",
|
|
21
|
+
"https://www.loveui.dev/r/card.json",
|
|
22
|
+
"https://www.loveui.dev/r/input.json",
|
|
23
|
+
"https://www.loveui.dev/r/label.json"
|
|
24
|
+
],
|
|
25
|
+
"meta": {
|
|
26
|
+
"source": "page-template",
|
|
27
|
+
"templatePath": "auth/four"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "template-auth-nine",
|
|
4
|
+
"type": "registry:block",
|
|
5
|
+
"title": "auth/nine",
|
|
6
|
+
"description": "Page template \"auth/nine\"",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "registry/page-templates/default/templates/auth/nine/app/page.tsx",
|
|
10
|
+
"type": "registry:page",
|
|
11
|
+
"target": "components/page-templates/auth/nine/app/page.tsx",
|
|
12
|
+
"content": "import Link from \"next/link\"\nimport { Button } from \"@/ui/button\"\nimport { Input } from \"@/ui/input\"\nimport { Label } from \"@/ui/label\"\n\nexport default function SignUp() {\n return (\n <section className=\"flex min-h-screen bg-background px-4 py-16 md:py-24\">\n <div className=\"m-auto w-full max-w-xs\">\n <div className=\"text-center\">\n <h1 className=\"mt-3 text-4xl font-medium\">Sign up</h1>\n </div>\n\n <form action=\"\" className=\"mt-12 space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-sm\">\n Email\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"password\" className=\"text-sm\">\n Password\n </Label>\n <Input type=\"password\" id=\"password\" name=\"password\" required />\n </div>\n\n <Button className=\"w-full\">Continue</Button>\n </form>\n\n <div className=\"mt-6 space-y-3 border-t pt-6\">\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 262\"\n >\n <path\n fill=\"#4285f4\"\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n ></path>\n <path\n fill=\"#34a853\"\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n ></path>\n <path\n fill=\"#fbbc05\"\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n ></path>\n <path\n fill=\"#eb4335\"\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n ></path>\n </svg>\n <span>Google</span>\n </Button>\n <Button type=\"button\" variant=\"outline\" className=\"w-full\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"size-4\"\n viewBox=\"0 0 256 256\"\n >\n <path\n fill=\"currentColor\"\n d=\"M128 0C57.317 0 0 57.317 0 128c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.117-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128C256 57.317 198.683 0 128 0\"\n />\n </svg>\n <span>GitHub</span>\n </Button>\n </div>\n\n <p className=\"mt-6 text-center text-sm text-muted-foreground\">\n Already have an account?{\" \"}\n <Link href=\"#\" className=\"font-medium text-primary hover:underline\">\n Sign in\n </Link>\n </p>\n </div>\n </section>\n )\n}\n"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"categories": [
|
|
16
|
+
"page-template",
|
|
17
|
+
"auth"
|
|
18
|
+
],
|
|
19
|
+
"registryDependencies": [
|
|
20
|
+
"https://www.loveui.dev/r/button.json",
|
|
21
|
+
"https://www.loveui.dev/r/input.json",
|
|
22
|
+
"https://www.loveui.dev/r/label.json"
|
|
23
|
+
],
|
|
24
|
+
"meta": {
|
|
25
|
+
"source": "page-template",
|
|
26
|
+
"templatePath": "auth/nine"
|
|
27
|
+
}
|
|
28
|
+
}
|