UI Hub 是一个每日更新的免费 UI 资源目录,给设计师、前端开发者和做界面的 AI Agent 用:共 2,395 条资源,其中 133 个组件库、1,929 个带明暗预览的组件样式示例,另有设计 skill 与 AI 设计技巧文章。UI Hub 是一個每日更新的免費 UI 資源目錄,給設計師、前端開發者和做介面的 AI Agent 用:共 2,395 條資源,其中 133 個元件庫、1,929 個附明暗預覽的元件樣式示例,另有設計 skill 與 AI 設計技巧文章。UI Hub is a free, daily-updated directory of UI resources for designers, front-end developers and AI agents that build interfaces: 2,395 resources, including 133 component libraries and 1,929 component style demos with light/dark previews, plus design skills and AI design articles.UI Hub は、デザイナー・フロントエンド開発者・UI を作る AI エージェント向けの、毎日更新される無料の UI リソース集です。全 2,395 件(コンポーネントライブラリ 133 件、ライト/ダーク対応のスタイルデモ 1,929 件)に加え、デザインスキルと AI デザイン記事を掲載しています。UI Hub는 디자이너, 프론트엔드 개발자, 인터페이스를 만드는 AI 에이전트를 위한 매일 업데이트되는 무료 UI 리소스 디렉터리입니다. 총 2,395개 리소스(컴포넌트 라이브러리 133개, 라이트/다크 미리보기가 있는 스타일 데모 1,929개)와 디자인 스킬, AI 디자인 글을 제공합니다.UI Hub ialah direktori sumber UI percuma yang dikemas kini setiap hari untuk pereka, pembangun front-end dan ejen AI yang membina antara muka: 2,395 sumber, termasuk 133 pustaka komponen dan 1,929 demo gaya komponen dengan pratonton terang/gelap, serta kemahiran reka bentuk dan artikel reka bentuk AI.UI Hub là danh mục tài nguyên UI miễn phí, cập nhật hằng ngày, dành cho nhà thiết kế, lập trình viên front-end và AI agent dựng giao diện: 2,395 tài nguyên, gồm 133 thư viện component và 1,929 mẫu phong cách component có xem trước sáng/tối, cùng skill thiết kế và bài viết về thiết kế với AI.UI Hub est un annuaire gratuit de ressources UI, mis à jour chaque jour, pour designers, développeurs front-end et agents IA qui construisent des interfaces : 2,395 ressources, dont 133 bibliothèques de composants et 1,929 démos de styles avec aperçus clair/sombre, plus des skills de design et des articles sur le design avec l’IA.UI Hub es un directorio gratuito de recursos de UI, actualizado a diario, para diseñadores, desarrolladores front-end y agentes de IA que construyen interfaces: 2,395 recursos, incluidas 133 bibliotecas de componentes y 1,929 demos de estilos con vista clara/oscura, además de skills de diseño y artículos de diseño con IA.UI Hub ist ein kostenloses, täglich aktualisiertes Verzeichnis von UI-Ressourcen für Designer, Frontend-Entwickler und KI-Agents, die Oberflächen bauen: 2,395 Ressourcen, darunter 133 Komponentenbibliotheken und 1,929 Komponenten-Stildemos mit Hell/Dunkel-Vorschau, dazu Design-Skills und Artikel zu KI-Design.

← 返回博客返回部落格Back to blogブログへ戻る블로그로Kembali ke blogVề blogRetour au blogVolver al blogZurück zum Blog · 组件库深读元件庫深讀Component librariesコンポーネント컴포넌트Pustaka komponenThư viện componentBibliothèquesBibliotecasKomponenten · 2026-10-14 · 9 分钟阅读9 分鐘閱讀6 min read6 分で読めます6 분 읽기6 min bacaan6 phút đọc6 min de lecture6 min de lectura6 Min. Lesezeit

组件组合:为什么"无样式 + 复制粘贴"赢了元件組合:為什麼「無樣式 + 複製貼上」贏了Component composition: why headless + copy-paste wonコンポーネント合成:ヘッドレス+コピペが勝った理由컴포넌트 합성: 헤드리스 + 복붙이 이긴 이유Komposisi komponen: mengapa headless + salin-tampal menangKết hợp component: vì sao headless + copy-paste thắngComposition de composants : pourquoi headless + copier-coller a gagnéComposición de componentes: por qué headless + copiar y pegar ganóKomponenten-Komposition: warum Headless + Copy-Paste gewonnen hat

Radix 管行为,样式归你,代码在你仓库里。复合组件让 API 更小,AI 改起来也更安全。Radix 管行為,樣式歸你,程式碼在你倉庫裡。複合元件讓 API 更小,AI 修改更安全。Radix behaviour, your styles, code you own. Compound components keep APIs small and make AI edits safer.振る舞いはRadix、スタイルは自分、コードは自分のもの。複合コンポーネントでAPIは小さく、AI編集も安全に。동작은 Radix, 스타일과 코드는 내 것. 복합 컴포넌트는 API를 작게, AI 수정을 안전하게.Tingkah laku Radix, gaya anda, kod milik anda. Komponen majmuk menjadikan suntingan AI lebih selamat.Hành vi của Radix, style của bạn, code của bạn. Component ghép giúp AI sửa an toàn hơn.Comportement Radix, vos styles, votre code. Les composants composés rendent les éditions IA plus sûres.Comportamiento de Radix, tus estilos, tu código. Los compuestos hacen más seguras las ediciones de IA.Radix-Verhalten, eigene Styles, eigener Code. Compound Components machen KI-Änderungen sicherer.

Component composition: why headless + copy-paste won

正文以簡體中文顯示。

本文は英語で表示しています。

본문은 영어로 표시됩니다.

Kandungan dipaparkan dalam bahasa Inggeris.

Nội dung hiển thị bằng tiếng Anh.

Le corps de l’article est en anglais.

El cuerpo del artículo está en inglés.

Der Beitragstext ist auf Englisch.

The old model of a component library was a styled npm package: you installed it, then fought its styles with overrides and !important. shadcn/ui flipped that. Behaviour and accessibility come from headless primitives such as Radix, styling comes from Tailwind classes, and the component source is copied into your repository, where you own it. This post explains why that composition model suits AI agents unusually well, how to structure the layers, and the patterns that keep generated code maintainable.

Diagram of primitives, styled kit and page blocks
Diagram of primitives, styled kit and page blocks · Diagram: original by UI Hub, CC BY 4.0

Three layers, three owners

Think of your UI in three layers, each with a different rate of change and a different owner:

  1. Primitives — headless, accessible behaviour: focus management, keyboard handling, ARIA wiring, portals. Radix Primitives, React Aria and Ark UI live here. You rarely edit them.
  2. Your kit — styled components built on primitives: Button, Dialog, Select, Card. This is what shadcn/ui gives you as source. You edit it occasionally, when the design system changes.
  3. Blocks and pages — compositions of kit components: a pricing section, a settings form, a dashboard header. This changes every week.
shadcn/ui introduction page
shadcn/ui introduction page · Screenshot: shadcn (ui.shadcn.com), captured 2026-10-14. © the original site.

Brad Frost's atomic design described a similar split years ago (atoms, molecules, organisms, templates, pages). The practical rule for AI work is simple: let agents work mostly at the block layer, carefully at the kit layer, and almost never at the primitive layer.

Why this suits agents

Pattern 1: compound components

A compound component exposes parts that share state through context, instead of one component with forty props. Compare:

// monolith: every new need becomes another prop
<Dialog title="Delete project" description="This cannot be undone."
  confirmLabel="Delete" cancelLabel="Cancel" danger showClose
  onConfirm={remove} footerAlign="end" />

// compound: parts you can rearrange, omit or extend
<Dialog>
  <DialogTrigger asChild><Button variant="outline">Delete</Button></DialogTrigger>
  <DialogContent>
    <DialogHeader>
      <DialogTitle>Delete project</DialogTitle>
      <DialogDescription>This cannot be undone.</DialogDescription>
    </DialogHeader>
    <DialogFooter>
      <DialogClose asChild><Button variant="ghost">Cancel</Button></DialogClose>
      <Button variant="destructive" onClick={remove}>Delete</Button>
    </DialogFooter>
  </DialogContent>
</Dialog>

The compound version is longer, but every part is obvious, and adding a checkbox ("also delete backups") means inserting one element, not designing a new prop.

Pattern 2: asChild instead of wrapper soup

Radix's asChild prop merges a primitive's behaviour into its child element instead of rendering an extra DOM node. <DialogTrigger asChild><Button/></DialogTrigger> gives you one <button> with the trigger's ARIA attributes and event handlers, not a button nested inside another button. Nested interactive elements are one of the most common accessibility bugs in generated code, so tell your agent to use asChild whenever it wraps a kit component in a primitive part.

Pattern 3: variants as data

shadcn/ui components describe styling options with class-variance-authority. Variants become a small, readable table instead of conditional class strings scattered through JSX:

const buttonVariants = cva(
  "inline-flex items-center justify-center rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-2 disabled:opacity-50",
  {
    variants: {
      variant: {
        default: "bg-primary text-primary-foreground hover:bg-primary/90",
        outline: "border border-input bg-background hover:bg-accent",
        destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
      },
      size: { sm: "h-8 px-3", md: "h-9 px-4", lg: "h-10 px-6" },
    },
    defaultVariants: { variant: "default", size: "md" },
  }
);

Agents edit tables like this reliably. Ask for a new variant and you get one new line, using your existing token classes.

A step-by-step workflow for adding a block

  1. Inventory first. Ask the agent to list which kit components the new block needs and which are missing.
  2. Add missing kit pieces deliberately. Install them from the shadcn registry or your own, then review them once. Do not let a block quietly invent its own button.
  3. Compose the block only from kit components and layout utilities. No raw <div onClick>.
  4. Check states and keyboard. Tab through the block. Open and close every popover with the keyboard. Check focus returns to the trigger.
  5. Promote repeats. If the same composition appears in three blocks, promote it into the kit with a name.

Pitfalls

Questions we get

Should we use shadcn/ui or a packaged library like MUI? If you want agents to edit components and you care about owning the look, source-in-repo kits are easier. If you want upstream updates with no maintenance and accept the library's look, a packaged library is fine. Mixing both in one product is the expensive option.

How do we stop agents from editing primitives? Say it in AGENTS.md, keep primitives in a clearly named folder, and add a CODEOWNERS rule or a CI check that flags changes there. Agents follow folder conventions well when they are written down.

When should a block become a kit component? When it appears in three places, has a clear name, and its variations can be described as a short variants table. Before that, duplication is cheaper than the wrong abstraction.

What about non-React stacks? The same three layers apply. Vue and Svelte have headless primitive libraries too, and the rule "agents compose blocks, carefully edit the kit, leave primitives alone" does not depend on the framework.

Our take

The composition model is the reason shadcn-style kits became the default target for AI UI tools: the source is local, the parts are small and the variants are data. Keep the three layers explicit in your folder structure, tell your agent which layer it is allowed to touch, and most "AI made a mess of my components" problems disappear.

Radix Primitives introduction
Radix Primitives introduction · Screenshot: Radix / WorkOS (www.radix-ui.com), captured 2026-10-14. © the original site.

Checklist

AI 提示词AI 提示詞AI promptAIプロンプトAI 프롬프트Prompt AIPrompt cho AIPrompt IAPrompt de IAKI-Prompt

复制给 Claude、Cursor、v0 等 AI 助手,让它按本文的方法处理你的项目。尖括号里的内容换成你自己的。複製給 Claude、Cursor、v0 等 AI 助手,讓它按本文的方法處理你的專案。尖括號裡的內容換成你自己的。Paste this into Claude, Cursor, v0 or another assistant to apply this post to your own project. Replace the parts in angle brackets.Claude・Cursor・v0 などのAIアシスタントに貼り付けると、この記事の方法をあなたのプロジェクトに適用できます。山括弧の部分は自分の内容に置き換えてください。Claude, Cursor, v0 같은 AI 도우미에 붙여 넣으면 이 글의 방법을 내 프로젝트에 적용할 수 있습니다. 꺾쇠괄호 안은 내 내용으로 바꾸세요.Tampal ke Claude, Cursor, v0 atau pembantu lain untuk menggunakan kaedah artikel ini pada projek anda. Gantikan bahagian dalam kurungan sudut.Dán vào Claude, Cursor, v0 hoặc trợ lý khác để áp dụng bài này cho dự án của bạn. Thay phần trong dấu ngoặc nhọn bằng nội dung của bạn.Collez-le dans Claude, Cursor, v0 ou un autre assistant pour appliquer cet article à votre projet. Remplacez les parties entre chevrons.Pégalo en Claude, Cursor, v0 u otro asistente para aplicar este artículo a tu proyecto. Sustituye lo que está entre corchetes angulares.In Claude, Cursor, v0 oder einen anderen Assistenten einfügen, um diesen Beitrag auf dein Projekt anzuwenden. Teile in spitzen Klammern ersetzen.

你在一个 React 代码库里工作,结构是:无头原语(Radix / React Aria / Ark)+ 带样式的组件层(shadcn 式,源码在本仓库)+ 页面区块。
任务:新建一个区块:<描述这个区块>。
规则:
1. 先列出要用的组件,以及缺少的组件。新建组件之前先停下来问我。
2. 只用组件和布局工具类拼装。不要 <div onClick>,不要嵌套可交互元素;原语部件包裹组件时使用 asChild。
3. 不要修改原语层的文件。任何地方都不要再建第二个 Button/Input/Card。
4. 新的样式选项加到组件的变体表(cva)里,使用现有 token 类名。
5. 每个弹层/对话框/菜单都要实现键盘操作和焦点回归。
输出:组件清单 → 代码 → 指出哪些组合已在 3 个以上区块出现、应该提升为组件。
你在一个 React 代码库里工作,结构是:无头原语(Radix / React Aria / Ark)+ 带样式的组件层(shadcn 式,源码在本仓库)+ 页面区块。
任务:新建一个区块:<描述这个区块>。
规则:
1. 先列出要用的组件,以及缺少的组件。新建组件之前先停下来问我。
2. 只用组件和布局工具类拼装。不要 <div onClick>,不要嵌套可交互元素;原语部件包裹组件时使用 asChild。
3. 不要修改原语层的文件。任何地方都不要再建第二个 Button/Input/Card。
4. 新的样式选项加到组件的变体表(cva)里,使用现有 token 类名。
5. 每个弹层/对话框/菜单都要实现键盘操作和焦点回归。
输出:组件清单 → 代码 → 指出哪些组合已在 3 个以上区块出现、应该提升为组件。
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.
You are working in a React codebase that uses headless primitives (Radix / React Aria / Ark) + a styled kit (shadcn-style, source in this repo) + page blocks.
Task: build <describe the block> as a new block.
Rules:
1. First list the kit components you will use and any that are missing. Stop and ask before creating a new kit component.
2. Compose only from kit components and layout utilities. No <div onClick>, no nested interactive elements; use asChild when a primitive part wraps a kit component.
3. Do not edit files in the primitives layer. Do not create a second Button/Input/Card anywhere.
4. New styling options go into the component's variants table (cva), using existing token classes.
5. Implement keyboard behaviour and focus return for every popover/dialog/menu.
Output: component list → code → a note on anything that appears in 3+ blocks and should be promoted to the kit.

引用来源引用來源References参考文献참고 자료RujukanNguồn tham khảoRéférencesReferenciasQuellen

  1. shadcn/ui docs — shadcn
  2. Radix Primitives introduction — WorkOS / Radix
  3. Compound Pattern — patterns.dev (Lydia Hallie & Addy Osmani)
  4. Atomic Design, chapter 2 — Brad Frost
  5. Composition (asChild) — Radix
  6. React Aria — Adobe
  7. Ark UI — Chakra Systems
  8. class-variance-authority — Joe Bell

相关文章相關文章Related posts関連記事관련 글Artikel berkaitanBài liên quanArticles liésArtículos relacionadosÄhnliche Beiträge

组件库深读元件庫深讀Component librariesコンポーネント컴포넌트Pustaka komponenThư viện componentBibliothèquesBibliotecasKomponenten2026-10-142 分钟阅读2 分鐘閱讀2 min read2 分で読めます2 분 읽기2 min bacaan2 phút đọc2 min de lecture2 min de lectura2 Min. Lesezeit

Aceternity UI 深读:惊艳效果,要省着用Aceternity UI 深讀:驚豔效果,要省著用Aceternity UI deep dive: spectacle, used sparinglyAceternity UI徹底解説:派手さは控えめにAceternity UI 심층 분석: 화려함은 아껴서Aceternity UI mendalam: kemewahan, guna dengan jimatAceternity UI chuyên sâu: hiệu ứng ấn tượng, dùng tiết kiệmAceternity UI en profondeur : du spectacle, avec parcimonieAceternity UI a fondo: espectáculo, con moderaciónAceternity UI im Detail: Spektakel, sparsam eingesetzt

可复制粘贴的 React + Tailwind + Motion 特效,带火了「fancy」落地页风格。哪些能撑起页面,哪些会把页面变成特效合集。可複製貼上的 React + Tailwind + Motion 特效,帶紅了「fancy」落地頁風格。哪些能撐起頁面,哪些會讓頁面變成特效合輯。Copy-paste React + Tailwind + Motion effects that made the "fancy" landing look popular. Which pieces carry a page and which turn it into a demo reel.React+Tailwind+Motionのコピペ演出。ページを支える部品と、デモリールにしてしまう部品。복사-붙여넣기 React+Tailwind+Motion 효과. 페이지를 받쳐 주는 것과 데모 릴로 만드는 것.Kesan React+Tailwind+Motion salin-tampal. Mana yang menyokong halaman, mana yang jadi demo.Hiệu ứng React+Tailwind+Motion copy-paste. Phần nào nâng trang, phần nào biến trang thành demo.Effets React+Tailwind+Motion à copier-coller : ce qui porte une page, ce qui en fait une démo.Efectos React+Tailwind+Motion para copiar: lo que sostiene una página y lo que la vuelve demo.Copy-paste-Effekte mit React+Tailwind+Motion: was eine Seite trägt, was sie zur Demo macht.

Aceternity UImotioncomponents
组件库深读元件庫深讀Component librariesコンポーネント컴포넌트Pustaka komponenThư viện componentBibliothèquesBibliotecasKomponenten2026-10-148 分钟阅读8 分鐘閱讀6 min read6 分で読めます6 분 읽기6 min bacaan6 phút đọc6 min de lecture6 min de lectura6 Min. Lesezeit

Cult UI 深读:有手感、有个性的组件Cult UI 深讀:有手感、有個性的元件Cult UI deep dive: tactile components with personalityCult UI徹底解説:触感と個性のある部品Cult UI 심층 분석: 촉감과 개성이 있는 컴포넌트Cult UI mendalam: komponen taktil berperibadiCult UI chuyên sâu: component có cảm giác và cá tínhCult UI en profondeur : des composants tactiles avec du caractèreCult UI a fondo: componentes táctiles con personalidadCult UI im Detail: taktile Komponenten mit Charakter

兼容 shadcn、带物理手感的组件:灵动岛、质感按钮、可展开卡片。如何借来个性而不破坏一致性。相容 shadcn、帶物理手感的元件:動態島、質感按鈕、可展開卡片。如何借來個性而不破壞一致性。shadcn-compatible components that feel physical: dynamic islands, textured buttons, expandable cards. How to borrow personality without breaking consistency.shadcn互換で物理的な触感の部品。一貫性を壊さずに個性を借りる方法。shadcn 호환, 물리적 촉감의 컴포넌트. 일관성을 해치지 않고 개성을 빌리는 법.Komponen serasi shadcn yang terasa fizikal.Component tương thích shadcn có cảm giác vật lý.Composants compatibles shadcn au toucher physique.Componentes compatibles con shadcn con tacto físico.shadcn-kompatible Komponenten mit physischem Gefühl.

Cult UIshadcncomponents
组件库深读元件庫深讀Component librariesコンポーネント컴포넌트Pustaka komponenThư viện componentBibliothèquesBibliotecasKomponenten2026-10-142 分钟阅读2 分鐘閱讀2 min read2 分で読めます2 분 읽기2 min bacaan2 phút đọc2 min de lecture2 min de lectura2 Min. Lesezeit

Magic UI 深读:像 shadcn 一样安装的动效组件Magic UI 深讀:像 shadcn 一樣安裝的動效元件Magic UI deep dive: animated components that install like shadcnMagic UI徹底解説:shadcnのように入るアニメ部品Magic UI 심층 분석: shadcn처럼 설치되는 애니메이션 컴포넌트Magic UI mendalam: komponen animasi dipasang seperti shadcnMagic UI chuyên sâu: component động cài như shadcnMagic UI en profondeur : des composants animés qui s'installent comme shadcnMagic UI a fondo: componentes animados que se instalan como shadcnMagic UI im Detail: animierte Komponenten, installiert wie shadcn

一套开源(MIT)的动效组件,通过 shadcn registry 分发。SaaS 页面最值得用的几个,以及如何保持无障碍。一套開源(MIT)的動效元件,透過 shadcn registry 分發。SaaS 頁面最值得用的幾個,以及如何維持無障礙。An open-source (MIT) set of motion components distributed through the shadcn registry. Best picks for SaaS pages and how to keep them accessible.shadcnレジストリで配布されるMITのモーション部品。SaaSページ向けの選び方とアクセシビリティ。shadcn 레지스트리로 배포되는 MIT 모션 컴포넌트. SaaS 페이지 추천과 접근성 유지법.Komponen gerakan sumber terbuka (MIT) melalui registry shadcn.Bộ component chuyển động MIT phân phối qua shadcn registry.Composants animés open source (MIT) distribués via le registre shadcn.Componentes animados open source (MIT) distribuidos por el registro de shadcn.Open-Source-Motion-Komponenten (MIT) über die shadcn-Registry.

Magic UIshadcnmotion