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 +109 -46
- package/package.json +1 -1
- package/skills/ant-design/SKILL.md +323 -0
- package/skills/ant-design/docs/components.md +160 -0
- package/skills/ant-design/docs/data-entry.md +406 -0
- package/skills/ant-design/docs/display.md +594 -0
- package/skills/ant-design/docs/feedback.md +451 -0
- package/skills/ant-design/docs/key-components.md +414 -0
- package/skills/ant-design/docs/navigation.md +310 -0
- package/skills/ant-design/docs/pro-components.md +543 -0
- package/skills/ant-design/docs/setup.md +213 -0
- package/skills/ant-design/docs/theme.md +265 -0
- package/skills/ant-design/scripts/fetch-component-docs.sh +169 -0
package/README.md
CHANGED
|
@@ -1,77 +1,140 @@
|
|
|
1
|
-
#
|
|
1
|
+
# GinStudio Skills
|
|
2
2
|
|
|
3
|
-
Claude Code skills and
|
|
3
|
+
Claude Code skills and agents — install with one command, select what you need.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quick Start
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
17
|
+
### Install to current project
|
|
35
18
|
|
|
36
19
|
```bash
|
|
37
|
-
|
|
20
|
+
npx ginskill-init
|
|
38
21
|
```
|
|
39
22
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
### Install to a specific project
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx ginskill-init -t /path/to/project
|
|
27
|
+
```
|
|
45
28
|
|
|
46
|
-
|
|
29
|
+
### Install globally (available in all projects)
|
|
47
30
|
|
|
48
31
|
```bash
|
|
49
|
-
|
|
32
|
+
npx ginskill-init -g
|
|
50
33
|
```
|
|
51
34
|
|
|
52
|
-
###
|
|
35
|
+
### Non-interactive (CI / scripts)
|
|
53
36
|
|
|
54
|
-
|
|
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
|
-
|
|
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
|
|
96
|
+
developer.md
|
|
65
97
|
tester.md
|
|
66
98
|
...
|
|
67
99
|
```
|
|
68
100
|
|
|
69
|
-
|
|
101
|
+
After installing, **restart Claude Code** (or type `/agents`) to pick up the new skills and agents.
|
|
70
102
|
|
|
71
|
-
|
|
103
|
+
---
|
|
72
104
|
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
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
|
@@ -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
|
+
```
|