ginskill-init 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,77 +1,140 @@
1
- # ginstudio-skills
1
+ # GinStudio Skills
2
2
 
3
- Claude Code skills and subagents designed to be shared across multiple projects, following the [Anthropic skill standard](https://code.claude.com/docs/en/skills).
3
+ Claude Code skills and agents install with one command, select what you need.
4
4
 
5
- ## Skills
5
+ ## Quick Start
6
6
 
7
- | Skill | Description |
8
- |-------|-------------|
9
- | ai-asset-generator | Generate images, videos, icons using KIE AI API |
10
- | icon-generator | Generate SVG icon components (.tsx) for React Native |
11
- | mobile-app-review | Pre-submission audit for App Store & Google Play |
12
- | mongodb | MongoDB & Mongoose best practices for NestJS |
13
- | nestjs-architecture | NestJS feature-based architecture patterns |
14
- | performance | React Native performance optimization |
15
- | react-fsd-architecture | Feature-Sliced Design (FSD) for frontend projects |
16
- | react-query | TanStack React Query v5+ best practices |
17
- | review-code | Comprehensive code review for fullstack monorepos |
18
- | security-scanner | OWASP-aligned security audit |
19
- | ui-ux-pro-max | Design intelligence with styles, palettes, typography |
20
-
21
- ## Agents
7
+ ```bash
8
+ npx ginskill-init
9
+ ```
22
10
 
23
- | Agent | Description |
24
- |-------|-------------|
25
- | developer | Full-stack developer for features, bugs, production code |
26
- | frontend-design | Frontend designer with Next.js, Tailwind, shadcn/ui |
27
- | mobile-reviewer | React Native/Expo app reviewer for store compliance |
28
- | review-code | Senior code reviewer for fullstack monorepos |
29
- | security-scanner | Security auditor (OWASP Top 10, LLM, Mobile) |
30
- | tester | QA engineer and testing specialist |
11
+ Interactive TUI use **Space** to select, **A** to toggle all, **Enter** to confirm.
12
+
13
+ ---
31
14
 
32
15
  ## Installation
33
16
 
34
- Run the interactive installer with Python (no dependencies required):
17
+ ### Install to current project
35
18
 
36
19
  ```bash
37
- python install.py
20
+ npx ginskill-init
38
21
  ```
39
22
 
40
- The installer will:
41
- 1. Default to installing in the **parent directory** (the project adjacent to this repo).
42
- 2. Let you **select which skills** to install with an interactive checklist.
43
- 3. Let you **select which agents** to install.
44
- 4. Copy selections to `<target>/.claude/skills/` and `<target>/.claude/agents/`.
23
+ ### Install to a specific project
24
+
25
+ ```bash
26
+ npx ginskill-init -t /path/to/project
27
+ ```
45
28
 
46
- You can also pass a target path directly:
29
+ ### Install globally (available in all projects)
47
30
 
48
31
  ```bash
49
- python install.py /path/to/your/project
32
+ npx ginskill-init -g
50
33
  ```
51
34
 
52
- ### Where files are installed
35
+ ### Non-interactive (CI / scripts)
53
36
 
54
- Following the Anthropic skill standard:
37
+ ```bash
38
+ npx ginskill-init --all # Install everything
39
+ npx ginskill-init --skills react-query,mongodb # Specific skills
40
+ npx ginskill-init --agents developer,tester # Specific agents
41
+ npx ginskill-init --all -g # Everything, globally
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Commands
47
+
48
+ | Command | Description |
49
+ |---------|-------------|
50
+ | `ginskill-init` | Interactive install (default) |
51
+ | `ginskill-init upgrade` | Re-install installed skills/agents from latest bundled version |
52
+ | `ginskill-init uninstall` | Remove installed skills/agents |
53
+ | `ginskill-init status` | Show what's installed vs available |
54
+ | `ginskill-init list` | List all available skills & agents |
55
+ | `ginskill-init versions` | Show all published npm versions |
55
56
 
57
+ ### Flags (work on all commands)
58
+
59
+ | Flag | Short | Description |
60
+ |------|-------|-------------|
61
+ | `--global` | `-g` | Target `~/.claude/` (available in all projects) |
62
+ | `--target <path>` | `-t` | Target a specific project path |
63
+ | `--all` | `-a` | Skip prompts, select all |
64
+
65
+ ### Examples
66
+
67
+ ```bash
68
+ # Check what's installed in current project
69
+ ginskill-init status
70
+
71
+ # Check a specific project
72
+ ginskill-init status -t /path/to/project
73
+
74
+ # Upgrade all installed skills to latest version
75
+ npx ginskill-init@latest upgrade --all
76
+
77
+ # Uninstall interactively
78
+ ginskill-init uninstall
79
+
80
+ # Remove from a specific project
81
+ ginskill-init uninstall -t /path/to/project
56
82
  ```
57
- <target-project>/
83
+
84
+ ---
85
+
86
+ ## Where files are installed
87
+
88
+ ```
89
+ <project>/
58
90
  .claude/
59
91
  skills/
60
- mongodb/SKILL.md # skill directory with SKILL.md entrypoint
61
92
  react-query/SKILL.md
93
+ mongodb/SKILL.md
62
94
  ...
63
95
  agents/
64
- developer.md # agent markdown files
96
+ developer.md
65
97
  tester.md
66
98
  ...
67
99
  ```
68
100
 
69
- ### User-level installation
101
+ After installing, **restart Claude Code** (or type `/agents`) to pick up the new skills and agents.
70
102
 
71
- To make skills available across **all** your projects, install to your home directory:
103
+ ---
72
104
 
73
- ```bash
74
- python install.py ~/.claude
75
- ```
105
+ ## Available Skills
106
+
107
+ | Skill | Description |
108
+ |-------|-------------|
109
+ | `ai-asset-generator` | Generate images, videos, icons using KIE AI API |
110
+ | `ai-build-ai` | Master guide for extending Claude Code — skills, agents, MCP, hooks, headless |
111
+ | `icon-generator` | Generate SVG icon components (.tsx) for React Native |
112
+ | `mobile-app-review` | Pre-submission audit for App Store & Google Play |
113
+ | `mongodb` | MongoDB & Mongoose best practices for NestJS |
114
+ | `nestjs-architecture` | NestJS feature-based architecture patterns |
115
+ | `performance` | React Native performance optimization |
116
+ | `react-fsd-architecture` | Feature-Sliced Design (FSD) for frontend projects |
117
+ | `react-query` | TanStack React Query v5+ best practices |
118
+ | `review-code` | Comprehensive code review for fullstack monorepos |
119
+ | `security-scanner` | OWASP-aligned security audit (Top 10, LLM, Mobile) |
120
+ | `ui-ux-pro-max` | Design intelligence with 67 styles, palettes, typography |
121
+
122
+ ## Available Agents
123
+
124
+ | Agent | Description |
125
+ |-------|-------------|
126
+ | `developer` | Full-stack developer for features, bugs, production code |
127
+ | `frontend-design` | Frontend designer with Next.js, Tailwind, shadcn/ui |
128
+ | `mobile-reviewer` | React Native/Expo app reviewer for store compliance |
129
+ | `review-code` | Senior code reviewer for fullstack monorepos |
130
+ | `security-scanner` | Security auditor (OWASP Top 10, LLM, Mobile) |
131
+ | `tester` | QA engineer and testing specialist |
132
+
133
+ ---
134
+
135
+ ## Contributing
76
136
 
77
- This installs to `~/.claude/skills/` and `~/.claude/agents/` which Claude Code discovers globally.
137
+ See [DEVELOPMENT.md](./DEVELOPMENT.md) for:
138
+ - How to add a new skill or agent
139
+ - How to release a new version to npm
140
+ - CLI development and testing guide
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ginskill-init",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Install GinStudio skills and agents for Claude Code",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: ant-design
3
+ description: |
4
+ **Ant Design (antd) Expert**: Production patterns for building React UIs with Ant Design v5/v6 — components, theming, Form, Table, Modal, layout, icons, TypeScript, Next.js/Vite setup, and best practices.
5
+ - MANDATORY TRIGGERS: ant design, antd, ant-design, <Button, <Form, <Table, <Modal, <Select, <Input, <DatePicker, <ConfigProvider, antd theme, antd dark mode, antd form, antd table, antd modal, antd layout, antd component, antd v5, antd v6, ant design component, design token, colorPrimary, borderRadius, darkAlgorithm, compactAlgorithm, Form.useForm, Form.Item, TableColumnsType, Modal.confirm, Modal.useModal, useToken, ConfigProvider theme, antd migration, antd vite, antd next.js, antd nextjs, antd ssr, antd import, antd icon, @ant-design/icons
6
+ - Use this skill when building, reviewing, or debugging React code that imports from `antd` or `@ant-design/icons`, or when setting up Ant Design in a project.
7
+ ---
8
+
9
+ # Ant Design (antd) — Expert Guide
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ npm install antd @ant-design/icons
15
+ ```
16
+
17
+ ```tsx
18
+ // src/main.tsx — import once at root
19
+ import 'antd/dist/reset.css';
20
+
21
+ // Components auto tree-shake — no plugin needed in v5
22
+ import { Button, Form, Table, Modal, Select, Input, DatePicker } from 'antd';
23
+ import { SearchOutlined, PlusOutlined } from '@ant-design/icons';
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Key Principles
29
+
30
+ 1. **No `@types/antd`** — TypeScript types are bundled in `antd` itself
31
+ 2. **No `babel-plugin-import`** — v5 CSS-in-JS auto loads styles on demand
32
+ 3. **`antd/dist/reset.css`** — import once at root (replaces `antd/dist/antd.css`)
33
+ 4. **`visible` → `open`** — all popups/overlays use `open` prop in v5+
34
+ 5. **`ConfigProvider` does NOT affect** `message.xxx` / `Modal.xxx` / `notification.xxx` static methods — use `App.useApp()` or `Modal.useModal()` instead
35
+
36
+ ---
37
+
38
+ ## Theme Customization
39
+
40
+ ```tsx
41
+ import { ConfigProvider, theme } from 'antd';
42
+ import type { ThemeConfig } from 'antd';
43
+
44
+ const myTheme: ThemeConfig = {
45
+ token: {
46
+ colorPrimary: '#1677ff', // brand color (cascades to all primary variants)
47
+ borderRadius: 6,
48
+ fontSize: 14,
49
+ fontFamily: 'Inter, sans-serif',
50
+ },
51
+ algorithm: theme.darkAlgorithm, // light | dark | compact | [dark, compact]
52
+ components: {
53
+ Button: { borderRadius: 20 }, // per-component override
54
+ Table: { headerBg: '#f0f4f8' },
55
+ },
56
+ cssVar: true, // enables CSS variables for runtime theming
57
+ };
58
+
59
+ <ConfigProvider theme={myTheme}>
60
+ <App />
61
+ </ConfigProvider>
62
+ ```
63
+
64
+ ### Token layers (3-tier system)
65
+ | Layer | Example | Use |
66
+ |-------|---------|-----|
67
+ | Seed Token | `colorPrimary`, `borderRadius` | Set root values; algorithm derives the rest |
68
+ | Map Token | `colorPrimaryHover`, `colorPrimaryBg` | Auto-derived; override cautiously |
69
+ | Alias Token | `colorLink`, `colorTextHeading` | Semantic batch-controls across components |
70
+
71
+ ### Consume tokens inside components
72
+ ```tsx
73
+ import { theme } from 'antd';
74
+ const { token } = theme.useToken();
75
+ // token.colorPrimary, token.borderRadius, token.paddingLG, ...
76
+
77
+ // Outside React (build time / utilities)
78
+ const t = theme.getDesignToken({ token: { colorPrimary: '#f00' } });
79
+ ```
80
+
81
+ ### Dynamic dark/light toggle
82
+ ```tsx
83
+ const [isDark, setIsDark] = useState(false);
84
+ <ConfigProvider theme={{ algorithm: isDark ? theme.darkAlgorithm : theme.defaultAlgorithm }}>
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Form — Core Patterns
90
+
91
+ ```tsx
92
+ import { Form, Input, Button, Select, Checkbox } from 'antd';
93
+
94
+ const [form] = Form.useForm<MyValues>();
95
+
96
+ <Form form={form} layout="vertical" onFinish={onFinish} scrollToFirstError>
97
+ <Form.Item name="email" label="Email"
98
+ rules={[{ required: true }, { type: 'email', message: 'Invalid email' }]}>
99
+ <Input />
100
+ </Form.Item>
101
+
102
+ <Form.Item name="role" label="Role" rules={[{ required: true }]}>
103
+ <Select options={[{ value: 'admin', label: 'Admin' }]} />
104
+ </Form.Item>
105
+
106
+ {/* Boolean controls need valuePropName="checked" */}
107
+ <Form.Item name="active" valuePropName="checked">
108
+ <Checkbox>Active</Checkbox>
109
+ </Form.Item>
110
+
111
+ <Button type="primary" htmlType="submit">Submit</Button>
112
+ </Form>
113
+ ```
114
+
115
+ ### FormInstance methods
116
+ ```tsx
117
+ form.setFieldValue('email', 'test@test.com'); // single field
118
+ form.setFieldsValue({ email: 'x', role: 'y' }); // multiple
119
+ form.validateFields(); // returns Promise<Values>
120
+ form.resetFields();
121
+ form.getFieldValue('email');
122
+
123
+ // Reactive watch (use instead of getFieldsValue in render)
124
+ const email = Form.useWatch('email', form);
125
+ ```
126
+
127
+ > **Read `docs/key-components.md`** for full Form API, validation rules, Form.List dynamic fields, common mistakes.
128
+
129
+ ---
130
+
131
+ ## Table — Core Pattern
132
+
133
+ ```tsx
134
+ import type { TableColumnsType } from 'antd';
135
+ import { Table, Tag, Button } from 'antd';
136
+
137
+ const columns: TableColumnsType<User> = [
138
+ {
139
+ title: 'Name', dataIndex: 'name',
140
+ sorter: (a, b) => a.name.localeCompare(b.name),
141
+ },
142
+ {
143
+ title: 'Status', dataIndex: 'status',
144
+ filters: [{ text: 'Active', value: 'active' }],
145
+ onFilter: (value, record) => record.status === value,
146
+ render: (status) => <Tag color={status === 'active' ? 'green' : 'red'}>{status}</Tag>,
147
+ },
148
+ {
149
+ title: 'Actions', key: 'actions', fixed: 'right', width: 100,
150
+ render: (_, record) => <Button onClick={() => edit(record)}>Edit</Button>,
151
+ },
152
+ ];
153
+
154
+ <Table<User>
155
+ dataSource={data}
156
+ columns={columns}
157
+ rowKey="id"
158
+ pagination={{ pageSize: 20, showSizeChanger: true }}
159
+ rowSelection={{ type: 'checkbox', onChange: onSelectChange }}
160
+ scroll={{ x: 1000 }}
161
+ onChange={(pagination, filters, sorter) => fetchData({ ...pagination, filters, sorter })}
162
+ />
163
+ ```
164
+
165
+ > **Read `docs/key-components.md`** for full column API, server-side sorting/filtering, virtual scrolling, expandable rows.
166
+
167
+ ---
168
+
169
+ ## Modal — Core Patterns
170
+
171
+ ```tsx
172
+ // Controlled component
173
+ <Modal open={visible} title="Edit" onOk={handleOk} onCancel={close}
174
+ confirmLoading={saving} destroyOnHidden width={600}>
175
+ <Form form={form}>...</Form>
176
+ </Modal>
177
+
178
+ // Imperative — use useModal for context access (NOT Modal.confirm directly)
179
+ const [modal, contextHolder] = Modal.useModal();
180
+ // render {contextHolder} in the JSX tree
181
+ modal.confirm({ title: 'Delete?', onOk: async () => { await deleteItem(); } });
182
+ modal.info({ ... }); modal.success({ ... }); modal.error({ ... });
183
+
184
+ // Static (NO context — theme/locale won't apply)
185
+ Modal.confirm({ title: 'Are you sure?', onOk: () => {} });
186
+ ```
187
+
188
+ ---
189
+
190
+ ## Button — Key Variants
191
+
192
+ ```tsx
193
+ <Button type="primary">Primary</Button>
194
+ <Button type="primary" danger>Delete</Button>
195
+ <Button type="primary" loading={saving}>Save</Button>
196
+ <Button type="primary" icon={<PlusOutlined />}>Add</Button>
197
+ <Button type="primary" htmlType="submit" block>Submit Form</Button>
198
+
199
+ {/* v5.21+ color+variant system */}
200
+ <Button color="primary" variant="outlined">Ghost-style</Button>
201
+ <Button color="danger" variant="filled">Soft Danger</Button>
202
+ <Button color="green" variant="solid">Green Solid</Button>
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Layout
208
+
209
+ ```tsx
210
+ import { Layout, Menu } from 'antd';
211
+ const { Header, Content, Sider, Footer } = Layout;
212
+
213
+ <Layout style={{ minHeight: '100vh' }}>
214
+ <Sider collapsible>
215
+ <Menu theme="dark" mode="inline" items={menuItems} />
216
+ </Sider>
217
+ <Layout>
218
+ <Header style={{ background: '#fff', padding: 0 }} />
219
+ <Content style={{ margin: '24px 16px', padding: 24 }}>
220
+ {children}
221
+ </Content>
222
+ <Footer>Footer</Footer>
223
+ </Layout>
224
+ </Layout>
225
+ ```
226
+
227
+ ---
228
+
229
+ ## Feedback Components
230
+
231
+ ```tsx
232
+ // Transient global messages (top of page)
233
+ import { message, notification } from 'antd';
234
+ message.success('Saved!');
235
+ message.error('Failed.');
236
+ message.loading('Processing...', 2.5);
237
+
238
+ // Persistent notifications (corner)
239
+ notification.success({ message: 'Done', description: 'Your record was saved.' });
240
+
241
+ // Use App.useApp() to get context-aware versions
242
+ import { App } from 'antd';
243
+ const { message, modal, notification } = App.useApp();
244
+ // Wrap root with <App><Root /></App>
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Common Components Quick Reference
250
+
251
+ | Component | Import | Key props |
252
+ |-----------|--------|-----------|
253
+ | Input | `antd` | `value`, `onChange`, `allowClear`, `prefix`, `suffix`, `addonAfter` |
254
+ | Input.TextArea | `antd` | `rows`, `autoSize`, `showCount`, `maxLength` |
255
+ | Input.Password | `antd` | `visibilityToggle` |
256
+ | Select | `antd` | `mode` (multiple/tags), `options`, `showSearch`, `allowClear`, `loading`, `fieldNames` |
257
+ | DatePicker | `antd` | `picker`, `showTime`, `format`, `disabledDate`, `onChange` |
258
+ | Checkbox | `antd` | `checked`, `onChange`; `Checkbox.Group` for grouped |
259
+ | Radio | `antd` | `value`; `Radio.Group`, `Radio.Button` |
260
+ | Switch | `antd` | `checked`, `onChange`, `checkedChildren` |
261
+ | Upload | `antd` | `action`, `accept`, `multiple`, `beforeUpload`, `fileList`, `listType` |
262
+ | Spin | `antd` | `spinning`, `tip`, wraps content |
263
+ | Alert | `antd` | `type` (success/info/warning/error), `message`, `description`, `closable` |
264
+ | Tag | `antd` | `color`, `closable`, `onClose` |
265
+ | Badge | `antd` | `count`, `dot`, `status`, `offset` |
266
+ | Tooltip | `antd` | `title`, `placement`, wraps target |
267
+ | Popconfirm | `antd` | `title`, `onConfirm`, `onCancel`, `okText`, `cancelText` |
268
+ | Drawer | `antd` | `open`, `onClose`, `title`, `placement`, `width` |
269
+ | Card | `antd` | `title`, `extra`, `loading`, `actions`, `hoverable` |
270
+ | Avatar | `antd` | `src`, `icon`, `size`, `shape`; `Avatar.Group` |
271
+ | Tabs | `antd` | `items`, `activeKey`, `onChange`, `type`, `tabPosition` |
272
+
273
+ ---
274
+
275
+ ## Icons
276
+
277
+ ```bash
278
+ npm install @ant-design/icons
279
+ ```
280
+
281
+ ```tsx
282
+ import { SearchOutlined, HeartFilled, SmileTwoTone } from '@ant-design/icons';
283
+ // Naming: <Name>Outlined | <Name>Filled | <Name>TwoTone
284
+ // TwoTone supports twoToneColor prop
285
+
286
+ <SearchOutlined style={{ fontSize: 20, color: '#1677ff' }} />
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Loading Docs On Demand
292
+
293
+ **Do NOT load all docs at once.** Use the routing guide below to load only what is needed.
294
+
295
+ ### Docs Routing Guide
296
+
297
+ | Topic / Component | Load This File |
298
+ |-------------------|---------------|
299
+ | Vite / Next.js setup, v4→v5 migration | `docs/setup.md` |
300
+ | Theme tokens, dark mode, ConfigProvider, CSS vars | `docs/theme.md` |
301
+ | Form, Table, Modal, Button (full API) | `docs/key-components.md` |
302
+ | Menu, Tabs, Layout, Grid | `docs/navigation.md` |
303
+ | Select, Upload, DatePicker, Input (full API) | `docs/data-entry.md` |
304
+ | Typography, Card, List, Descriptions, Space, Flex | `docs/display.md` |
305
+ | Drawer, Message, Notification, Spin, Skeleton, App | `docs/feedback.md` |
306
+ | ProTable, ProForm, ProLayout | `docs/pro-components.md` |
307
+ | All 60+ components — quick reference | `docs/components.md` |
308
+
309
+ ### Fetching Live Docs For Any Component
310
+
311
+ Use the fetch script to get the latest URL for any component, then call `WebFetch` on it:
312
+
313
+ ```bash
314
+ # Run to get the URL for a component
315
+ bash ginstudio-skills/skills/ant-design/scripts/fetch-component-docs.sh <component-name>
316
+ # Examples:
317
+ bash ginstudio-skills/skills/ant-design/scripts/fetch-component-docs.sh select
318
+ bash ginstudio-skills/skills/ant-design/scripts/fetch-component-docs.sh pro-table
319
+ bash ginstudio-skills/skills/ant-design/scripts/fetch-component-docs.sh customize-theme
320
+ ```
321
+
322
+ Then fetch the returned URL with `WebFetch` using the prompt:
323
+ > "Extract all props, types, defaults, sub-components, and code examples"
@@ -0,0 +1,160 @@
1
+ # Ant Design — All Components Reference
2
+
3
+ All components: `import { ComponentName } from 'antd'`
4
+ Icons: `import { IconName } from '@ant-design/icons'`
5
+
6
+ ---
7
+
8
+ ## General (3)
9
+
10
+ | Component | Key Props | Notes |
11
+ |-----------|-----------|-------|
12
+ | **Button** | `type`, `color`, `variant`, `size`, `shape`, `loading`, `danger`, `ghost`, `icon`, `htmlType` | See `key-components.md` for full API |
13
+ | **Icon** | `style`, `spin`, `rotate`, `twoToneColor` | From `@ant-design/icons`; `Outlined`/`Filled`/`TwoTone` suffixes |
14
+ | **Typography** | — | Sub: `Title` (h1-h5), `Text` (copyable, code, delete, editable), `Link`, `Paragraph` |
15
+
16
+ ---
17
+
18
+ ## Layout (6)
19
+
20
+ | Component | Key Props | Notes |
21
+ |-----------|-----------|-------|
22
+ | **Divider** | `type` (horizontal/vertical), `orientation`, `dashed`, `plain` | |
23
+ | **Flex** | `justify`, `align`, `gap`, `wrap`, `vertical` | CSS Flexbox abstraction; v5.10+ |
24
+ | **Grid** (Row/Col) | `Row: gutter, justify, align, wrap` / `Col: span, offset, xs, sm, md, lg, xl` | 24-column grid |
25
+ | **Layout** | `hasSider` | Sub: `Header`, `Content`, `Footer`, `Sider` (collapsible, width, breakpoint) |
26
+ | **Space** | `size`, `direction`, `wrap`, `align`, `split` | Inline gap management |
27
+ | **Splitter** | `layout` (horizontal/vertical), `onResize`, `onResizeEnd` | Resizable panels; v5.21+ |
28
+
29
+ ---
30
+
31
+ ## Navigation (8)
32
+
33
+ | Component | Key Props | Notes |
34
+ |-----------|-----------|-------|
35
+ | **Affix** | `offsetTop`, `offsetBottom`, `target`, `onChange` | Sticky element |
36
+ | **Anchor** | `items`, `affix`, `offsetTop`, `targetOffset`, `onChange` | Jump links |
37
+ | **Breadcrumb** | `items[{ title, href, onClick }]`, `separator` | |
38
+ | **Dropdown** | `menu`, `open`, `trigger`, `placement`, `arrow` | `menu.items` array |
39
+ | **Menu** | `items`, `mode` (horizontal/vertical/inline), `theme`, `selectedKeys`, `openKeys`, `onSelect` | |
40
+ | **Pagination** | `total`, `pageSize`, `current`, `showSizeChanger`, `showQuickJumper`, `onChange` | |
41
+ | **Steps** | `items[{ title, description, status, icon }]`, `current`, `direction`, `type` | |
42
+ | **FloatButton** | `icon`, `tooltip`, `type`, `shape`, `onClick` | Sub: `FloatButton.Group`, `FloatButton.BackTop`; v5.0+ |
43
+
44
+ ---
45
+
46
+ ## Data Entry (19)
47
+
48
+ | Component | Key Props | Notes |
49
+ |-----------|-----------|-------|
50
+ | **AutoComplete** | `options`, `onSearch`, `onSelect`, `filterOption` | Input with suggestions |
51
+ | **Cascader** | `options`, `value`, `onChange`, `multiple`, `showSearch`, `changeOnSelect` | Multi-level selector |
52
+ | **Checkbox** | `checked`, `onChange`, `disabled`, `indeterminate` | `Checkbox.Group: options, value` |
53
+ | **ColorPicker** | `value`, `onChange`, `format`, `presets`, `showText` | v5.5+ |
54
+ | **DatePicker** | `picker`, `value`, `onChange`, `showTime`, `format`, `disabledDate`, `needConfirm` | Uses dayjs; `RangePicker` for ranges |
55
+ | **Form** | — | See `key-components.md` |
56
+ | **Input** | `value`, `onChange`, `allowClear`, `prefix`, `suffix`, `addonBefore`, `addonAfter`, `showCount`, `maxLength` | Sub: `TextArea`, `Password`, `Search` |
57
+ | **InputNumber** | `min`, `max`, `step`, `precision`, `formatter`, `parser`, `addonBefore`, `addonAfter` | |
58
+ | **Mentions** | `options`, `prefix`, `onSearch`, `onSelect` | @mention input |
59
+ | **Radio** | `value`, `onChange` | `Radio.Group: options, value, buttonStyle` / `Radio.Button` |
60
+ | **Rate** | `count`, `value`, `onChange`, `allowHalf`, `character` | Star rating |
61
+ | **Select** | `mode` (multiple/tags), `options`, `value`, `onChange`, `showSearch`, `filterOption`, `allowClear`, `loading`, `fieldNames`, `labelInValue` | |
62
+ | **Segmented** | `options`, `value`, `onChange`, `block`, `size` | Button-group toggle |
63
+ | **Slider** | `min`, `max`, `step`, `value`, `onChange`, `range`, `marks`, `tooltip` | Range or single |
64
+ | **Switch** | `checked`, `onChange`, `checkedChildren`, `unCheckedChildren`, `loading` | |
65
+ | **TimePicker** | `value`, `onChange`, `format`, `use12Hours`, `showNow`, `disabledTime` | |
66
+ | **Transfer** | `dataSource`, `targetKeys`, `onChange`, `titles`, `render`, `listStyle` | Dual-panel list |
67
+ | **TreeSelect** | `treeData`, `value`, `onChange`, `multiple`, `showSearch`, `treeCheckable` | |
68
+ | **Upload** | `action`, `accept`, `multiple`, `fileList`, `onChange`, `beforeUpload`, `listType`, `maxCount` | `listType: 'text' \| 'picture' \| 'picture-card'` |
69
+
70
+ ---
71
+
72
+ ## Data Display (20)
73
+
74
+ | Component | Key Props | Notes |
75
+ |-----------|-----------|-------|
76
+ | **Avatar** | `src`, `icon`, `size`, `shape` (circle/square), `alt` | `Avatar.Group: max, size` |
77
+ | **Badge** | `count`, `dot`, `status`, `color`, `overflowCount`, `showZero`, `offset` | Wraps child |
78
+ | **Calendar** | `value`, `onSelect`, `dateCellRender`, `monthCellRender`, `mode`, `fullscreen` | |
79
+ | **Card** | `title`, `extra`, `loading`, `actions`, `hoverable`, `cover`, `tabList` | Sub: `Card.Meta`, `Card.Grid` |
80
+ | **Carousel** | `autoplay`, `dots`, `effect`, `arrows`, `afterChange` | |
81
+ | **Collapse** | `items[{ key, label, children }]`, `accordion`, `defaultActiveKey` | |
82
+ | **Descriptions** | `items[{ key, label, children, span }]`, `column`, `layout`, `bordered`, `title` | Key-value display |
83
+ | **Empty** | `image`, `description`, `imageStyle` | No-data placeholder |
84
+ | **Image** | `src`, `width`, `height`, `preview`, `fallback` | `Image.PreviewGroup` for gallery |
85
+ | **List** | `dataSource`, `renderItem`, `grid`, `pagination`, `loading` | Sub: `List.Item`, `List.Item.Meta` |
86
+ | **Popover** | `content`, `title`, `trigger`, `placement`, `open` | Richer than Tooltip |
87
+ | **QRCode** | `value`, `size`, `color`, `bgColor`, `icon`, `status` | v5.1+ |
88
+ | **Statistic** | `value`, `title`, `prefix`, `suffix`, `formatter`, `precision` | `Statistic.Countdown` |
89
+ | **Table** | — | See `key-components.md` |
90
+ | **Tabs** | `items[{ key, label, children }]`, `activeKey`, `onChange`, `type`, `tabPosition`, `tabBarExtraContent` | |
91
+ | **Tag** | `color`, `closable`, `onClose`, `bordered` | Preset or hex color |
92
+ | **Timeline** | `items[{ color, dot, label, children }]`, `mode`, `pending`, `reverse` | |
93
+ | **Tooltip** | `title`, `placement`, `trigger`, `open`, `color` | Light hover text |
94
+ | **Tree** | `treeData`, `checkable`, `defaultExpandAll`, `onCheck`, `onSelect`, `draggable` | |
95
+ | **Watermark** | `content`, `font`, `image`, `rotate`, `gap`, `offset` | v5.1+ |
96
+
97
+ ---
98
+
99
+ ## Feedback (11)
100
+
101
+ | Component | Key Props | Notes |
102
+ |-----------|-----------|-------|
103
+ | **Alert** | `type` (success/info/warning/error), `message`, `description`, `closable`, `action`, `showIcon`, `banner` | Inline banner |
104
+ | **Drawer** | `open`, `onClose`, `title`, `placement`, `width`, `height`, `mask`, `extra`, `footer` | Slide-in panel |
105
+ | **Message** | — | Imperative: `message.success/error/warning/info/loading(content, duration)` |
106
+ | **Modal** | — | See `key-components.md` |
107
+ | **Notification** | — | `notification.success/error/warning/info({ message, description, placement, duration })` |
108
+ | **Popconfirm** | `title`, `onConfirm`, `onCancel`, `okText`, `cancelText`, `okButtonProps`, `placement` | Bubble confirm |
109
+ | **Progress** | `percent`, `type` (line/circle/dashboard), `status`, `strokeColor`, `format`, `steps` | |
110
+ | **Result** | `status` (success/error/warning/404/403/500), `title`, `subTitle`, `extra` | Full-page outcome |
111
+ | **Skeleton** | `active`, `paragraph`, `avatar`, `title`, `loading` | Loading placeholder |
112
+ | **Spin** | `spinning`, `tip`, `size`, `delay`, wraps content | Loading overlay |
113
+ | **Tour** | `open`, `onClose`, `steps[{ title, description, target, cover }]` | Guided tour; v5.0+ |
114
+
115
+ ---
116
+
117
+ ## Utility Components
118
+
119
+ | Component | Notes |
120
+ |-----------|-------|
121
+ | **App** | Wrap root: `<App>`. Use `App.useApp()` for context-aware `message`, `modal`, `notification` |
122
+ | **ConfigProvider** | Global theme, locale, direction, componentSize, virtual, getPopupContainer |
123
+
124
+ ---
125
+
126
+ ## Quick Import Reference
127
+
128
+ ```tsx
129
+ // Single import covers everything — fully tree-shaken
130
+ import {
131
+ // Layout
132
+ Layout, Grid, Row, Col, Space, Flex, Divider,
133
+ // Navigation
134
+ Menu, Breadcrumb, Pagination, Steps, Tabs, Dropdown,
135
+ // Data Entry
136
+ Form, Input, Select, DatePicker, Checkbox, Radio, Switch, Upload, Slider,
137
+ InputNumber, AutoComplete, Cascader, Rate, Transfer, Mentions, TimePicker,
138
+ // Data Display
139
+ Table, Card, List, Avatar, Badge, Tag, Tooltip, Popover, Tree, Image,
140
+ Collapse, Carousel, Timeline, Descriptions, Statistic, QRCode, Calendar,
141
+ // Feedback
142
+ Modal, Drawer, Alert, Spin, Progress, Skeleton, Result, Popconfirm,
143
+ // Utility
144
+ ConfigProvider, App,
145
+ // Imperative APIs
146
+ message, notification,
147
+ // Theme
148
+ theme,
149
+ } from 'antd';
150
+
151
+ // Icons (separate package)
152
+ import { SearchOutlined, PlusOutlined, DeleteFilled } from '@ant-design/icons';
153
+
154
+ // TypeScript types
155
+ import type {
156
+ ButtonProps, InputProps, SelectProps, FormInstance, FormProps,
157
+ TableColumnsType, TableProps, TablePaginationConfig,
158
+ ModalProps, DrawerProps, MenuProps, TabsProps, ThemeConfig,
159
+ } from 'antd';
160
+ ```