basuicn 0.1.0

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.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
package/dist/icons.svg ADDED
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <symbol id="bluesky-icon" viewBox="0 0 16 17">
3
+ <g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
4
+ <defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
5
+ </symbol>
6
+ <symbol id="discord-icon" viewBox="0 0 20 19">
7
+ <path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
8
+ </symbol>
9
+ <symbol id="documentation-icon" viewBox="0 0 21 20">
10
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
11
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
12
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
13
+ </symbol>
14
+ <symbol id="github-icon" viewBox="0 0 19 19">
15
+ <path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
16
+ </symbol>
17
+ <symbol id="social-icon" viewBox="0 0 20 20">
18
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
19
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
20
+ </symbol>
21
+ <symbol id="x-icon" viewBox="0 0 19 19">
22
+ <path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
23
+ </symbol>
24
+ </svg>
@@ -0,0 +1,13 @@
1
+ <html lang="en">
2
+ <head>
3
+ <meta charset="UTF-8" />
4
+ <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>ui_lib</title>
7
+ <script type="module" crossorigin src="./assets/index-BsQ6nn74.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-1YAQdTE0.css">
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
package/dist/ui-cli.js ADDED
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env node
2
+
3
+ // scripts/ui-cli.ts
4
+ import fs from "fs";
5
+ import path from "path";
6
+ import { execSync } from "child_process";
7
+ var REGISTRY_LOCAL = "./registry.json";
8
+ var REGISTRY_REMOTE = "https://raw.githubusercontent.com/huy14032003/ui-component/main/registry.json";
9
+ var log = (msg) => console.log(`[BASE-CUS-UI] ${msg}`);
10
+ var error = (msg) => console.error(`[BASE-CUS-UI] ERROR: ${msg}`);
11
+ var getTargetProjectDir = () => process.cwd();
12
+ var getRegistry = async (isLocal) => {
13
+ if (isLocal && fs.existsSync(REGISTRY_LOCAL)) {
14
+ log("S\u1EED d\u1EE5ng Registry n\u1ED9i b\u1ED9...");
15
+ return JSON.parse(fs.readFileSync(REGISTRY_LOCAL, "utf-8"));
16
+ }
17
+ log("\u0110ang t\u1EA3i Registry t\u1EEB m\xE1y ch\u1EE7 t\u1EEB xa...");
18
+ try {
19
+ const response = await fetch(REGISTRY_REMOTE);
20
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
21
+ return await response.json();
22
+ } catch (err) {
23
+ if (isLocal) {
24
+ error(`Kh\xF4ng t\xECm th\u1EA5y registry.json n\u1ED9i b\u1ED9 v\xE0 kh\xF4ng th\u1EC3 t\u1EA3i t\u1EEB xa: ${err.message}`);
25
+ } else {
26
+ error(`Kh\xF4ng th\u1EC3 t\u1EA3i Registry t\u1EEB GitHub: ${err.message}. H\xE3y ki\u1EC3m tra k\u1EBFt n\u1ED1i m\u1EA1ng.`);
27
+ }
28
+ process.exit(1);
29
+ }
30
+ };
31
+ var installNpmPackages = (packages, cwd) => {
32
+ if (packages.length === 0) return;
33
+ const pkgJsonPath = path.join(cwd, "package.json");
34
+ let toInstall = packages;
35
+ if (fs.existsSync(pkgJsonPath)) {
36
+ const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
37
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
38
+ toInstall = packages.filter((p) => !allDeps[p]);
39
+ }
40
+ if (toInstall.length === 0) return;
41
+ log(`\u0110ang c\xE0i \u0111\u1EB7t c\xE1c g\xF3i npm: ${toInstall.join(", ")}...`);
42
+ try {
43
+ execSync(`npm install ${toInstall.join(" ")} --save`, { stdio: "inherit", cwd });
44
+ } catch (err) {
45
+ error("L\u1ED7i khi c\xE0i \u0111\u1EB7t c\xE1c g\xF3i npm.");
46
+ }
47
+ };
48
+ var ensureCore = (registry, cwd) => {
49
+ const core = registry.core;
50
+ if (!core) return;
51
+ installNpmPackages(core.dependencies, cwd);
52
+ core.files.forEach((file) => {
53
+ const targetPath = path.join(cwd, file.path);
54
+ const targetDir = path.dirname(targetPath);
55
+ if (!fs.existsSync(targetDir)) {
56
+ fs.mkdirSync(targetDir, { recursive: true });
57
+ }
58
+ if (!fs.existsSync(targetPath)) {
59
+ fs.writeFileSync(targetPath, file.content);
60
+ log(`\u0110\xE3 kh\u1EDFi t\u1EA1o file h\u1EC7 th\u1ED1ng: ${file.path}`);
61
+ }
62
+ });
63
+ };
64
+ var addComponent = (name, registry, cwd, added = /* @__PURE__ */ new Set()) => {
65
+ if (added.has(name)) return;
66
+ added.add(name);
67
+ const component = registry.components[name];
68
+ if (!component) {
69
+ error(`Component "${name}" kh\xF4ng t\u1ED3n t\u1EA1i trong danh s\xE1ch.`);
70
+ return;
71
+ }
72
+ log(`\u0110ang th\xEAm component: ${name}...`);
73
+ ensureCore(registry, cwd);
74
+ installNpmPackages(component.dependencies, cwd);
75
+ if (component.internalDependencies) {
76
+ component.internalDependencies.forEach((dep) => {
77
+ if (registry.components[dep]) {
78
+ addComponent(dep, registry, cwd, added);
79
+ }
80
+ });
81
+ }
82
+ component.files.forEach((file) => {
83
+ const targetPath = path.join(cwd, file.path);
84
+ const targetDir = path.dirname(targetPath);
85
+ if (!fs.existsSync(targetDir)) {
86
+ fs.mkdirSync(targetDir, { recursive: true });
87
+ }
88
+ if (fs.existsSync(targetPath)) {
89
+ return;
90
+ }
91
+ fs.writeFileSync(targetPath, file.content);
92
+ log(`\u0110\xE3 t\u1EA1o: ${file.path}`);
93
+ });
94
+ };
95
+ var main = async () => {
96
+ const args = process.argv.slice(2);
97
+ const isLocal = args.includes("--local");
98
+ const command = args.find((a) => !a.startsWith("--"));
99
+ const componentNames = args.filter((a) => a !== command && !a.startsWith("--"));
100
+ const cwd = getTargetProjectDir();
101
+ const registry = await getRegistry(isLocal);
102
+ if (command === "add") {
103
+ if (componentNames.length === 0) {
104
+ error("S\u1EED d\u1EE5ng: npx base-cus-ui add <t\xEAn-component>");
105
+ return;
106
+ }
107
+ for (const name of componentNames) {
108
+ addComponent(name, registry, cwd);
109
+ }
110
+ log("T\u1EA5t c\u1EA3 component \u0111\xE3 \u0111\u01B0\u1EE3c th\xEAm th\xE0nh c\xF4ng!");
111
+ } else if (command === "list") {
112
+ log("Danh s\xE1ch component c\xF3 s\u1EB5n:");
113
+ Object.keys(registry.components).forEach((k) => console.log(` - ${k}`));
114
+ } else if (command === "init") {
115
+ ensureCore(registry, cwd);
116
+ log("Kh\u1EDFi t\u1EA1o ho\xE0n t\u1EA5t.");
117
+ } else if (command === "tailwind") {
118
+ console.log("\n--- SAO CH\xC9P V\xC0O tailwind.config.ts / tailwind.config.js ---\n");
119
+ console.log("// Xem trong README_CLI.md \u0111\u1EC3 bi\u1EBFt chi ti\u1EBFt c\u1EA5u h\xECnh");
120
+ } else {
121
+ log("Ch\xE0o m\u1EEBng \u0111\u1EBFn v\u1EDBi BASE-CUS-UI. C\xE1c l\u1EC7nh h\u1ED7 tr\u1EE3: init, add, list, tailwind.");
122
+ }
123
+ };
124
+ main();
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "basuicn",
3
+ "private": false,
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "bin": {
7
+ "basuicn": "./dist/ui-cli.cjs"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "registry.json",
12
+ "scripts",
13
+ "README_CLI.md"
14
+ ],
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "build": "tsc -b && vite build",
18
+ "build:cli": "npx -y esbuild scripts/ui-cli.ts --bundle --platform=node --outfile=dist/ui-cli.cjs --format=cjs --packages=external",
19
+ "lint": "eslint .",
20
+ "preview": "vite preview",
21
+ "test": "vitest",
22
+ "test:ui": "vitest --ui",
23
+ "test:coverage": "vitest run --coverage",
24
+ "registry:build": "npx -y tsx scripts/build-registry.ts",
25
+ "ui:add": "npx -y tsx scripts/ui-cli.ts add"
26
+ },
27
+ "dependencies": {
28
+ "@base-ui/react": "^1.3.0",
29
+ "@codesandbox/sandpack-react": "^2.20.0",
30
+ "@fontsource-variable/geist": "^5.2.8",
31
+ "@hookform/resolvers": "^5.2.2",
32
+ "@monaco-editor/react": "^4.7.0",
33
+ "@tailwindcss/vite": "^4.2.2",
34
+ "@tanstack/react-table": "^8.21.3",
35
+ "@types/hast": "^3.0.4",
36
+ "clsx": "^2.1.1",
37
+ "date-fns": "^4.1.0",
38
+ "dayjs": "^1.11.20",
39
+ "lucide-react": "^0.577.0",
40
+ "react": "^19.2.4",
41
+ "react-day-picker": "^9.14.0",
42
+ "react-dom": "^19.2.4",
43
+ "react-hook-form": "^7.72.0",
44
+ "react-live": "^4.1.8",
45
+ "react-resizable-panels": "^4.8.0",
46
+ "react-router-dom": "^7.13.2",
47
+ "rehype-parse": "^9.0.1",
48
+ "rehype-pretty-code": "^0.14.3",
49
+ "rehype-react": "^8.0.0",
50
+ "shiki": "^4.0.2",
51
+ "sonner": "^2.0.7",
52
+ "tailwind-merge": "^3.5.0",
53
+ "tailwind-variants": "^3.2.2",
54
+ "tailwindcss-animate": "^1.0.7",
55
+ "tw-animate-css": "^1.4.0",
56
+ "unified": "^11.0.5",
57
+ "zod": "^4.3.6"
58
+ },
59
+ "devDependencies": {
60
+ "@babel/core": "^7.29.0",
61
+ "@eslint/js": "^9.39.4",
62
+ "@rolldown/plugin-babel": "^0.2.1",
63
+ "@testing-library/jest-dom": "^6.9.1",
64
+ "@testing-library/react": "^16.3.2",
65
+ "@testing-library/user-event": "^14.6.1",
66
+ "@types/babel__core": "^7.20.5",
67
+ "@types/node": "^24.12.0",
68
+ "@types/react": "^19.2.14",
69
+ "@types/react-dom": "^19.2.3",
70
+ "@vitejs/plugin-react": "^6.0.1",
71
+ "@vitest/ui": "^4.1.2",
72
+ "autoprefixer": "^10.4.27",
73
+ "babel-plugin-react-compiler": "^1.0.0",
74
+ "eslint": "^9.39.4",
75
+ "eslint-plugin-react-hooks": "^7.0.1",
76
+ "eslint-plugin-react-refresh": "^0.5.2",
77
+ "globals": "^17.4.0",
78
+ "jsdom": "^29.0.1",
79
+ "postcss": "^8.5.8",
80
+ "tailwindcss": "^4.2.2",
81
+ "typescript": "~5.9.3",
82
+ "typescript-eslint": "^8.57.0",
83
+ "vite": "^8.0.1",
84
+ "vitest": "^4.1.2"
85
+ }
86
+ }