๐ ๅฝๅไฝ็ฝฎ: ๅฏ่งๅๅญฆไน ๆๅ (8/8) | ๅฏผ่ช: โ ไธไธ็ฏ: ไธ้กต็บธๆป็ป | ๐ ็ฎๅฝ
shadcn-ui ๅฏ่งๅๅญฆไน ๆๅ#
ไธๅพ่ๅ่จ - ็จๅฏ่งๅๅพ่กจ็่งฃ shadcn-ui ็ๅฎๆด็ฅ่ฏไฝ็ณป
๐บ๏ธ ๅฎๆด็ฅ่ฏๅฐๅพ#
shadcn-ui ็ฅ่ฏไฝ็ณป
โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโ
โ โ โ
ไธบไปไน๏ผ ๆฏไปไน๏ผ ๆไนๅ๏ผ
โ โ โ
โโโโโโโโโดโโโโโโโโ โ โโโโโโโโโดโโโโโโโโ
โ โ โ โ โ
็็นๅๆ ่งฃๅณๆนๆก โ ๆถๆ่ฎพ่ฎก ๅฎ็ฐ็ป่
โ โ โ โ โ
โ โ โ โ โ
้ฎ้ข ไปทๅผ ็ปๆ ๆบๅถ
โโ npm ้ป็ โโ ๅฎๅ
จๅฏๆง โโ Monorepo โโ Registry
โโ ้พๅฎๅถ โโ ้ซๅบฆ็ตๆดป โโ Baseๅฑ โโ ๆๅปบ็ณป็ป
โโ ไพ่ต้ๅฎ โโ ้ถ่ฟ่กๆถ โโ Styleๅฑ โโ CLIๅทฅๅ
ท
โ โ โ โ โ
โโโโโโโโโฌโโโโโโโโ โ โโโโโโโโโฌโโโโโโโโ
โ โ โ
่ฎพ่ฎก็ๅฟต ๆ ธๅฟๅๆฐ ๆๆฏๅฎ็ฐ
โ โ โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโ
โ
ๅฎๆด็็ปไปถ็ณป็ป๐ ๆฆๅฟตๅฑๆฌก้ๅญๅก#
โโโโโโโโโโโโโโโโโโโโ
โ ่ฎพ่ฎกๅฒๅญฆๅฑ โ
โ ็จๆท่ณไธ/ๅฏๆงๆง โ
โโโโโโโโโโฌโโโโโโโโโโ
โ
โโโโโโโโโโโโโโดโโโโโโโโโโโโโ
โ ๆถๆๆจกๅผๅฑ โ
โ Registry + BaseรStyle โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
โ ๅฎ็ฐๆบๅถๅฑ โ
โ ๆๅปบ็ณป็ป + ๆ ทๅผ่ฝฌๆข + CLI โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
โ API ่ฎพ่ฎกๅฑ โ
โ CVA + Compound + Context + ... โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
โ ็ปไปถๅฎ็ฐๅฑ โ
โ 58 ไธช UI + 68 ไธช Block + ... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐ ไธไธชๆ ธๅฟ้ฎ้ข็ไธฒ่#
้ฎ้ข 1: ๆถๆๆฏไปไน๏ผ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ไธๆฏ npm ๅ
๏ผๆฏๅคๅถ็ฒ่ดดๅผ็ณป็ป โ
โ โ
โ ๆ ธๅฟ็ปๆ: โ
โ โโ Registry ็ณป็ป๏ผ็ปไปถๅๅ๏ผ โ
โ โโ CLI ๅทฅๅ
ท๏ผ่ชๅจๅๆไฝ๏ผ โ
โ โโ ๆๅปบ็ณป็ป๏ผ็ๆ็ปๅ๏ผ โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ ๅผๅบ้ฎ้ข 2
โ
้ฎ้ข 2: API ไธบไปไน่ฟๆ ท่ฎพ่ฎก๏ผ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 7 ๅคง่ฎพ่ฎกๆจกๅผไฟ่ฏ่ดจ้ โ
โ โ
โ ๆ ธๅฟๅๅ: โ
โ โโ ็ฑปๅๅฎๅ
จ๏ผCVA + TypeScript๏ผ โ
โ โโ ็ตๆดปๆง๏ผCompound Components๏ผ โ
โ โโ ไธ่ดๆง๏ผdata-slot๏ผ โ
โ โโ ๆ ้็ข๏ผRadix Primitive๏ผ โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ ๅผๅบ้ฎ้ข 3
โ
้ฎ้ข 3: ๅฆไฝๆฏๆๅคไธช่ฎพ่ฎก็ณป็ป๏ผ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Base ร Style ็ฉ้ต็ณป็ป โ
โ โ
โ ๆ ธๅฟๆบๅถ: โ
โ โโ ็ฌ็ซๅฎ็ฐ๏ผbases/radix, base๏ผ โ
โ โโ ๆ ทๅผ่ฝฌๆข๏ผAST + styleMap๏ผ โ
โ โโ ๆๅปบๆถ็ๆ๏ผ้ถ่ฟ่กๆถ๏ผ โ
โ โโ API ็ปไธ๏ผๅ
่ฃ
ๅฑๆนๅนณๅทฎๅผ๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
ๅฎๆด็ shadcn-ui ็ณป็ป๐ฏ ไป็จๆท่ง่ง็ๆดไฝๆต็จ#
็ฌฌ 1 ๆญฅ: ๅๅงๅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ $ npx shadcn@latest init โ
โ โ
โ ้ๆฉ: โ
โ โโ Base: Radix UI ๆ Base UI โ
โ โโ Style: new-york/los-angeles/... โ
โ โโ Color: zinc/slate/stone/... โ
โ โ
โ ็ๆ: components.json โ
โ { โ
โ "style": "radix-new-york", โ
โ "registries": {...} โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
็ฌฌ 2 ๆญฅ: ๆทปๅ ็ปไปถ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ $ npx shadcn add button โ
โ โ
โ ๅ
้จๆต็จ: โ
โ 1. ่ฏปๅ style: "radix-new-york" โ
โ 2. ๆๅปบ URL: โ
โ /r/styles/radix-new-york/ โ
โ button.json โ
โ 3. ่ทๅ็ปไปถๆฐๆฎ โ
โ 4. ้ๅฝ่งฃๆไพ่ต โ
โ 5. ๅฎ่ฃ
npm ๅ
โ
โ 6. ๅๅ
ฅ components/ui/button.tsx โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
็ฌฌ 3 ๆญฅ: ไฝฟ็จ็ปไปถ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ import { Button } from โ
โ "@/components/ui/button" โ
โ โ
โ <Button variant="destructive"> โ
โ Delete โ
โ </Button> โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
็ฌฌ 4 ๆญฅ: ่ชๅฎไนไฟฎๆน
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆๅผ components/ui/button.tsx โ
โ โ
โ ไฟฎๆน: โ
โ โโ ๆทปๅ ๆฐๅไฝ โ
โ โโ ่ฐๆดๆ ทๅผ โ
โ โโ ๆนๅ้ป่ฎค่กไธบ โ
โ โ
โ ๅฎๅ
จ็ฑไฝ ๆงๅถ๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐๏ธ ไปๆๅปบ่ง่ง็็ณป็ป็ๆ#
่พๅ
ฅ๏ผๆบๆไปถ๏ผ
โ
โโ bases/radix/ui/button.tsx
โ โโ ๅ
ๅซ cn-button ๅ ไฝ็ฌฆ
โ
โโ styles/style-new-york.css
โโ ๅฎไน .cn-button ๆ ๅฐ
โ
โ ๆๅปบๆถๅค็๏ผbuild-registry.mts๏ผ
โ
โโ Step 1: ่ฏปๅ Base ๆบๆไปถ
โ โโ const source = fs.readFile("bases/radix/ui/button.tsx")
โ
โโ Step 2: ่ฏปๅ Style ๆ ทๅผๆ ๅฐ
โ โโ const styleMap = createStyleMap("style-new-york.css")
โ
โโ Step 3: AST ่ฝฌๆข
โ โโ const transformed = transformStyle(source, { styleMap })
โ โโ cn-button โ "inline-flex items-center ..."
โ
โโ Step 4: ๅๅ
ฅ็ฎๆ ๆไปถ
โโ fs.writeFile("radix-new-york/ui/button.tsx", transformed)
โ
โ
่พๅบ๏ผ็ๆๆไปถ๏ผ
โ
โโ radix-new-york/ui/button.tsx
โ โโ ๅ
ๅซๅฎ้
Tailwind ็ฑป
โ
โโ public/r/styles/radix-new-york/button.json
โโ Registry JSON๏ผๅ
ๅซๆบไปฃ็ ๅญ็ฌฆไธฒ๏ผ๐จ Base ร Style ็ฉ้ตๅฏ่งๅ#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Base ร Style ็ปๅ็ฉ้ต โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Style โ new-york los-angeles miami
Base โ
โโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโ
radix โ radix- โ radix- โ radix- โ
(Radix UI) โ new-york โlos-angelesโ miami โ
โ โ
โ โ
โ โ
โ
โโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโค
base โ base- โ base- โ base- โ
(Base UI) โ new-york โlos-angelesโ miami โ
โ โ
โ โ
โ โ
โ
โโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโ
็ปๆ: 2 ร 3 = 6 ็ง็ปๅ๏ผๅ
จ้จๅจๆๅปบๆถ่ชๅจ็ๆ๐ ไพ่ตๅ ณ็ณปๅฏ่งๅ#
็จๆท้กน็ฎ
โ
โ import { Dialog } from "@/components/ui/dialog"
โ
โโโ components/ui/dialog.tsx
โ
โ import { Button } from "./button"
โ import { Label } from "./label"
โ
โโโ components/ui/button.tsx
โ โ
โ โ npm dependency
โ โ
โ โโโ @radix-ui/react-slot
โ
โโโ components/ui/label.tsx
โ โ
โ โ npm dependency
โ โ
โ โโโ @radix-ui/react-label
โ
โ npm dependency
โ
โโโ @radix-ui/react-dialog
ๅพไพ:
็ปไปถไพ่ต โโโโโ registryDependencies
npm ไพ่ต ยทยทยทยทโ dependencies๐ฏ ่ฎพ่ฎกๆจกๅผๅบ็จ็ฉ้ต#
็ปไปถ โ / ๆจกๅผ โ CVA ๅคๆ Compound Context ๆๅฐๅ
่ฃ
data-slot ๅๅบๅผ
Button โ
โ
โ โ โ โ
โ
Input โ โ โ โ โ
โ
โ
Badge โ
โ
โ โ โ โ
โ
Dialog โ โ โ
โ โ โ
โ
Select โ โ โ
โ โ โ
โ
Form โ โ โ
โ
โ โ
โ
Sidebar โ
โ โ
โ
โ โ
โ
Switch โ โ โ โ โ
โ
โ
Separator โ โ โ โ โ
โ
โ
Combobox โ โ โ
โ โ โ
โ
่งๅพ:
- ็ฎๅ็ปไปถ: ๆๅฐๅ
่ฃ
- ไบคไบ็ปไปถ: CVA + ๅคๆ
- ๅคๆ็ปไปถ: Compound + Context
- ้ซ็บง็ปไปถ: ๅค็งๆจกๅผ็ปๅ๐ ๅคๆๅบฆ vs ไปทๅผๅๆ#
้ซไปทๅผ
โ
โ
Registry โ BaseรStyle
็ณป็ป โญ โ ็ฉ้ต โญ
โ
CLI โ Form
ๅทฅๅ
ท โ ็ณป็ป
โ
โโโโโโโโโโโผโโโโโโโโโโโ ้ซๅคๆๅบฆ
โ
Button โ ๆๅปบ
็ปไปถ โ ่ๆฌ
โ
Separator โ ๆ ทๅผ
็ปไปถ โ ่ฝฌๆข
โ
ไฝไปทๅผ
ๅพไพ:
โญ = ๆ ธๅฟๅๆฐ๏ผๅคๆไฝๅผๅพ
ๅ
ถไป = ๅฟ
่ฆ็ปไปถ๏ผไฟๆ็ฎๆด๐ ๆฐๆฎๆตๅๅพ#
ๅผๅ้ถๆฎต๏ผๆๅปบๆถ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ bases/radix/ + styles/new-york.css โ
โ โ โ
โ build-registry.mts โ
โ โ โ
โ transformStyle (AST) โ
โ โ โ
โ radix-new-york/ โ
โ โ โ
โ public/r/styles/radix-new-york/ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ ้จ็ฝฒๅฐ CDN
โ
โ
ไฝฟ็จ้ถๆฎต๏ผ่ฟ่กๆถ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ ็จๆท: npx shadcn add button โ
โ โ โ
โ CLI: ๆๅปบ Registry URL โ
โ โ โ
โ GET /r/styles/radix-new-york/button.json โ
โ โ โ
โ ่งฃๆไพ่ต + ๅฎ่ฃ
npm โ
โ โ โ
โ ๅๅ
ฅ components/ui/button.tsx โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐จ ๆ ทๅผ่ฝฌๆขๅฏ่งๅ#
ๆบๆไปถ๏ผbases/radix/ui/button.tsx๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ <button โ
โ className={cn("cn-button", โ
โ className)} โ
โ /> โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ ่ฏปๅๆ ทๅผๆ ๅฐ
โ
ๆ ทๅผๅฎไน๏ผstyles/style-new-york.css๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ .cn-button { โ
โ @apply inline-flex โ
โ items-center โ
โ justify-center โ
โ gap-2 โ
โ rounded-md โ
โ px-4 py-2; โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ createStyleMap
โ
StyleMap ๅฏน่ฑก
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ { โ
โ "cn-button": "inline-flex โ
โ items-center โ
โ justify-center โ
โ gap-2 โ
โ rounded-md โ
โ px-4 py-2" โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ transformStyle (AST)
โ
็ๆๆไปถ๏ผradix-new-york/ui/button.tsx๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ <button โ
โ className={cn( โ
โ "inline-flex items-center โ
โ justify-center gap-2 โ
โ rounded-md px-4 py-2", โ
โ className โ
โ )} โ
โ /> โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐ API ๅทฎๅผๅฏนๆฏๅฏ่งๅ#
Radix UI ๅฎ็ฐ Base UI ๅฎ็ฐ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ
โ import { Dialog } โ โ import { Dialog } โ
โ from "radix-ui" โ โ from "@base-ui" โ
โ โ โ โ
โ <Dialog.Overlay /> โ โ <Dialog.Backdrop /> โ
โ <Dialog.Content> โ โ <Dialog.Popup> โ
โ {children} โ โ {children} โ
โ <Dialog.Close โ โ <Dialog.Close โ
โ asChild> โ โ render={...}> โ
โ <Button /> โ โ <Button /> โ
โ </Dialog.Close> โ โ </Dialog.Close> โ
โ </Dialog.Content> โ โ </Dialog.Popup> โ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ ็ปไธๅ
่ฃ
ๅฑ (shadcn-ui) โ
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅฏนๅค API๏ผๅฎๅ
จไธ่ด๏ผ โ
โ โ
โ <Dialog> โ
โ <DialogOverlay /> โ
โ <DialogContent> โ
โ {children} โ
โ <DialogClose> โ
โ <Button /> โ
โ </DialogClose> โ
โ </DialogContent> โ
โ </Dialog> โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐ 7 ๅคง่ฎพ่ฎกๆจกๅผๅณ็ญๆ #
้ๆฉ่ฎพ่ฎกๆจกๅผ็ๅณ็ญๆต็จ:
้่ฆ่ฎพ่ฎกไธไธช็ปไปถ
โ
โโ ๆฏๅฆ้่ฆๅไฝ๏ผๅฆไธๅ้ข่ฒ/ๅฐบๅฏธ๏ผ๏ผ
โ โโ ๆฏ โ ไฝฟ็จ CVA ๅไฝ็ณป็ป
โ โโ ๅฆ โ
โ
โโ ๆฏๅฆ้่ฆๅค็งๆธฒๆๅฝขๅผ๏ผๆ้ฎ/้พๆฅ๏ผ๏ผ
โ โโ ๆฏ โ ๆทปๅ asChild ๅคๆๆฏๆ
โ โโ ๅฆ โ
โ
โโ ๆฏๅฆๆๅคไธช็ธๅ
ณๅญ็ปไปถ๏ผ
โ โโ ๆฏ โ ไฝฟ็จ Compound Components
โ โโ ๅฆ โ
โ
โโ ๆฏๅฆ้่ฆๆทฑๅฑ็ถๆๅ
ฑไบซ๏ผ
โ โโ ๆฏ โ ไฝฟ็จ Context ็ถๆ็ฎก็
โ โโ ๅฆ โ
โ
โโ ๆฏๅฆ้่ฆ็งปๅจ็ซฏ้้
๏ผ
โ โโ ๆฏ โ ๆทปๅ ๅๅบๅผ้้
โ โโ ๅฆ โ
โ
โโ ๆฏๅฆๆฏ็ฎๅ็ปไปถ๏ผ
โ โโ ๆฏ โ ไฝฟ็จๆๅฐๅๅ
่ฃ
โ โโ ๅฆ โ ็ปๅไฝฟ็จๅค็งๆจกๅผ
โ
โโ ๆๆ็ปไปถ้ฝๆทปๅ data-slot ๅฑๆง๐ ๅญฆไน ่ทฏ็บฟๅฏ่งๅ#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ shadcn-ui ๅญฆไน ๅฐๅพ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
00-START-HERE
โ
้ๆฉ่ทฏๅพ
โ
โโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโ
โ โ โ
ๅฟซ้็่งฃ ็ณป็ปๅญฆไน ๆทฑๅบฆ็ ็ฉถ
(30ๅ้) (2-3ๅฐๆถ) (1-2ๅคฉ)
โ โ โ
โ โ โ
โ โ โ
07-one-page 01-README ็ฌฌไธๅคฉ:
โ (ๅไธ็ซ ) โโ 01-README
06-concept-map โ โโ 02-architecture
โ 04-api-design โโ 05-multi-base
03-key-findings (็ฌฌไบ็ซ )
(็ฌฌไธ่) โ ็ฌฌไบๅคฉ:
05-multi-base โโ 04-api-design
โ โโ 03-key-findings
03-key-findings โโ ๆบ็ ้
่ฏป
โ โ โ
โโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโ
โ
ๅฎๆๅญฆไน
โ
โโโ ๅฎ่ทตๅๅบ็จ๐งฉ ๆฆๅฟตๆผๅพ#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ shadcn-ui = ๆๆๆฆๅฟต็ๆๆบ็ปๅ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโ
โ ๅคๅถ็ฒ่ดด โ โ ๆ ธๅฟ็ๅฟต
โโโโโโโฌโโโโโโ
โ
โโโโโโโดโโโโโโ
โ Registry โ โ ๅๅๆบๅถ
โโโโโโโฌโโโโโโ
โ
โโโโโโโโโโโดโโโโโโโโโโ
โ โ
โโโโโดโโโโ โโโโโโโดโโโโโโ
โ Base โ ร โ Style โ โ ็ฉ้ต็ณป็ป
โโโโโฌโโโโ โโโโโโโฌโโโโโโ
โ โ
โโโโโโโโโโโฌโโโโโโโโโโ
โ
โโโโโโโดโโโโโโ
โ ๆๅปบ็ณป็ป โ โ ่ชๅจๅ
โโโโโโโฌโโโโโโ
โ
โโโโโโโดโโโโโโ
โ CLI ๅทฅๅ
ท โ โ ็จๆท็้ข
โโโโโโโฌโโโโโโ
โ
โโโโโโโดโโโโโโ
โ API ่ฎพ่ฎก โ โ ไฝฟ็จไฝ้ช
โโโโโโโฌโโโโโโ
โ
โโโโโโโดโโโโโโ
โ ็ปไปถๅบ โ โ ๆ็ปไบง็ฉ
โโโโโโโโโโโโโ๐ฏ ๅ ณ้ฎๆไปถๅฎไฝๅพ#
shadcn-ui ้กน็ฎ
โโโ apps/v4/
โ โโโ registry/
โ โ โโโ bases/ โ Base ๆบๆไปถ
โ โ โ โโโ radix/
โ โ โ โ โโโ ui/
โ โ โ โ โโโ button.tsx โญ ้
่ฏป่ฟไธช
โ โ โ โ โโโ dialog.tsx โญ ้
่ฏป่ฟไธช
โ โ โ โโโ base/
โ โ โ โโโ ui/
โ โ โ โโโ button.tsx โญ ๅฏนๆฏ่ฟไธช
โ โ โ โโโ dialog.tsx โญ ๅฏนๆฏ่ฟไธช
โ โ โ
โ โ โโโ styles/ โ Style ๅฎไน
โ โ โ โโโ style-new-york.css โญ ้
่ฏป่ฟไธช
โ โ โ โโโ ...
โ โ โ
โ โ โโโ radix-new-york/ โ ็ๆ็็ปไปถ
โ โ โโโ ui/
โ โ โโโ button.tsx ๏ผ่ชๅจ็ๆ๏ผ
โ โ
โ โโโ scripts/
โ โโโ build-registry.mts โญโญโญ ๆ ธๅฟๆๅปบ่ๆฌ
โ
โโโ packages/shadcn/
โโโ src/
โโโ commands/
โ โโโ add.ts โญโญโญ ๆ ธๅฟ CLI ๅฝไปค
โ โโโ init.ts โญโญ ๅๅงๅๅฝไปค
โ
โโโ registry/
โโโ schema.ts โญโญโญ Registry Schema
โโโ api.ts โญโญ Registry API
ๅพไพ:
โญโญโญ = ๅฟ
่ฏป๏ผ็่งฃๆ ธๅฟๆบๅถ๏ผ
โญโญ = ๆจ่่ฏป๏ผ็่งฃๅฎ็ฐ็ป่๏ผ
โญ = ๅฏ้่ฏป๏ผไบ่งฃๅ
ทไฝๅฎ็ฐ๏ผ๐ฏ ๅญฆไน ๆฃ้ช่ทฏๅพๅพ#
ๅญฆไน ๅผๅง
โ
โ
่ฝๅฆ็จไธๅฅ่ฏ่งฃ้ shadcn-ui๏ผ
โ
โโ ๅฆ โ ้
่ฏป [07-one-page-summary.md](./07-one-page-summary.md)
โโ ๆฏ โ
่ฝๅฆ็ปๅบ Registry ็ณป็ปๆถๆๅพ๏ผ
โ
โโ ๅฆ โ ้
่ฏป [02-architecture-diagram.md](./02-architecture-diagram.md)
โโ ๆฏ โ
่ฝๅฆ่ฏดๅบ 7 ๅคง่ฎพ่ฎกๆจกๅผ๏ผ
โ
โโ ๅฆ โ ้
่ฏป [04-api-design-analysis.md](./04-api-design-analysis.md)
โโ ๆฏ โ
่ฝๅฆ่งฃ้ Base ร Style ๅฆไฝๅทฅไฝ๏ผ
โ
โโ ๅฆ โ ้
่ฏป [05-multi-base-system-analysis.md](./05-multi-base-system-analysis.md)
โโ ๆฏ โ
่ฝๅฆๅๆไธไธช็ปไปถ็่ฎพ่ฎกๅณ็ญ๏ผ
โ
โโ ๅฆ โ ้
่ฏป [03-key-findings.md](./03-key-findings.md)
โโ ๆฏ โ
ๆญๅ๏ผไฝ ๅทฒ็ปๆๆก shadcn-ui
โ
โ
ไธไธๆญฅ๏ผๅฎ่ทตๅ่ดก็ฎ๐ก ็ฅ่ฏ็นไพ่ตๅพ#
ๅบ็ก็ฅ่ฏ
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ โ โ
Reactๅบ็ก TypeScript Tailwind CSS
โ โ โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ
shadcn-ui ๅบ็ก
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ โ โ
ๅคๅถ็ฒ่ดดๆจกๅผ Registry็ณป็ป CLIไฝฟ็จ
โ โ โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ
shadcn-ui ่ฟ้ถ
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ โ โ
BaseรStyle API่ฎพ่ฎกๆจกๅผ ๆๅปบ็ณป็ป
โ โ โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ
shadcn-ui ้ซ็บง
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ โ โ
ๅคBaseๅ
ผๅฎน ๆบ็ ้
่ฏป ๆถๆไผๅ๐ฏ ๅธธ่ง้ฎ้ขๅฟซ้ๅฎไฝ#
| ้ฎ้ข | ็ญๆกไฝ็ฝฎ | ๅ ณ้ฎ่ฏ |
|---|---|---|
| ไปไนๆฏๅคๅถ็ฒ่ดดๆจกๅผ๏ผ | 03-key-findings.md ็ฌฌไธ่ | ่ๅผ่ฝฌๅ |
| Registry ๅฆไฝๅทฅไฝ๏ผ | 01-README.md ็ฌฌไธ็ซ | Schema, ไพ่ต่งฃๆ |
| ๅฆไฝๆฏๆๅค Base๏ผ | 05-multi-base-system-analysis.md ็ฌฌไบ็ซ | Base ร Style |
| ไธบไปไน็จ CVA๏ผ | 04-api-design-analysis.md ็ฌฌๅ็ซ | ็ฑปๅๅฎๅ จ |
| data-slot ๆฏไปไน๏ผ | 04-api-design-analysis.md ๆจกๅผ 6 | ๆต่ฏๅๅฅฝ |
| ๅฆไฝๅๆข Base๏ผ | 05-multi-base-system-analysis.md ็ฌฌๅ ซ็ซ | components.json |
| ๆๅปบๆต็จๆฏไปไน๏ผ | 02-architecture-diagram.md ๅพ 11 | build-registry |
| Form ๅฆไฝๅฎ็ฐ๏ผ | 04-api-design-analysis.md ็ฌฌไธ็ซ | Context |
| ๆง่ฝๅฆไฝไผๅ๏ผ | 03-key-findings.md ็ฌฌไธ่ | LRU ็ผๅญ |
| ๅฆไฝ่ชๅฎไน๏ผ | 07-one-page-summary.md | ๅฎๆดๅทฅไฝๆต็จ |
๐ ๅฎ่ทต้กน็ฎๅปบ่ฎฎ#
ๅ ฅ้จ้กน็ฎ๏ผๅๅปบไธไธช็ฎๅๅบ็จ#
็ฎๆ : ็่งฃๅบๆฌไฝฟ็จ
ๆถ้ด: 1-2 ๅฐๆถ
ๆญฅ้ชค:
1. npx create-next-app my-app
2. npx shadcn@latest init
3. npx shadcn add button dialog form
4. ๅๅปบไธไธช็ฎๅ็่กจๅ้กต้ข
5. ๅฐ่ฏไฟฎๆน Button ็ๅไฝ
ๅญฆไน ็น:
โโ CLI ็ๅบๆฌไฝฟ็จ
โโ ็ปไปถ็ๅฏผๅ
ฅๆนๅผ
โโ ๅบๆฌ็ๅฎๅถไฟฎๆน่ฟ้ถ้กน็ฎ๏ผๅฏนๆฏไธคไธช Base#
็ฎๆ : ็่งฃ Base ร Style ็ณป็ป
ๆถ้ด: 3-4 ๅฐๆถ
ๆญฅ้ชค:
1. ๅๅปบไธคไธชๆต่ฏ้กน็ฎ
โโ ้กน็ฎ A: style: "radix-new-york"
โโ ้กน็ฎ B: style: "base-new-york"
2. ๆทปๅ ็ธๅ็็ปไปถ๏ผbutton, dialog๏ผ
3. ๅฏนๆฏ็ๆ็ไปฃ็ :
โโ import ่ฏญๅฅๅทฎๅผ
โโ API ๅทฎๅผ๏ผasChild vs render๏ผ
โโ ๅ่ฝๅทฎๅผ๏ผๅฆๆ๏ผ
4. ๅฐ่ฏๅๆข Base๏ผไฟฎๆน components.json๏ผ
ๅญฆไน ็น:
โโ Base ็ณป็ป็ๅทฅไฝๅ็
โโ API ๅทฎๅผ็ๆนๅนณๆนๆณ
โโ Registry URL ็ๆๅปบ่งๅ้ซ็บง้กน็ฎ๏ผๅๅปบ่ชๅฎไน Style#
็ฎๆ : ๆทฑๅ
ฅ็่งฃๆ ทๅผ่ฝฌๆข
ๆถ้ด: 1-2 ๅคฉ
ๆญฅ้ชค:
1. ็ ็ฉถ styles/style-new-york.css
2. ๅๅปบ่ชๅทฑ็ style-tokyo.css
โโ ๅฎไน .cn-* ็ฑป็ๆ ๅฐ
3. ไฟฎๆน registry/styles.tsx
โโ ๆทปๅ tokyo ๅฐ STYLES ๆฐ็ป
4. ่ฟ่กๆๅปบ
โโ pnpm run registry:build
5. ๆต่ฏ็ๆ็็ปไปถ
โโ radix-tokyo/ui/button.tsx
ๅญฆไน ็น:
โโ ๆ ทๅผๆ ๅฐ็ๅทฅไฝๅ็
โโ createStyleMap ็ๅฎ็ฐ
โโ transformStyle ็ AST ่ฝฌๆข๐ฏ ๆป็ป๏ผไธไธช่ง่ง็ shadcn-ui#
1๏ธโฃ ็จๆท่ง่ง#
shadcn-ui = ๆดๅฅฝ็็ปไปถๅบ
ไผๅฟ:
โ
ๅฎๅ
จๅฏๆง๏ผๆบไปฃ็ ๅจๆ็้กน็ฎ๏ผ
โ
้ซๅบฆ็ตๆดป๏ผๆณๆไนๆนๅฐฑๆไนๆน๏ผ
โ
้ถไพ่ต๏ผไธๅขๅ node_modules๏ผ
โ
็ฑปๅๅฎๅ
จ๏ผTypeScript ๅฎๆดๆฏๆ๏ผ
ไฝฟ็จ:
npm add โ components/ui/ โ ็ดๆฅไฝฟ็จ2๏ธโฃ ๅผๅ่ ่ง่ง#
shadcn-ui = ๅญฆไน ็ๅฎๅบ
ๅญฆไน ็น:
โ
Registry ็ณป็ป่ฎพ่ฎก
โ
CLI ๅทฅๅ
ทๅผๅ
โ
็ปไปถ API ่ฎพ่ฎก
โ
ๆถๆ่ฎพ่ฎกๆนๆณ่ฎบ
โ
ๆๆฏๅณ็ญๆ็ปด
ไปทๅผ:
ไธไป
ๆฏๅทฅๅ
ท๏ผๆดๆฏๆๆ3๏ธโฃ ๆถๆๅธ่ง่ง#
shadcn-ui = ๅๆฐ็่ๅผ
ๅๆฐ:
โ
ๅคๅถ็ฒ่ดดๆจกๅผ๏ผ่ๅผ่ฝฌๅ๏ผ
โ
Registry ็ณป็ป๏ผๆฐๅๅๆจกๅผ๏ผ
โ
Base ร Style ็ฉ้ต๏ผๅ
ณๆณจ็นๅ็ฆป๏ผ
โ
ๆๅปบๆถไผๅ๏ผ้ถ่ฟ่กๆถ๏ผ
โ
ๅกๅฎไธปไน๏ผๆททๅไฝฟ็จ๏ผ
ๅฏๅ:
ๆๆไผ ็ปๆ็ปด๏ผๅ้ ๆฐไปทๅผ๐ ๆๅ็่ฏ#
shadcn-ui ็ไปทๅผไธไป ๅจไบๅฎๆฏไธไธชไผ็ง็็ปไปถๅบ๏ผๆดๅจไบๅฎๅฑ็คบไบ๏ผ
- ๅฆไฝๆ็ ดไผ ็ปๆ็ปด - ๅคๅถ็ฒ่ดด vs npm ๅ
- ๅฆไฝ่ฎพ่ฎกๅฏๆฉๅฑ็ณป็ป - Registry + BaseรStyle
- ๅฆไฝๆ่กกๅๅณ็ญ - ๆฏไธช้ๆฉ้ฝๆๆ็กฎ็็็ฑ
- ๅฆไฝๅ ณๆณจ็จๆทไปทๅผ - ๅฏๆงๆง > ไพฟๆทๆง
- ๅฆไฝไฟๆๅกๅฎ - ้ๆฉๆๅฅฝ็ๅทฅๅ ทๅฎๆไปปๅก
่ฟไบ่ฎพ่ฎกๆๆณๅๆนๆณ่ฎบ๏ผ่ฟๆฏๅ ทไฝ็ไปฃ็ ๅฎ็ฐๆดๆไปทๅผใ
๐ ๅผๅงๆข็ดข#
ๆจ่่ตท็น๏ผ
- ๆถ้ด็ดง๏ผ โ 07-one-page-summary.md ๏ผ10 ๅ้๏ผ
- ็ณป็ปๅญฆไน ๏ผ โ 00-START-HERE.md โ ้ๆฉ่ทฏๅพ
- ๆทฑๅบฆ็ ็ฉถ๏ผ โ 06-concept-map.md โ ็่งฃๅ ณ่ โ ๅ จ้จ้ ่ฏป
ๅฏผ่ช: โ ไธ้กต็บธๆป็ป | ๐ ็ฎๅฝ
ๆๅๆดๆฐ: 2026-01-18