├── .npmrc
├── server
└── tsconfig.json
├── app
├── app.vue
├── assets
│ └── css
│ │ └── main.css
├── app.config.ts
└── components
│ ├── ThemeToggle.vue
│ ├── AnimatedIconButton.vue
│ ├── Lucide
│ ├── RotateCCW.vue
│ ├── RotateCW.vue
│ ├── Moon.vue
│ ├── MoonAlt.vue
│ ├── Bell.vue
│ ├── ArrowBigDown.vue
│ ├── ArrowBigRight.vue
│ ├── ArrowBigUp.vue
│ ├── ArrowBigLeft.vue
│ ├── RefreshCW.vue
│ ├── CircleHelp.vue
│ ├── ChartSpline.vue
│ ├── RefreshCCWDot.vue
│ ├── SmartphoneCharging.vue
│ ├── KeyCircle.vue
│ ├── Vibrate.vue
│ ├── Logout.vue
│ ├── Cart.vue
│ ├── WavesLadder.vue
│ ├── CircleCheck.vue
│ ├── KeySquare.vue
│ ├── RefreshCWOff.vue
│ ├── ArrowBigDownDash.vue
│ ├── ArrowBigRightDash.vue
│ ├── ArrowBigUpDash.vue
│ ├── Facebook.vue
│ ├── ArrowBigLeftDash.vue
│ ├── Home.vue
│ ├── Sun.vue
│ ├── SunDim.vue
│ ├── Key.vue
│ ├── Waves.vue
│ ├── SunMedium.vue
│ ├── Twitter.vue
│ ├── ArrowUp.vue
│ ├── ArrowDown.vue
│ ├── Users.vue
│ ├── Settings.vue
│ ├── Search.vue
│ ├── CloudRain.vue
│ ├── CloudRainWind.vue
│ ├── UserRound.vue
│ ├── Redo.vue
│ ├── FileStack.vue
│ ├── Sunset.vue
│ ├── Workflow.vue
│ ├── CalendarDays.vue
│ ├── AirVent.vue
│ ├── Menu.vue
│ ├── SunMoon.vue
│ ├── BluetoothSearching.vue
│ ├── AArrowUp.vue
│ ├── AArrowDown.vue
│ ├── SquareArrowDown.vue
│ ├── SquareArrowRight.vue
│ ├── SquareArrowLeft.vue
│ ├── SquareArrowUp.vue
│ ├── CloudSun.vue
│ ├── Clock.vue
│ ├── SquareStack.vue
│ ├── SquareActivity.vue
│ ├── UndoDot.vue
│ ├── RedoDot.vue
│ ├── Tornado.vue
│ ├── Twitch.vue
│ ├── Youtube.vue
│ ├── Delete.vue
│ ├── Earth.vue
│ ├── History.vue
│ ├── WindArrowDown.vue
│ ├── Dribbble.vue
│ ├── AudioLines.vue
│ ├── Discord.vue
│ ├── Linkedin.vue
│ ├── Instagram.vue
│ ├── Stethoscope.vue
│ ├── Connect.vue
│ └── AlarmClock.vue
│ └── ThemePicker.vue
├── public
└── favicon.ico
├── tsconfig.json
├── eslint.config.mjs
├── .gitignore
├── nuxt.config.ts
├── README.md
├── package.json
└── .cursor
└── rules
└── create-new-vue-motion-icon.mdc
/.npmrc:
--------------------------------------------------------------------------------
1 | shamefully-hoist=true
2 | strict-peer-dependencies=false
3 |
--------------------------------------------------------------------------------
/server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../.nuxt/tsconfig.server.json"
3 | }
4 |
--------------------------------------------------------------------------------
/app/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fayazara/animated-lucide-vue/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // https://nuxt.com/docs/guide/concepts/typescript
3 | "extends": "./.nuxt/tsconfig.json"
4 | }
5 |
--------------------------------------------------------------------------------
/app/assets/css/main.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss" theme(static);
2 | @import "@nuxt/ui";
3 |
4 | @theme {
5 | --font-sans: 'Public Sans', sans-serif;
6 | }
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | import withNuxt from './.nuxt/eslint.config.mjs'
3 |
4 | export default withNuxt(
5 | // Your custom configs here
6 | )
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Nuxt dev/build outputs
2 | .output
3 | .data
4 | .nuxt
5 | .nitro
6 | .cache
7 | dist
8 |
9 | # Node dependencies
10 | node_modules
11 |
12 | # Logs
13 | logs
14 | *.log
15 |
16 | # Misc
17 | .DS_Store
18 | .fleet
19 | .idea
20 |
21 | # Local env files
22 | .env
23 | .env.*
24 | !.env.example
25 |
--------------------------------------------------------------------------------
/app/app.config.ts:
--------------------------------------------------------------------------------
1 | export default defineAppConfig({
2 | // https://ui3.nuxt.dev/getting-started/theme#design-system
3 | ui: {
4 | colors: {
5 | primary: 'emerald',
6 | neutral: 'neutral',
7 | },
8 | button: {
9 | defaultVariants: {
10 | // Set default button color to neutral
11 | // color: 'neutral'
12 | }
13 | }
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/nuxt.config.ts:
--------------------------------------------------------------------------------
1 | // https://nuxt.com/docs/api/configuration/nuxt-config
2 | export default defineNuxtConfig({
3 | devtools: { enabled: true },
4 |
5 | modules: [
6 | '@nuxt/ui',
7 | '@nuxt/eslint',
8 | '@nuxt/content',
9 | '@nuxt/scripts',
10 | 'motion-v/nuxt'
11 | ],
12 |
13 | css: ['~/assets/css/main.css'],
14 |
15 | future: {
16 | compatibilityVersion: 4
17 | },
18 |
19 | compatibilityDate: '2024-11-27'
20 | })
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | Build and Ship Nuxt 3 fullstack starter apps with Auth, DB, Payments, Email & File storage, Teams - All written in Typescript
3 |
4 | Try [Supersaas today](https://supersaas.dev)
5 | ---
6 |
7 |
8 | [
](https://supersaas.dev?ref=github-onelink)
9 |
10 |
11 | # Lucide Animated Icons for Vue
12 |
13 | Ported from - https://icons.pqoqubbw.dev
14 |
15 | Work in progress
16 |
17 | ## Usage
18 | Install Motion Vue
19 |
20 | ```sh
21 | #pnpm
22 | pnpm i motion-v
23 |
24 | # npm
25 | npm i motion-v
26 | ```
27 |
28 | Copy the code from the icon component file from `/app/components/Lucide`
29 |
30 | ## Contributions
31 | 1. Animate these icons
32 | 2. Build the site - Needs copy code button, maybe a show code as well
33 |
--------------------------------------------------------------------------------
/app/components/ThemeToggle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nuxt-app",
3 | "private": true,
4 | "type": "module",
5 | "scripts": {
6 | "build": "nuxt build",
7 | "dev": "nuxt dev",
8 | "generate": "nuxt generate",
9 | "preview": "nuxt preview",
10 | "postinstall": "nuxt prepare",
11 | "lint": "eslint .",
12 | "lint:fix": "eslint --fix ."
13 | },
14 | "dependencies": {
15 | "@iconify-json/lucide": "^1.2.32",
16 | "@iconify-json/simple-icons": "^1.2.29",
17 | "@nuxt/content": "3.4.0",
18 | "@nuxt/scripts": "0.11.2",
19 | "@nuxt/ui": "^3.0.0",
20 | "@unhead/vue": "^2.0.0-rc.8",
21 | "motion-v": "^0.13.1",
22 | "nuxt": "^3.16.1"
23 | },
24 | "devDependencies": {
25 | "@nuxt/eslint": "^1.2.0",
26 | "eslint": "^9.22.0",
27 | "typescript": "^5.8.2"
28 | },
29 | "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a"
30 | }
31 |
--------------------------------------------------------------------------------
/app/components/AnimatedIconButton.vue:
--------------------------------------------------------------------------------
1 |
31 |
32 |
33 |
43 |
44 |
--------------------------------------------------------------------------------
/app/components/Lucide/RotateCCW.vue:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 |
84 |
--------------------------------------------------------------------------------
/app/components/Lucide/RotateCW.vue:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 |
84 |
--------------------------------------------------------------------------------
/app/components/Lucide/Moon.vue:
--------------------------------------------------------------------------------
1 |
65 |
66 |
67 |
91 |
92 |
--------------------------------------------------------------------------------
/app/components/Lucide/MoonAlt.vue:
--------------------------------------------------------------------------------
1 |
64 |
65 |
66 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/Bell.vue:
--------------------------------------------------------------------------------
1 |
56 |
57 |
58 |
87 |
88 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigDown.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
89 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigRight.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
89 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigUp.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
89 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigLeft.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
89 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/RefreshCW.vue:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 |
67 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/app/components/Lucide/CircleHelp.vue:
--------------------------------------------------------------------------------
1 |
56 |
57 |
58 |
66 |
90 |
91 |
--------------------------------------------------------------------------------
/app/components/Lucide/ChartSpline.vue:
--------------------------------------------------------------------------------
1 |
67 |
68 |
69 |
96 |
--------------------------------------------------------------------------------
/app/components/Lucide/RefreshCCWDot.vue:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 |
67 |
89 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/SmartphoneCharging.vue:
--------------------------------------------------------------------------------
1 |
65 |
66 |
67 |
75 |
95 |
96 |
--------------------------------------------------------------------------------
/app/components/Lucide/KeyCircle.vue:
--------------------------------------------------------------------------------
1 |
63 |
64 |
65 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/Vibrate.vue:
--------------------------------------------------------------------------------
1 |
64 |
65 |
66 |
74 |
98 |
99 |
--------------------------------------------------------------------------------
/app/components/Lucide/Logout.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
98 |
99 |
--------------------------------------------------------------------------------
/app/components/ThemePicker.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
15 |
16 |
27 |
28 |
29 |
30 |
31 |
32 |
102 |
--------------------------------------------------------------------------------
/app/components/Lucide/Cart.vue:
--------------------------------------------------------------------------------
1 |
64 |
65 |
66 |
90 |
--------------------------------------------------------------------------------
/app/components/Lucide/WavesLadder.vue:
--------------------------------------------------------------------------------
1 |
64 |
65 |
66 |
74 |
96 |
97 |
--------------------------------------------------------------------------------
/app/components/Lucide/CircleCheck.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
80 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/app/components/Lucide/KeySquare.vue:
--------------------------------------------------------------------------------
1 |
63 |
64 |
65 |
73 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/app/components/Lucide/RefreshCWOff.vue:
--------------------------------------------------------------------------------
1 |
60 |
61 |
62 |
70 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigDownDash.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigRightDash.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigUpDash.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/Facebook.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowBigLeftDash.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/Home.vue:
--------------------------------------------------------------------------------
1 |
67 |
68 |
69 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/Sun.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
80 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/app/components/Lucide/SunDim.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
80 |
101 |
102 |
--------------------------------------------------------------------------------
/app/components/Lucide/Key.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
95 |
96 |
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/Waves.vue:
--------------------------------------------------------------------------------
1 |
59 |
60 |
61 |
69 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/app/components/Lucide/SunMedium.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
80 |
101 |
102 |
--------------------------------------------------------------------------------
/app/components/Lucide/Twitter.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
100 |
101 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowUp.vue:
--------------------------------------------------------------------------------
1 |
72 |
73 |
74 |
82 |
104 |
105 |
--------------------------------------------------------------------------------
/app/components/Lucide/ArrowDown.vue:
--------------------------------------------------------------------------------
1 |
72 |
73 |
74 |
82 |
104 |
105 |
--------------------------------------------------------------------------------
/app/components/Lucide/Users.vue:
--------------------------------------------------------------------------------
1 |
71 |
72 |
73 |
81 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/app/components/Lucide/Settings.vue:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 |
88 |
89 |
--------------------------------------------------------------------------------
/app/components/Lucide/Search.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
108 |
109 |
--------------------------------------------------------------------------------
/app/components/Lucide/CloudRain.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
103 |
104 |
--------------------------------------------------------------------------------
/app/components/Lucide/CloudRainWind.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
103 |
104 |
--------------------------------------------------------------------------------
/app/components/Lucide/UserRound.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/app/components/Lucide/Redo.vue:
--------------------------------------------------------------------------------
1 |
72 |
73 |
74 |
82 |
104 |
105 |
--------------------------------------------------------------------------------
/app/components/Lucide/FileStack.vue:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 |
61 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/app/components/Lucide/Sunset.vue:
--------------------------------------------------------------------------------
1 |
76 |
77 |
78 |
86 |
115 |
116 |
--------------------------------------------------------------------------------
/app/components/Lucide/Workflow.vue:
--------------------------------------------------------------------------------
1 |
67 |
68 |
69 |
77 |
115 |
116 |
--------------------------------------------------------------------------------
/app/components/Lucide/CalendarDays.vue:
--------------------------------------------------------------------------------
1 |
77 |
78 |
79 |
87 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/app/components/Lucide/AirVent.vue:
--------------------------------------------------------------------------------
1 |
74 |
75 |
76 |
84 |
110 |
111 |
--------------------------------------------------------------------------------
/app/components/Lucide/Menu.vue:
--------------------------------------------------------------------------------
1 |
69 |
70 |
71 |
79 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/SunMoon.vue:
--------------------------------------------------------------------------------
1 |
83 |
84 |
85 |
93 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/BluetoothSearching.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/app/components/Lucide/AArrowUp.vue:
--------------------------------------------------------------------------------
1 |
69 |
70 |
71 |
79 |
113 |
114 |
--------------------------------------------------------------------------------
/app/components/Lucide/AArrowDown.vue:
--------------------------------------------------------------------------------
1 |
72 |
73 |
74 |
82 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareArrowDown.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
114 |
115 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareArrowRight.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
114 |
115 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareArrowLeft.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
114 |
115 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareArrowUp.vue:
--------------------------------------------------------------------------------
1 |
73 |
74 |
75 |
83 |
114 |
115 |
--------------------------------------------------------------------------------
/app/components/Lucide/CloudSun.vue:
--------------------------------------------------------------------------------
1 |
82 |
83 |
84 |
92 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/Clock.vue:
--------------------------------------------------------------------------------
1 |
83 |
84 |
85 |
93 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareStack.vue:
--------------------------------------------------------------------------------
1 |
69 |
70 |
71 |
79 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/SquareActivity.vue:
--------------------------------------------------------------------------------
1 |
87 |
88 |
89 |
97 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/app/components/Lucide/UndoDot.vue:
--------------------------------------------------------------------------------
1 |
80 |
81 |
82 |
90 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/RedoDot.vue:
--------------------------------------------------------------------------------
1 |
80 |
81 |
82 |
90 |
119 |
120 |
--------------------------------------------------------------------------------
/app/components/Lucide/Tornado.vue:
--------------------------------------------------------------------------------
1 |
75 |
76 |
77 |
85 |
127 |
128 |
--------------------------------------------------------------------------------
/app/components/Lucide/Twitch.vue:
--------------------------------------------------------------------------------
1 |
95 |
96 |
97 |
105 |
132 |
133 |
--------------------------------------------------------------------------------
/app/components/Lucide/Youtube.vue:
--------------------------------------------------------------------------------
1 |
95 |
96 |
97 |
105 |
127 |
128 |
--------------------------------------------------------------------------------
/app/components/Lucide/Delete.vue:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 |
72 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/app/components/Lucide/Earth.vue:
--------------------------------------------------------------------------------
1 |
75 |
76 |
77 |
85 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/app/components/Lucide/History.vue:
--------------------------------------------------------------------------------
1 |
98 |
99 |
100 |
108 |
146 |
147 |
--------------------------------------------------------------------------------
/app/components/Lucide/WindArrowDown.vue:
--------------------------------------------------------------------------------
1 |
94 |
95 |
96 |
104 |
139 |
140 |
--------------------------------------------------------------------------------
/app/components/Lucide/Dribbble.vue:
--------------------------------------------------------------------------------
1 |
95 |
96 |
97 |
105 |
139 |
140 |
--------------------------------------------------------------------------------
/app/components/Lucide/AudioLines.vue:
--------------------------------------------------------------------------------
1 |
97 |
98 |
99 |
107 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/app/components/Lucide/Discord.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
80 |
118 |
119 |
--------------------------------------------------------------------------------
/app/components/Lucide/Linkedin.vue:
--------------------------------------------------------------------------------
1 |
117 |
118 |
119 |
127 |
159 |
160 |
--------------------------------------------------------------------------------
/app/components/Lucide/Instagram.vue:
--------------------------------------------------------------------------------
1 |
117 |
118 |
119 |
127 |
162 |
163 |
--------------------------------------------------------------------------------
/app/components/Lucide/Stethoscope.vue:
--------------------------------------------------------------------------------
1 |
79 |
80 |
81 |
89 |
153 |
154 |
--------------------------------------------------------------------------------
/app/components/Lucide/Connect.vue:
--------------------------------------------------------------------------------
1 |
82 |
83 |
84 |
92 |
156 |
157 |
158 |
--------------------------------------------------------------------------------
/.cursor/rules/create-new-vue-motion-icon.mdc:
--------------------------------------------------------------------------------
1 | ---
2 | description:
3 | globs: app/components/Lucide/*.vue
4 | alwaysApply: false
5 | ---
6 | # Converting React Lucide Icons to Vue: Guide
7 |
8 | Here's a step-by-step guide for converting React animated Lucide icons to Vue components in this project:
9 |
10 | ## 1. Basic Structure
11 |
12 | ```vue
13 |
65 |
66 |
67 |
75 |
78 |
79 |
80 | ```
81 |
82 | ## 2. Animation Pattern Conversion
83 |
84 | When converting React motion animations to Vue:
85 |
86 | | React | Vue |
87 | |-------|-----|
88 | | `animate={controls}` | `:animate="currentState"` |
89 | | `variants={...}` | `:variants="iconVariants"` |
90 | | `` | `