aico-cli 2.1.7 → 2.1.23

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 (547) hide show
  1. package/bin/cli/README.md +1 -1
  2. package/bin/cli/cli.js +8672 -3345
  3. package/bin/cli/package.json +1 -1
  4. package/bin/cli/sdk-tools.d.ts +41 -5
  5. package/dist/chunks/simple-config.mjs +1 -1
  6. package/package.json +2 -2
  7. package/templates/skills/antfu/SKILL.md +222 -0
  8. package/templates/skills/antfu/references/antfu-eslint-config.md +328 -0
  9. package/templates/skills/antfu/references/app-development.md +60 -0
  10. package/templates/skills/antfu/references/github-actions.md +68 -0
  11. package/templates/skills/antfu/references/gitignore.md +29 -0
  12. package/templates/skills/antfu/references/library-development.md +85 -0
  13. package/templates/skills/antfu/references/monorepo.md +126 -0
  14. package/templates/skills/antfu/references/vscode-extensions.md +34 -0
  15. package/templates/skills/nuxt/GENERATION.md +5 -0
  16. package/templates/skills/nuxt/SKILL.md +55 -0
  17. package/templates/skills/nuxt/references/advanced-hooks.md +289 -0
  18. package/templates/skills/nuxt/references/advanced-layers.md +299 -0
  19. package/templates/skills/nuxt/references/advanced-module-authoring.md +554 -0
  20. package/templates/skills/nuxt/references/best-practices-data-fetching.md +357 -0
  21. package/templates/skills/nuxt/references/best-practices-ssr.md +355 -0
  22. package/templates/skills/nuxt/references/core-cli.md +263 -0
  23. package/templates/skills/nuxt/references/core-config.md +162 -0
  24. package/templates/skills/nuxt/references/core-data-fetching.md +236 -0
  25. package/templates/skills/nuxt/references/core-deployment.md +224 -0
  26. package/templates/skills/nuxt/references/core-directory-structure.md +269 -0
  27. package/templates/skills/nuxt/references/core-modules.md +292 -0
  28. package/templates/skills/nuxt/references/core-routing.md +226 -0
  29. package/templates/skills/nuxt/references/features-components-autoimport.md +328 -0
  30. package/templates/skills/nuxt/references/features-components.md +264 -0
  31. package/templates/skills/nuxt/references/features-composables.md +276 -0
  32. package/templates/skills/nuxt/references/features-server.md +265 -0
  33. package/templates/skills/nuxt/references/features-state.md +194 -0
  34. package/templates/skills/nuxt/references/rendering-modes.md +237 -0
  35. package/templates/skills/pinia/GENERATION.md +5 -0
  36. package/templates/skills/pinia/SKILL.md +59 -0
  37. package/templates/skills/pinia/references/advanced-hmr.md +61 -0
  38. package/templates/skills/pinia/references/advanced-nuxt.md +119 -0
  39. package/templates/skills/pinia/references/advanced-ssr.md +121 -0
  40. package/templates/skills/pinia/references/best-practices-outside-component.md +115 -0
  41. package/templates/skills/pinia/references/best-practices-testing.md +212 -0
  42. package/templates/skills/pinia/references/core-stores.md +389 -0
  43. package/templates/skills/pinia/references/features-composables.md +114 -0
  44. package/templates/skills/pinia/references/features-composing-stores.md +134 -0
  45. package/templates/skills/pinia/references/features-plugins.md +203 -0
  46. package/templates/skills/pnpm/GENERATION.md +5 -0
  47. package/templates/skills/pnpm/SKILL.md +42 -0
  48. package/templates/skills/pnpm/references/best-practices-ci.md +285 -0
  49. package/templates/skills/pnpm/references/best-practices-migration.md +291 -0
  50. package/templates/skills/pnpm/references/best-practices-performance.md +284 -0
  51. package/templates/skills/pnpm/references/core-cli.md +229 -0
  52. package/templates/skills/pnpm/references/core-config.md +188 -0
  53. package/templates/skills/pnpm/references/core-store.md +179 -0
  54. package/templates/skills/pnpm/references/core-workspaces.md +205 -0
  55. package/templates/skills/pnpm/references/features-aliases.md +168 -0
  56. package/templates/skills/pnpm/references/features-catalogs.md +159 -0
  57. package/templates/skills/pnpm/references/features-hooks.md +233 -0
  58. package/templates/skills/pnpm/references/features-overrides.md +184 -0
  59. package/templates/skills/pnpm/references/features-patches.md +201 -0
  60. package/templates/skills/pnpm/references/features-peer-deps.md +250 -0
  61. package/templates/skills/slidev/LICENSE.md +21 -0
  62. package/templates/skills/slidev/README.md +61 -0
  63. package/templates/skills/slidev/SKILL.md +183 -0
  64. package/templates/skills/slidev/SYNC.md +5 -0
  65. package/templates/skills/slidev/references/animation-click-marker.md +37 -0
  66. package/templates/skills/slidev/references/animation-drawing.md +68 -0
  67. package/templates/skills/slidev/references/animation-rough-marker.md +53 -0
  68. package/templates/skills/slidev/references/api-slide-hooks.md +37 -0
  69. package/templates/skills/slidev/references/build-og-image.md +36 -0
  70. package/templates/skills/slidev/references/build-pdf.md +40 -0
  71. package/templates/skills/slidev/references/build-remote-assets.md +34 -0
  72. package/templates/skills/slidev/references/build-seo-meta.md +43 -0
  73. package/templates/skills/slidev/references/code-groups.md +64 -0
  74. package/templates/skills/slidev/references/code-import-snippet.md +55 -0
  75. package/templates/skills/slidev/references/code-line-highlighting.md +50 -0
  76. package/templates/skills/slidev/references/code-line-numbers.md +46 -0
  77. package/templates/skills/slidev/references/code-magic-move.md +57 -0
  78. package/templates/skills/slidev/references/code-max-height.md +37 -0
  79. package/templates/skills/slidev/references/code-twoslash.md +42 -0
  80. package/templates/skills/slidev/references/core-animations.md +196 -0
  81. package/templates/skills/slidev/references/core-cli.md +140 -0
  82. package/templates/skills/slidev/references/core-components.md +197 -0
  83. package/templates/skills/slidev/references/core-exporting.md +148 -0
  84. package/templates/skills/slidev/references/core-frontmatter.md +195 -0
  85. package/templates/skills/slidev/references/core-global-context.md +155 -0
  86. package/templates/skills/slidev/references/core-headmatter.md +188 -0
  87. package/templates/skills/slidev/references/core-hosting.md +152 -0
  88. package/templates/skills/slidev/references/core-layouts.md +286 -0
  89. package/templates/skills/slidev/references/core-syntax.md +155 -0
  90. package/templates/skills/slidev/references/diagram-latex.md +55 -0
  91. package/templates/skills/slidev/references/diagram-mermaid.md +44 -0
  92. package/templates/skills/slidev/references/diagram-plantuml.md +45 -0
  93. package/templates/skills/slidev/references/editor-monaco-run.md +44 -0
  94. package/templates/skills/slidev/references/editor-monaco-write.md +24 -0
  95. package/templates/skills/slidev/references/editor-monaco.md +50 -0
  96. package/templates/skills/slidev/references/editor-prettier.md +40 -0
  97. package/templates/skills/slidev/references/editor-side.md +23 -0
  98. package/templates/skills/slidev/references/editor-vscode.md +55 -0
  99. package/templates/skills/slidev/references/layout-canvas-size.md +25 -0
  100. package/templates/skills/slidev/references/layout-draggable.md +57 -0
  101. package/templates/skills/slidev/references/layout-global-layers.md +50 -0
  102. package/templates/skills/slidev/references/layout-slots.md +75 -0
  103. package/templates/skills/slidev/references/layout-transform.md +33 -0
  104. package/templates/skills/slidev/references/layout-zoom.md +39 -0
  105. package/templates/skills/slidev/references/presenter-notes-ruby.md +35 -0
  106. package/templates/skills/slidev/references/presenter-recording.md +30 -0
  107. package/templates/skills/slidev/references/presenter-remote.md +40 -0
  108. package/templates/skills/slidev/references/presenter-timer.md +34 -0
  109. package/templates/skills/slidev/references/style-direction.md +34 -0
  110. package/templates/skills/slidev/references/style-icons.md +46 -0
  111. package/templates/skills/slidev/references/style-scoped.md +50 -0
  112. package/templates/skills/slidev/references/syntax-block-frontmatter.md +39 -0
  113. package/templates/skills/slidev/references/syntax-frontmatter-merging.md +49 -0
  114. package/templates/skills/slidev/references/syntax-importing-slides.md +60 -0
  115. package/templates/skills/slidev/references/syntax-mdc.md +51 -0
  116. package/templates/skills/slidev/references/tool-eject-theme.md +27 -0
  117. package/templates/skills/tech-whitepaper/SKILL.md +102 -15
  118. package/templates/skills/tsdown/GENERATION.md +5 -0
  119. package/templates/skills/tsdown/SKILL.md +59 -0
  120. package/templates/skills/tsdown/references/advanced-hooks.md +87 -0
  121. package/templates/skills/tsdown/references/advanced-plugins.md +97 -0
  122. package/templates/skills/tsdown/references/advanced-programmatic.md +78 -0
  123. package/templates/skills/tsdown/references/advanced-rolldown-options.md +114 -0
  124. package/templates/skills/tsdown/references/core-cli.md +116 -0
  125. package/templates/skills/tsdown/references/core-config.md +86 -0
  126. package/templates/skills/tsdown/references/core-entry.md +74 -0
  127. package/templates/skills/tsdown/references/features-optimization.md +83 -0
  128. package/templates/skills/tsdown/references/features-shims.md +92 -0
  129. package/templates/skills/tsdown/references/features-unbundle.md +63 -0
  130. package/templates/skills/tsdown/references/features-watch.md +60 -0
  131. package/templates/skills/tsdown/references/options-dependencies.md +88 -0
  132. package/templates/skills/tsdown/references/options-dts.md +104 -0
  133. package/templates/skills/tsdown/references/options-output.md +124 -0
  134. package/templates/skills/tsdown/references/options-package-exports.md +114 -0
  135. package/templates/skills/tsdown/references/recipes-frameworks.md +109 -0
  136. package/templates/skills/tsdown/references/recipes-migration.md +84 -0
  137. package/templates/skills/turborepo/LICENSE.md +7 -0
  138. package/templates/skills/turborepo/SKILL.md +914 -0
  139. package/templates/skills/turborepo/SYNC.md +5 -0
  140. package/templates/skills/turborepo/command/turborepo.md +70 -0
  141. package/templates/skills/turborepo/references/best-practices/README.md +241 -0
  142. package/templates/skills/turborepo/references/best-practices/dependencies.md +246 -0
  143. package/templates/skills/turborepo/references/best-practices/packages.md +335 -0
  144. package/templates/skills/turborepo/references/best-practices/structure.md +269 -0
  145. package/templates/skills/turborepo/references/boundaries/README.md +126 -0
  146. package/templates/skills/turborepo/references/caching/README.md +107 -0
  147. package/templates/skills/turborepo/references/caching/gotchas.md +169 -0
  148. package/templates/skills/turborepo/references/caching/remote-cache.md +127 -0
  149. package/templates/skills/turborepo/references/ci/README.md +79 -0
  150. package/templates/skills/turborepo/references/ci/github-actions.md +162 -0
  151. package/templates/skills/turborepo/references/ci/patterns.md +145 -0
  152. package/templates/skills/turborepo/references/ci/vercel.md +103 -0
  153. package/templates/skills/turborepo/references/cli/README.md +100 -0
  154. package/templates/skills/turborepo/references/cli/commands.md +297 -0
  155. package/templates/skills/turborepo/references/configuration/README.md +211 -0
  156. package/templates/skills/turborepo/references/configuration/global-options.md +195 -0
  157. package/templates/skills/turborepo/references/configuration/gotchas.md +348 -0
  158. package/templates/skills/turborepo/references/configuration/tasks.md +285 -0
  159. package/templates/skills/turborepo/references/environment/README.md +96 -0
  160. package/templates/skills/turborepo/references/environment/gotchas.md +145 -0
  161. package/templates/skills/turborepo/references/environment/modes.md +101 -0
  162. package/templates/skills/turborepo/references/filtering/README.md +148 -0
  163. package/templates/skills/turborepo/references/filtering/patterns.md +152 -0
  164. package/templates/skills/turborepo/references/watch/README.md +99 -0
  165. package/templates/skills/unocss/GENERATION.md +5 -0
  166. package/templates/skills/unocss/SKILL.md +64 -0
  167. package/templates/skills/unocss/references/core-config.md +187 -0
  168. package/templates/skills/unocss/references/core-extracting.md +137 -0
  169. package/templates/skills/unocss/references/core-layers.md +104 -0
  170. package/templates/skills/unocss/references/core-rules.md +166 -0
  171. package/templates/skills/unocss/references/core-safelist.md +105 -0
  172. package/templates/skills/unocss/references/core-shortcuts.md +89 -0
  173. package/templates/skills/unocss/references/core-theme.md +172 -0
  174. package/templates/skills/unocss/references/core-variants.md +175 -0
  175. package/templates/skills/unocss/references/integrations-nuxt.md +199 -0
  176. package/templates/skills/unocss/references/integrations-vite.md +283 -0
  177. package/templates/skills/unocss/references/preset-attributify.md +142 -0
  178. package/templates/skills/unocss/references/preset-icons.md +184 -0
  179. package/templates/skills/unocss/references/preset-mini.md +158 -0
  180. package/templates/skills/unocss/references/preset-rem-to-px.md +97 -0
  181. package/templates/skills/unocss/references/preset-tagify.md +134 -0
  182. package/templates/skills/unocss/references/preset-typography.md +95 -0
  183. package/templates/skills/unocss/references/preset-web-fonts.md +91 -0
  184. package/templates/skills/unocss/references/preset-wind3.md +194 -0
  185. package/templates/skills/unocss/references/preset-wind4.md +247 -0
  186. package/templates/skills/unocss/references/transformer-attributify-jsx.md +156 -0
  187. package/templates/skills/unocss/references/transformer-compile-class.md +128 -0
  188. package/templates/skills/unocss/references/transformer-directives.md +157 -0
  189. package/templates/skills/unocss/references/transformer-variant-group.md +97 -0
  190. package/templates/skills/vite/GENERATION.md +5 -0
  191. package/templates/skills/vite/SKILL.md +50 -0
  192. package/templates/skills/vite/references/advanced-api.md +218 -0
  193. package/templates/skills/vite/references/advanced-backend.md +164 -0
  194. package/templates/skills/vite/references/advanced-performance.md +168 -0
  195. package/templates/skills/vite/references/advanced-plugin-api.md +258 -0
  196. package/templates/skills/vite/references/build-library.md +172 -0
  197. package/templates/skills/vite/references/build-production.md +220 -0
  198. package/templates/skills/vite/references/build-ssr.md +194 -0
  199. package/templates/skills/vite/references/core-cli.md +137 -0
  200. package/templates/skills/vite/references/core-config.md +176 -0
  201. package/templates/skills/vite/references/core-features.md +170 -0
  202. package/templates/skills/vite/references/core-plugins.md +154 -0
  203. package/templates/skills/vite/references/features-assets.md +138 -0
  204. package/templates/skills/vite/references/features-css.md +215 -0
  205. package/templates/skills/vite/references/features-dep-bundling.md +148 -0
  206. package/templates/skills/vite/references/features-env.md +161 -0
  207. package/templates/skills/vite/references/features-glob-import.md +161 -0
  208. package/templates/skills/vite/references/features-hmr.md +200 -0
  209. package/templates/skills/vite/references/features-workers.md +115 -0
  210. package/templates/skills/vitepress/GENERATION.md +5 -0
  211. package/templates/skills/vitepress/SKILL.md +65 -0
  212. package/templates/skills/vitepress/references/advanced-i18n.md +299 -0
  213. package/templates/skills/vitepress/references/advanced-ssr.md +228 -0
  214. package/templates/skills/vitepress/references/core-cli.md +119 -0
  215. package/templates/skills/vitepress/references/core-config.md +189 -0
  216. package/templates/skills/vitepress/references/core-markdown.md +277 -0
  217. package/templates/skills/vitepress/references/core-routing.md +169 -0
  218. package/templates/skills/vitepress/references/features-code-blocks.md +243 -0
  219. package/templates/skills/vitepress/references/features-data-loading.md +220 -0
  220. package/templates/skills/vitepress/references/features-dynamic-routes.md +235 -0
  221. package/templates/skills/vitepress/references/features-vue.md +224 -0
  222. package/templates/skills/vitepress/references/recipes-deploy.md +240 -0
  223. package/templates/skills/vitepress/references/theme-config.md +315 -0
  224. package/templates/skills/vitepress/references/theme-custom.md +269 -0
  225. package/templates/skills/vitepress/references/theme-customization.md +290 -0
  226. package/templates/skills/vitest/GENERATION.md +5 -0
  227. package/templates/skills/vitest/SKILL.md +52 -0
  228. package/templates/skills/vitest/references/advanced-environments.md +264 -0
  229. package/templates/skills/vitest/references/advanced-projects.md +300 -0
  230. package/templates/skills/vitest/references/advanced-type-testing.md +237 -0
  231. package/templates/skills/vitest/references/advanced-vi.md +249 -0
  232. package/templates/skills/vitest/references/core-cli.md +166 -0
  233. package/templates/skills/vitest/references/core-config.md +174 -0
  234. package/templates/skills/vitest/references/core-describe.md +193 -0
  235. package/templates/skills/vitest/references/core-expect.md +219 -0
  236. package/templates/skills/vitest/references/core-hooks.md +244 -0
  237. package/templates/skills/vitest/references/core-test-api.md +233 -0
  238. package/templates/skills/vitest/references/features-concurrency.md +250 -0
  239. package/templates/skills/vitest/references/features-context.md +238 -0
  240. package/templates/skills/vitest/references/features-coverage.md +207 -0
  241. package/templates/skills/vitest/references/features-filtering.md +211 -0
  242. package/templates/skills/vitest/references/features-mocking.md +265 -0
  243. package/templates/skills/vitest/references/features-snapshots.md +207 -0
  244. package/templates/skills/vue/GENERATION.md +5 -0
  245. package/templates/skills/vue/SKILL.md +63 -0
  246. package/templates/skills/vue/references/advanced-async-suspense.md +246 -0
  247. package/templates/skills/vue/references/advanced-provide-inject.md +174 -0
  248. package/templates/skills/vue/references/components-emits.md +139 -0
  249. package/templates/skills/vue/references/components-lifecycle.md +192 -0
  250. package/templates/skills/vue/references/components-props.md +211 -0
  251. package/templates/skills/vue/references/components-slots.md +201 -0
  252. package/templates/skills/vue/references/components-v-model.md +183 -0
  253. package/templates/skills/vue/references/core-reactivity.md +289 -0
  254. package/templates/skills/vue/references/features-composables.md +262 -0
  255. package/templates/skills/vue/references/features-directives.md +224 -0
  256. package/templates/skills/vue/references/features-script-setup.md +247 -0
  257. package/templates/skills/vue/references/features-template-refs.md +212 -0
  258. package/templates/skills/vue/references/features-typescript.md +274 -0
  259. package/templates/skills/vue-best-practices/LICENSE.md +21 -0
  260. package/templates/skills/vue-best-practices/SKILL.md +38 -0
  261. package/templates/skills/vue-best-practices/SYNC.md +5 -0
  262. package/templates/skills/vue-best-practices/rules/codeactions-save-performance.md +79 -0
  263. package/templates/skills/vue-best-practices/rules/data-attributes-config.md +74 -0
  264. package/templates/skills/vue-best-practices/rules/deep-watch-numeric.md +97 -0
  265. package/templates/skills/vue-best-practices/rules/define-model-update-event.md +79 -0
  266. package/templates/skills/vue-best-practices/rules/duplicate-plugin-detection.md +102 -0
  267. package/templates/skills/vue-best-practices/rules/extract-component-props.md +57 -0
  268. package/templates/skills/vue-best-practices/rules/fallthrough-attributes.md +63 -0
  269. package/templates/skills/vue-best-practices/rules/hmr-vue-ssr.md +124 -0
  270. package/templates/skills/vue-best-practices/rules/module-resolution-bundler.md +81 -0
  271. package/templates/skills/vue-best-practices/rules/pinia-store-mocking.md +159 -0
  272. package/templates/skills/vue-best-practices/rules/script-setup-jsdoc.md +85 -0
  273. package/templates/skills/vue-best-practices/rules/strict-css-modules.md +68 -0
  274. package/templates/skills/vue-best-practices/rules/volar-3-breaking-changes.md +65 -0
  275. package/templates/skills/vue-best-practices/rules/vue-directive-comments.md +73 -0
  276. package/templates/skills/vue-best-practices/rules/vue-router-typed-params.md +81 -0
  277. package/templates/skills/vue-best-practices/rules/vue-tsc-strict-templates.md +69 -0
  278. package/templates/skills/vue-best-practices/rules/with-defaults-union-types.md +102 -0
  279. package/templates/skills/vueuse-functions/LICENSE.md +21 -0
  280. package/templates/skills/vueuse-functions/SKILL.md +418 -0
  281. package/templates/skills/vueuse-functions/SYNC.md +5 -0
  282. package/templates/skills/vueuse-functions/references/computedAsync.md +159 -0
  283. package/templates/skills/vueuse-functions/references/computedEager.md +62 -0
  284. package/templates/skills/vueuse-functions/references/computedInject.md +86 -0
  285. package/templates/skills/vueuse-functions/references/computedWithControl.md +100 -0
  286. package/templates/skills/vueuse-functions/references/createEventHook.md +86 -0
  287. package/templates/skills/vueuse-functions/references/createGenericProjection.md +25 -0
  288. package/templates/skills/vueuse-functions/references/createGlobalState.md +95 -0
  289. package/templates/skills/vueuse-functions/references/createInjectionState.md +215 -0
  290. package/templates/skills/vueuse-functions/references/createProjection.md +31 -0
  291. package/templates/skills/vueuse-functions/references/createRef.md +54 -0
  292. package/templates/skills/vueuse-functions/references/createReusableTemplate.md +357 -0
  293. package/templates/skills/vueuse-functions/references/createSharedComposable.md +42 -0
  294. package/templates/skills/vueuse-functions/references/createTemplatePromise.md +259 -0
  295. package/templates/skills/vueuse-functions/references/createUnrefFn.md +51 -0
  296. package/templates/skills/vueuse-functions/references/extendRef.md +76 -0
  297. package/templates/skills/vueuse-functions/references/from.md +48 -0
  298. package/templates/skills/vueuse-functions/references/get.md +30 -0
  299. package/templates/skills/vueuse-functions/references/injectLocal.md +35 -0
  300. package/templates/skills/vueuse-functions/references/isDefined.md +31 -0
  301. package/templates/skills/vueuse-functions/references/logicAnd.md +40 -0
  302. package/templates/skills/vueuse-functions/references/logicNot.md +36 -0
  303. package/templates/skills/vueuse-functions/references/logicOr.md +40 -0
  304. package/templates/skills/vueuse-functions/references/makeDestructurable.md +41 -0
  305. package/templates/skills/vueuse-functions/references/onClickOutside.md +187 -0
  306. package/templates/skills/vueuse-functions/references/onElementRemoval.md +64 -0
  307. package/templates/skills/vueuse-functions/references/onKeyStroke.md +176 -0
  308. package/templates/skills/vueuse-functions/references/onLongPress.md +170 -0
  309. package/templates/skills/vueuse-functions/references/onStartTyping.md +43 -0
  310. package/templates/skills/vueuse-functions/references/provideLocal.md +37 -0
  311. package/templates/skills/vueuse-functions/references/reactify.md +144 -0
  312. package/templates/skills/vueuse-functions/references/reactifyObject.md +61 -0
  313. package/templates/skills/vueuse-functions/references/reactiveComputed.md +34 -0
  314. package/templates/skills/vueuse-functions/references/reactiveOmit.md +86 -0
  315. package/templates/skills/vueuse-functions/references/reactivePick.md +106 -0
  316. package/templates/skills/vueuse-functions/references/refAutoReset.md +44 -0
  317. package/templates/skills/vueuse-functions/references/refDebounced.md +81 -0
  318. package/templates/skills/vueuse-functions/references/refDefault.md +36 -0
  319. package/templates/skills/vueuse-functions/references/refManualReset.md +44 -0
  320. package/templates/skills/vueuse-functions/references/refThrottled.md +99 -0
  321. package/templates/skills/vueuse-functions/references/refWithControl.md +146 -0
  322. package/templates/skills/vueuse-functions/references/set.md +30 -0
  323. package/templates/skills/vueuse-functions/references/syncRef.md +195 -0
  324. package/templates/skills/vueuse-functions/references/syncRefs.md +128 -0
  325. package/templates/skills/vueuse-functions/references/templateRef.md +86 -0
  326. package/templates/skills/vueuse-functions/references/toObserver.md +38 -0
  327. package/templates/skills/vueuse-functions/references/toReactive.md +41 -0
  328. package/templates/skills/vueuse-functions/references/toRef.md +75 -0
  329. package/templates/skills/vueuse-functions/references/toRefs.md +81 -0
  330. package/templates/skills/vueuse-functions/references/tryOnBeforeMount.md +34 -0
  331. package/templates/skills/vueuse-functions/references/tryOnBeforeUnmount.md +32 -0
  332. package/templates/skills/vueuse-functions/references/tryOnMounted.md +34 -0
  333. package/templates/skills/vueuse-functions/references/tryOnScopeDispose.md +31 -0
  334. package/templates/skills/vueuse-functions/references/tryOnUnmounted.md +32 -0
  335. package/templates/skills/vueuse-functions/references/unrefElement.md +54 -0
  336. package/templates/skills/vueuse-functions/references/until.md +165 -0
  337. package/templates/skills/vueuse-functions/references/useAbs.md +31 -0
  338. package/templates/skills/vueuse-functions/references/useActiveElement.md +65 -0
  339. package/templates/skills/vueuse-functions/references/useAnimate.md +140 -0
  340. package/templates/skills/vueuse-functions/references/useArrayDifference.md +84 -0
  341. package/templates/skills/vueuse-functions/references/useArrayEvery.md +59 -0
  342. package/templates/skills/vueuse-functions/references/useArrayFilter.md +63 -0
  343. package/templates/skills/vueuse-functions/references/useArrayFind.md +50 -0
  344. package/templates/skills/vueuse-functions/references/useArrayFindIndex.md +59 -0
  345. package/templates/skills/vueuse-functions/references/useArrayFindLast.md +52 -0
  346. package/templates/skills/vueuse-functions/references/useArrayIncludes.md +63 -0
  347. package/templates/skills/vueuse-functions/references/useArrayJoin.md +74 -0
  348. package/templates/skills/vueuse-functions/references/useArrayMap.md +59 -0
  349. package/templates/skills/vueuse-functions/references/useArrayReduce.md +81 -0
  350. package/templates/skills/vueuse-functions/references/useArraySome.md +59 -0
  351. package/templates/skills/vueuse-functions/references/useArrayUnique.md +76 -0
  352. package/templates/skills/vueuse-functions/references/useAsyncQueue.md +87 -0
  353. package/templates/skills/vueuse-functions/references/useAsyncState.md +140 -0
  354. package/templates/skills/vueuse-functions/references/useAsyncValidator.md +70 -0
  355. package/templates/skills/vueuse-functions/references/useAuth.md +114 -0
  356. package/templates/skills/vueuse-functions/references/useAverage.md +36 -0
  357. package/templates/skills/vueuse-functions/references/useAxios.md +292 -0
  358. package/templates/skills/vueuse-functions/references/useBase64.md +88 -0
  359. package/templates/skills/vueuse-functions/references/useBattery.md +67 -0
  360. package/templates/skills/vueuse-functions/references/useBluetooth.md +161 -0
  361. package/templates/skills/vueuse-functions/references/useBreakpoints.md +128 -0
  362. package/templates/skills/vueuse-functions/references/useBroadcastChannel.md +74 -0
  363. package/templates/skills/vueuse-functions/references/useBrowserLocation.md +83 -0
  364. package/templates/skills/vueuse-functions/references/useCached.md +53 -0
  365. package/templates/skills/vueuse-functions/references/useCeil.md +31 -0
  366. package/templates/skills/vueuse-functions/references/useChangeCase.md +79 -0
  367. package/templates/skills/vueuse-functions/references/useClamp.md +51 -0
  368. package/templates/skills/vueuse-functions/references/useClipboard.md +99 -0
  369. package/templates/skills/vueuse-functions/references/useClipboardItems.md +93 -0
  370. package/templates/skills/vueuse-functions/references/useCloned.md +91 -0
  371. package/templates/skills/vueuse-functions/references/useColorMode.md +171 -0
  372. package/templates/skills/vueuse-functions/references/useConfirmDialog.md +159 -0
  373. package/templates/skills/vueuse-functions/references/useCookies.md +162 -0
  374. package/templates/skills/vueuse-functions/references/useCountdown.md +102 -0
  375. package/templates/skills/vueuse-functions/references/useCounter.md +86 -0
  376. package/templates/skills/vueuse-functions/references/useCssVar.md +50 -0
  377. package/templates/skills/vueuse-functions/references/useCurrentElement.md +61 -0
  378. package/templates/skills/vueuse-functions/references/useCycleList.md +75 -0
  379. package/templates/skills/vueuse-functions/references/useDark.md +142 -0
  380. package/templates/skills/vueuse-functions/references/useDateFormat.md +145 -0
  381. package/templates/skills/vueuse-functions/references/useDebounceFn.md +100 -0
  382. package/templates/skills/vueuse-functions/references/useDebouncedRefHistory.md +40 -0
  383. package/templates/skills/vueuse-functions/references/useDeviceMotion.md +87 -0
  384. package/templates/skills/vueuse-functions/references/useDeviceOrientation.md +62 -0
  385. package/templates/skills/vueuse-functions/references/useDevicePixelRatio.md +44 -0
  386. package/templates/skills/vueuse-functions/references/useDevicesList.md +90 -0
  387. package/templates/skills/vueuse-functions/references/useDisplayMedia.md +71 -0
  388. package/templates/skills/vueuse-functions/references/useDocumentVisibility.md +45 -0
  389. package/templates/skills/vueuse-functions/references/useDraggable.md +210 -0
  390. package/templates/skills/vueuse-functions/references/useDrauu.md +65 -0
  391. package/templates/skills/vueuse-functions/references/useDropZone.md +83 -0
  392. package/templates/skills/vueuse-functions/references/useElementBounding.md +131 -0
  393. package/templates/skills/vueuse-functions/references/useElementByPoint.md +45 -0
  394. package/templates/skills/vueuse-functions/references/useElementHover.md +79 -0
  395. package/templates/skills/vueuse-functions/references/useElementSize.md +78 -0
  396. package/templates/skills/vueuse-functions/references/useElementVisibility.md +126 -0
  397. package/templates/skills/vueuse-functions/references/useEventBus.md +101 -0
  398. package/templates/skills/vueuse-functions/references/useEventListener.md +184 -0
  399. package/templates/skills/vueuse-functions/references/useEventSource.md +204 -0
  400. package/templates/skills/vueuse-functions/references/useExtractedObservable.md +185 -0
  401. package/templates/skills/vueuse-functions/references/useEyeDropper.md +71 -0
  402. package/templates/skills/vueuse-functions/references/useFavicon.md +67 -0
  403. package/templates/skills/vueuse-functions/references/useFetch.md +546 -0
  404. package/templates/skills/vueuse-functions/references/useFileDialog.md +91 -0
  405. package/templates/skills/vueuse-functions/references/useFileSystemAccess.md +162 -0
  406. package/templates/skills/vueuse-functions/references/useFirestore.md +104 -0
  407. package/templates/skills/vueuse-functions/references/useFloor.md +31 -0
  408. package/templates/skills/vueuse-functions/references/useFocus.md +99 -0
  409. package/templates/skills/vueuse-functions/references/useFocusTrap.md +245 -0
  410. package/templates/skills/vueuse-functions/references/useFocusWithin.md +57 -0
  411. package/templates/skills/vueuse-functions/references/useFps.md +28 -0
  412. package/templates/skills/vueuse-functions/references/useFullscreen.md +75 -0
  413. package/templates/skills/vueuse-functions/references/useFuse.md +107 -0
  414. package/templates/skills/vueuse-functions/references/useGamepad.md +223 -0
  415. package/templates/skills/vueuse-functions/references/useGeolocation.md +86 -0
  416. package/templates/skills/vueuse-functions/references/useIDBKeyval.md +93 -0
  417. package/templates/skills/vueuse-functions/references/useIdle.md +89 -0
  418. package/templates/skills/vueuse-functions/references/useImage.md +86 -0
  419. package/templates/skills/vueuse-functions/references/useInfiniteScroll.md +157 -0
  420. package/templates/skills/vueuse-functions/references/useIntersectionObserver.md +118 -0
  421. package/templates/skills/vueuse-functions/references/useInterval.md +69 -0
  422. package/templates/skills/vueuse-functions/references/useIntervalFn.md +50 -0
  423. package/templates/skills/vueuse-functions/references/useIpcRenderer.md +118 -0
  424. package/templates/skills/vueuse-functions/references/useIpcRendererInvoke.md +58 -0
  425. package/templates/skills/vueuse-functions/references/useIpcRendererOn.md +52 -0
  426. package/templates/skills/vueuse-functions/references/useJwt.md +57 -0
  427. package/templates/skills/vueuse-functions/references/useKeyModifier.md +87 -0
  428. package/templates/skills/vueuse-functions/references/useLastChanged.md +63 -0
  429. package/templates/skills/vueuse-functions/references/useLocalStorage.md +41 -0
  430. package/templates/skills/vueuse-functions/references/useMagicKeys.md +217 -0
  431. package/templates/skills/vueuse-functions/references/useManualRefHistory.md +204 -0
  432. package/templates/skills/vueuse-functions/references/useMath.md +47 -0
  433. package/templates/skills/vueuse-functions/references/useMax.md +36 -0
  434. package/templates/skills/vueuse-functions/references/useMediaControls.md +571 -0
  435. package/templates/skills/vueuse-functions/references/useMediaQuery.md +53 -0
  436. package/templates/skills/vueuse-functions/references/useMemoize.md +175 -0
  437. package/templates/skills/vueuse-functions/references/useMemory.md +56 -0
  438. package/templates/skills/vueuse-functions/references/useMin.md +36 -0
  439. package/templates/skills/vueuse-functions/references/useMounted.md +38 -0
  440. package/templates/skills/vueuse-functions/references/useMouse.md +114 -0
  441. package/templates/skills/vueuse-functions/references/useMouseInElement.md +123 -0
  442. package/templates/skills/vueuse-functions/references/useMousePressed.md +112 -0
  443. package/templates/skills/vueuse-functions/references/useMutationObserver.md +62 -0
  444. package/templates/skills/vueuse-functions/references/useNProgress.md +78 -0
  445. package/templates/skills/vueuse-functions/references/useNavigatorLanguage.md +57 -0
  446. package/templates/skills/vueuse-functions/references/useNetwork.md +106 -0
  447. package/templates/skills/vueuse-functions/references/useNow.md +75 -0
  448. package/templates/skills/vueuse-functions/references/useObjectUrl.md +55 -0
  449. package/templates/skills/vueuse-functions/references/useObservable.md +67 -0
  450. package/templates/skills/vueuse-functions/references/useOffsetPagination.md +199 -0
  451. package/templates/skills/vueuse-functions/references/useOnline.md +41 -0
  452. package/templates/skills/vueuse-functions/references/usePageLeave.md +42 -0
  453. package/templates/skills/vueuse-functions/references/useParallax.md +58 -0
  454. package/templates/skills/vueuse-functions/references/useParentElement.md +54 -0
  455. package/templates/skills/vueuse-functions/references/usePerformanceObserver.md +48 -0
  456. package/templates/skills/vueuse-functions/references/usePermission.md +78 -0
  457. package/templates/skills/vueuse-functions/references/usePointer.md +89 -0
  458. package/templates/skills/vueuse-functions/references/usePointerLock.md +60 -0
  459. package/templates/skills/vueuse-functions/references/usePointerSwipe.md +80 -0
  460. package/templates/skills/vueuse-functions/references/usePrecision.md +49 -0
  461. package/templates/skills/vueuse-functions/references/usePreferredColorScheme.md +42 -0
  462. package/templates/skills/vueuse-functions/references/usePreferredContrast.md +42 -0
  463. package/templates/skills/vueuse-functions/references/usePreferredDark.md +41 -0
  464. package/templates/skills/vueuse-functions/references/usePreferredLanguages.md +41 -0
  465. package/templates/skills/vueuse-functions/references/usePreferredReducedMotion.md +42 -0
  466. package/templates/skills/vueuse-functions/references/usePreferredReducedTransparency.md +42 -0
  467. package/templates/skills/vueuse-functions/references/usePrevious.md +40 -0
  468. package/templates/skills/vueuse-functions/references/useProjection.md +38 -0
  469. package/templates/skills/vueuse-functions/references/useQRCode.md +53 -0
  470. package/templates/skills/vueuse-functions/references/useRTDB.md +70 -0
  471. package/templates/skills/vueuse-functions/references/useRafFn.md +68 -0
  472. package/templates/skills/vueuse-functions/references/useRefHistory.md +292 -0
  473. package/templates/skills/vueuse-functions/references/useResizeObserver.md +110 -0
  474. package/templates/skills/vueuse-functions/references/useRound.md +31 -0
  475. package/templates/skills/vueuse-functions/references/useRouteHash.md +27 -0
  476. package/templates/skills/vueuse-functions/references/useRouteParams.md +38 -0
  477. package/templates/skills/vueuse-functions/references/useRouteQuery.md +38 -0
  478. package/templates/skills/vueuse-functions/references/useSSRWidth.md +47 -0
  479. package/templates/skills/vueuse-functions/references/useScreenOrientation.md +96 -0
  480. package/templates/skills/vueuse-functions/references/useScreenSafeArea.md +60 -0
  481. package/templates/skills/vueuse-functions/references/useScriptTag.md +116 -0
  482. package/templates/skills/vueuse-functions/references/useScroll.md +238 -0
  483. package/templates/skills/vueuse-functions/references/useScrollLock.md +66 -0
  484. package/templates/skills/vueuse-functions/references/useSessionStorage.md +41 -0
  485. package/templates/skills/vueuse-functions/references/useShare.md +68 -0
  486. package/templates/skills/vueuse-functions/references/useSortable.md +177 -0
  487. package/templates/skills/vueuse-functions/references/useSorted.md +90 -0
  488. package/templates/skills/vueuse-functions/references/useSpeechRecognition.md +94 -0
  489. package/templates/skills/vueuse-functions/references/useSpeechSynthesis.md +105 -0
  490. package/templates/skills/vueuse-functions/references/useStepper.md +137 -0
  491. package/templates/skills/vueuse-functions/references/useStorage.md +219 -0
  492. package/templates/skills/vueuse-functions/references/useStorageAsync.md +134 -0
  493. package/templates/skills/vueuse-functions/references/useStyleTag.md +131 -0
  494. package/templates/skills/vueuse-functions/references/useSubject.md +52 -0
  495. package/templates/skills/vueuse-functions/references/useSubscription.md +33 -0
  496. package/templates/skills/vueuse-functions/references/useSum.md +36 -0
  497. package/templates/skills/vueuse-functions/references/useSupported.md +29 -0
  498. package/templates/skills/vueuse-functions/references/useSwipe.md +75 -0
  499. package/templates/skills/vueuse-functions/references/useTemplateRefsList.md +37 -0
  500. package/templates/skills/vueuse-functions/references/useTextDirection.md +75 -0
  501. package/templates/skills/vueuse-functions/references/useTextSelection.md +40 -0
  502. package/templates/skills/vueuse-functions/references/useTextareaAutosize.md +97 -0
  503. package/templates/skills/vueuse-functions/references/useThrottleFn.md +57 -0
  504. package/templates/skills/vueuse-functions/references/useThrottledRefHistory.md +47 -0
  505. package/templates/skills/vueuse-functions/references/useTimeAgo.md +152 -0
  506. package/templates/skills/vueuse-functions/references/useTimeAgoIntl.md +116 -0
  507. package/templates/skills/vueuse-functions/references/useTimeout.md +75 -0
  508. package/templates/skills/vueuse-functions/references/useTimeoutFn.md +51 -0
  509. package/templates/skills/vueuse-functions/references/useTimeoutPoll.md +47 -0
  510. package/templates/skills/vueuse-functions/references/useTimestamp.md +85 -0
  511. package/templates/skills/vueuse-functions/references/useTitle.md +113 -0
  512. package/templates/skills/vueuse-functions/references/useToNumber.md +54 -0
  513. package/templates/skills/vueuse-functions/references/useToString.md +34 -0
  514. package/templates/skills/vueuse-functions/references/useToggle.md +56 -0
  515. package/templates/skills/vueuse-functions/references/useTransition.md +265 -0
  516. package/templates/skills/vueuse-functions/references/useTrunc.md +33 -0
  517. package/templates/skills/vueuse-functions/references/useUrlSearchParams.md +121 -0
  518. package/templates/skills/vueuse-functions/references/useUserMedia.md +1138 -0
  519. package/templates/skills/vueuse-functions/references/useVModel.md +116 -0
  520. package/templates/skills/vueuse-functions/references/useVModels.md +67 -0
  521. package/templates/skills/vueuse-functions/references/useVibrate.md +83 -0
  522. package/templates/skills/vueuse-functions/references/useVirtualList.md +184 -0
  523. package/templates/skills/vueuse-functions/references/useWakeLock.md +50 -0
  524. package/templates/skills/vueuse-functions/references/useWebNotification.md +177 -0
  525. package/templates/skills/vueuse-functions/references/useWebSocket.md +268 -0
  526. package/templates/skills/vueuse-functions/references/useWebWorker.md +60 -0
  527. package/templates/skills/vueuse-functions/references/useWebWorkerFn.md +102 -0
  528. package/templates/skills/vueuse-functions/references/useWindowFocus.md +46 -0
  529. package/templates/skills/vueuse-functions/references/useWindowScroll.md +62 -0
  530. package/templates/skills/vueuse-functions/references/useWindowSize.md +76 -0
  531. package/templates/skills/vueuse-functions/references/useZoomFactor.md +53 -0
  532. package/templates/skills/vueuse-functions/references/useZoomLevel.md +53 -0
  533. package/templates/skills/vueuse-functions/references/watchArray.md +53 -0
  534. package/templates/skills/vueuse-functions/references/watchAtMost.md +54 -0
  535. package/templates/skills/vueuse-functions/references/watchDebounced.md +72 -0
  536. package/templates/skills/vueuse-functions/references/watchDeep.md +54 -0
  537. package/templates/skills/vueuse-functions/references/watchExtractedObservable.md +167 -0
  538. package/templates/skills/vueuse-functions/references/watchIgnorable.md +120 -0
  539. package/templates/skills/vueuse-functions/references/watchImmediate.md +44 -0
  540. package/templates/skills/vueuse-functions/references/watchOnce.md +41 -0
  541. package/templates/skills/vueuse-functions/references/watchPausable.md +86 -0
  542. package/templates/skills/vueuse-functions/references/watchThrottled.md +73 -0
  543. package/templates/skills/vueuse-functions/references/watchTriggerable.md +97 -0
  544. package/templates/skills/vueuse-functions/references/watchWithFilter.md +55 -0
  545. package/templates/skills/vueuse-functions/references/whenever.md +100 -0
  546. package/templates/skills/web-design-guidelines/SKILL.md +39 -0
  547. package/templates/skills/web-design-guidelines/SYNC.md +5 -0
@@ -0,0 +1,262 @@
1
+ ---
2
+ name: composables
3
+ description: Encapsulate and reuse stateful logic with the Composition API
4
+ ---
5
+
6
+ # Composables
7
+
8
+ Composables are functions that encapsulate and reuse stateful logic using Composition API.
9
+
10
+ ## What is a Composable?
11
+
12
+ A composable is a function that:
13
+ - Uses Composition API functions (ref, computed, onMounted, etc.)
14
+ - Manages reactive state
15
+ - Returns reactive state and/or functions
16
+ - Name starts with "use" by convention
17
+
18
+ ## Basic Example
19
+
20
+ ```ts
21
+ // composables/useMouse.ts
22
+ import { ref, onMounted, onUnmounted } from 'vue'
23
+
24
+ export function useMouse() {
25
+ const x = ref(0)
26
+ const y = ref(0)
27
+
28
+ function update(event: MouseEvent) {
29
+ x.value = event.pageX
30
+ y.value = event.pageY
31
+ }
32
+
33
+ onMounted(() => window.addEventListener('mousemove', update))
34
+ onUnmounted(() => window.removeEventListener('mousemove', update))
35
+
36
+ return { x, y }
37
+ }
38
+ ```
39
+
40
+ Usage:
41
+
42
+ ```vue
43
+ <script setup lang="ts">
44
+ import { useMouse } from '@/composables/useMouse'
45
+
46
+ const { x, y } = useMouse()
47
+ </script>
48
+
49
+ <template>
50
+ Mouse: {{ x }}, {{ y }}
51
+ </template>
52
+ ```
53
+
54
+ ## Async Composable
55
+
56
+ Handle async data fetching:
57
+
58
+ ```ts
59
+ // composables/useFetch.ts
60
+ import { ref, watchEffect, toValue, type MaybeRefOrGetter } from 'vue'
61
+
62
+ export function useFetch<T>(url: MaybeRefOrGetter<string>) {
63
+ const data = ref<T | null>(null)
64
+ const error = ref<Error | null>(null)
65
+ const isLoading = ref(false)
66
+
67
+ watchEffect(async () => {
68
+ data.value = null
69
+ error.value = null
70
+ isLoading.value = true
71
+
72
+ try {
73
+ const response = await fetch(toValue(url))
74
+ data.value = await response.json()
75
+ } catch (e) {
76
+ error.value = e as Error
77
+ } finally {
78
+ isLoading.value = false
79
+ }
80
+ })
81
+
82
+ return { data, error, isLoading }
83
+ }
84
+ ```
85
+
86
+ Usage with reactive URL:
87
+
88
+ ```vue
89
+ <script setup lang="ts">
90
+ import { ref } from 'vue'
91
+ import { useFetch } from '@/composables/useFetch'
92
+
93
+ const userId = ref(1)
94
+ const { data, error, isLoading } = useFetch(() => `/api/users/${userId.value}`)
95
+
96
+ // Changing userId triggers refetch
97
+ function nextUser() {
98
+ userId.value++
99
+ }
100
+ </script>
101
+ ```
102
+
103
+ ## Composable Conventions
104
+
105
+ ### Naming
106
+
107
+ - Always start with `use` (useMouse, useFetch, useCounter)
108
+ - Use camelCase
109
+
110
+ ### Input Arguments
111
+
112
+ Accept refs or getters for reactivity:
113
+
114
+ ```ts
115
+ import { toValue, type MaybeRefOrGetter } from 'vue'
116
+
117
+ function useFeature(input: MaybeRefOrGetter<string>) {
118
+ // toValue handles ref, getter, or plain value
119
+ const value = toValue(input)
120
+
121
+ // For reactive tracking, call toValue inside watchEffect/computed
122
+ watchEffect(() => {
123
+ console.log(toValue(input))
124
+ })
125
+ }
126
+ ```
127
+
128
+ ### Return Values
129
+
130
+ Return a plain object with refs (not reactive):
131
+
132
+ ```ts
133
+ // ✅ Good - refs can be destructured
134
+ export function useCounter() {
135
+ const count = ref(0)
136
+ const increment = () => count.value++
137
+
138
+ return { count, increment }
139
+ }
140
+
141
+ // Usage - maintains reactivity
142
+ const { count, increment } = useCounter()
143
+ ```
144
+
145
+ ```ts
146
+ // ❌ Avoid - reactive loses connection on destructure
147
+ export function useCounter() {
148
+ const state = reactive({ count: 0 })
149
+ return state
150
+ }
151
+
152
+ // Loses reactivity
153
+ const { count } = useCounter()
154
+ ```
155
+
156
+ ## Composing Composables
157
+
158
+ Composables can use other composables:
159
+
160
+ ```ts
161
+ // composables/useEventListener.ts
162
+ import { onMounted, onUnmounted, type MaybeRefOrGetter, toValue } from 'vue'
163
+
164
+ export function useEventListener(
165
+ target: MaybeRefOrGetter<EventTarget>,
166
+ event: string,
167
+ callback: EventListener
168
+ ) {
169
+ onMounted(() => toValue(target).addEventListener(event, callback))
170
+ onUnmounted(() => toValue(target).removeEventListener(event, callback))
171
+ }
172
+ ```
173
+
174
+ ```ts
175
+ // composables/useMouse.ts - using useEventListener
176
+ import { ref } from 'vue'
177
+ import { useEventListener } from './useEventListener'
178
+
179
+ export function useMouse() {
180
+ const x = ref(0)
181
+ const y = ref(0)
182
+
183
+ useEventListener(window, 'mousemove', (event) => {
184
+ x.value = (event as MouseEvent).pageX
185
+ y.value = (event as MouseEvent).pageY
186
+ })
187
+
188
+ return { x, y }
189
+ }
190
+ ```
191
+
192
+ ## Side Effects
193
+
194
+ ### SSR Considerations
195
+
196
+ Run DOM-specific code only in browser:
197
+
198
+ ```ts
199
+ export function useWindowSize() {
200
+ const width = ref(0)
201
+ const height = ref(0)
202
+
203
+ onMounted(() => {
204
+ // Only runs in browser
205
+ width.value = window.innerWidth
206
+ height.value = window.innerHeight
207
+ })
208
+
209
+ return { width, height }
210
+ }
211
+ ```
212
+
213
+ ### Cleanup
214
+
215
+ Always clean up side effects:
216
+
217
+ ```ts
218
+ export function useInterval(callback: () => void, delay: number) {
219
+ const id = ref<number | undefined>()
220
+
221
+ onMounted(() => {
222
+ id.value = setInterval(callback, delay)
223
+ })
224
+
225
+ onUnmounted(() => {
226
+ if (id.value) clearInterval(id.value)
227
+ })
228
+ }
229
+ ```
230
+
231
+ ## Usage Restrictions
232
+
233
+ Composables must be called:
234
+ - Synchronously in `<script setup>` or `setup()`
235
+ - Can be called in lifecycle hooks like `onMounted()`
236
+
237
+ ```ts
238
+ // ✅ Works
239
+ <script setup>
240
+ const { x, y } = useMouse()
241
+ </script>
242
+
243
+ // ❌ Won't work
244
+ setTimeout(() => {
245
+ const { x, y } = useMouse() // No active component
246
+ }, 100)
247
+ ```
248
+
249
+ Exception: `<script setup>` allows composables after `await`.
250
+
251
+ ## vs Other Patterns
252
+
253
+ **vs Mixins**: Composables are explicit (no naming collisions, clear source)
254
+
255
+ **vs Renderless Components**: Composables have no component overhead
256
+
257
+ **vs React Hooks**: Similar concept, but Vue's reactivity is different - no rules about hook order or dependency arrays
258
+
259
+ <!--
260
+ Source references:
261
+ - https://vuejs.org/guide/reusability/composables.html
262
+ -->
@@ -0,0 +1,224 @@
1
+ ---
2
+ name: custom-directives
3
+ description: Create reusable directives for low-level DOM manipulation
4
+ ---
5
+
6
+ # Custom Directives
7
+
8
+ Custom directives provide low-level DOM access for reusable behavior.
9
+
10
+ ## When to Use
11
+
12
+ Use custom directives when:
13
+ - You need direct DOM manipulation
14
+ - The behavior can't be achieved with components or composables
15
+ - You need to apply behavior to native elements
16
+
17
+ ## Basic Example
18
+
19
+ ```vue
20
+ <script setup lang="ts">
21
+ // v-focus directive
22
+ const vFocus = {
23
+ mounted: (el: HTMLElement) => el.focus()
24
+ }
25
+ </script>
26
+
27
+ <template>
28
+ <input v-focus />
29
+ </template>
30
+ ```
31
+
32
+ ## Directive Hooks
33
+
34
+ ```ts
35
+ const myDirective = {
36
+ // Before element attributes/listeners are applied
37
+ created(el, binding, vnode) {},
38
+
39
+ // Before element is inserted into DOM
40
+ beforeMount(el, binding, vnode) {},
41
+
42
+ // After element and children are mounted
43
+ mounted(el, binding, vnode) {},
44
+
45
+ // Before parent component updates
46
+ beforeUpdate(el, binding, vnode, prevVnode) {},
47
+
48
+ // After parent component updates
49
+ updated(el, binding, vnode, prevVnode) {},
50
+
51
+ // Before parent component unmounts
52
+ beforeUnmount(el, binding, vnode) {},
53
+
54
+ // After parent component unmounts
55
+ unmounted(el, binding, vnode) {}
56
+ }
57
+ ```
58
+
59
+ ## Hook Arguments
60
+
61
+ ```ts
62
+ interface DirectiveBinding<T = any> {
63
+ value: T // v-my-dir="value"
64
+ oldValue: T // Previous value (beforeUpdate/updated only)
65
+ arg?: string // v-my-dir:arg
66
+ modifiers: Record<string, boolean> // v-my-dir.foo.bar → { foo: true, bar: true }
67
+ instance: ComponentPublicInstance // Component using the directive
68
+ dir: ObjectDirective // Directive definition object
69
+ }
70
+ ```
71
+
72
+ Example usage:
73
+
74
+ ```vue-html
75
+ <div v-example:foo.bar="baz">
76
+ ```
77
+
78
+ ```ts
79
+ // binding object:
80
+ {
81
+ arg: 'foo',
82
+ modifiers: { bar: true },
83
+ value: /* value of baz */,
84
+ oldValue: /* previous value */
85
+ }
86
+ ```
87
+
88
+ ## Function Shorthand
89
+
90
+ When you only need `mounted` and `updated` with same behavior:
91
+
92
+ ```ts
93
+ // Full form
94
+ const vColor = {
95
+ mounted(el, binding) {
96
+ el.style.color = binding.value
97
+ },
98
+ updated(el, binding) {
99
+ el.style.color = binding.value
100
+ }
101
+ }
102
+
103
+ // Shorthand (same behavior)
104
+ const vColor = (el: HTMLElement, binding: DirectiveBinding<string>) => {
105
+ el.style.color = binding.value
106
+ }
107
+ ```
108
+
109
+ ## Global Registration
110
+
111
+ ```ts
112
+ // main.ts
113
+ const app = createApp(App)
114
+
115
+ app.directive('focus', {
116
+ mounted: (el) => el.focus()
117
+ })
118
+
119
+ // Shorthand
120
+ app.directive('color', (el, binding) => {
121
+ el.style.color = binding.value
122
+ })
123
+ ```
124
+
125
+ ## Object Literals
126
+
127
+ Pass multiple values:
128
+
129
+ ```vue-html
130
+ <div v-demo="{ color: 'white', text: 'hello' }">
131
+ ```
132
+
133
+ ```ts
134
+ const vDemo = (el: HTMLElement, binding: DirectiveBinding<{ color: string; text: string }>) => {
135
+ console.log(binding.value.color) // 'white'
136
+ console.log(binding.value.text) // 'hello'
137
+ }
138
+ ```
139
+
140
+ ## Dynamic Arguments
141
+
142
+ ```vue-html
143
+ <div v-my-directive:[dynamicArg]="value">
144
+ ```
145
+
146
+ ## Practical Examples
147
+
148
+ ### v-click-outside
149
+
150
+ ```ts
151
+ const vClickOutside = {
152
+ mounted(el: HTMLElement, binding: DirectiveBinding<() => void>) {
153
+ el._clickOutside = (event: MouseEvent) => {
154
+ if (!el.contains(event.target as Node)) {
155
+ binding.value()
156
+ }
157
+ }
158
+ document.addEventListener('click', el._clickOutside)
159
+ },
160
+ unmounted(el: HTMLElement) {
161
+ document.removeEventListener('click', el._clickOutside)
162
+ }
163
+ }
164
+ ```
165
+
166
+ ### v-tooltip
167
+
168
+ ```ts
169
+ const vTooltip = {
170
+ mounted(el: HTMLElement, binding: DirectiveBinding<string>) {
171
+ el.setAttribute('title', binding.value)
172
+ },
173
+ updated(el: HTMLElement, binding: DirectiveBinding<string>) {
174
+ el.setAttribute('title', binding.value)
175
+ }
176
+ }
177
+ ```
178
+
179
+ ### v-permission
180
+
181
+ ```ts
182
+ const vPermission = {
183
+ mounted(el: HTMLElement, binding: DirectiveBinding<string>) {
184
+ if (!hasPermission(binding.value)) {
185
+ el.parentNode?.removeChild(el)
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ## TypeScript: Global Directives
192
+
193
+ ```ts
194
+ // directives/highlight.ts
195
+ import type { Directive } from 'vue'
196
+
197
+ export type HighlightDirective = Directive<HTMLElement, string>
198
+
199
+ declare module 'vue' {
200
+ export interface ComponentCustomProperties {
201
+ vHighlight: HighlightDirective
202
+ }
203
+ }
204
+
205
+ export default {
206
+ mounted: (el, binding) => {
207
+ el.style.backgroundColor = binding.value
208
+ }
209
+ } satisfies HighlightDirective
210
+ ```
211
+
212
+ ## Usage on Components
213
+
214
+ ⚠️ **Not recommended** - directives apply to root element, which can be unpredictable with multi-root components.
215
+
216
+ ```vue-html
217
+ <!-- Applies to MyComponent's root element -->
218
+ <MyComponent v-my-directive />
219
+ ```
220
+
221
+ <!--
222
+ Source references:
223
+ - https://vuejs.org/guide/reusability/custom-directives.html
224
+ -->
@@ -0,0 +1,247 @@
1
+ ---
2
+ name: script-setup
3
+ description: Compile-time syntactic sugar for Composition API in SFCs
4
+ ---
5
+
6
+ # Script Setup
7
+
8
+ `<script setup>` is the recommended syntax for Composition API in Single-File Components.
9
+
10
+ ## Basic Syntax
11
+
12
+ ```vue
13
+ <script setup lang="ts">
14
+ import { ref } from 'vue'
15
+
16
+ const count = ref(0)
17
+
18
+ function increment() {
19
+ count.value++
20
+ }
21
+ </script>
22
+
23
+ <template>
24
+ <button @click="increment">{{ count }}</button>
25
+ </template>
26
+ ```
27
+
28
+ ## Benefits
29
+
30
+ - Less boilerplate (no `export default`, no `return`)
31
+ - TypeScript type inference
32
+ - Better runtime performance
33
+ - Better IDE support
34
+
35
+ ## Top-Level Bindings
36
+
37
+ All top-level bindings are automatically available in template:
38
+
39
+ ```vue
40
+ <script setup lang="ts">
41
+ // Variables
42
+ const msg = 'Hello'
43
+
44
+ // Imports
45
+ import { capitalize } from './helpers'
46
+ import MyComponent from './MyComponent.vue'
47
+
48
+ // Functions
49
+ function greet() {
50
+ console.log(msg)
51
+ }
52
+ </script>
53
+
54
+ <template>
55
+ <MyComponent />
56
+ <p>{{ capitalize(msg) }}</p>
57
+ <button @click="greet">Greet</button>
58
+ </template>
59
+ ```
60
+
61
+ ## Compiler Macros
62
+
63
+ These are available without import:
64
+
65
+ - `defineProps()` - declare props
66
+ - `defineEmits()` - declare emits
67
+ - `defineModel()` - declare v-model (3.4+)
68
+ - `defineExpose()` - expose public instance properties
69
+ - `defineOptions()` - declare component options (3.3+)
70
+ - `defineSlots()` - type slot props (3.3+)
71
+ - `withDefaults()` - provide prop defaults
72
+
73
+ ## Using Components
74
+
75
+ Import and use directly without registration:
76
+
77
+ ```vue
78
+ <script setup lang="ts">
79
+ import MyComponent from './MyComponent.vue'
80
+ import { MyButton } from './components'
81
+ </script>
82
+
83
+ <template>
84
+ <MyComponent />
85
+ <MyButton />
86
+ </template>
87
+ ```
88
+
89
+ ### Dynamic Components
90
+
91
+ ```vue
92
+ <script setup lang="ts">
93
+ import Foo from './Foo.vue'
94
+ import Bar from './Bar.vue'
95
+ </script>
96
+
97
+ <template>
98
+ <component :is="condition ? Foo : Bar" />
99
+ </template>
100
+ ```
101
+
102
+ ### Recursive Components
103
+
104
+ SFCs can reference themselves by filename:
105
+
106
+ ```vue
107
+ <!-- FooBar.vue can use <FooBar/> in its template -->
108
+ ```
109
+
110
+ ## Custom Directives
111
+
112
+ Variables starting with `v` are available as directives:
113
+
114
+ ```vue
115
+ <script setup lang="ts">
116
+ const vFocus = {
117
+ mounted: (el: HTMLElement) => el.focus()
118
+ }
119
+ </script>
120
+
121
+ <template>
122
+ <input v-focus />
123
+ </template>
124
+ ```
125
+
126
+ ## defineExpose()
127
+
128
+ Components are closed by default. Use `defineExpose` to expose properties:
129
+
130
+ ```vue
131
+ <script setup lang="ts">
132
+ import { ref } from 'vue'
133
+
134
+ const count = ref(0)
135
+ const publicMethod = () => console.log('called')
136
+
137
+ defineExpose({
138
+ count,
139
+ publicMethod
140
+ })
141
+ </script>
142
+ ```
143
+
144
+ Parent can access via template ref:
145
+
146
+ ```ts
147
+ const childRef = ref()
148
+ childRef.value.count // accessible
149
+ childRef.value.publicMethod() // accessible
150
+ ```
151
+
152
+ ## defineOptions() (3.3+)
153
+
154
+ Declare component options without separate `<script>` block:
155
+
156
+ ```vue
157
+ <script setup lang="ts">
158
+ defineOptions({
159
+ inheritAttrs: false,
160
+ name: 'CustomName'
161
+ })
162
+ </script>
163
+ ```
164
+
165
+ ## defineSlots() (3.3+)
166
+
167
+ Type slot props for IDE support:
168
+
169
+ ```vue
170
+ <script setup lang="ts">
171
+ const slots = defineSlots<{
172
+ default(props: { msg: string }): any
173
+ header(props: { title: string }): any
174
+ }>()
175
+ </script>
176
+ ```
177
+
178
+ ## useSlots() & useAttrs()
179
+
180
+ Access slots and attrs in script:
181
+
182
+ ```vue
183
+ <script setup lang="ts">
184
+ import { useSlots, useAttrs } from 'vue'
185
+
186
+ const slots = useSlots()
187
+ const attrs = useAttrs()
188
+ </script>
189
+ ```
190
+
191
+ ## Top-Level await
192
+
193
+ Async setup with Suspense:
194
+
195
+ ```vue
196
+ <script setup lang="ts">
197
+ const data = await fetch('/api/data').then(r => r.json())
198
+ </script>
199
+ ```
200
+
201
+ > Note: Requires `<Suspense>` boundary in parent.
202
+
203
+ ## Generic Components (TypeScript)
204
+
205
+ ```vue
206
+ <script setup lang="ts" generic="T extends string | number">
207
+ defineProps<{
208
+ items: T[]
209
+ selected: T
210
+ }>()
211
+ </script>
212
+ ```
213
+
214
+ Multiple generics with constraints:
215
+
216
+ ```vue
217
+ <script setup lang="ts" generic="T extends Item, U extends string">
218
+ import type { Item } from './types'
219
+
220
+ defineProps<{
221
+ item: T
222
+ label: U
223
+ }>()
224
+ </script>
225
+ ```
226
+
227
+ ## Alongside Normal Script
228
+
229
+ For advanced cases like named exports or one-time side effects:
230
+
231
+ ```vue
232
+ <script lang="ts">
233
+ // Runs once when module is imported
234
+ runSideEffect()
235
+
236
+ export const exportedValue = 'hello'
237
+ </script>
238
+
239
+ <script setup lang="ts">
240
+ // Runs for each component instance
241
+ </script>
242
+ ```
243
+
244
+ <!--
245
+ Source references:
246
+ - https://vuejs.org/api/sfc-script-setup.html
247
+ -->