create-agent-skills 1.1.1 → 1.1.4
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 +1 -0
- package/package.json +1 -1
- package/skills/git-commit/SKILL.md +67 -18
- package/skills/landing-page-slider/SKILL.md +252 -0
- package/skills/landing-page-slider/examples/landing-page.md +51 -0
- package/skills/landing-page-slider/examples/project-structure.md +23 -0
- package/skills/landing-page-slider/examples/slide-component.md +342 -0
- package/skills/landing-page-slider/examples/slider-component.md +152 -0
- package/skills/landing-page-slider/examples/theme.md +197 -0
- package/skills/landing-page-slider/examples/use-keyboard.md +86 -0
- package/skills/rust-backend/SKILL.md +289 -0
- package/skills/rust-backend/examples/api-layer.md +462 -0
- package/skills/rust-backend/examples/database-layer.md +417 -0
- package/skills/rust-backend/examples/docker-packaging.md +459 -0
- package/skills/rust-backend/examples/domain-layer.md +526 -0
- package/skills/rust-backend/examples/project-structure.md +312 -0
- package/skills/rust-backend/examples/service-layer.md +617 -0
- package/skills/rust-backend/resources/cargo-template.toml +223 -0
- package/SKILL_GUIDELINES.md +0 -339
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ npx create-agent-skills
|
|
|
45
45
|
| `git-pr` | Creates well-structured pull requests |
|
|
46
46
|
| `git-review` | Reviews PRs for code quality and best practices |
|
|
47
47
|
| `maestro-testing` | Write E2E tests for mobile/web apps using Maestro |
|
|
48
|
+
| `rust-backend` | Build backend services with Rust and Clean Architecture |
|
|
48
49
|
| `tailwindcss-v4` | Tailwind CSS v4 setup and migration guide |
|
|
49
50
|
| `tauri-v2` | Build desktop apps with Tauri v2 + React |
|
|
50
51
|
| `testing` | Helps write unit, integration, and E2E tests |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-commit
|
|
3
|
-
description: Guide for
|
|
3
|
+
description: Guide for Git commit messages and pushing code. Use when user says "commit", "push code", "push to git", "save changes to git", "git add and commit", "commit and push", or needs help writing commit messages following Conventional Commits.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Git Commit Messages
|
|
@@ -9,12 +9,17 @@ This skill provides guidance for writing clear, consistent commit messages follo
|
|
|
9
9
|
|
|
10
10
|
## When to Use This Skill
|
|
11
11
|
|
|
12
|
+
Use this skill when user requests any of these (in any language):
|
|
13
|
+
- "commit", "push code", "push to git", "commit và push"
|
|
14
|
+
- "save changes to git", "lưu code lên git"
|
|
15
|
+
- "git add and commit", "commit changes"
|
|
12
16
|
- Writing commit messages for any code changes
|
|
13
17
|
- Ensuring commit history is clean and readable
|
|
14
18
|
- Following team/project commit conventions
|
|
15
19
|
- Generating changelogs automatically
|
|
16
20
|
- **Ensuring documentation is up-to-date with code changes**
|
|
17
21
|
|
|
22
|
+
|
|
18
23
|
## Pre-commit Checklist
|
|
19
24
|
|
|
20
25
|
Before committing, ask yourself:
|
|
@@ -31,13 +36,16 @@ Before committing, ask yourself:
|
|
|
31
36
|
## Commit Message Format
|
|
32
37
|
|
|
33
38
|
```
|
|
34
|
-
<type>(<scope>): <subject>
|
|
39
|
+
(emoji)<type>(<scope>): <subject>
|
|
35
40
|
|
|
36
41
|
[optional body]
|
|
37
42
|
|
|
38
43
|
[optional footer(s)]
|
|
39
44
|
```
|
|
40
45
|
|
|
46
|
+
> [!NOTE]
|
|
47
|
+
> **Emoji is required** for all commit messages. See the emoji mapping below.
|
|
48
|
+
|
|
41
49
|
### Components
|
|
42
50
|
|
|
43
51
|
| Part | Required | Description |
|
|
@@ -63,23 +71,64 @@ Before committing, ask yourself:
|
|
|
63
71
|
| `ci` | 👷 CI configuration | `ci: add GitHub Actions` |
|
|
64
72
|
| `chore` | ♻️ Other maintenance | `chore: update .gitignore` |
|
|
65
73
|
|
|
74
|
+
## Emoji Prefix Format (Required)
|
|
75
|
+
|
|
76
|
+
All commit messages **must** be prefixed with emojis for better visual scanning and commit categorization:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
(emoji)<type>(<scope>): <subject>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Format Examples
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
🐛 fix(api): handle null response
|
|
86
|
+
✨ feat(auth): add OAuth login
|
|
87
|
+
📚 docs: update installation guide
|
|
88
|
+
🔧 refactor(utils): simplify validation logic
|
|
89
|
+
🚀 perf(query): optimize database queries
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Type to Emoji Mapping
|
|
93
|
+
|
|
94
|
+
| Type | Emoji | Unicode |
|
|
95
|
+
|------|-------|---------|
|
|
96
|
+
| `feat` | ✨ | `:sparkles:` |
|
|
97
|
+
| `fix` | 🐛 | `:bug:` |
|
|
98
|
+
| `docs` | 📚 | `:books:` |
|
|
99
|
+
| `style` | 🎨 | `:art:` |
|
|
100
|
+
| `refactor` | 🔧 | `:wrench:` |
|
|
101
|
+
| `perf` | 🚀 | `:rocket:` |
|
|
102
|
+
| `test` | 🧪 | `:test_tube:` |
|
|
103
|
+
| `build` | 📦 | `:package:` |
|
|
104
|
+
| `ci` | 👷 | `:construction_worker:` |
|
|
105
|
+
| `chore` | ♻️ | `:recycle:` |
|
|
106
|
+
| `revert` | ⏪ | `:rewind:` |
|
|
107
|
+
| `hotfix` | 🚑 | `:ambulance:` |
|
|
108
|
+
| `security` | 🔒 | `:lock:` |
|
|
109
|
+
| `wip` | 🚧 | `:construction:` |
|
|
110
|
+
|
|
111
|
+
> [!IMPORTANT]
|
|
112
|
+
> Using emojis is **required** for all commit messages. This ensures consistent commit history and makes it easier to scan and categorize changes in the git log.
|
|
113
|
+
|
|
66
114
|
## Subject Line Rules
|
|
67
115
|
|
|
68
|
-
1. **
|
|
69
|
-
2. **
|
|
70
|
-
3. **No
|
|
71
|
-
4. **
|
|
72
|
-
5. **
|
|
116
|
+
1. **Must start with emoji**: See required emoji mapping below
|
|
117
|
+
2. **Use imperative mood**: "add" not "added" or "adds"
|
|
118
|
+
3. **No capitalization**: start lowercase
|
|
119
|
+
4. **No period at the end**
|
|
120
|
+
5. **Max 50 characters** (hard limit: 72)
|
|
121
|
+
6. **Be specific**: what changed, not why
|
|
73
122
|
|
|
74
123
|
```diff
|
|
75
124
|
- feat: Updated the login page
|
|
76
|
-
+ feat(auth): add password reset form
|
|
125
|
+
+ ✨ feat(auth): add password reset form
|
|
77
126
|
|
|
78
127
|
- fix: bug fix
|
|
79
|
-
+ fix(cart): prevent duplicate items
|
|
128
|
+
+ 🐛 fix(cart): prevent duplicate items
|
|
80
129
|
|
|
81
|
-
-
|
|
82
|
-
+ feat(dashboard): add real-time notifications
|
|
130
|
+
- added new feature
|
|
131
|
+
+ ✨ feat(dashboard): add real-time notifications
|
|
83
132
|
```
|
|
84
133
|
|
|
85
134
|
## Body Guidelines
|
|
@@ -90,7 +139,7 @@ Before committing, ask yourself:
|
|
|
90
139
|
- Use bullet points for multiple changes
|
|
91
140
|
|
|
92
141
|
```
|
|
93
|
-
feat(auth): add two-factor authentication
|
|
142
|
+
✨ feat(auth): add two-factor authentication
|
|
94
143
|
|
|
95
144
|
- Add TOTP-based 2FA using authenticator apps
|
|
96
145
|
- Store encrypted backup codes in database
|
|
@@ -105,7 +154,7 @@ who require MFA compliance.
|
|
|
105
154
|
### Breaking Changes
|
|
106
155
|
|
|
107
156
|
```
|
|
108
|
-
feat(api)
|
|
157
|
+
✨ feat(api)!: change response format
|
|
109
158
|
|
|
110
159
|
BREAKING CHANGE: API now returns data in envelope format.
|
|
111
160
|
Clients must update to extract data from `response.data`.
|
|
@@ -114,7 +163,7 @@ Clients must update to extract data from `response.data`.
|
|
|
114
163
|
### Issue References
|
|
115
164
|
|
|
116
165
|
```
|
|
117
|
-
fix(login): handle expired tokens
|
|
166
|
+
🐛 fix(login): handle expired tokens
|
|
118
167
|
|
|
119
168
|
Closes #123
|
|
120
169
|
Fixes #456
|
|
@@ -142,19 +191,19 @@ What type of change?
|
|
|
142
191
|
### Feature
|
|
143
192
|
|
|
144
193
|
```bash
|
|
145
|
-
git commit -m "feat(checkout): add Apple Pay support"
|
|
194
|
+
git commit -m "✨ feat(checkout): add Apple Pay support"
|
|
146
195
|
```
|
|
147
196
|
|
|
148
197
|
### Bug Fix
|
|
149
198
|
|
|
150
199
|
```bash
|
|
151
|
-
git commit -m "fix(auth): prevent session timeout on active users"
|
|
200
|
+
git commit -m "🐛 fix(auth): prevent session timeout on active users"
|
|
152
201
|
```
|
|
153
202
|
|
|
154
203
|
### With Body
|
|
155
204
|
|
|
156
205
|
```bash
|
|
157
|
-
git commit -m "refactor(api): migrate to async/await
|
|
206
|
+
git commit -m "🔧 refactor(api): migrate to async/await
|
|
158
207
|
|
|
159
208
|
Replace callback-based API calls with async/await pattern.
|
|
160
209
|
This improves readability and error handling.
|
|
@@ -165,7 +214,7 @@ Refs #234"
|
|
|
165
214
|
### Breaking Change
|
|
166
215
|
|
|
167
216
|
```bash
|
|
168
|
-
git commit -m "feat(api)!: change authentication to JWT
|
|
217
|
+
git commit -m "✨ feat(api)!: change authentication to JWT
|
|
169
218
|
|
|
170
219
|
BREAKING CHANGE: Session-based auth is no longer supported.
|
|
171
220
|
All clients must use Bearer tokens."
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: landing-page-slider
|
|
3
|
+
description: Creates landing pages with integrated slider/slideshow for knowledge sharing presentations. Use ONLY when user explicitly requests BOTH landing page AND slider/slideshow functionality together. NOT for regular landing pages or standalone sliders.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Landing Page Slider
|
|
7
|
+
|
|
8
|
+
Build beautiful landing pages that transform into fullscreen presentations with keyboard navigation, glassmorphism effects, and professional animations.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
> [!IMPORTANT]
|
|
13
|
+
> This skill is for projects that need **BOTH** landing page **AND** slider/slideshow functionality combined.
|
|
14
|
+
|
|
15
|
+
- User explicitly asks for "landing page with slider" or "presentation landing page"
|
|
16
|
+
- Building knowledge sharing pages with slideshow mode
|
|
17
|
+
- Creating marketing sites that can toggle into presentation mode
|
|
18
|
+
- NOT for: Regular landing pages, standalone carousel/sliders, simple slideshows
|
|
19
|
+
|
|
20
|
+
## Tech Stack
|
|
21
|
+
|
|
22
|
+
| Technology | Version | Purpose |
|
|
23
|
+
|------------|---------|---------|
|
|
24
|
+
| Vite | 5+ | Build tool |
|
|
25
|
+
| React | 18+ | UI framework |
|
|
26
|
+
| Tailwind CSS | v4 | Styling (CSS-first) |
|
|
27
|
+
| Lucide React | Latest | Professional icons |
|
|
28
|
+
| Framer Motion | Latest | Animations |
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### Step 1: Create Project
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm create vite@latest my-landing -- --template react-ts
|
|
36
|
+
cd my-landing
|
|
37
|
+
npm install
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Step 2: Install Dependencies
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install tailwindcss @tailwindcss/vite lucide-react framer-motion
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 3: Configure Vite
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
// vite.config.ts
|
|
50
|
+
import { defineConfig } from 'vite'
|
|
51
|
+
import react from '@vitejs/plugin-react'
|
|
52
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
53
|
+
|
|
54
|
+
export default defineConfig({
|
|
55
|
+
plugins: [react(), tailwindcss()],
|
|
56
|
+
})
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Step 4: Setup Tailwind CSS v4
|
|
60
|
+
|
|
61
|
+
```css
|
|
62
|
+
/* src/index.css */
|
|
63
|
+
@import "tailwindcss";
|
|
64
|
+
|
|
65
|
+
@theme {
|
|
66
|
+
/* Primary gradient colors using oklch for P3 display */
|
|
67
|
+
--color-primary: oklch(0.65 0.18 250);
|
|
68
|
+
--color-secondary: oklch(0.55 0.15 280);
|
|
69
|
+
--color-accent: oklch(0.75 0.2 160);
|
|
70
|
+
|
|
71
|
+
/* Glassmorphism colors */
|
|
72
|
+
--color-glass-bg: oklch(0.15 0.02 260 / 0.6);
|
|
73
|
+
--color-glass-border: oklch(1 0 0 / 0.1);
|
|
74
|
+
|
|
75
|
+
/* Animations */
|
|
76
|
+
--animate-slide-in: slide-in 0.5s ease-out;
|
|
77
|
+
--animate-fade-up: fade-up 0.6s ease-out;
|
|
78
|
+
--animate-glow: glow 2s ease-in-out infinite;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@keyframes slide-in {
|
|
82
|
+
from { transform: translateX(100%); opacity: 0; }
|
|
83
|
+
to { transform: translateX(0); opacity: 1; }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@keyframes fade-up {
|
|
87
|
+
from { transform: translateY(20px); opacity: 0; }
|
|
88
|
+
to { transform: translateY(0); opacity: 1; }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@keyframes glow {
|
|
92
|
+
0%, 100% { box-shadow: 0 0 20px oklch(0.65 0.18 250 / 0.3); }
|
|
93
|
+
50% { box-shadow: 0 0 40px oklch(0.65 0.18 250 / 0.6); }
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Core Components
|
|
98
|
+
|
|
99
|
+
### 1. Slider Container
|
|
100
|
+
|
|
101
|
+
The main component that manages presentation mode and slide navigation.
|
|
102
|
+
|
|
103
|
+
Key features:
|
|
104
|
+
- Toggle between landing page and presentation mode
|
|
105
|
+
- Track current slide index
|
|
106
|
+
- Handle animations between slides
|
|
107
|
+
- Fullscreen support
|
|
108
|
+
|
|
109
|
+
### 2. Slide Component
|
|
110
|
+
|
|
111
|
+
Individual content sections that become fullscreen slides.
|
|
112
|
+
|
|
113
|
+
Key features:
|
|
114
|
+
- Content areas (title, description, visuals)
|
|
115
|
+
- Entry/exit animations
|
|
116
|
+
- Glassmorphism card styling
|
|
117
|
+
|
|
118
|
+
### 3. Keyboard Navigation Hook
|
|
119
|
+
|
|
120
|
+
Custom hook for keyboard shortcuts.
|
|
121
|
+
|
|
122
|
+
| Key | Action |
|
|
123
|
+
|-----|--------|
|
|
124
|
+
| `←` / `→` | Navigate slides |
|
|
125
|
+
| `Space` | Next slide |
|
|
126
|
+
| `Escape` | Exit presentation |
|
|
127
|
+
| `F` | Toggle fullscreen |
|
|
128
|
+
| `P` | Toggle presentation mode |
|
|
129
|
+
|
|
130
|
+
## Glassmorphism Patterns
|
|
131
|
+
|
|
132
|
+
### Card with Blur
|
|
133
|
+
|
|
134
|
+
```jsx
|
|
135
|
+
<div className="
|
|
136
|
+
bg-glass-bg
|
|
137
|
+
backdrop-blur-xl
|
|
138
|
+
border border-glass-border
|
|
139
|
+
rounded-2xl
|
|
140
|
+
shadow-2xl
|
|
141
|
+
">
|
|
142
|
+
{/* content */}
|
|
143
|
+
</div>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Gradient Orbs (Background)
|
|
147
|
+
|
|
148
|
+
```jsx
|
|
149
|
+
<div className="absolute inset-0 overflow-hidden -z-10">
|
|
150
|
+
<div className="
|
|
151
|
+
absolute -top-40 -right-40 w-80 h-80
|
|
152
|
+
bg-primary/30 rounded-full blur-3xl
|
|
153
|
+
" />
|
|
154
|
+
<div className="
|
|
155
|
+
absolute -bottom-40 -left-40 w-80 h-80
|
|
156
|
+
bg-secondary/30 rounded-full blur-3xl
|
|
157
|
+
" />
|
|
158
|
+
</div>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Animation Patterns
|
|
162
|
+
|
|
163
|
+
### Staggered Children (Framer Motion)
|
|
164
|
+
|
|
165
|
+
```jsx
|
|
166
|
+
const container = {
|
|
167
|
+
hidden: { opacity: 0 },
|
|
168
|
+
show: {
|
|
169
|
+
opacity: 1,
|
|
170
|
+
transition: { staggerChildren: 0.1 }
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const item = {
|
|
175
|
+
hidden: { y: 20, opacity: 0 },
|
|
176
|
+
show: { y: 0, opacity: 1 }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
<motion.div variants={container} initial="hidden" animate="show">
|
|
180
|
+
{items.map(i => <motion.div key={i} variants={item} />)}
|
|
181
|
+
</motion.div>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Slide Transitions
|
|
185
|
+
|
|
186
|
+
```jsx
|
|
187
|
+
<AnimatePresence mode="wait">
|
|
188
|
+
<motion.div
|
|
189
|
+
key={currentSlide}
|
|
190
|
+
initial={{ x: 100, opacity: 0 }}
|
|
191
|
+
animate={{ x: 0, opacity: 1 }}
|
|
192
|
+
exit={{ x: -100, opacity: 0 }}
|
|
193
|
+
transition={{ duration: 0.3, ease: "easeOut" }}
|
|
194
|
+
>
|
|
195
|
+
{slides[currentSlide]}
|
|
196
|
+
</motion.div>
|
|
197
|
+
</AnimatePresence>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Best Practices
|
|
201
|
+
|
|
202
|
+
### Visual Excellence
|
|
203
|
+
|
|
204
|
+
1. **Color Harmony** - Use oklch colors for consistent, vibrant gradients
|
|
205
|
+
2. **Depth Layers** - Combine blur + transparency + subtle borders
|
|
206
|
+
3. **Motion Purpose** - Animate to guide attention, not distract
|
|
207
|
+
4. **Dark Mode First** - Glassmorphism shines on dark backgrounds
|
|
208
|
+
|
|
209
|
+
### Performance
|
|
210
|
+
|
|
211
|
+
1. **Lazy Load** - Load slide content on demand
|
|
212
|
+
2. **will-change** - Add for animated elements
|
|
213
|
+
3. **Reduce Motion** - Respect `prefers-reduced-motion`
|
|
214
|
+
|
|
215
|
+
### Accessibility
|
|
216
|
+
|
|
217
|
+
1. **Focus Visible** - Clear focus indicators in presentation mode
|
|
218
|
+
2. **Keyboard Nav** - Full keyboard support (already built-in)
|
|
219
|
+
3. **ARIA Labels** - Label navigation controls
|
|
220
|
+
|
|
221
|
+
## Decision Tree
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
What do you need?
|
|
225
|
+
├── New landing page project
|
|
226
|
+
│ └── Follow Quick Start (Steps 1-4)
|
|
227
|
+
├── Add slider to existing React app
|
|
228
|
+
│ └── Copy Slider component + hook
|
|
229
|
+
├── Customize visual style
|
|
230
|
+
│ └── Modify @theme block in CSS
|
|
231
|
+
└── Change keyboard shortcuts
|
|
232
|
+
└── Edit useKeyboard hook
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Examples & Resources
|
|
236
|
+
|
|
237
|
+
### Examples
|
|
238
|
+
- [Project Structure](./examples/project-structure.md) - Complete folder layout
|
|
239
|
+
- [Slider Component](./examples/slider-component.md) - Main slider logic
|
|
240
|
+
- [Slide Component](./examples/slide-component.md) - Individual slide + content components
|
|
241
|
+
- [Keyboard Hook](./examples/use-keyboard.md) - Keyboard navigation
|
|
242
|
+
- [Theme CSS](./examples/theme.md) - Tailwind v4 theme setup
|
|
243
|
+
- [Landing Page](./examples/landing-page.md) - Full page example
|
|
244
|
+
|
|
245
|
+
## Common Mistakes
|
|
246
|
+
|
|
247
|
+
| Mistake | Solution |
|
|
248
|
+
|---------|----------|
|
|
249
|
+
| Blur not working | Ensure parent has `position: relative` or `overflow: hidden` |
|
|
250
|
+
| Animations janky | Add `will-change: transform` to animated elements |
|
|
251
|
+
| Colors look washed | Use oklch for wider gamut support |
|
|
252
|
+
| Keyboard not working | Check if focus is on the container element |
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
```tsx
|
|
2
|
+
import { Slider } from './components/Slider'
|
|
3
|
+
import { Slide } from './components/Slider'
|
|
4
|
+
import { BulletList } from './components/Slider'
|
|
5
|
+
import { Sparkles } from 'lucide-react'
|
|
6
|
+
|
|
7
|
+
function App() {
|
|
8
|
+
return (
|
|
9
|
+
<div className="min-h-screen bg-bg-base text-text-primary">
|
|
10
|
+
<main>
|
|
11
|
+
<Slider className="min-h-screen">
|
|
12
|
+
{/* Slide 1 */}
|
|
13
|
+
<Slide
|
|
14
|
+
icon={Sparkles}
|
|
15
|
+
subtitle="Session"
|
|
16
|
+
title="Your Title Here"
|
|
17
|
+
description="Your description here."
|
|
18
|
+
/>
|
|
19
|
+
|
|
20
|
+
{/* Slide 2 with content */}
|
|
21
|
+
<Slide
|
|
22
|
+
title="Key Points"
|
|
23
|
+
subtitle="Topic"
|
|
24
|
+
>
|
|
25
|
+
<BulletList items={[
|
|
26
|
+
{ title: 'Point 1', description: 'Description 1' },
|
|
27
|
+
{ title: 'Point 2', description: 'Description 2' },
|
|
28
|
+
{ title: 'Point 3', description: 'Description 3' },
|
|
29
|
+
]} />
|
|
30
|
+
</Slide>
|
|
31
|
+
|
|
32
|
+
{/* Slide 3 with split layout */}
|
|
33
|
+
<Slide
|
|
34
|
+
layout="split"
|
|
35
|
+
title="Split Layout"
|
|
36
|
+
description="Content on left, image on right"
|
|
37
|
+
image="/path/to/image.png"
|
|
38
|
+
>
|
|
39
|
+
<BulletList items={[
|
|
40
|
+
{ title: 'Feature 1' },
|
|
41
|
+
{ title: 'Feature 2' },
|
|
42
|
+
]} />
|
|
43
|
+
</Slide>
|
|
44
|
+
</Slider>
|
|
45
|
+
</main>
|
|
46
|
+
</div>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default App
|
|
51
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
```
|
|
2
|
+
src/
|
|
3
|
+
├── components/
|
|
4
|
+
│ ├── Slider/
|
|
5
|
+
│ │ ├── index.ts # Re-exports
|
|
6
|
+
│ │ ├── Slider.tsx # Main slider container
|
|
7
|
+
│ │ ├── Slide.tsx # Individual slide component
|
|
8
|
+
│ │ └── SlideContent.tsx # Content components
|
|
9
|
+
│ └── ui/
|
|
10
|
+
│ └── index.ts
|
|
11
|
+
├── hooks/
|
|
12
|
+
│ ├── index.ts
|
|
13
|
+
│ ├── useKeyboard.ts
|
|
14
|
+
│ ├── useFullscreen.ts
|
|
15
|
+
│ └── useSlideProgress.ts
|
|
16
|
+
├── slides/
|
|
17
|
+
│ ├── index.ts
|
|
18
|
+
│ └── *.tsx # Slide files
|
|
19
|
+
├── App.tsx
|
|
20
|
+
├── main.tsx
|
|
21
|
+
├── index.css # Tailwind v4 theme
|
|
22
|
+
└── vite-env.d.ts
|
|
23
|
+
```
|