foliko 1.0.80 → 1.0.81

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.
Files changed (235) hide show
  1. package/.agent/agents/code-assistant.json +14 -0
  2. package/.agent/agents/email-assistant.json +14 -0
  3. package/.agent/agents/file-assistant.json +15 -0
  4. package/.agent/agents/system-assistant.json +15 -0
  5. package/.agent/agents/web-assistant.json +12 -0
  6. package/.agent/data/ambient/goals.json +50 -0
  7. package/.agent/data/ambient/memories.json +7 -0
  8. package/.agent/data/default.json +15 -31894
  9. package/.agent/data/plugins-state.json +146 -181
  10. package/.agent/data/scheduler/tasks.json +1 -0
  11. package/.agent/mcp_config.json +1 -0
  12. package/.agent/package.json +8 -0
  13. package/.agent/plugins/__pycache__/test_plugin.cpython-312.pyc +0 -0
  14. package/.agent/plugins/system-info/index.js +387 -0
  15. package/.agent/plugins/system-info/package.json +4 -0
  16. package/.agent/plugins/system-info/test.js +40 -0
  17. package/.agent/plugins/test_plugin.py +304 -0
  18. package/.agent/plugins.json +14 -5
  19. package/.agent/python-scripts/test_sample.py +24 -0
  20. package/.agent/skills/sysinfo/SKILL.md +38 -0
  21. package/.agent/skills/sysinfo/system-info.sh +130 -0
  22. package/.agent/skills/workflow/SKILL.md +324 -0
  23. package/.agent/workflows/email-digest.json +50 -0
  24. package/.agent/workflows/file-backup.json +21 -0
  25. package/.agent/workflows/get-ip-notify.json +32 -0
  26. package/.agent/workflows/news-aggregator.json +93 -0
  27. package/.agent/workflows/news-dashboard-v2.json +94 -0
  28. package/.agent/workflows/notification-batch.json +32 -0
  29. package/.claude/settings.local.json +171 -171
  30. package/.env.example +56 -56
  31. package/cli/bin/foliko.js +12 -12
  32. package/cli/src/commands/chat.js +143 -143
  33. package/cli/src/commands/list.js +93 -93
  34. package/cli/src/index.js +75 -75
  35. package/cli/src/ui/chat-ui.js +201 -201
  36. package/cli/src/utils/ansi.js +40 -40
  37. package/cli/src/utils/markdown.js +292 -292
  38. package/examples/ambient-example.js +194 -194
  39. package/examples/basic.js +115 -115
  40. package/examples/bootstrap.js +121 -121
  41. package/examples/mcp-example.js +56 -56
  42. package/examples/skill-example.js +49 -49
  43. package/examples/test-chat.js +137 -137
  44. package/examples/test-mcp.js +85 -85
  45. package/examples/test-reload.js +59 -59
  46. package/examples/test-telegram.js +50 -50
  47. package/examples/test-tg-bot.js +45 -45
  48. package/examples/test-tg-simple.js +47 -47
  49. package/examples/test-tg.js +62 -62
  50. package/examples/test-think.js +43 -43
  51. package/examples/test-web-plugin.js +103 -103
  52. package/examples/test-weixin-feishu.js +103 -103
  53. package/examples/workflow.js +158 -158
  54. package/package.json +83 -83
  55. package/plugins/ai-plugin.js +102 -102
  56. package/plugins/ambient-agent/EventWatcher.js +113 -113
  57. package/plugins/ambient-agent/ExplorerLoop.js +640 -640
  58. package/plugins/ambient-agent/GoalManager.js +197 -197
  59. package/plugins/ambient-agent/Reflector.js +95 -95
  60. package/plugins/ambient-agent/StateStore.js +90 -90
  61. package/plugins/ambient-agent/constants.js +101 -101
  62. package/plugins/ambient-agent/index.js +579 -579
  63. package/plugins/audit-plugin.js +187 -187
  64. package/plugins/default-plugins.js +548 -548
  65. package/plugins/email/constants.js +64 -64
  66. package/plugins/email/handlers.js +461 -461
  67. package/plugins/email/index.js +278 -278
  68. package/plugins/email/monitor.js +269 -269
  69. package/plugins/email/parser.js +138 -138
  70. package/plugins/email/reply.js +151 -151
  71. package/plugins/email/utils.js +124 -124
  72. package/plugins/extension-executor-plugin.js +326 -326
  73. package/plugins/feishu-plugin.js +481 -481
  74. package/plugins/file-system-plugin.js +920 -877
  75. package/plugins/gate-trading.js +747 -747
  76. package/plugins/install-plugin.js +199 -199
  77. package/plugins/python-executor-plugin.js +367 -367
  78. package/plugins/python-plugin-loader.js +651 -651
  79. package/plugins/rules-plugin.js +294 -294
  80. package/plugins/scheduler-plugin.js +691 -691
  81. package/plugins/session-plugin.js +494 -494
  82. package/plugins/shell-executor-plugin.js +197 -197
  83. package/plugins/storage-plugin.js +263 -263
  84. package/plugins/subagent-plugin.js +845 -845
  85. package/plugins/telegram-plugin.js +482 -482
  86. package/plugins/think-plugin.js +345 -345
  87. package/plugins/tools-plugin.js +196 -196
  88. package/plugins/web-plugin.js +637 -637
  89. package/plugins/weixin-plugin.js +545 -545
  90. package/skills/find-skills/AGENTS.md +162 -162
  91. package/skills/find-skills/SKILL.md +133 -133
  92. package/skills/foliko-dev/SKILL.md +563 -583
  93. package/skills/python-plugin-dev/SKILL.md +238 -238
  94. package/src/capabilities/index.js +11 -11
  95. package/src/capabilities/skill-manager.js +609 -609
  96. package/src/capabilities/workflow-engine.js +1109 -1109
  97. package/src/core/agent-chat.js +141 -134
  98. package/src/core/agent.js +958 -958
  99. package/src/core/framework.js +465 -465
  100. package/src/core/index.js +19 -19
  101. package/src/core/plugin-base.js +262 -262
  102. package/src/core/plugin-manager.js +863 -863
  103. package/src/core/provider.js +114 -114
  104. package/src/core/sub-agent-config.js +264 -264
  105. package/src/core/system-prompt-builder.js +120 -120
  106. package/src/core/tool-registry.js +517 -517
  107. package/src/core/tool-router.js +297 -297
  108. package/src/executors/executor-base.js +58 -58
  109. package/src/executors/mcp-executor.js +845 -845
  110. package/src/index.js +25 -25
  111. package/src/utils/circuit-breaker.js +301 -301
  112. package/src/utils/error-boundary.js +363 -363
  113. package/src/utils/error.js +374 -374
  114. package/src/utils/event-emitter.js +97 -97
  115. package/src/utils/id.js +133 -133
  116. package/src/utils/index.js +217 -217
  117. package/src/utils/logger.js +181 -181
  118. package/src/utils/plugin-helpers.js +90 -90
  119. package/src/utils/retry.js +122 -122
  120. package/src/utils/sandbox.js +292 -292
  121. package/test/tool-registry-validation.test.js +218 -218
  122. package/website/script.js +136 -136
  123. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  124. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  125. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  126. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  127. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  128. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  129. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  130. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  131. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  132. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  133. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  134. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  135. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  136. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  137. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  138. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  139. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  140. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  141. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  142. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  143. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  144. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  145. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  146. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  147. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  148. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  149. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  150. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  151. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  152. package/.agent/ARCHITECTURE.md +0 -288
  153. package/.agent/agents/ambient-agent.md +0 -57
  154. package/.agent/agents/debugger.md +0 -55
  155. package/.agent/agents/email-assistant.md +0 -49
  156. package/.agent/agents/file-manager.md +0 -42
  157. package/.agent/agents/python-developer.md +0 -60
  158. package/.agent/agents/scheduler.md +0 -59
  159. package/.agent/agents/web-developer.md +0 -45
  160. package/.agent/mcp_config_updated.json +0 -12
  161. package/.agent/rules/GEMINI.md +0 -273
  162. package/.agent/rules/allow-rule.md +0 -77
  163. package/.agent/rules/log-rule.md +0 -83
  164. package/.agent/rules/security-rule.md +0 -93
  165. package/.agent/scripts/auto_preview.py +0 -148
  166. package/.agent/scripts/checklist.py +0 -217
  167. package/.agent/scripts/session_manager.py +0 -120
  168. package/.agent/scripts/verify_all.py +0 -327
  169. package/.agent/skills/api-patterns/SKILL.md +0 -81
  170. package/.agent/skills/api-patterns/api-style.md +0 -42
  171. package/.agent/skills/api-patterns/auth.md +0 -24
  172. package/.agent/skills/api-patterns/documentation.md +0 -26
  173. package/.agent/skills/api-patterns/graphql.md +0 -41
  174. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  175. package/.agent/skills/api-patterns/response.md +0 -37
  176. package/.agent/skills/api-patterns/rest.md +0 -40
  177. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  178. package/.agent/skills/api-patterns/security-testing.md +0 -122
  179. package/.agent/skills/api-patterns/trpc.md +0 -41
  180. package/.agent/skills/api-patterns/versioning.md +0 -22
  181. package/.agent/skills/app-builder/SKILL.md +0 -75
  182. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  183. package/.agent/skills/app-builder/feature-building.md +0 -53
  184. package/.agent/skills/app-builder/project-detection.md +0 -34
  185. package/.agent/skills/app-builder/scaffolding.md +0 -118
  186. package/.agent/skills/app-builder/tech-stack.md +0 -40
  187. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  188. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  189. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  190. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  191. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  192. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  193. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  194. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  195. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  196. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  197. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  198. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  199. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  200. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  201. package/.agent/skills/architecture/SKILL.md +0 -55
  202. package/.agent/skills/architecture/context-discovery.md +0 -43
  203. package/.agent/skills/architecture/examples.md +0 -94
  204. package/.agent/skills/architecture/pattern-selection.md +0 -68
  205. package/.agent/skills/architecture/patterns-reference.md +0 -50
  206. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  207. package/.agent/skills/clean-code/SKILL.md +0 -201
  208. package/.agent/skills/doc.md +0 -177
  209. package/.agent/skills/frontend-design/SKILL.md +0 -418
  210. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  211. package/.agent/skills/frontend-design/color-system.md +0 -311
  212. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  213. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  214. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  215. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  216. package/.agent/skills/frontend-design/typography-system.md +0 -345
  217. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  218. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  219. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  220. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  221. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  222. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  223. package/.agent/workflows/brainstorm.md +0 -113
  224. package/.agent/workflows/create.md +0 -59
  225. package/.agent/workflows/debug.md +0 -103
  226. package/.agent/workflows/deploy.md +0 -176
  227. package/.agent/workflows/enhance.md +0 -63
  228. package/.agent/workflows/orchestrate.md +0 -237
  229. package/.agent/workflows/plan.md +0 -89
  230. package/.agent/workflows/preview.md +0 -81
  231. package/.agent/workflows/simple-test.md +0 -42
  232. package/.agent/workflows/status.md +0 -86
  233. package/.agent/workflows/structured-orchestrate.md +0 -180
  234. package/.agent/workflows/test.md +0 -144
  235. package/.agent/workflows/ui-ux-pro-max.md +0 -296
@@ -1,306 +0,0 @@
1
- # Motion Graphics Reference
2
-
3
- > Advanced animation techniques for premium web experiences - Lottie, GSAP, SVG, 3D, Particles.
4
- > **Learn the principles, create WOW effects.**
5
-
6
- ---
7
-
8
- ## 1. Lottie Animations
9
-
10
- ### What is Lottie?
11
-
12
- ```
13
- JSON-based vector animations:
14
- ├── Exported from After Effects via Bodymovin
15
- ├── Lightweight (smaller than GIF/video)
16
- ├── Scalable (vector-based, no pixelation)
17
- ├── Interactive (control playback, segments)
18
- └── Cross-platform (web, iOS, Android, React Native)
19
- ```
20
-
21
- ### When to Use Lottie
22
-
23
- | Use Case | Why Lottie? |
24
- |----------|-------------|
25
- | **Loading animations** | Branded, smooth, lightweight |
26
- | **Empty states** | Engaging illustrations |
27
- | **Onboarding flows** | Complex multi-step animations |
28
- | **Success/Error feedback** | Delightful micro-interactions |
29
- | **Animated icons** | Consistent cross-platform |
30
-
31
- ### Principles
32
-
33
- - Keep file size under 100KB for performance
34
- - Use loop sparingly (avoid distraction)
35
- - Provide static fallback for reduced-motion
36
- - Lazy load animation files when possible
37
-
38
- ### Sources
39
-
40
- - LottieFiles.com (free library)
41
- - After Effects + Bodymovin (custom)
42
- - Figma plugins (export from design)
43
-
44
- ---
45
-
46
- ## 2. GSAP (GreenSock)
47
-
48
- ### What Makes GSAP Different
49
-
50
- ```
51
- Professional timeline-based animation:
52
- ├── Precise control over sequences
53
- ├── ScrollTrigger for scroll-driven animations
54
- ├── MorphSVG for shape transitions
55
- ├── Physics-based easing
56
- └── Works with any DOM element
57
- ```
58
-
59
- ### Core Concepts
60
-
61
- | Concept | Purpose |
62
- |---------|---------|
63
- | **Tween** | Single A→B animation |
64
- | **Timeline** | Sequenced/overlapping animations |
65
- | **ScrollTrigger** | Scroll position controls playback |
66
- | **Stagger** | Cascade effect across elements |
67
-
68
- ### When to Use GSAP
69
-
70
- - ✅ Complex sequenced animations
71
- - ✅ Scroll-triggered reveals
72
- - ✅ Precise timing control needed
73
- - ✅ SVG morphing effects
74
- - ❌ Simple hover/focus effects (use CSS)
75
- - ❌ Performance-critical mobile (heavier)
76
-
77
- ### Principles
78
-
79
- - Use timeline for orchestration (not individual tweens)
80
- - Stagger delay: 0.05-0.15s between items
81
- - ScrollTrigger: start at 70-80% viewport entry
82
- - Kill animations on unmount (prevent memory leaks)
83
-
84
- ---
85
-
86
- ## 3. SVG Animations
87
-
88
- ### Types of SVG Animation
89
-
90
- | Type | Technique | Use Case |
91
- |------|-----------|----------|
92
- | **Line Drawing** | stroke-dashoffset | Logo reveals, signatures |
93
- | **Morph** | Path interpolation | Icon transitions |
94
- | **Transform** | rotate, scale, translate | Interactive icons |
95
- | **Color** | fill/stroke transition | State changes |
96
-
97
- ### Line Drawing Principles
98
-
99
- ```
100
- How stroke-dashoffset drawing works:
101
- ├── Set dasharray to path length
102
- ├── Set dashoffset equal to dasharray (hidden)
103
- ├── Animate dashoffset to 0 (revealed)
104
- └── Create "drawing" effect
105
- ```
106
-
107
- ### When to Use SVG Animations
108
-
109
- - ✅ Logo reveals, brand moments
110
- - ✅ Icon state transitions (hamburger ↔ X)
111
- - ✅ Infographics, data visualization
112
- - ✅ Interactive illustrations
113
- - ❌ Photo-realistic content (use video)
114
- - ❌ Very complex scenes (performance)
115
-
116
- ### Principles
117
-
118
- - Get path length dynamically for accuracy
119
- - Duration: 1-3s for full drawings
120
- - Easing: ease-out for natural feel
121
- - Simple fills complement, don't compete
122
-
123
- ---
124
-
125
- ## 4. 3D CSS Transforms
126
-
127
- ### Core Properties
128
-
129
- ```
130
- CSS 3D Space:
131
- ├── perspective: depth of 3D field (500-1500px typical)
132
- ├── transform-style: preserve-3d (enable children 3D)
133
- ├── rotateX/Y/Z: rotation per axis
134
- ├── translateZ: move toward/away from viewer
135
- └── backface-visibility: show/hide back side
136
- ```
137
-
138
- ### Common 3D Patterns
139
-
140
- | Pattern | Use Case |
141
- |---------|----------|
142
- | **Card flip** | Reveals, flashcards, product views |
143
- | **Tilt on hover** | Interactive cards, 3D depth |
144
- | **Parallax layers** | Hero sections, immersive scrolling |
145
- | **3D carousel** | Image galleries, sliders |
146
-
147
- ### Principles
148
-
149
- - Perspective: 800-1200px for subtle, 400-600px for dramatic
150
- - Keep transforms simple (rotate + translate)
151
- - Ensure backface-visibility: hidden for flips
152
- - Test on Safari (different rendering)
153
-
154
- ---
155
-
156
- ## 5. Particle Effects
157
-
158
- ### Types of Particle Systems
159
-
160
- | Type | Feel | Use Case |
161
- |------|------|----------|
162
- | **Geometric** | Tech, network | SaaS, tech sites |
163
- | **Confetti** | Celebration | Success moments |
164
- | **Snow/Rain** | Atmospheric | Seasonal, mood |
165
- | **Dust/Bokeh** | Dreamy | Photography, luxury |
166
- | **Fireflies** | Magical | Games, fantasy |
167
-
168
- ### Libraries
169
-
170
- | Library | Best For |
171
- |---------|----------|
172
- | **tsParticles** | Configurable, lightweight |
173
- | **particles.js** | Simple backgrounds |
174
- | **Canvas API** | Custom, maximum control |
175
- | **Three.js** | Complex 3D particles |
176
-
177
- ### Principles
178
-
179
- - Default: 30-50 particles (not overwhelming)
180
- - Movement: slow, organic (speed 0.5-2)
181
- - Opacity: 0.3-0.6 (don't compete with content)
182
- - Connections: subtle lines for "network" feel
183
- - ⚠️ Disable or reduce on mobile
184
-
185
- ### When to Use
186
-
187
- - ✅ Hero backgrounds (atmospheric)
188
- - ✅ Success celebrations (confetti burst)
189
- - ✅ Tech visualization (connected nodes)
190
- - ❌ Content-heavy pages (distraction)
191
- - ❌ Low-powered devices (battery drain)
192
-
193
- ---
194
-
195
- ## 6. Scroll-Driven Animations
196
-
197
- ### Native CSS (Modern)
198
-
199
- ```
200
- CSS Scroll Timelines:
201
- ├── animation-timeline: scroll() - document scroll
202
- ├── animation-timeline: view() - element in viewport
203
- ├── animation-range: entry/exit thresholds
204
- └── No JavaScript required
205
- ```
206
-
207
- ### Principles
208
-
209
- | Trigger Point | Use Case |
210
- |---------------|----------|
211
- | **Entry 0%** | When element starts entering |
212
- | **Entry 50%** | When half visible |
213
- | **Cover 50%** | When centered in viewport |
214
- | **Exit 100%** | When fully exited |
215
-
216
- ### Best Practices
217
-
218
- - Reveal animations: start at ~25% entry
219
- - Parallax: continuous scroll progress
220
- - Sticky elements: use cover range
221
- - Always test scroll performance
222
-
223
- ---
224
-
225
- ## 7. Performance Principles
226
-
227
- ### GPU vs CPU Animation
228
-
229
- ```
230
- CHEAP (GPU-accelerated):
231
- ├── transform (translate, scale, rotate)
232
- ├── opacity
233
- └── filter (use sparingly)
234
-
235
- EXPENSIVE (triggers reflow):
236
- ├── width, height
237
- ├── top, left, right, bottom
238
- ├── padding, margin
239
- └── complex box-shadow
240
- ```
241
-
242
- ### Optimization Checklist
243
-
244
- - [ ] Animate only transform/opacity
245
- - [ ] Use `will-change` before heavy animations (remove after)
246
- - [ ] Test on low-end devices
247
- - [ ] Implement `prefers-reduced-motion`
248
- - [ ] Lazy load animation libraries
249
- - [ ] Throttle scroll-based calculations
250
-
251
- ---
252
-
253
- ## 8. Motion Graphics Decision Tree
254
-
255
- ```
256
- What animation do you need?
257
-
258
- ├── Complex branded animation?
259
- │ └── Lottie (After Effects export)
260
-
261
- ├── Sequenced scroll-triggered?
262
- │ └── GSAP + ScrollTrigger
263
-
264
- ├── Logo/icon animation?
265
- │ └── SVG animation (stroke or morph)
266
-
267
- ├── Interactive 3D effect?
268
- │ └── CSS 3D Transforms (simple) or Three.js (complex)
269
-
270
- ├── Atmospheric background?
271
- │ └── tsParticles or Canvas
272
-
273
- └── Simple entrance/hover?
274
- └── CSS @keyframes or Framer Motion
275
- ```
276
-
277
- ---
278
-
279
- ## 9. Anti-Patterns
280
-
281
- | ❌ Don't | ✅ Do |
282
- |----------|-------|
283
- | Animate everything at once | Stagger and sequence |
284
- | Use heavy libraries for simple effects | Start with CSS |
285
- | Ignore reduced-motion | Always provide fallback |
286
- | Block main thread | Optimize for 60fps |
287
- | Same particles every project | Match brand/context |
288
- | Complex effects on mobile | Feature detection |
289
-
290
- ---
291
-
292
- ## 10. Quick Reference
293
-
294
- | Effect | Tool | Performance |
295
- |--------|------|-------------|
296
- | Loading spinner | CSS/Lottie | Light |
297
- | Staggered reveal | GSAP/Framer | Medium |
298
- | SVG path draw | CSS stroke | Light |
299
- | 3D card flip | CSS transforms | Light |
300
- | Particle background | tsParticles | Heavy |
301
- | Scroll parallax | GSAP ScrollTrigger | Medium |
302
- | Shape morphing | GSAP MorphSVG | Medium |
303
-
304
- ---
305
-
306
- > **Remember**: Motion graphics should enhance, not distract. Every animation must serve a PURPOSE—feedback, guidance, delight, or storytelling.
@@ -1,183 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Accessibility Checker - WCAG compliance audit
4
- Checks HTML files for accessibility issues.
5
-
6
- Usage:
7
- python accessibility_checker.py <project_path>
8
-
9
- Checks:
10
- - Form labels
11
- - ARIA attributes
12
- - Color contrast hints
13
- - Keyboard navigation
14
- - Semantic HTML
15
- """
16
-
17
- import sys
18
- import json
19
- import re
20
- from pathlib import Path
21
- from datetime import datetime
22
-
23
- # Fix Windows console encoding
24
- try:
25
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
26
- except:
27
- pass
28
-
29
-
30
- def find_html_files(project_path: Path) -> list:
31
- """Find all HTML/JSX/TSX files."""
32
- patterns = ['**/*.html', '**/*.jsx', '**/*.tsx']
33
- skip_dirs = {'node_modules', '.next', 'dist', 'build', '.git'}
34
-
35
- files = []
36
- for pattern in patterns:
37
- for f in project_path.glob(pattern):
38
- if not any(skip in f.parts for skip in skip_dirs):
39
- files.append(f)
40
-
41
- return files[:50]
42
-
43
-
44
- def check_accessibility(file_path: Path) -> list:
45
- """Check a single file for accessibility issues."""
46
- issues = []
47
-
48
- try:
49
- content = file_path.read_text(encoding='utf-8', errors='ignore')
50
-
51
- # Check for form inputs without labels
52
- inputs = re.findall(r'<input[^>]*>', content, re.IGNORECASE)
53
- for inp in inputs:
54
- if 'type="hidden"' not in inp.lower():
55
- if 'aria-label' not in inp.lower() and 'id=' not in inp.lower():
56
- issues.append("Input without label or aria-label")
57
- break
58
-
59
- # Check for buttons without accessible text
60
- buttons = re.findall(r'<button[^>]*>[^<]*</button>', content, re.IGNORECASE)
61
- for btn in buttons:
62
- # Check if button has text content or aria-label
63
- if 'aria-label' not in btn.lower():
64
- text = re.sub(r'<[^>]+>', '', btn)
65
- if not text.strip():
66
- issues.append("Button without accessible text")
67
- break
68
-
69
- # Check for missing lang attribute
70
- if '<html' in content.lower() and 'lang=' not in content.lower():
71
- issues.append("Missing lang attribute on <html>")
72
-
73
- # Check for missing skip link
74
- if '<main' in content.lower() or '<body' in content.lower():
75
- if 'skip' not in content.lower() and '#main' not in content.lower():
76
- issues.append("Consider adding skip-to-main-content link")
77
-
78
- # Check for click handlers without keyboard support
79
- onclick_count = content.lower().count('onclick=')
80
- onkeydown_count = content.lower().count('onkeydown=') + content.lower().count('onkeyup=')
81
- if onclick_count > 0 and onkeydown_count == 0:
82
- issues.append("onClick without keyboard handler (onKeyDown)")
83
-
84
- # Check for tabIndex misuse
85
- if 'tabindex=' in content.lower():
86
- if 'tabindex="-1"' not in content.lower() and 'tabindex="0"' not in content.lower():
87
- positive_tabindex = re.findall(r'tabindex="([1-9]\d*)"', content, re.IGNORECASE)
88
- if positive_tabindex:
89
- issues.append("Avoid positive tabIndex values")
90
-
91
- # Check for autoplay media
92
- if 'autoplay' in content.lower():
93
- if 'muted' not in content.lower():
94
- issues.append("Autoplay media should be muted")
95
-
96
- # Check for role usage
97
- if 'role="button"' in content.lower():
98
- # Divs with role button should have tabindex
99
- div_buttons = re.findall(r'<div[^>]*role="button"[^>]*>', content, re.IGNORECASE)
100
- for div in div_buttons:
101
- if 'tabindex' not in div.lower():
102
- issues.append("role='button' without tabindex")
103
- break
104
-
105
- except Exception as e:
106
- issues.append(f"Error reading file: {str(e)[:50]}")
107
-
108
- return issues
109
-
110
-
111
- def main():
112
- project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
113
-
114
- print(f"\n{'='*60}")
115
- print(f"[ACCESSIBILITY CHECKER] WCAG Compliance Audit")
116
- print(f"{'='*60}")
117
- print(f"Project: {project_path}")
118
- print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
119
- print("-"*60)
120
-
121
- # Find HTML files
122
- files = find_html_files(project_path)
123
- print(f"Found {len(files)} HTML/JSX/TSX files")
124
-
125
- if not files:
126
- output = {
127
- "script": "accessibility_checker",
128
- "project": str(project_path),
129
- "files_checked": 0,
130
- "issues_found": 0,
131
- "passed": True,
132
- "message": "No HTML files found"
133
- }
134
- print(json.dumps(output, indent=2))
135
- sys.exit(0)
136
-
137
- # Check each file
138
- all_issues = []
139
-
140
- for f in files:
141
- issues = check_accessibility(f)
142
- if issues:
143
- all_issues.append({
144
- "file": str(f.name),
145
- "issues": issues
146
- })
147
-
148
- # Summary
149
- print("\n" + "="*60)
150
- print("ACCESSIBILITY ISSUES")
151
- print("="*60)
152
-
153
- if all_issues:
154
- for item in all_issues[:10]:
155
- print(f"\n{item['file']}:")
156
- for issue in item["issues"]:
157
- print(f" - {issue}")
158
-
159
- if len(all_issues) > 10:
160
- print(f"\n... and {len(all_issues) - 10} more files with issues")
161
- else:
162
- print("No accessibility issues found!")
163
-
164
- total_issues = sum(len(item["issues"]) for item in all_issues)
165
- # Accessibility issues are important but not blocking
166
- passed = total_issues < 5 # Allow minor issues
167
-
168
- output = {
169
- "script": "accessibility_checker",
170
- "project": str(project_path),
171
- "files_checked": len(files),
172
- "files_with_issues": len(all_issues),
173
- "issues_found": total_issues,
174
- "passed": passed
175
- }
176
-
177
- print("\n" + json.dumps(output, indent=2))
178
-
179
- sys.exit(0 if passed else 1)
180
-
181
-
182
- if __name__ == "__main__":
183
- main()