๐Ÿ“ ๅฝ“ๅ‰ไฝ็ฝฎ: ๅฏ่ง†ๅŒ–ๅญฆไน ๆŒ‡ๅ— (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 ็š„ไปทๅ€ผไธไป…ๅœจไบŽๅฎƒๆ˜ฏไธ€ไธชไผ˜็ง€็š„็ป„ไปถๅบ“๏ผŒๆ›ดๅœจไบŽๅฎƒๅฑ•็คบไบ†๏ผš

  1. ๅฆ‚ไฝ•ๆ‰“็ ดไผ ็ปŸๆ€็ปด - ๅคๅˆถ็ฒ˜่ดด vs npm ๅŒ…
  2. ๅฆ‚ไฝ•่ฎพ่ฎกๅฏๆ‰ฉๅฑ•็ณป็ปŸ - Registry + Baseร—Style
  3. ๅฆ‚ไฝ•ๆƒ่กกๅ’Œๅ†ณ็ญ– - ๆฏไธช้€‰ๆ‹ฉ้ƒฝๆœ‰ๆ˜Ž็กฎ็š„็†็”ฑ
  4. ๅฆ‚ไฝ•ๅ…ณๆณจ็”จๆˆทไปทๅ€ผ - ๅฏๆŽงๆ€ง > ไพฟๆทๆ€ง
  5. ๅฆ‚ไฝ•ไฟๆŒๅŠกๅฎž - ้€‰ๆ‹ฉๆœ€ๅฅฝ็š„ๅทฅๅ…ทๅฎŒๆˆไปปๅŠก

่ฟ™ไบ›่ฎพ่ฎกๆ€ๆƒณๅ’Œๆ–นๆณ•่ฎบ๏ผŒ่ฟœๆฏ”ๅ…ทไฝ“็š„ไปฃ็ ๅฎž็Žฐๆ›ดๆœ‰ไปทๅ€ผใ€‚


๐Ÿš€ ๅผ€ๅง‹ๆŽข็ดข#

ๆŽจ่่ตท็‚น๏ผš

  • ๆ—ถ้—ด็ดง๏ผŸ โ†’ 07-one-page-summary.md ๏ผˆ10 ๅˆ†้’Ÿ๏ผ‰
  • ็ณป็ปŸๅญฆไน ๏ผŸ โ†’ 00-START-HERE.md โ†’ ้€‰ๆ‹ฉ่ทฏๅพ„
  • ๆทฑๅบฆ็ ”็ฉถ๏ผŸ โ†’ 06-concept-map.md โ†’ ็†่งฃๅ…ณ่” โ†’ ๅ…จ้ƒจ้˜…่ฏป

ๅฏผ่ˆช: โ† ไธ€้กต็บธๆ€ป็ป“ | ๐Ÿ“š ็›ฎๅฝ•

ๆœ€ๅŽๆ›ดๆ–ฐ: 2026-01-18