zilmate 1.7.8 → 1.8.0

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 (441) hide show
  1. package/.agents/skills/agent-browser/SKILL.md +55 -0
  2. package/.agents/skills/agentmail/SKILL.md +282 -0
  3. package/.agents/skills/agentmail/references/webhooks.md +220 -0
  4. package/.agents/skills/agentmail/references/websockets.md +263 -0
  5. package/.agents/skills/ai-elements/SKILL.md +160 -0
  6. package/.agents/skills/ai-elements/references/agent.md +134 -0
  7. package/.agents/skills/ai-elements/references/artifact.md +84 -0
  8. package/.agents/skills/ai-elements/references/attachments.md +190 -0
  9. package/.agents/skills/ai-elements/references/audio-player.md +134 -0
  10. package/.agents/skills/ai-elements/references/canvas.md +34 -0
  11. package/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
  12. package/.agents/skills/ai-elements/references/checkpoint.md +183 -0
  13. package/.agents/skills/ai-elements/references/code-block.md +170 -0
  14. package/.agents/skills/ai-elements/references/commit.md +177 -0
  15. package/.agents/skills/ai-elements/references/confirmation.md +262 -0
  16. package/.agents/skills/ai-elements/references/connection.md +34 -0
  17. package/.agents/skills/ai-elements/references/context.md +126 -0
  18. package/.agents/skills/ai-elements/references/controls.md +32 -0
  19. package/.agents/skills/ai-elements/references/conversation.md +224 -0
  20. package/.agents/skills/ai-elements/references/edge.md +52 -0
  21. package/.agents/skills/ai-elements/references/environment-variables.md +102 -0
  22. package/.agents/skills/ai-elements/references/file-tree.md +72 -0
  23. package/.agents/skills/ai-elements/references/image.md +146 -0
  24. package/.agents/skills/ai-elements/references/inline-citation.md +299 -0
  25. package/.agents/skills/ai-elements/references/jsx-preview.md +104 -0
  26. package/.agents/skills/ai-elements/references/message.md +237 -0
  27. package/.agents/skills/ai-elements/references/mic-selector.md +189 -0
  28. package/.agents/skills/ai-elements/references/model-selector.md +112 -0
  29. package/.agents/skills/ai-elements/references/node.md +73 -0
  30. package/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
  31. package/.agents/skills/ai-elements/references/package-info.md +95 -0
  32. package/.agents/skills/ai-elements/references/panel.md +33 -0
  33. package/.agents/skills/ai-elements/references/persona.md +166 -0
  34. package/.agents/skills/ai-elements/references/plan.md +79 -0
  35. package/.agents/skills/ai-elements/references/prompt-input.md +579 -0
  36. package/.agents/skills/ai-elements/references/queue.md +172 -0
  37. package/.agents/skills/ai-elements/references/reasoning.md +238 -0
  38. package/.agents/skills/ai-elements/references/sandbox.md +129 -0
  39. package/.agents/skills/ai-elements/references/schema-display.md +102 -0
  40. package/.agents/skills/ai-elements/references/shimmer.md +48 -0
  41. package/.agents/skills/ai-elements/references/snippet.md +64 -0
  42. package/.agents/skills/ai-elements/references/sources.md +209 -0
  43. package/.agents/skills/ai-elements/references/speech-input.md +163 -0
  44. package/.agents/skills/ai-elements/references/stack-trace.md +224 -0
  45. package/.agents/skills/ai-elements/references/suggestion.md +124 -0
  46. package/.agents/skills/ai-elements/references/task.md +222 -0
  47. package/.agents/skills/ai-elements/references/terminal.md +103 -0
  48. package/.agents/skills/ai-elements/references/test-results.md +157 -0
  49. package/.agents/skills/ai-elements/references/tool.md +285 -0
  50. package/.agents/skills/ai-elements/references/toolbar.md +32 -0
  51. package/.agents/skills/ai-elements/references/transcription.md +120 -0
  52. package/.agents/skills/ai-elements/references/voice-selector.md +241 -0
  53. package/.agents/skills/ai-elements/references/web-preview.md +200 -0
  54. package/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
  55. package/.agents/skills/ai-elements/scripts/artifact.tsx +127 -0
  56. package/.agents/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
  57. package/.agents/skills/ai-elements/scripts/attachments-list.tsx +95 -0
  58. package/.agents/skills/ai-elements/scripts/attachments.tsx +85 -0
  59. package/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
  60. package/.agents/skills/ai-elements/scripts/audio-player.tsx +68 -0
  61. package/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
  62. package/.agents/skills/ai-elements/scripts/checkpoint.tsx +110 -0
  63. package/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
  64. package/.agents/skills/ai-elements/scripts/code-block.tsx +120 -0
  65. package/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
  66. package/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
  67. package/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
  68. package/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
  69. package/.agents/skills/ai-elements/scripts/confirmation.tsx +55 -0
  70. package/.agents/skills/ai-elements/scripts/context.tsx +45 -0
  71. package/.agents/skills/ai-elements/scripts/conversation.tsx +177 -0
  72. package/.agents/skills/ai-elements/scripts/environment-variables.tsx +62 -0
  73. package/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
  74. package/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
  75. package/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
  76. package/.agents/skills/ai-elements/scripts/file-tree.tsx +42 -0
  77. package/.agents/skills/ai-elements/scripts/image.tsx +20 -0
  78. package/.agents/skills/ai-elements/scripts/inline-citation.tsx +97 -0
  79. package/.agents/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
  80. package/.agents/skills/ai-elements/scripts/message.tsx +365 -0
  81. package/.agents/skills/ai-elements/scripts/mic-selector.tsx +49 -0
  82. package/.agents/skills/ai-elements/scripts/model-selector.tsx +365 -0
  83. package/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
  84. package/.agents/skills/ai-elements/scripts/package-info.tsx +51 -0
  85. package/.agents/skills/ai-elements/scripts/persona-command.tsx +110 -0
  86. package/.agents/skills/ai-elements/scripts/persona-glint.tsx +110 -0
  87. package/.agents/skills/ai-elements/scripts/persona-halo.tsx +110 -0
  88. package/.agents/skills/ai-elements/scripts/persona-mana.tsx +110 -0
  89. package/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
  90. package/.agents/skills/ai-elements/scripts/persona-opal.tsx +110 -0
  91. package/.agents/skills/ai-elements/scripts/plan.tsx +65 -0
  92. package/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
  93. package/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
  94. package/.agents/skills/ai-elements/scripts/prompt-input.tsx +267 -0
  95. package/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
  96. package/.agents/skills/ai-elements/scripts/queue.tsx +295 -0
  97. package/.agents/skills/ai-elements/scripts/reasoning.tsx +71 -0
  98. package/.agents/skills/ai-elements/scripts/sandbox.tsx +178 -0
  99. package/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
  100. package/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
  101. package/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
  102. package/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
  103. package/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
  104. package/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
  105. package/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
  106. package/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
  107. package/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
  108. package/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
  109. package/.agents/skills/ai-elements/scripts/sources-custom.tsx +39 -0
  110. package/.agents/skills/ai-elements/scripts/sources.tsx +32 -0
  111. package/.agents/skills/ai-elements/scripts/speech-input.tsx +84 -0
  112. package/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
  113. package/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
  114. package/.agents/skills/ai-elements/scripts/stack-trace.tsx +58 -0
  115. package/.agents/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
  116. package/.agents/skills/ai-elements/scripts/suggestion.tsx +32 -0
  117. package/.agents/skills/ai-elements/scripts/task.tsx +59 -0
  118. package/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
  119. package/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
  120. package/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
  121. package/.agents/skills/ai-elements/scripts/terminal.tsx +82 -0
  122. package/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
  123. package/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
  124. package/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
  125. package/.agents/skills/ai-elements/scripts/test-results.tsx +102 -0
  126. package/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
  127. package/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
  128. package/.agents/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
  129. package/.agents/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
  130. package/.agents/skills/ai-elements/scripts/tool.tsx +222 -0
  131. package/.agents/skills/ai-elements/scripts/transcription.tsx +290 -0
  132. package/.agents/skills/ai-elements/scripts/voice-selector.tsx +245 -0
  133. package/.agents/skills/ai-elements/scripts/web-preview.tsx +115 -0
  134. package/.agents/skills/ai-sdk/SKILL.md +78 -0
  135. package/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
  136. package/.agents/skills/ai-sdk/references/common-errors.md +443 -0
  137. package/.agents/skills/ai-sdk/references/devtools.md +52 -0
  138. package/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
  139. package/.agents/skills/chat-sdk/SKILL.md +240 -0
  140. package/.agents/skills/composio/AGENTS.md +404 -0
  141. package/.agents/skills/composio/SKILL.md +55 -0
  142. package/.agents/skills/composio/rules/_template.md +38 -0
  143. package/.agents/skills/composio/rules/app-auth-configs.md +224 -0
  144. package/.agents/skills/composio/rules/app-auth-popup-ui.md +143 -0
  145. package/.agents/skills/composio/rules/app-connected-accounts.md +240 -0
  146. package/.agents/skills/composio/rules/app-custom-tools.md +220 -0
  147. package/.agents/skills/composio/rules/app-execute-tools.md +202 -0
  148. package/.agents/skills/composio/rules/app-fetch-tools.md +292 -0
  149. package/.agents/skills/composio/rules/app-modifiers.md +148 -0
  150. package/.agents/skills/composio/rules/app-tool-versions.md +343 -0
  151. package/.agents/skills/composio/rules/app-toolkits.md +184 -0
  152. package/.agents/skills/composio/rules/app-user-context.md +222 -0
  153. package/.agents/skills/composio/rules/building-with-composio.md +134 -0
  154. package/.agents/skills/composio/rules/composio-cli.md +223 -0
  155. package/.agents/skills/composio/rules/setup-api-keys.md +230 -0
  156. package/.agents/skills/composio/rules/tr-auth-auto.md +110 -0
  157. package/.agents/skills/composio/rules/tr-auth-connections.md +167 -0
  158. package/.agents/skills/composio/rules/tr-auth-manual.md +161 -0
  159. package/.agents/skills/composio/rules/tr-building-chat-ui.md +348 -0
  160. package/.agents/skills/composio/rules/tr-framework-ai-sdk.md +240 -0
  161. package/.agents/skills/composio/rules/tr-framework-integration.md +818 -0
  162. package/.agents/skills/composio/rules/tr-framework-mastra.md +185 -0
  163. package/.agents/skills/composio/rules/tr-mcp-vs-native.md +248 -0
  164. package/.agents/skills/composio/rules/tr-session-basic.md +82 -0
  165. package/.agents/skills/composio/rules/tr-session-config.md +172 -0
  166. package/.agents/skills/composio/rules/tr-session-lifecycle.md +385 -0
  167. package/.agents/skills/composio/rules/tr-toolkit-query.md +135 -0
  168. package/.agents/skills/composio/rules/tr-userid-best-practices.md +476 -0
  169. package/.agents/skills/composio/rules/triggers-create.md +246 -0
  170. package/.agents/skills/composio/rules/triggers-manage.md +275 -0
  171. package/.agents/skills/composio/rules/triggers-subscribe.md +173 -0
  172. package/.agents/skills/composio/rules/triggers-webhook.md +227 -0
  173. package/.agents/skills/create-auth-skill/SKILL.md +321 -0
  174. package/.agents/skills/design-md/README.md +34 -0
  175. package/.agents/skills/design-md/SKILL.md +172 -0
  176. package/.agents/skills/design-md/examples/DESIGN.md +154 -0
  177. package/.agents/skills/expo-tailwind-setup/SKILL.md +480 -0
  178. package/.agents/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  179. package/.agents/skills/find-skills/SKILL.md +142 -0
  180. package/.agents/skills/firecrawl/SKILL.md +321 -0
  181. package/.agents/skills/firecrawl/rules/install.md +85 -0
  182. package/.agents/skills/firecrawl/rules/security.md +26 -0
  183. package/.agents/skills/frontend-design/LICENSE.txt +177 -0
  184. package/.agents/skills/frontend-design/SKILL.md +55 -0
  185. package/.agents/skills/linkup-search/SKILL.md +298 -0
  186. package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
  187. package/.agents/skills/mcp-builder/SKILL.md +236 -0
  188. package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
  189. package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  190. package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  191. package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  192. package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
  193. package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
  194. package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  195. package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
  196. package/.agents/skills/mobile-android-design/SKILL.md +101 -0
  197. package/.agents/skills/mobile-android-design/references/android-navigation.md +698 -0
  198. package/.agents/skills/mobile-android-design/references/compose-components.md +796 -0
  199. package/.agents/skills/mobile-android-design/references/details.md +337 -0
  200. package/.agents/skills/mobile-android-design/references/material3-theming.md +604 -0
  201. package/.agents/skills/mobile-ios-design/SKILL.md +259 -0
  202. package/.agents/skills/mobile-ios-design/references/hig-patterns.md +529 -0
  203. package/.agents/skills/mobile-ios-design/references/ios-navigation.md +556 -0
  204. package/.agents/skills/mobile-ios-design/references/swiftui-components.md +575 -0
  205. package/.agents/skills/neon-drizzle/SKILL.md +81 -0
  206. package/.agents/skills/neon-drizzle/guides/existing-project.md +398 -0
  207. package/.agents/skills/neon-drizzle/guides/new-project.md +312 -0
  208. package/.agents/skills/neon-drizzle/guides/schema-only.md +415 -0
  209. package/.agents/skills/neon-drizzle/guides/troubleshooting.md +539 -0
  210. package/.agents/skills/neon-drizzle/references/adapters.md +478 -0
  211. package/.agents/skills/neon-drizzle/references/migrations.md +652 -0
  212. package/.agents/skills/neon-drizzle/references/query-patterns.md +761 -0
  213. package/.agents/skills/neon-drizzle/scripts/generate-schema.ts +77 -0
  214. package/.agents/skills/neon-drizzle/scripts/run-migration.ts +133 -0
  215. package/.agents/skills/neon-drizzle/templates/db-http.ts +6 -0
  216. package/.agents/skills/neon-drizzle/templates/db-websocket.ts +24 -0
  217. package/.agents/skills/neon-drizzle/templates/drizzle-config.ts +96 -0
  218. package/.agents/skills/neon-drizzle/templates/schema-example.ts +231 -0
  219. package/.agents/skills/neon-postgres/SKILL.md +376 -0
  220. package/.agents/skills/next-best-practices/SKILL.md +152 -0
  221. package/.agents/skills/next-best-practices/async-patterns.md +87 -0
  222. package/.agents/skills/next-best-practices/bundling.md +180 -0
  223. package/.agents/skills/next-best-practices/data-patterns.md +297 -0
  224. package/.agents/skills/next-best-practices/debug-tricks.md +105 -0
  225. package/.agents/skills/next-best-practices/directives.md +73 -0
  226. package/.agents/skills/next-best-practices/error-handling.md +227 -0
  227. package/.agents/skills/next-best-practices/file-conventions.md +140 -0
  228. package/.agents/skills/next-best-practices/font.md +245 -0
  229. package/.agents/skills/next-best-practices/functions.md +108 -0
  230. package/.agents/skills/next-best-practices/hydration-error.md +91 -0
  231. package/.agents/skills/next-best-practices/image.md +173 -0
  232. package/.agents/skills/next-best-practices/metadata.md +301 -0
  233. package/.agents/skills/next-best-practices/parallel-routes.md +287 -0
  234. package/.agents/skills/next-best-practices/route-handlers.md +146 -0
  235. package/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
  236. package/.agents/skills/next-best-practices/runtime-selection.md +39 -0
  237. package/.agents/skills/next-best-practices/scripts.md +141 -0
  238. package/.agents/skills/next-best-practices/self-hosting.md +371 -0
  239. package/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
  240. package/.agents/skills/playwright-best-practices/SKILL.md +303 -0
  241. package/.agents/skills/playwright-cli/SKILL.md +404 -0
  242. package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
  243. package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
  244. package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
  245. package/.agents/skills/playwright-cli/references/running-code.md +241 -0
  246. package/.agents/skills/playwright-cli/references/session-management.md +225 -0
  247. package/.agents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
  248. package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
  249. package/.agents/skills/playwright-cli/references/test-generation.md +134 -0
  250. package/.agents/skills/playwright-cli/references/tracing.md +139 -0
  251. package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
  252. package/.agents/skills/prisma-client-api/SKILL.md +216 -0
  253. package/.agents/skills/prisma-client-api/references/client-methods.md +223 -0
  254. package/.agents/skills/prisma-client-api/references/constructor.md +208 -0
  255. package/.agents/skills/prisma-client-api/references/filters.md +256 -0
  256. package/.agents/skills/prisma-client-api/references/model-queries.md +281 -0
  257. package/.agents/skills/prisma-client-api/references/query-options.md +276 -0
  258. package/.agents/skills/prisma-client-api/references/raw-queries.md +194 -0
  259. package/.agents/skills/prisma-client-api/references/relations.md +308 -0
  260. package/.agents/skills/prisma-client-api/references/transactions.md +184 -0
  261. package/.agents/skills/prisma-database-setup/SKILL.md +192 -0
  262. package/.agents/skills/prisma-database-setup/references/cockroachdb.md +89 -0
  263. package/.agents/skills/prisma-database-setup/references/mongodb.md +90 -0
  264. package/.agents/skills/prisma-database-setup/references/mysql.md +126 -0
  265. package/.agents/skills/prisma-database-setup/references/postgresql.md +92 -0
  266. package/.agents/skills/prisma-database-setup/references/prisma-client-setup.md +47 -0
  267. package/.agents/skills/prisma-database-setup/references/prisma-postgres.md +130 -0
  268. package/.agents/skills/prisma-database-setup/references/sqlite.md +106 -0
  269. package/.agents/skills/prisma-database-setup/references/sqlserver.md +94 -0
  270. package/.agents/skills/prisma-postgres/SKILL.md +127 -0
  271. package/.agents/skills/prisma-postgres/references/console-and-connections.md +67 -0
  272. package/.agents/skills/prisma-postgres/references/create-db-cli.md +136 -0
  273. package/.agents/skills/prisma-postgres/references/management-api-sdk.md +56 -0
  274. package/.agents/skills/prisma-postgres/references/management-api.md +61 -0
  275. package/.agents/skills/remotion-best-practices/SKILL.md +340 -0
  276. package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
  277. package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  278. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  279. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  280. package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  281. package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
  282. package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  283. package/.agents/skills/remotion-best-practices/rules/compositions.md +133 -0
  284. package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
  285. package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +34 -0
  286. package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  287. package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  288. package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  289. package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
  290. package/.agents/skills/remotion-best-practices/rules/google-fonts.md +72 -0
  291. package/.agents/skills/remotion-best-practices/rules/html-in-canvas.md +122 -0
  292. package/.agents/skills/remotion-best-practices/rules/images.md +71 -0
  293. package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  294. package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  295. package/.agents/skills/remotion-best-practices/rules/local-fonts.md +65 -0
  296. package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
  297. package/.agents/skills/remotion-best-practices/rules/maplibre.md +458 -0
  298. package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  299. package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  300. package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
  301. package/.agents/skills/remotion-best-practices/rules/sequencing.md +144 -0
  302. package/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
  303. package/.agents/skills/remotion-best-practices/rules/silence-detection.md +71 -0
  304. package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
  305. package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
  306. package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
  307. package/.agents/skills/remotion-best-practices/rules/timing.md +136 -0
  308. package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  309. package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
  310. package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  311. package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
  312. package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
  313. package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
  314. package/.agents/skills/remotion-render/SKILL.md +212 -0
  315. package/.agents/skills/skill-creator/LICENSE.txt +202 -0
  316. package/.agents/skills/skill-creator/SKILL.md +485 -0
  317. package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  318. package/.agents/skills/skill-creator/agents/comparator.md +202 -0
  319. package/.agents/skills/skill-creator/agents/grader.md +223 -0
  320. package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  321. package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  322. package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  323. package/.agents/skills/skill-creator/references/schemas.md +430 -0
  324. package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  325. package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  326. package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  327. package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  328. package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  329. package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  330. package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  331. package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  332. package/.agents/skills/skill-creator/scripts/utils.py +47 -0
  333. package/.agents/skills/stripe-best-practices/SKILL.md +54 -0
  334. package/.agents/skills/stripe-best-practices/references/billing.md +58 -0
  335. package/.agents/skills/stripe-best-practices/references/connect.md +173 -0
  336. package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
  337. package/.agents/skills/stripe-best-practices/references/security.md +109 -0
  338. package/.agents/skills/stripe-best-practices/references/tax.md +37 -0
  339. package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
  340. package/.agents/skills/stripe-projects/SKILL.md +132 -0
  341. package/.agents/skills/supabase/CHANGELOG.md +35 -0
  342. package/.agents/skills/supabase/SKILL.md +135 -0
  343. package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
  344. package/.agents/skills/supabase/references/skill-feedback.md +17 -0
  345. package/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
  346. package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  347. package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  348. package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  349. package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  350. package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  351. package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  352. package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  353. package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  354. package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  355. package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  356. package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  357. package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  358. package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  359. package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  360. package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  361. package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  362. package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  363. package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  364. package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  365. package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  366. package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  367. package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  368. package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  369. package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  370. package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  371. package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  372. package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  373. package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  374. package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  375. package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  376. package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  377. package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  378. package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  379. package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  380. package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  381. package/.agents/skills/supermemory/LICENSE +201 -0
  382. package/.agents/skills/supermemory/README.md +221 -0
  383. package/.agents/skills/supermemory/SKILL.md +172 -0
  384. package/.agents/skills/supermemory/references/api-reference.md +591 -0
  385. package/.agents/skills/supermemory/references/architecture.md +557 -0
  386. package/.agents/skills/supermemory/references/quickstart.md +293 -0
  387. package/.agents/skills/supermemory/references/sdk-guide.md +655 -0
  388. package/.agents/skills/supermemory/references/use-cases.md +1033 -0
  389. package/.agents/skills/supermemory-cli/SKILL.md +490 -0
  390. package/.agents/skills/tdd/SKILL.md +108 -0
  391. package/.agents/skills/tdd/mocking.md +59 -0
  392. package/.agents/skills/tdd/refactoring.md +10 -0
  393. package/.agents/skills/tdd/tests.md +61 -0
  394. package/.agents/skills/ui-ux-pro-max/SKILL.md +661 -0
  395. package/.agents/skills/ui-ux-pro-max/data +1 -0
  396. package/.agents/skills/ui-ux-pro-max/scripts +1 -0
  397. package/.agents/skills/vercel-react-native-skills/AGENTS.md +2897 -0
  398. package/.agents/skills/vercel-react-native-skills/README.md +165 -0
  399. package/.agents/skills/vercel-react-native-skills/SKILL.md +121 -0
  400. package/.agents/skills/vercel-react-native-skills/metadata.json +16 -0
  401. package/.agents/skills/vercel-react-native-skills/rules/_sections.md +86 -0
  402. package/.agents/skills/vercel-react-native-skills/rules/_template.md +28 -0
  403. package/.agents/skills/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
  404. package/.agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
  405. package/.agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
  406. package/.agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
  407. package/.agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
  408. package/.agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
  409. package/.agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
  410. package/.agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
  411. package/.agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
  412. package/.agents/skills/vercel-react-native-skills/rules/list-performance-images.md +53 -0
  413. package/.agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
  414. package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
  415. package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
  416. package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
  417. package/.agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
  418. package/.agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
  419. package/.agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
  420. package/.agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
  421. package/.agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
  422. package/.agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
  423. package/.agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
  424. package/.agents/skills/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
  425. package/.agents/skills/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
  426. package/.agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
  427. package/.agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
  428. package/.agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
  429. package/.agents/skills/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
  430. package/.agents/skills/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
  431. package/.agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
  432. package/.agents/skills/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
  433. package/.agents/skills/vercel-react-native-skills/rules/ui-menus.md +174 -0
  434. package/.agents/skills/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
  435. package/.agents/skills/vercel-react-native-skills/rules/ui-pressable.md +61 -0
  436. package/.agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
  437. package/.agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
  438. package/.agents/skills/vercel-react-native-skills/rules/ui-styling.md +87 -0
  439. package/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  440. package/dist/index.js +1 -1
  441. package/package.json +2 -1
@@ -0,0 +1,458 @@
1
+ ---
2
+ name: maps
3
+ description: Make deterministic Remotion map animations with MapLibre GL JS and Turf. Use for animated routes, flyovers, map markers, labels, and camera movement.
4
+ metadata:
5
+ tags: map, map animation, maplibre, turf, geojson, route animation
6
+ ---
7
+
8
+ Use MapLibre GL JS for rendering maps in Remotion. Use Turf for geospatial operations such as great-circle routes, distances, slicing lines, and positions along routes.
9
+
10
+ ## Core rules
11
+
12
+ - Prefer `@turf/turf` for geospatial work. Do not hand-roll distance, great-circle, route slicing, or coordinate interpolation unless the user explicitly needs a custom non-geodesic effect.
13
+ - Use GeoJSON sources and MapLibre layers for lines, markers, and labels. Avoid DOM `Marker` elements unless the user specifically asks for HTML markers.
14
+ - Disable non-deterministic map behavior: `interactive: false`, `fadeDuration: 0`.
15
+ - Use `delayRender()` / `continueRender()` around map loading and per-frame map updates.
16
+ - Before continuing the initial render, add sources/layers, apply the frame-0 camera with `jumpTo()`, then wait for `idle`.
17
+ - Do not add a `mapInstance.remove()` cleanup function; it can interfere with Remotion's render lifecycle.
18
+ - Use standard MapLibre style JSON URLs and layer/source APIs.
19
+ - Do not install `@types/maplibre-gl`; MapLibre ships its own types.
20
+
21
+ Coordinates in MapLibre, Turf, and GeoJSON are `[longitude, latitude]`.
22
+
23
+ ```ts
24
+ const zurich: [number, number] = [8.5417, 47.3769];
25
+ const newYork: [number, number] = [-74.006, 40.7128];
26
+ ```
27
+
28
+ ## Prerequisites
29
+
30
+ Install MapLibre and Turf with the project's package manager.
31
+
32
+ ```bash
33
+ npm i maplibre-gl @turf/turf
34
+ ```
35
+
36
+ ```bash
37
+ bun i maplibre-gl @turf/turf
38
+ ```
39
+
40
+ ```bash
41
+ yarn add maplibre-gl @turf/turf
42
+ ```
43
+
44
+ ```bash
45
+ pnpm i maplibre-gl @turf/turf
46
+ ```
47
+
48
+ Import the MapLibre CSS once in the component or an app-level stylesheet:
49
+
50
+ ```ts
51
+ import 'maplibre-gl/dist/maplibre-gl.css';
52
+ ```
53
+
54
+ ## Basic map example
55
+
56
+ ```tsx
57
+ import {useEffect, useRef, useState} from 'react';
58
+ import {AbsoluteFill, useDelayRender, useVideoConfig} from 'remotion';
59
+ import maplibregl from 'maplibre-gl';
60
+ import 'maplibre-gl/dist/maplibre-gl.css';
61
+
62
+ const zurich: [number, number] = [8.5417, 47.3769];
63
+
64
+ export const MyComposition = () => {
65
+ const containerRef = useRef<HTMLDivElement>(null);
66
+ const {delayRender, continueRender} = useDelayRender();
67
+ const {width, height} = useVideoConfig();
68
+ const [loadingHandle] = useState(() => delayRender('Loading map'));
69
+
70
+ useEffect(() => {
71
+ if (!containerRef.current) {
72
+ return;
73
+ }
74
+
75
+ const mapInstance = new maplibregl.Map({
76
+ container: containerRef.current,
77
+ style: 'https://demotiles.maplibre.org/style.json',
78
+ center: zurich,
79
+ zoom: 7,
80
+ interactive: false,
81
+ attributionControl: false,
82
+ fadeDuration: 0,
83
+ canvasContextAttributes: {
84
+ preserveDrawingBuffer: true,
85
+ },
86
+ });
87
+
88
+ mapInstance.on('load', () => {
89
+ mapInstance.jumpTo({center: zurich, zoom: 7});
90
+ mapInstance.once('idle', () => {
91
+ continueRender(loadingHandle);
92
+ });
93
+ });
94
+ }, [continueRender, loadingHandle]);
95
+
96
+ return (
97
+ <AbsoluteFill>
98
+ <div ref={containerRef} style={{width, height, position: 'absolute'}} />
99
+ </AbsoluteFill>
100
+ );
101
+ };
102
+ ```
103
+
104
+ Animated examples should keep the loaded map in React state and skip per-frame updates until that state is set.
105
+
106
+ ## Animated flight route example
107
+
108
+ This example shows the recommended pattern for route animations:
109
+
110
+ - Turf creates the route and markers.
111
+ - Turf slices the route for line reveal animation.
112
+ - The camera has a separate route from the target route.
113
+ - MapLibre's `calculateCameraOptionsFromTo()` is used for camera movement.
114
+ - Frame 0 is prepared before `continueRender()`.
115
+
116
+ ```tsx
117
+ import * as turf from '@turf/turf';
118
+ import {useEffect, useRef, useState} from 'react';
119
+ import {
120
+ AbsoluteFill,
121
+ Easing,
122
+ interpolate,
123
+ useCurrentFrame,
124
+ useDelayRender,
125
+ useVideoConfig,
126
+ } from 'remotion';
127
+ import maplibregl, {type GeoJSONSource, type Map} from 'maplibre-gl';
128
+ import 'maplibre-gl/dist/maplibre-gl.css';
129
+
130
+ const zurich: [number, number] = [8.5417, 47.3769];
131
+ const newYork: [number, number] = [-74.006, 40.7128];
132
+
133
+ const greatCircleLine = (from: [number, number], to: [number, number]) => {
134
+ const route = turf.greatCircle(from, to, {npoints: 100});
135
+
136
+ if (route.geometry.type === 'LineString') {
137
+ return turf.lineString(route.geometry.coordinates);
138
+ }
139
+
140
+ // Great-circle routes crossing the antimeridian can become MultiLineString.
141
+ // Keep the example valid by choosing the longest segment.
142
+ const longestSegment = route.geometry.coordinates.reduce((longest, segment) => {
143
+ return segment.length > longest.length ? segment : longest;
144
+ });
145
+
146
+ return turf.lineString(longestSegment);
147
+ };
148
+
149
+ const targetRoute = greatCircleLine(zurich, newYork);
150
+ const targetRouteDistance = turf.length(targetRoute);
151
+
152
+ const cameraRoute = greatCircleLine(zurich, newYork);
153
+ const cameraRouteDistance = turf.length(cameraRoute);
154
+
155
+ const cityMarkers = turf.featureCollection([
156
+ turf.point(zurich, {name: 'Zurich'}),
157
+ turf.point(newYork, {name: 'New York'}),
158
+ ]);
159
+
160
+ const clampProgress = (progress: number) => Math.min(1, Math.max(0, progress));
161
+
162
+ const distanceAlong = (totalDistance: number, progress: number) => {
163
+ // Keep the route non-empty at progress 0; Turf can error on zero-length slices.
164
+ return Math.max(0.001, totalDistance * clampProgress(progress));
165
+ };
166
+
167
+ const getPartialTargetRoute = (progress: number) => {
168
+ return turf.lineSliceAlong(
169
+ targetRoute,
170
+ 0,
171
+ distanceAlong(targetRouteDistance, progress),
172
+ );
173
+ };
174
+
175
+ const getCameraOptions = (
176
+ map: Map,
177
+ progress: number,
178
+ cameraAltitudeMeters: number,
179
+ cameraLatitudeOffset: number,
180
+ ) => {
181
+ const target = turf.along(
182
+ targetRoute,
183
+ distanceAlong(targetRouteDistance, progress),
184
+ ).geometry.coordinates;
185
+ const camera = turf.along(
186
+ cameraRoute,
187
+ distanceAlong(cameraRouteDistance, progress),
188
+ ).geometry.coordinates;
189
+
190
+ return map.calculateCameraOptionsFromTo(
191
+ new maplibregl.LngLat(camera[0], camera[1] - cameraLatitudeOffset),
192
+ cameraAltitudeMeters,
193
+ new maplibregl.LngLat(target[0], target[1]),
194
+ );
195
+ };
196
+
197
+ export const MyComposition = () => {
198
+ const containerRef = useRef<HTMLDivElement>(null);
199
+ const frame = useCurrentFrame();
200
+ const {delayRender, continueRender} = useDelayRender();
201
+ const {durationInFrames, height, width} = useVideoConfig();
202
+ const [map, setMap] = useState<Map | null>(null);
203
+ const [loadingHandle] = useState(() => delayRender('Loading MapLibre map'));
204
+
205
+ useEffect(() => {
206
+ if (!containerRef.current) {
207
+ return;
208
+ }
209
+
210
+ const mapInstance = new maplibregl.Map({
211
+ container: containerRef.current,
212
+ style: 'https://demotiles.maplibre.org/style.json',
213
+ center: zurich,
214
+ zoom: 7,
215
+ interactive: false,
216
+ attributionControl: false,
217
+ fadeDuration: 0,
218
+ canvasContextAttributes: {
219
+ preserveDrawingBuffer: true,
220
+ },
221
+ });
222
+
223
+ mapInstance.on('load', () => {
224
+ mapInstance.addSource('trace', {
225
+ type: 'geojson',
226
+ data: getPartialTargetRoute(0),
227
+ });
228
+
229
+ mapInstance.addLayer({
230
+ id: 'trace-line',
231
+ type: 'line',
232
+ source: 'trace',
233
+ layout: {
234
+ 'line-cap': 'round',
235
+ 'line-join': 'round',
236
+ },
237
+ paint: {
238
+ 'line-color': '#111111',
239
+ 'line-width': 7,
240
+ },
241
+ });
242
+
243
+ mapInstance.addSource('city-markers', {
244
+ type: 'geojson',
245
+ data: cityMarkers,
246
+ });
247
+
248
+ mapInstance.addLayer({
249
+ id: 'city-marker-dots',
250
+ type: 'circle',
251
+ source: 'city-markers',
252
+ paint: {
253
+ 'circle-color': '#f03b20',
254
+ 'circle-radius': 12,
255
+ 'circle-stroke-color': '#ffffff',
256
+ 'circle-stroke-width': 4,
257
+ },
258
+ });
259
+
260
+ mapInstance.addLayer({
261
+ id: 'city-marker-labels',
262
+ type: 'symbol',
263
+ source: 'city-markers',
264
+ layout: {
265
+ 'text-allow-overlap': true,
266
+ 'text-anchor': 'top',
267
+ 'text-field': ['get', 'name'],
268
+ 'text-offset': [0, 0.9],
269
+ 'text-size': 28,
270
+ },
271
+ paint: {
272
+ 'text-color': '#111111',
273
+ 'text-halo-color': '#ffffff',
274
+ 'text-halo-width': 3,
275
+ },
276
+ });
277
+
278
+ mapInstance.jumpTo(getCameraOptions(mapInstance, 0, 180000, 1.1));
279
+ mapInstance.once('idle', () => {
280
+ setMap(mapInstance);
281
+ continueRender(loadingHandle);
282
+ });
283
+ });
284
+ }, [continueRender, loadingHandle]);
285
+
286
+ useEffect(() => {
287
+ if (!map) {
288
+ return;
289
+ }
290
+
291
+ const handle = delayRender('Rendering MapLibre frame');
292
+ const timelineProgress = interpolate(frame, [0, durationInFrames - 1], [0, 1], {
293
+ extrapolateLeft: 'clamp',
294
+ extrapolateRight: 'clamp',
295
+ });
296
+ const travelProgress = interpolate(timelineProgress, [0.2, 0.82], [0, 1], {
297
+ extrapolateLeft: 'clamp',
298
+ extrapolateRight: 'clamp',
299
+ easing: Easing.inOut(Easing.cubic),
300
+ });
301
+ const cameraAltitudeMeters = interpolate(
302
+ timelineProgress,
303
+ [0, 0.28, 0.74, 1],
304
+ [180000, 2200000, 2200000, 180000],
305
+ {
306
+ extrapolateLeft: 'clamp',
307
+ extrapolateRight: 'clamp',
308
+ easing: Easing.inOut(Easing.cubic),
309
+ },
310
+ );
311
+ const cameraLatitudeOffset = interpolate(
312
+ timelineProgress,
313
+ [0, 0.28, 0.74, 1],
314
+ [1.1, 8, 8, 1.1],
315
+ {
316
+ extrapolateLeft: 'clamp',
317
+ extrapolateRight: 'clamp',
318
+ easing: Easing.inOut(Easing.cubic),
319
+ },
320
+ );
321
+ const trace = map.getSource('trace') as GeoJSONSource | undefined;
322
+
323
+ trace?.setData(getPartialTargetRoute(travelProgress));
324
+ map.jumpTo(
325
+ getCameraOptions(
326
+ map,
327
+ travelProgress,
328
+ cameraAltitudeMeters,
329
+ cameraLatitudeOffset,
330
+ ),
331
+ );
332
+
333
+ map.once('idle', () => continueRender(handle));
334
+ // Force an idle event even if the camera parameters are unchanged from the previous frame.
335
+ map.triggerRepaint();
336
+ }, [continueRender, delayRender, durationInFrames, frame, map]);
337
+
338
+ return (
339
+ <AbsoluteFill style={{backgroundColor: '#e8eef3'}}>
340
+ <div ref={containerRef} style={{height, position: 'absolute', width}} />
341
+ </AbsoluteFill>
342
+ );
343
+ };
344
+ ```
345
+
346
+ ## Camera guidance
347
+
348
+ Use MapLibre's camera helper for camera movement:
349
+
350
+ ```ts
351
+ map.calculateCameraOptionsFromTo(cameraLngLat, cameraAltitudeMeters, targetLngLat);
352
+ ```
353
+
354
+ A good pattern is to keep two concepts separate:
355
+
356
+ - `targetRoute`: where the animated line is and where the camera looks.
357
+ - `cameraRoute`: where the camera moves.
358
+
359
+ Then use Turf to read positions from both routes for the same progress value:
360
+
361
+ ```ts
362
+ const target = turf.along(targetRoute, targetDistance * progress).geometry.coordinates;
363
+ const camera = turf.along(cameraRoute, cameraDistance * progress).geometry.coordinates;
364
+
365
+ map.jumpTo(
366
+ map.calculateCameraOptionsFromTo(
367
+ new maplibregl.LngLat(camera[0], camera[1]),
368
+ cameraAltitudeMeters,
369
+ new maplibregl.LngLat(target[0], target[1]),
370
+ ),
371
+ );
372
+ ```
373
+
374
+ For zoom-out / travel / zoom-in animations, animate travel progress separately from camera altitude. Camera altitude is measured in meters. This avoids heavy custom camera math.
375
+
376
+ ## Lines
377
+
378
+ Use GeoJSON sources for lines. Unless the user asks, do not add glow effects or extra decorative points.
379
+
380
+ For geodesic flight routes, use Turf:
381
+
382
+ ```ts
383
+ const line = greatCircleLine(start, end);
384
+ const distance = turf.length(line);
385
+ const partialLine = turf.lineSliceAlong(
386
+ line,
387
+ 0,
388
+ // Keep the route non-empty at progress 0.
389
+ Math.max(0.001, distance * progress),
390
+ );
391
+ ```
392
+
393
+ For a visually straight line on the map, use a simple GeoJSON `LineString` between the two points instead of `greatCircle()`.
394
+
395
+ ## Markers and labels
396
+
397
+ Use map-native GeoJSON layers for markers and labels:
398
+
399
+ ```tsx
400
+ mapInstance.addSource('markers', {
401
+ type: 'geojson',
402
+ data: turf.featureCollection([
403
+ turf.point([-118.2437, 34.0522], {name: 'Los Angeles'}),
404
+ ]),
405
+ });
406
+
407
+ mapInstance.addLayer({
408
+ id: 'marker-dots',
409
+ type: 'circle',
410
+ source: 'markers',
411
+ paint: {
412
+ 'circle-color': '#f03b20',
413
+ 'circle-radius': 12,
414
+ 'circle-stroke-color': '#ffffff',
415
+ 'circle-stroke-width': 4,
416
+ },
417
+ });
418
+
419
+ mapInstance.addLayer({
420
+ id: 'marker-labels',
421
+ type: 'symbol',
422
+ source: 'markers',
423
+ layout: {
424
+ 'text-allow-overlap': true,
425
+ 'text-anchor': 'top',
426
+ 'text-field': ['get', 'name'],
427
+ 'text-offset': [0, 0.9],
428
+ 'text-size': 28,
429
+ },
430
+ paint: {
431
+ 'text-color': '#111111',
432
+ 'text-halo-color': '#ffffff',
433
+ 'text-halo-width': 3,
434
+ },
435
+ });
436
+ ```
437
+
438
+ Make marker sizes and label font sizes large enough for the composition resolution.
439
+
440
+ ## Styles
441
+
442
+ Default to the stock MapLibre demo style:
443
+
444
+ ```ts
445
+ style: 'https://demotiles.maplibre.org/style.json'
446
+ ```
447
+
448
+ If the user requests another style, use any valid MapLibre style JSON URL.
449
+
450
+ ## Rendering
451
+
452
+ For WebGL map renders, prefer single concurrency and ANGLE:
453
+
454
+ ```bash
455
+ bunx remotion render [composition-id] out/video.mp4 --gl=angle --concurrency=1
456
+ ```
457
+
458
+ Use the equivalent package runner for the project. In npm projects, use `npx`; in Bun projects, use `bunx`.
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: measuring-dom-nodes
3
+ description: Measuring DOM element dimensions in Remotion
4
+ metadata:
5
+ tags: measure, layout, dimensions, getBoundingClientRect, scale
6
+ ---
7
+
8
+ # Measuring DOM nodes in Remotion
9
+
10
+ Remotion applies a `scale()` transform to the video container, which affects values from `getBoundingClientRect()`. Use `useCurrentScale()` to get correct measurements.
11
+
12
+ ## Measuring element dimensions
13
+
14
+ ```tsx
15
+ import { useCurrentScale } from "remotion";
16
+ import { useRef, useEffect, useState } from "react";
17
+
18
+ export const MyComponent = () => {
19
+ const ref = useRef<HTMLDivElement>(null);
20
+ const scale = useCurrentScale();
21
+ const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
22
+
23
+ useEffect(() => {
24
+ if (!ref.current) return;
25
+ const rect = ref.current.getBoundingClientRect();
26
+ setDimensions({
27
+ width: rect.width / scale,
28
+ height: rect.height / scale,
29
+ });
30
+ }, [scale]);
31
+
32
+ return <div ref={ref}>Content to measure</div>;
33
+ };
34
+ ```
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: measuring-text
3
+ description: Measuring text dimensions, fitting text to containers, and checking overflow
4
+ metadata:
5
+ tags: measure, text, layout, dimensions, fitText, fillTextBox
6
+ ---
7
+
8
+ # Measuring text in Remotion
9
+
10
+ ## Prerequisites
11
+
12
+ Install @remotion/layout-utils if it is not already installed:
13
+
14
+ ```bash
15
+ npx remotion add @remotion/layout-utils
16
+ ```
17
+
18
+ ## Measuring text dimensions
19
+
20
+ Use `measureText()` to calculate the width and height of text:
21
+
22
+ ```tsx
23
+ import { measureText } from "@remotion/layout-utils";
24
+
25
+ const { width, height } = measureText({
26
+ text: "Hello World",
27
+ fontFamily: "Arial",
28
+ fontSize: 32,
29
+ fontWeight: "bold",
30
+ });
31
+ ```
32
+
33
+ Results are cached - duplicate calls return the cached result.
34
+
35
+ ## Fitting text to a width
36
+
37
+ Use `fitText()` to find the optimal font size for a container:
38
+
39
+ ```tsx
40
+ import { fitText } from "@remotion/layout-utils";
41
+
42
+ const { fontSize } = fitText({
43
+ text: "Hello World",
44
+ withinWidth: 600,
45
+ fontFamily: "Inter",
46
+ fontWeight: "bold",
47
+ });
48
+
49
+ return (
50
+ <div
51
+ style={{
52
+ fontSize: Math.min(fontSize, 80), // Cap at 80px
53
+ fontFamily: "Inter",
54
+ fontWeight: "bold",
55
+ }}
56
+ >
57
+ Hello World
58
+ </div>
59
+ );
60
+ ```
61
+
62
+ ## Checking text overflow
63
+
64
+ Use `fillTextBox()` to check if text exceeds a box:
65
+
66
+ ```tsx
67
+ import { fillTextBox } from "@remotion/layout-utils";
68
+
69
+ const box = fillTextBox({ maxBoxWidth: 400, maxLines: 3 });
70
+
71
+ const words = ["Hello", "World", "This", "is", "a", "test"];
72
+ for (const word of words) {
73
+ const { exceedsBox } = box.add({
74
+ text: word + " ",
75
+ fontFamily: "Arial",
76
+ fontSize: 24,
77
+ });
78
+ if (exceedsBox) {
79
+ // Text would overflow, handle accordingly
80
+ break;
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## Best practices
86
+
87
+ **Load fonts first:** Only call measurement functions after fonts are loaded.
88
+
89
+ ```tsx
90
+ import { loadFont } from "@remotion/google-fonts/Inter";
91
+
92
+ const { fontFamily, waitUntilDone } = loadFont("normal", {
93
+ weights: ["400"],
94
+ subsets: ["latin"],
95
+ });
96
+
97
+ waitUntilDone().then(() => {
98
+ // Now safe to measure
99
+ const { width } = measureText({
100
+ text: "Hello",
101
+ fontFamily,
102
+ fontSize: 32,
103
+ });
104
+ });
105
+ ```
106
+
107
+ **Use validateFontIsLoaded:** Catch font loading issues early:
108
+
109
+ ```tsx
110
+ measureText({
111
+ text: "Hello",
112
+ fontFamily: "MyCustomFont",
113
+ fontSize: 32,
114
+ validateFontIsLoaded: true, // Throws if font not loaded
115
+ });
116
+ ```
117
+
118
+ **Match font properties:** Use the same properties for measurement and rendering:
119
+
120
+ ```tsx
121
+ const fontStyle = {
122
+ fontFamily: "Inter",
123
+ fontSize: 32,
124
+ fontWeight: "bold" as const,
125
+ letterSpacing: "0.5px",
126
+ };
127
+
128
+ const { width } = measureText({
129
+ text: "Hello",
130
+ ...fontStyle,
131
+ });
132
+
133
+ return <div style={fontStyle}>Hello</div>;
134
+ ```
135
+
136
+ **Avoid padding and border:** Use `outline` instead of `border` to prevent layout differences:
137
+
138
+ ```tsx
139
+ <div style={{ outline: "2px solid red" }}>Text</div>
140
+ ```