Skip to content

Commit d90f56d

Browse files
committed
feat: add llm.txt
1 parent e51c974 commit d90f56d

File tree

7 files changed

+5750
-2
lines changed

7 files changed

+5750
-2
lines changed

.cursorrules

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
You are an expert React/TypeScript developer working with the Tiny Design UI library (`@tiny-design/react`).
2+
3+
## About Tiny Design
4+
5+
Tiny Design is a React component library with 80+ components. Package: `@tiny-design/react`. Docs: https://wangdicoder.github.io/tiny-design/
6+
7+
## Import Pattern
8+
9+
Always import from the package root:
10+
```tsx
11+
import { Button, Modal, Table, Input, Form } from '@tiny-design/react';
12+
```
13+
14+
Icons are a separate package:
15+
```tsx
16+
import { SearchIcon, CloseIcon } from '@tiny-design/icons';
17+
```
18+
19+
## Key Conventions
20+
21+
- **CSS prefix**: `ty-` (e.g., `.ty-btn`, `.ty-modal`), customizable via `ConfigProvider`
22+
- **BEM naming**: `ty-component`, `ty-component__element`, `ty-component_modifier`
23+
- **Sizes**: `'sm' | 'md' | 'lg'` — used by Button, Input, Select, Table, etc.
24+
- **All components support**: `style`, `className`, `prefixCls`, and `ref` (via forwardRef)
25+
26+
## Component Quick Reference
27+
28+
### Buttons
29+
```tsx
30+
<Button btnType="primary" size="md" loading={isLoading} icon={<SearchIcon />}>
31+
Search
32+
</Button>
33+
<Button btnType="danger">Delete</Button>
34+
<Button btnType="outline" round>Rounded</Button>
35+
```
36+
Button types: `'default' | 'primary' | 'outline' | 'ghost' | 'link' | 'info' | 'danger' | 'warning' | 'success'`
37+
38+
### Forms
39+
```tsx
40+
<Form layout="vertical" onFinish={handleSubmit}>
41+
<Form.Item label="Email" name="email" rules={[{ required: true, type: 'email' }]}>
42+
<Input prefix={<MailIcon />} allowClear />
43+
</Form.Item>
44+
<Form.Item label="Password" name="password" rules={[{ required: true }]}>
45+
<InputPassword />
46+
</Form.Item>
47+
<Form.Item>
48+
<Button btnType="primary" htmlType="submit">Submit</Button>
49+
</Form.Item>
50+
</Form>
51+
```
52+
53+
### Table
54+
```tsx
55+
<Table
56+
columns={[
57+
{ title: 'Name', dataIndex: 'name' },
58+
{ title: 'Age', dataIndex: 'age', sorter: (a, b) => a.age - b.age },
59+
{ title: 'Action', render: (_, record) => <Button btnType="link">Edit</Button> },
60+
]}
61+
dataSource={data}
62+
rowKey="id"
63+
rowSelection={{ selectedRowKeys, onChange: setSelectedRowKeys }}
64+
pagination={{ current, pageSize: 10, total, onChange: setCurrent }}
65+
loading={isLoading}
66+
/>
67+
```
68+
69+
### Modal
70+
```tsx
71+
<Modal
72+
visible={visible}
73+
header="Title"
74+
centered
75+
onConfirm={() => handleOk()}
76+
onCancel={() => setVisible(false)}
77+
confirmLoading={loading}
78+
>
79+
Content here
80+
</Modal>
81+
```
82+
83+
### Feedback (imperative)
84+
```tsx
85+
Message.success('Saved!');
86+
Message.error('Something went wrong');
87+
Notification.open({ title: 'Alert', description: 'Details here' });
88+
```
89+
90+
### Select
91+
```tsx
92+
<Select
93+
options={[{ label: 'Option A', value: 'a' }, { label: 'Option B', value: 'b' }]}
94+
mode="multiple"
95+
searchable
96+
placeholder="Choose..."
97+
onChange={(val) => setValue(val)}
98+
/>
99+
```
100+
101+
### Layout
102+
```tsx
103+
<Layout>
104+
<Layout.Header>Header</Layout.Header>
105+
<Layout>
106+
<Layout.Sider>Sidebar</Layout.Sider>
107+
<Layout.Content>Main</Layout.Content>
108+
</Layout>
109+
<Layout.Footer>Footer</Layout.Footer>
110+
</Layout>
111+
```
112+
113+
### Drawer
114+
```tsx
115+
<Drawer visible={visible} placement="right" width={400} onClose={() => setVisible(false)}>
116+
Drawer content
117+
</Drawer>
118+
```
119+
120+
### Tabs
121+
```tsx
122+
<Tabs type="card" onChange={(key) => setActiveKey(key)}>
123+
<Tabs.TabPane tab="Tab 1" key="1">Content 1</Tabs.TabPane>
124+
<Tabs.TabPane tab="Tab 2" key="2">Content 2</Tabs.TabPane>
125+
</Tabs>
126+
```
127+
128+
### Alert
129+
```tsx
130+
<Alert type="warning" closable banner message="This is a warning" />
131+
```
132+
133+
## Common Patterns
134+
135+
### ConfigProvider (theme/locale)
136+
```tsx
137+
<ConfigProvider prefixCls="my-app" themeMode="dark">
138+
<App />
139+
</ConfigProvider>
140+
```
141+
142+
### Grid Layout (24 columns)
143+
```tsx
144+
<Grid.Row gutter={16}>
145+
<Grid.Col span={8}>Col 1</Grid.Col>
146+
<Grid.Col span={8}>Col 2</Grid.Col>
147+
<Grid.Col span={8}>Col 3</Grid.Col>
148+
</Grid.Row>
149+
```
150+
151+
### Flex
152+
```tsx
153+
<Flex gap={12} align="center" justify="space-between">
154+
<span>Left</span>
155+
<Button btnType="primary">Right</Button>
156+
</Flex>
157+
```
158+
159+
## Rules When Generating Code
160+
161+
1. Always use `btnType` (not `type`) for Button variants
162+
2. Modal uses `visible` (not `open`), `header` (not `title`), `onConfirm`/`onCancel`
163+
3. Alert uses `type` for variant, not `severity`
164+
4. Table columns use `dataIndex` to map to data fields
165+
5. Form.Item uses `name` for field binding and `rules` for validation
166+
6. Use `Message.success()` / `Message.error()` for toast-like feedback (imperative API)
167+
7. Use `Notification.open()` for rich notifications (imperative API)
168+
8. Drawer uses `visible` and `onClose`
169+
9. All size props accept `'sm' | 'md' | 'lg'`, not `'small' | 'medium' | 'large'`
170+
10. Import styles: `import '@tiny-design/react/es/style.css'`

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
- **Accessible** — follows [WAI-ARIA](https://www.w3.org/WAI/standards-guidelines/aria/) standards with keyboard navigation support
4949
- **Lightweight** — tree-shakeable ESM/CJS builds; styles auto-import alongside components
5050
- **i18n** — English and Chinese built in
51+
- **AI-ready**`llms.txt`, `.cursorrules`, and MCP server for seamless AI-assisted development
5152

5253
## Quick Start
5354

0 commit comments

Comments
 (0)