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.
- package/bin/cli/README.md +1 -1
- package/bin/cli/cli.js +8672 -3345
- package/bin/cli/package.json +1 -1
- package/bin/cli/sdk-tools.d.ts +41 -5
- package/dist/chunks/simple-config.mjs +1 -1
- package/package.json +2 -2
- package/templates/skills/antfu/SKILL.md +222 -0
- package/templates/skills/antfu/references/antfu-eslint-config.md +328 -0
- package/templates/skills/antfu/references/app-development.md +60 -0
- package/templates/skills/antfu/references/github-actions.md +68 -0
- package/templates/skills/antfu/references/gitignore.md +29 -0
- package/templates/skills/antfu/references/library-development.md +85 -0
- package/templates/skills/antfu/references/monorepo.md +126 -0
- package/templates/skills/antfu/references/vscode-extensions.md +34 -0
- package/templates/skills/nuxt/GENERATION.md +5 -0
- package/templates/skills/nuxt/SKILL.md +55 -0
- package/templates/skills/nuxt/references/advanced-hooks.md +289 -0
- package/templates/skills/nuxt/references/advanced-layers.md +299 -0
- package/templates/skills/nuxt/references/advanced-module-authoring.md +554 -0
- package/templates/skills/nuxt/references/best-practices-data-fetching.md +357 -0
- package/templates/skills/nuxt/references/best-practices-ssr.md +355 -0
- package/templates/skills/nuxt/references/core-cli.md +263 -0
- package/templates/skills/nuxt/references/core-config.md +162 -0
- package/templates/skills/nuxt/references/core-data-fetching.md +236 -0
- package/templates/skills/nuxt/references/core-deployment.md +224 -0
- package/templates/skills/nuxt/references/core-directory-structure.md +269 -0
- package/templates/skills/nuxt/references/core-modules.md +292 -0
- package/templates/skills/nuxt/references/core-routing.md +226 -0
- package/templates/skills/nuxt/references/features-components-autoimport.md +328 -0
- package/templates/skills/nuxt/references/features-components.md +264 -0
- package/templates/skills/nuxt/references/features-composables.md +276 -0
- package/templates/skills/nuxt/references/features-server.md +265 -0
- package/templates/skills/nuxt/references/features-state.md +194 -0
- package/templates/skills/nuxt/references/rendering-modes.md +237 -0
- package/templates/skills/pinia/GENERATION.md +5 -0
- package/templates/skills/pinia/SKILL.md +59 -0
- package/templates/skills/pinia/references/advanced-hmr.md +61 -0
- package/templates/skills/pinia/references/advanced-nuxt.md +119 -0
- package/templates/skills/pinia/references/advanced-ssr.md +121 -0
- package/templates/skills/pinia/references/best-practices-outside-component.md +115 -0
- package/templates/skills/pinia/references/best-practices-testing.md +212 -0
- package/templates/skills/pinia/references/core-stores.md +389 -0
- package/templates/skills/pinia/references/features-composables.md +114 -0
- package/templates/skills/pinia/references/features-composing-stores.md +134 -0
- package/templates/skills/pinia/references/features-plugins.md +203 -0
- package/templates/skills/pnpm/GENERATION.md +5 -0
- package/templates/skills/pnpm/SKILL.md +42 -0
- package/templates/skills/pnpm/references/best-practices-ci.md +285 -0
- package/templates/skills/pnpm/references/best-practices-migration.md +291 -0
- package/templates/skills/pnpm/references/best-practices-performance.md +284 -0
- package/templates/skills/pnpm/references/core-cli.md +229 -0
- package/templates/skills/pnpm/references/core-config.md +188 -0
- package/templates/skills/pnpm/references/core-store.md +179 -0
- package/templates/skills/pnpm/references/core-workspaces.md +205 -0
- package/templates/skills/pnpm/references/features-aliases.md +168 -0
- package/templates/skills/pnpm/references/features-catalogs.md +159 -0
- package/templates/skills/pnpm/references/features-hooks.md +233 -0
- package/templates/skills/pnpm/references/features-overrides.md +184 -0
- package/templates/skills/pnpm/references/features-patches.md +201 -0
- package/templates/skills/pnpm/references/features-peer-deps.md +250 -0
- package/templates/skills/slidev/LICENSE.md +21 -0
- package/templates/skills/slidev/README.md +61 -0
- package/templates/skills/slidev/SKILL.md +183 -0
- package/templates/skills/slidev/SYNC.md +5 -0
- package/templates/skills/slidev/references/animation-click-marker.md +37 -0
- package/templates/skills/slidev/references/animation-drawing.md +68 -0
- package/templates/skills/slidev/references/animation-rough-marker.md +53 -0
- package/templates/skills/slidev/references/api-slide-hooks.md +37 -0
- package/templates/skills/slidev/references/build-og-image.md +36 -0
- package/templates/skills/slidev/references/build-pdf.md +40 -0
- package/templates/skills/slidev/references/build-remote-assets.md +34 -0
- package/templates/skills/slidev/references/build-seo-meta.md +43 -0
- package/templates/skills/slidev/references/code-groups.md +64 -0
- package/templates/skills/slidev/references/code-import-snippet.md +55 -0
- package/templates/skills/slidev/references/code-line-highlighting.md +50 -0
- package/templates/skills/slidev/references/code-line-numbers.md +46 -0
- package/templates/skills/slidev/references/code-magic-move.md +57 -0
- package/templates/skills/slidev/references/code-max-height.md +37 -0
- package/templates/skills/slidev/references/code-twoslash.md +42 -0
- package/templates/skills/slidev/references/core-animations.md +196 -0
- package/templates/skills/slidev/references/core-cli.md +140 -0
- package/templates/skills/slidev/references/core-components.md +197 -0
- package/templates/skills/slidev/references/core-exporting.md +148 -0
- package/templates/skills/slidev/references/core-frontmatter.md +195 -0
- package/templates/skills/slidev/references/core-global-context.md +155 -0
- package/templates/skills/slidev/references/core-headmatter.md +188 -0
- package/templates/skills/slidev/references/core-hosting.md +152 -0
- package/templates/skills/slidev/references/core-layouts.md +286 -0
- package/templates/skills/slidev/references/core-syntax.md +155 -0
- package/templates/skills/slidev/references/diagram-latex.md +55 -0
- package/templates/skills/slidev/references/diagram-mermaid.md +44 -0
- package/templates/skills/slidev/references/diagram-plantuml.md +45 -0
- package/templates/skills/slidev/references/editor-monaco-run.md +44 -0
- package/templates/skills/slidev/references/editor-monaco-write.md +24 -0
- package/templates/skills/slidev/references/editor-monaco.md +50 -0
- package/templates/skills/slidev/references/editor-prettier.md +40 -0
- package/templates/skills/slidev/references/editor-side.md +23 -0
- package/templates/skills/slidev/references/editor-vscode.md +55 -0
- package/templates/skills/slidev/references/layout-canvas-size.md +25 -0
- package/templates/skills/slidev/references/layout-draggable.md +57 -0
- package/templates/skills/slidev/references/layout-global-layers.md +50 -0
- package/templates/skills/slidev/references/layout-slots.md +75 -0
- package/templates/skills/slidev/references/layout-transform.md +33 -0
- package/templates/skills/slidev/references/layout-zoom.md +39 -0
- package/templates/skills/slidev/references/presenter-notes-ruby.md +35 -0
- package/templates/skills/slidev/references/presenter-recording.md +30 -0
- package/templates/skills/slidev/references/presenter-remote.md +40 -0
- package/templates/skills/slidev/references/presenter-timer.md +34 -0
- package/templates/skills/slidev/references/style-direction.md +34 -0
- package/templates/skills/slidev/references/style-icons.md +46 -0
- package/templates/skills/slidev/references/style-scoped.md +50 -0
- package/templates/skills/slidev/references/syntax-block-frontmatter.md +39 -0
- package/templates/skills/slidev/references/syntax-frontmatter-merging.md +49 -0
- package/templates/skills/slidev/references/syntax-importing-slides.md +60 -0
- package/templates/skills/slidev/references/syntax-mdc.md +51 -0
- package/templates/skills/slidev/references/tool-eject-theme.md +27 -0
- package/templates/skills/tech-whitepaper/SKILL.md +102 -15
- package/templates/skills/tsdown/GENERATION.md +5 -0
- package/templates/skills/tsdown/SKILL.md +59 -0
- package/templates/skills/tsdown/references/advanced-hooks.md +87 -0
- package/templates/skills/tsdown/references/advanced-plugins.md +97 -0
- package/templates/skills/tsdown/references/advanced-programmatic.md +78 -0
- package/templates/skills/tsdown/references/advanced-rolldown-options.md +114 -0
- package/templates/skills/tsdown/references/core-cli.md +116 -0
- package/templates/skills/tsdown/references/core-config.md +86 -0
- package/templates/skills/tsdown/references/core-entry.md +74 -0
- package/templates/skills/tsdown/references/features-optimization.md +83 -0
- package/templates/skills/tsdown/references/features-shims.md +92 -0
- package/templates/skills/tsdown/references/features-unbundle.md +63 -0
- package/templates/skills/tsdown/references/features-watch.md +60 -0
- package/templates/skills/tsdown/references/options-dependencies.md +88 -0
- package/templates/skills/tsdown/references/options-dts.md +104 -0
- package/templates/skills/tsdown/references/options-output.md +124 -0
- package/templates/skills/tsdown/references/options-package-exports.md +114 -0
- package/templates/skills/tsdown/references/recipes-frameworks.md +109 -0
- package/templates/skills/tsdown/references/recipes-migration.md +84 -0
- package/templates/skills/turborepo/LICENSE.md +7 -0
- package/templates/skills/turborepo/SKILL.md +914 -0
- package/templates/skills/turborepo/SYNC.md +5 -0
- package/templates/skills/turborepo/command/turborepo.md +70 -0
- package/templates/skills/turborepo/references/best-practices/README.md +241 -0
- package/templates/skills/turborepo/references/best-practices/dependencies.md +246 -0
- package/templates/skills/turborepo/references/best-practices/packages.md +335 -0
- package/templates/skills/turborepo/references/best-practices/structure.md +269 -0
- package/templates/skills/turborepo/references/boundaries/README.md +126 -0
- package/templates/skills/turborepo/references/caching/README.md +107 -0
- package/templates/skills/turborepo/references/caching/gotchas.md +169 -0
- package/templates/skills/turborepo/references/caching/remote-cache.md +127 -0
- package/templates/skills/turborepo/references/ci/README.md +79 -0
- package/templates/skills/turborepo/references/ci/github-actions.md +162 -0
- package/templates/skills/turborepo/references/ci/patterns.md +145 -0
- package/templates/skills/turborepo/references/ci/vercel.md +103 -0
- package/templates/skills/turborepo/references/cli/README.md +100 -0
- package/templates/skills/turborepo/references/cli/commands.md +297 -0
- package/templates/skills/turborepo/references/configuration/README.md +211 -0
- package/templates/skills/turborepo/references/configuration/global-options.md +195 -0
- package/templates/skills/turborepo/references/configuration/gotchas.md +348 -0
- package/templates/skills/turborepo/references/configuration/tasks.md +285 -0
- package/templates/skills/turborepo/references/environment/README.md +96 -0
- package/templates/skills/turborepo/references/environment/gotchas.md +145 -0
- package/templates/skills/turborepo/references/environment/modes.md +101 -0
- package/templates/skills/turborepo/references/filtering/README.md +148 -0
- package/templates/skills/turborepo/references/filtering/patterns.md +152 -0
- package/templates/skills/turborepo/references/watch/README.md +99 -0
- package/templates/skills/unocss/GENERATION.md +5 -0
- package/templates/skills/unocss/SKILL.md +64 -0
- package/templates/skills/unocss/references/core-config.md +187 -0
- package/templates/skills/unocss/references/core-extracting.md +137 -0
- package/templates/skills/unocss/references/core-layers.md +104 -0
- package/templates/skills/unocss/references/core-rules.md +166 -0
- package/templates/skills/unocss/references/core-safelist.md +105 -0
- package/templates/skills/unocss/references/core-shortcuts.md +89 -0
- package/templates/skills/unocss/references/core-theme.md +172 -0
- package/templates/skills/unocss/references/core-variants.md +175 -0
- package/templates/skills/unocss/references/integrations-nuxt.md +199 -0
- package/templates/skills/unocss/references/integrations-vite.md +283 -0
- package/templates/skills/unocss/references/preset-attributify.md +142 -0
- package/templates/skills/unocss/references/preset-icons.md +184 -0
- package/templates/skills/unocss/references/preset-mini.md +158 -0
- package/templates/skills/unocss/references/preset-rem-to-px.md +97 -0
- package/templates/skills/unocss/references/preset-tagify.md +134 -0
- package/templates/skills/unocss/references/preset-typography.md +95 -0
- package/templates/skills/unocss/references/preset-web-fonts.md +91 -0
- package/templates/skills/unocss/references/preset-wind3.md +194 -0
- package/templates/skills/unocss/references/preset-wind4.md +247 -0
- package/templates/skills/unocss/references/transformer-attributify-jsx.md +156 -0
- package/templates/skills/unocss/references/transformer-compile-class.md +128 -0
- package/templates/skills/unocss/references/transformer-directives.md +157 -0
- package/templates/skills/unocss/references/transformer-variant-group.md +97 -0
- package/templates/skills/vite/GENERATION.md +5 -0
- package/templates/skills/vite/SKILL.md +50 -0
- package/templates/skills/vite/references/advanced-api.md +218 -0
- package/templates/skills/vite/references/advanced-backend.md +164 -0
- package/templates/skills/vite/references/advanced-performance.md +168 -0
- package/templates/skills/vite/references/advanced-plugin-api.md +258 -0
- package/templates/skills/vite/references/build-library.md +172 -0
- package/templates/skills/vite/references/build-production.md +220 -0
- package/templates/skills/vite/references/build-ssr.md +194 -0
- package/templates/skills/vite/references/core-cli.md +137 -0
- package/templates/skills/vite/references/core-config.md +176 -0
- package/templates/skills/vite/references/core-features.md +170 -0
- package/templates/skills/vite/references/core-plugins.md +154 -0
- package/templates/skills/vite/references/features-assets.md +138 -0
- package/templates/skills/vite/references/features-css.md +215 -0
- package/templates/skills/vite/references/features-dep-bundling.md +148 -0
- package/templates/skills/vite/references/features-env.md +161 -0
- package/templates/skills/vite/references/features-glob-import.md +161 -0
- package/templates/skills/vite/references/features-hmr.md +200 -0
- package/templates/skills/vite/references/features-workers.md +115 -0
- package/templates/skills/vitepress/GENERATION.md +5 -0
- package/templates/skills/vitepress/SKILL.md +65 -0
- package/templates/skills/vitepress/references/advanced-i18n.md +299 -0
- package/templates/skills/vitepress/references/advanced-ssr.md +228 -0
- package/templates/skills/vitepress/references/core-cli.md +119 -0
- package/templates/skills/vitepress/references/core-config.md +189 -0
- package/templates/skills/vitepress/references/core-markdown.md +277 -0
- package/templates/skills/vitepress/references/core-routing.md +169 -0
- package/templates/skills/vitepress/references/features-code-blocks.md +243 -0
- package/templates/skills/vitepress/references/features-data-loading.md +220 -0
- package/templates/skills/vitepress/references/features-dynamic-routes.md +235 -0
- package/templates/skills/vitepress/references/features-vue.md +224 -0
- package/templates/skills/vitepress/references/recipes-deploy.md +240 -0
- package/templates/skills/vitepress/references/theme-config.md +315 -0
- package/templates/skills/vitepress/references/theme-custom.md +269 -0
- package/templates/skills/vitepress/references/theme-customization.md +290 -0
- package/templates/skills/vitest/GENERATION.md +5 -0
- package/templates/skills/vitest/SKILL.md +52 -0
- package/templates/skills/vitest/references/advanced-environments.md +264 -0
- package/templates/skills/vitest/references/advanced-projects.md +300 -0
- package/templates/skills/vitest/references/advanced-type-testing.md +237 -0
- package/templates/skills/vitest/references/advanced-vi.md +249 -0
- package/templates/skills/vitest/references/core-cli.md +166 -0
- package/templates/skills/vitest/references/core-config.md +174 -0
- package/templates/skills/vitest/references/core-describe.md +193 -0
- package/templates/skills/vitest/references/core-expect.md +219 -0
- package/templates/skills/vitest/references/core-hooks.md +244 -0
- package/templates/skills/vitest/references/core-test-api.md +233 -0
- package/templates/skills/vitest/references/features-concurrency.md +250 -0
- package/templates/skills/vitest/references/features-context.md +238 -0
- package/templates/skills/vitest/references/features-coverage.md +207 -0
- package/templates/skills/vitest/references/features-filtering.md +211 -0
- package/templates/skills/vitest/references/features-mocking.md +265 -0
- package/templates/skills/vitest/references/features-snapshots.md +207 -0
- package/templates/skills/vue/GENERATION.md +5 -0
- package/templates/skills/vue/SKILL.md +63 -0
- package/templates/skills/vue/references/advanced-async-suspense.md +246 -0
- package/templates/skills/vue/references/advanced-provide-inject.md +174 -0
- package/templates/skills/vue/references/components-emits.md +139 -0
- package/templates/skills/vue/references/components-lifecycle.md +192 -0
- package/templates/skills/vue/references/components-props.md +211 -0
- package/templates/skills/vue/references/components-slots.md +201 -0
- package/templates/skills/vue/references/components-v-model.md +183 -0
- package/templates/skills/vue/references/core-reactivity.md +289 -0
- package/templates/skills/vue/references/features-composables.md +262 -0
- package/templates/skills/vue/references/features-directives.md +224 -0
- package/templates/skills/vue/references/features-script-setup.md +247 -0
- package/templates/skills/vue/references/features-template-refs.md +212 -0
- package/templates/skills/vue/references/features-typescript.md +274 -0
- package/templates/skills/vue-best-practices/LICENSE.md +21 -0
- package/templates/skills/vue-best-practices/SKILL.md +38 -0
- package/templates/skills/vue-best-practices/SYNC.md +5 -0
- package/templates/skills/vue-best-practices/rules/codeactions-save-performance.md +79 -0
- package/templates/skills/vue-best-practices/rules/data-attributes-config.md +74 -0
- package/templates/skills/vue-best-practices/rules/deep-watch-numeric.md +97 -0
- package/templates/skills/vue-best-practices/rules/define-model-update-event.md +79 -0
- package/templates/skills/vue-best-practices/rules/duplicate-plugin-detection.md +102 -0
- package/templates/skills/vue-best-practices/rules/extract-component-props.md +57 -0
- package/templates/skills/vue-best-practices/rules/fallthrough-attributes.md +63 -0
- package/templates/skills/vue-best-practices/rules/hmr-vue-ssr.md +124 -0
- package/templates/skills/vue-best-practices/rules/module-resolution-bundler.md +81 -0
- package/templates/skills/vue-best-practices/rules/pinia-store-mocking.md +159 -0
- package/templates/skills/vue-best-practices/rules/script-setup-jsdoc.md +85 -0
- package/templates/skills/vue-best-practices/rules/strict-css-modules.md +68 -0
- package/templates/skills/vue-best-practices/rules/volar-3-breaking-changes.md +65 -0
- package/templates/skills/vue-best-practices/rules/vue-directive-comments.md +73 -0
- package/templates/skills/vue-best-practices/rules/vue-router-typed-params.md +81 -0
- package/templates/skills/vue-best-practices/rules/vue-tsc-strict-templates.md +69 -0
- package/templates/skills/vue-best-practices/rules/with-defaults-union-types.md +102 -0
- package/templates/skills/vueuse-functions/LICENSE.md +21 -0
- package/templates/skills/vueuse-functions/SKILL.md +418 -0
- package/templates/skills/vueuse-functions/SYNC.md +5 -0
- package/templates/skills/vueuse-functions/references/computedAsync.md +159 -0
- package/templates/skills/vueuse-functions/references/computedEager.md +62 -0
- package/templates/skills/vueuse-functions/references/computedInject.md +86 -0
- package/templates/skills/vueuse-functions/references/computedWithControl.md +100 -0
- package/templates/skills/vueuse-functions/references/createEventHook.md +86 -0
- package/templates/skills/vueuse-functions/references/createGenericProjection.md +25 -0
- package/templates/skills/vueuse-functions/references/createGlobalState.md +95 -0
- package/templates/skills/vueuse-functions/references/createInjectionState.md +215 -0
- package/templates/skills/vueuse-functions/references/createProjection.md +31 -0
- package/templates/skills/vueuse-functions/references/createRef.md +54 -0
- package/templates/skills/vueuse-functions/references/createReusableTemplate.md +357 -0
- package/templates/skills/vueuse-functions/references/createSharedComposable.md +42 -0
- package/templates/skills/vueuse-functions/references/createTemplatePromise.md +259 -0
- package/templates/skills/vueuse-functions/references/createUnrefFn.md +51 -0
- package/templates/skills/vueuse-functions/references/extendRef.md +76 -0
- package/templates/skills/vueuse-functions/references/from.md +48 -0
- package/templates/skills/vueuse-functions/references/get.md +30 -0
- package/templates/skills/vueuse-functions/references/injectLocal.md +35 -0
- package/templates/skills/vueuse-functions/references/isDefined.md +31 -0
- package/templates/skills/vueuse-functions/references/logicAnd.md +40 -0
- package/templates/skills/vueuse-functions/references/logicNot.md +36 -0
- package/templates/skills/vueuse-functions/references/logicOr.md +40 -0
- package/templates/skills/vueuse-functions/references/makeDestructurable.md +41 -0
- package/templates/skills/vueuse-functions/references/onClickOutside.md +187 -0
- package/templates/skills/vueuse-functions/references/onElementRemoval.md +64 -0
- package/templates/skills/vueuse-functions/references/onKeyStroke.md +176 -0
- package/templates/skills/vueuse-functions/references/onLongPress.md +170 -0
- package/templates/skills/vueuse-functions/references/onStartTyping.md +43 -0
- package/templates/skills/vueuse-functions/references/provideLocal.md +37 -0
- package/templates/skills/vueuse-functions/references/reactify.md +144 -0
- package/templates/skills/vueuse-functions/references/reactifyObject.md +61 -0
- package/templates/skills/vueuse-functions/references/reactiveComputed.md +34 -0
- package/templates/skills/vueuse-functions/references/reactiveOmit.md +86 -0
- package/templates/skills/vueuse-functions/references/reactivePick.md +106 -0
- package/templates/skills/vueuse-functions/references/refAutoReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refDebounced.md +81 -0
- package/templates/skills/vueuse-functions/references/refDefault.md +36 -0
- package/templates/skills/vueuse-functions/references/refManualReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refThrottled.md +99 -0
- package/templates/skills/vueuse-functions/references/refWithControl.md +146 -0
- package/templates/skills/vueuse-functions/references/set.md +30 -0
- package/templates/skills/vueuse-functions/references/syncRef.md +195 -0
- package/templates/skills/vueuse-functions/references/syncRefs.md +128 -0
- package/templates/skills/vueuse-functions/references/templateRef.md +86 -0
- package/templates/skills/vueuse-functions/references/toObserver.md +38 -0
- package/templates/skills/vueuse-functions/references/toReactive.md +41 -0
- package/templates/skills/vueuse-functions/references/toRef.md +75 -0
- package/templates/skills/vueuse-functions/references/toRefs.md +81 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeMount.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeUnmount.md +32 -0
- package/templates/skills/vueuse-functions/references/tryOnMounted.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnScopeDispose.md +31 -0
- package/templates/skills/vueuse-functions/references/tryOnUnmounted.md +32 -0
- package/templates/skills/vueuse-functions/references/unrefElement.md +54 -0
- package/templates/skills/vueuse-functions/references/until.md +165 -0
- package/templates/skills/vueuse-functions/references/useAbs.md +31 -0
- package/templates/skills/vueuse-functions/references/useActiveElement.md +65 -0
- package/templates/skills/vueuse-functions/references/useAnimate.md +140 -0
- package/templates/skills/vueuse-functions/references/useArrayDifference.md +84 -0
- package/templates/skills/vueuse-functions/references/useArrayEvery.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFilter.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayFind.md +50 -0
- package/templates/skills/vueuse-functions/references/useArrayFindIndex.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFindLast.md +52 -0
- package/templates/skills/vueuse-functions/references/useArrayIncludes.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayJoin.md +74 -0
- package/templates/skills/vueuse-functions/references/useArrayMap.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayReduce.md +81 -0
- package/templates/skills/vueuse-functions/references/useArraySome.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayUnique.md +76 -0
- package/templates/skills/vueuse-functions/references/useAsyncQueue.md +87 -0
- package/templates/skills/vueuse-functions/references/useAsyncState.md +140 -0
- package/templates/skills/vueuse-functions/references/useAsyncValidator.md +70 -0
- package/templates/skills/vueuse-functions/references/useAuth.md +114 -0
- package/templates/skills/vueuse-functions/references/useAverage.md +36 -0
- package/templates/skills/vueuse-functions/references/useAxios.md +292 -0
- package/templates/skills/vueuse-functions/references/useBase64.md +88 -0
- package/templates/skills/vueuse-functions/references/useBattery.md +67 -0
- package/templates/skills/vueuse-functions/references/useBluetooth.md +161 -0
- package/templates/skills/vueuse-functions/references/useBreakpoints.md +128 -0
- package/templates/skills/vueuse-functions/references/useBroadcastChannel.md +74 -0
- package/templates/skills/vueuse-functions/references/useBrowserLocation.md +83 -0
- package/templates/skills/vueuse-functions/references/useCached.md +53 -0
- package/templates/skills/vueuse-functions/references/useCeil.md +31 -0
- package/templates/skills/vueuse-functions/references/useChangeCase.md +79 -0
- package/templates/skills/vueuse-functions/references/useClamp.md +51 -0
- package/templates/skills/vueuse-functions/references/useClipboard.md +99 -0
- package/templates/skills/vueuse-functions/references/useClipboardItems.md +93 -0
- package/templates/skills/vueuse-functions/references/useCloned.md +91 -0
- package/templates/skills/vueuse-functions/references/useColorMode.md +171 -0
- package/templates/skills/vueuse-functions/references/useConfirmDialog.md +159 -0
- package/templates/skills/vueuse-functions/references/useCookies.md +162 -0
- package/templates/skills/vueuse-functions/references/useCountdown.md +102 -0
- package/templates/skills/vueuse-functions/references/useCounter.md +86 -0
- package/templates/skills/vueuse-functions/references/useCssVar.md +50 -0
- package/templates/skills/vueuse-functions/references/useCurrentElement.md +61 -0
- package/templates/skills/vueuse-functions/references/useCycleList.md +75 -0
- package/templates/skills/vueuse-functions/references/useDark.md +142 -0
- package/templates/skills/vueuse-functions/references/useDateFormat.md +145 -0
- package/templates/skills/vueuse-functions/references/useDebounceFn.md +100 -0
- package/templates/skills/vueuse-functions/references/useDebouncedRefHistory.md +40 -0
- package/templates/skills/vueuse-functions/references/useDeviceMotion.md +87 -0
- package/templates/skills/vueuse-functions/references/useDeviceOrientation.md +62 -0
- package/templates/skills/vueuse-functions/references/useDevicePixelRatio.md +44 -0
- package/templates/skills/vueuse-functions/references/useDevicesList.md +90 -0
- package/templates/skills/vueuse-functions/references/useDisplayMedia.md +71 -0
- package/templates/skills/vueuse-functions/references/useDocumentVisibility.md +45 -0
- package/templates/skills/vueuse-functions/references/useDraggable.md +210 -0
- package/templates/skills/vueuse-functions/references/useDrauu.md +65 -0
- package/templates/skills/vueuse-functions/references/useDropZone.md +83 -0
- package/templates/skills/vueuse-functions/references/useElementBounding.md +131 -0
- package/templates/skills/vueuse-functions/references/useElementByPoint.md +45 -0
- package/templates/skills/vueuse-functions/references/useElementHover.md +79 -0
- package/templates/skills/vueuse-functions/references/useElementSize.md +78 -0
- package/templates/skills/vueuse-functions/references/useElementVisibility.md +126 -0
- package/templates/skills/vueuse-functions/references/useEventBus.md +101 -0
- package/templates/skills/vueuse-functions/references/useEventListener.md +184 -0
- package/templates/skills/vueuse-functions/references/useEventSource.md +204 -0
- package/templates/skills/vueuse-functions/references/useExtractedObservable.md +185 -0
- package/templates/skills/vueuse-functions/references/useEyeDropper.md +71 -0
- package/templates/skills/vueuse-functions/references/useFavicon.md +67 -0
- package/templates/skills/vueuse-functions/references/useFetch.md +546 -0
- package/templates/skills/vueuse-functions/references/useFileDialog.md +91 -0
- package/templates/skills/vueuse-functions/references/useFileSystemAccess.md +162 -0
- package/templates/skills/vueuse-functions/references/useFirestore.md +104 -0
- package/templates/skills/vueuse-functions/references/useFloor.md +31 -0
- package/templates/skills/vueuse-functions/references/useFocus.md +99 -0
- package/templates/skills/vueuse-functions/references/useFocusTrap.md +245 -0
- package/templates/skills/vueuse-functions/references/useFocusWithin.md +57 -0
- package/templates/skills/vueuse-functions/references/useFps.md +28 -0
- package/templates/skills/vueuse-functions/references/useFullscreen.md +75 -0
- package/templates/skills/vueuse-functions/references/useFuse.md +107 -0
- package/templates/skills/vueuse-functions/references/useGamepad.md +223 -0
- package/templates/skills/vueuse-functions/references/useGeolocation.md +86 -0
- package/templates/skills/vueuse-functions/references/useIDBKeyval.md +93 -0
- package/templates/skills/vueuse-functions/references/useIdle.md +89 -0
- package/templates/skills/vueuse-functions/references/useImage.md +86 -0
- package/templates/skills/vueuse-functions/references/useInfiniteScroll.md +157 -0
- package/templates/skills/vueuse-functions/references/useIntersectionObserver.md +118 -0
- package/templates/skills/vueuse-functions/references/useInterval.md +69 -0
- package/templates/skills/vueuse-functions/references/useIntervalFn.md +50 -0
- package/templates/skills/vueuse-functions/references/useIpcRenderer.md +118 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererInvoke.md +58 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererOn.md +52 -0
- package/templates/skills/vueuse-functions/references/useJwt.md +57 -0
- package/templates/skills/vueuse-functions/references/useKeyModifier.md +87 -0
- package/templates/skills/vueuse-functions/references/useLastChanged.md +63 -0
- package/templates/skills/vueuse-functions/references/useLocalStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useMagicKeys.md +217 -0
- package/templates/skills/vueuse-functions/references/useManualRefHistory.md +204 -0
- package/templates/skills/vueuse-functions/references/useMath.md +47 -0
- package/templates/skills/vueuse-functions/references/useMax.md +36 -0
- package/templates/skills/vueuse-functions/references/useMediaControls.md +571 -0
- package/templates/skills/vueuse-functions/references/useMediaQuery.md +53 -0
- package/templates/skills/vueuse-functions/references/useMemoize.md +175 -0
- package/templates/skills/vueuse-functions/references/useMemory.md +56 -0
- package/templates/skills/vueuse-functions/references/useMin.md +36 -0
- package/templates/skills/vueuse-functions/references/useMounted.md +38 -0
- package/templates/skills/vueuse-functions/references/useMouse.md +114 -0
- package/templates/skills/vueuse-functions/references/useMouseInElement.md +123 -0
- package/templates/skills/vueuse-functions/references/useMousePressed.md +112 -0
- package/templates/skills/vueuse-functions/references/useMutationObserver.md +62 -0
- package/templates/skills/vueuse-functions/references/useNProgress.md +78 -0
- package/templates/skills/vueuse-functions/references/useNavigatorLanguage.md +57 -0
- package/templates/skills/vueuse-functions/references/useNetwork.md +106 -0
- package/templates/skills/vueuse-functions/references/useNow.md +75 -0
- package/templates/skills/vueuse-functions/references/useObjectUrl.md +55 -0
- package/templates/skills/vueuse-functions/references/useObservable.md +67 -0
- package/templates/skills/vueuse-functions/references/useOffsetPagination.md +199 -0
- package/templates/skills/vueuse-functions/references/useOnline.md +41 -0
- package/templates/skills/vueuse-functions/references/usePageLeave.md +42 -0
- package/templates/skills/vueuse-functions/references/useParallax.md +58 -0
- package/templates/skills/vueuse-functions/references/useParentElement.md +54 -0
- package/templates/skills/vueuse-functions/references/usePerformanceObserver.md +48 -0
- package/templates/skills/vueuse-functions/references/usePermission.md +78 -0
- package/templates/skills/vueuse-functions/references/usePointer.md +89 -0
- package/templates/skills/vueuse-functions/references/usePointerLock.md +60 -0
- package/templates/skills/vueuse-functions/references/usePointerSwipe.md +80 -0
- package/templates/skills/vueuse-functions/references/usePrecision.md +49 -0
- package/templates/skills/vueuse-functions/references/usePreferredColorScheme.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredContrast.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredDark.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredLanguages.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedMotion.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedTransparency.md +42 -0
- package/templates/skills/vueuse-functions/references/usePrevious.md +40 -0
- package/templates/skills/vueuse-functions/references/useProjection.md +38 -0
- package/templates/skills/vueuse-functions/references/useQRCode.md +53 -0
- package/templates/skills/vueuse-functions/references/useRTDB.md +70 -0
- package/templates/skills/vueuse-functions/references/useRafFn.md +68 -0
- package/templates/skills/vueuse-functions/references/useRefHistory.md +292 -0
- package/templates/skills/vueuse-functions/references/useResizeObserver.md +110 -0
- package/templates/skills/vueuse-functions/references/useRound.md +31 -0
- package/templates/skills/vueuse-functions/references/useRouteHash.md +27 -0
- package/templates/skills/vueuse-functions/references/useRouteParams.md +38 -0
- package/templates/skills/vueuse-functions/references/useRouteQuery.md +38 -0
- package/templates/skills/vueuse-functions/references/useSSRWidth.md +47 -0
- package/templates/skills/vueuse-functions/references/useScreenOrientation.md +96 -0
- package/templates/skills/vueuse-functions/references/useScreenSafeArea.md +60 -0
- package/templates/skills/vueuse-functions/references/useScriptTag.md +116 -0
- package/templates/skills/vueuse-functions/references/useScroll.md +238 -0
- package/templates/skills/vueuse-functions/references/useScrollLock.md +66 -0
- package/templates/skills/vueuse-functions/references/useSessionStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useShare.md +68 -0
- package/templates/skills/vueuse-functions/references/useSortable.md +177 -0
- package/templates/skills/vueuse-functions/references/useSorted.md +90 -0
- package/templates/skills/vueuse-functions/references/useSpeechRecognition.md +94 -0
- package/templates/skills/vueuse-functions/references/useSpeechSynthesis.md +105 -0
- package/templates/skills/vueuse-functions/references/useStepper.md +137 -0
- package/templates/skills/vueuse-functions/references/useStorage.md +219 -0
- package/templates/skills/vueuse-functions/references/useStorageAsync.md +134 -0
- package/templates/skills/vueuse-functions/references/useStyleTag.md +131 -0
- package/templates/skills/vueuse-functions/references/useSubject.md +52 -0
- package/templates/skills/vueuse-functions/references/useSubscription.md +33 -0
- package/templates/skills/vueuse-functions/references/useSum.md +36 -0
- package/templates/skills/vueuse-functions/references/useSupported.md +29 -0
- package/templates/skills/vueuse-functions/references/useSwipe.md +75 -0
- package/templates/skills/vueuse-functions/references/useTemplateRefsList.md +37 -0
- package/templates/skills/vueuse-functions/references/useTextDirection.md +75 -0
- package/templates/skills/vueuse-functions/references/useTextSelection.md +40 -0
- package/templates/skills/vueuse-functions/references/useTextareaAutosize.md +97 -0
- package/templates/skills/vueuse-functions/references/useThrottleFn.md +57 -0
- package/templates/skills/vueuse-functions/references/useThrottledRefHistory.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimeAgo.md +152 -0
- package/templates/skills/vueuse-functions/references/useTimeAgoIntl.md +116 -0
- package/templates/skills/vueuse-functions/references/useTimeout.md +75 -0
- package/templates/skills/vueuse-functions/references/useTimeoutFn.md +51 -0
- package/templates/skills/vueuse-functions/references/useTimeoutPoll.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimestamp.md +85 -0
- package/templates/skills/vueuse-functions/references/useTitle.md +113 -0
- package/templates/skills/vueuse-functions/references/useToNumber.md +54 -0
- package/templates/skills/vueuse-functions/references/useToString.md +34 -0
- package/templates/skills/vueuse-functions/references/useToggle.md +56 -0
- package/templates/skills/vueuse-functions/references/useTransition.md +265 -0
- package/templates/skills/vueuse-functions/references/useTrunc.md +33 -0
- package/templates/skills/vueuse-functions/references/useUrlSearchParams.md +121 -0
- package/templates/skills/vueuse-functions/references/useUserMedia.md +1138 -0
- package/templates/skills/vueuse-functions/references/useVModel.md +116 -0
- package/templates/skills/vueuse-functions/references/useVModels.md +67 -0
- package/templates/skills/vueuse-functions/references/useVibrate.md +83 -0
- package/templates/skills/vueuse-functions/references/useVirtualList.md +184 -0
- package/templates/skills/vueuse-functions/references/useWakeLock.md +50 -0
- package/templates/skills/vueuse-functions/references/useWebNotification.md +177 -0
- package/templates/skills/vueuse-functions/references/useWebSocket.md +268 -0
- package/templates/skills/vueuse-functions/references/useWebWorker.md +60 -0
- package/templates/skills/vueuse-functions/references/useWebWorkerFn.md +102 -0
- package/templates/skills/vueuse-functions/references/useWindowFocus.md +46 -0
- package/templates/skills/vueuse-functions/references/useWindowScroll.md +62 -0
- package/templates/skills/vueuse-functions/references/useWindowSize.md +76 -0
- package/templates/skills/vueuse-functions/references/useZoomFactor.md +53 -0
- package/templates/skills/vueuse-functions/references/useZoomLevel.md +53 -0
- package/templates/skills/vueuse-functions/references/watchArray.md +53 -0
- package/templates/skills/vueuse-functions/references/watchAtMost.md +54 -0
- package/templates/skills/vueuse-functions/references/watchDebounced.md +72 -0
- package/templates/skills/vueuse-functions/references/watchDeep.md +54 -0
- package/templates/skills/vueuse-functions/references/watchExtractedObservable.md +167 -0
- package/templates/skills/vueuse-functions/references/watchIgnorable.md +120 -0
- package/templates/skills/vueuse-functions/references/watchImmediate.md +44 -0
- package/templates/skills/vueuse-functions/references/watchOnce.md +41 -0
- package/templates/skills/vueuse-functions/references/watchPausable.md +86 -0
- package/templates/skills/vueuse-functions/references/watchThrottled.md +73 -0
- package/templates/skills/vueuse-functions/references/watchTriggerable.md +97 -0
- package/templates/skills/vueuse-functions/references/watchWithFilter.md +55 -0
- package/templates/skills/vueuse-functions/references/whenever.md +100 -0
- package/templates/skills/web-design-guidelines/SKILL.md +39 -0
- package/templates/skills/web-design-guidelines/SYNC.md +5 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: template-refs
|
|
3
|
+
description: Access DOM elements and child component instances directly
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Template Refs
|
|
7
|
+
|
|
8
|
+
Template refs provide direct access to DOM elements and child component instances.
|
|
9
|
+
|
|
10
|
+
## Basic Usage (3.5+)
|
|
11
|
+
|
|
12
|
+
Use `useTemplateRef()` for type-safe refs:
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { useTemplateRef, onMounted } from 'vue'
|
|
17
|
+
|
|
18
|
+
const inputRef = useTemplateRef<HTMLInputElement>('input')
|
|
19
|
+
|
|
20
|
+
onMounted(() => {
|
|
21
|
+
inputRef.value?.focus()
|
|
22
|
+
})
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<input ref="input" />
|
|
27
|
+
</template>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Legacy Approach (Pre-3.5)
|
|
31
|
+
|
|
32
|
+
Use a ref with matching name:
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<script setup lang="ts">
|
|
36
|
+
import { ref, onMounted } from 'vue'
|
|
37
|
+
|
|
38
|
+
const inputRef = ref<HTMLInputElement | null>(null)
|
|
39
|
+
|
|
40
|
+
onMounted(() => {
|
|
41
|
+
inputRef.value?.focus()
|
|
42
|
+
})
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<input ref="inputRef" />
|
|
47
|
+
</template>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Refs in v-for
|
|
51
|
+
|
|
52
|
+
Collect multiple refs into an array:
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<script setup lang="ts">
|
|
56
|
+
import { ref, onMounted } from 'vue'
|
|
57
|
+
|
|
58
|
+
const items = ref([1, 2, 3])
|
|
59
|
+
const itemRefs = ref<HTMLLIElement[]>([])
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
<template>
|
|
63
|
+
<ul>
|
|
64
|
+
<li v-for="item in items" ref="itemRefs">
|
|
65
|
+
{{ item }}
|
|
66
|
+
</li>
|
|
67
|
+
</ul>
|
|
68
|
+
</template>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> Note: ref array order is not guaranteed to match source array order.
|
|
72
|
+
|
|
73
|
+
## Function Refs
|
|
74
|
+
|
|
75
|
+
Use a function for full control:
|
|
76
|
+
|
|
77
|
+
```vue
|
|
78
|
+
<script setup lang="ts">
|
|
79
|
+
const elements = new Map<number, HTMLElement>()
|
|
80
|
+
|
|
81
|
+
function setItemRef(el: HTMLElement | null, id: number) {
|
|
82
|
+
if (el) {
|
|
83
|
+
elements.set(id, el)
|
|
84
|
+
} else {
|
|
85
|
+
elements.delete(id)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<template>
|
|
91
|
+
<div v-for="item in items" :ref="(el) => setItemRef(el, item.id)">
|
|
92
|
+
{{ item.name }}
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Component Refs
|
|
98
|
+
|
|
99
|
+
Access child component instance:
|
|
100
|
+
|
|
101
|
+
```vue
|
|
102
|
+
<script setup lang="ts">
|
|
103
|
+
import { useTemplateRef, onMounted } from 'vue'
|
|
104
|
+
import Child from './Child.vue'
|
|
105
|
+
|
|
106
|
+
type ChildInstance = InstanceType<typeof Child>
|
|
107
|
+
const childRef = useTemplateRef<ChildInstance>('child')
|
|
108
|
+
|
|
109
|
+
onMounted(() => {
|
|
110
|
+
// Access exposed properties/methods
|
|
111
|
+
childRef.value?.someMethod()
|
|
112
|
+
})
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
<Child ref="child" />
|
|
117
|
+
</template>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Exposing Component Properties
|
|
121
|
+
|
|
122
|
+
By default, `<script setup>` components are closed. Use `defineExpose`:
|
|
123
|
+
|
|
124
|
+
```vue
|
|
125
|
+
<!-- Child.vue -->
|
|
126
|
+
<script setup lang="ts">
|
|
127
|
+
import { ref } from 'vue'
|
|
128
|
+
|
|
129
|
+
const count = ref(0)
|
|
130
|
+
const increment = () => count.value++
|
|
131
|
+
|
|
132
|
+
// Only these are accessible via ref
|
|
133
|
+
defineExpose({
|
|
134
|
+
count,
|
|
135
|
+
increment
|
|
136
|
+
})
|
|
137
|
+
</script>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Common Use Cases
|
|
141
|
+
|
|
142
|
+
### Focus Management
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<script setup lang="ts">
|
|
146
|
+
import { useTemplateRef } from 'vue'
|
|
147
|
+
|
|
148
|
+
const inputRef = useTemplateRef<HTMLInputElement>('input')
|
|
149
|
+
|
|
150
|
+
function focusInput() {
|
|
151
|
+
inputRef.value?.focus()
|
|
152
|
+
}
|
|
153
|
+
</script>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Scroll Control
|
|
157
|
+
|
|
158
|
+
```vue
|
|
159
|
+
<script setup lang="ts">
|
|
160
|
+
import { useTemplateRef } from 'vue'
|
|
161
|
+
|
|
162
|
+
const containerRef = useTemplateRef<HTMLDivElement>('container')
|
|
163
|
+
|
|
164
|
+
function scrollToBottom() {
|
|
165
|
+
const el = containerRef.value
|
|
166
|
+
if (el) {
|
|
167
|
+
el.scrollTop = el.scrollHeight
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
</script>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Third-Party Library Integration
|
|
174
|
+
|
|
175
|
+
```vue
|
|
176
|
+
<script setup lang="ts">
|
|
177
|
+
import { useTemplateRef, onMounted, onUnmounted } from 'vue'
|
|
178
|
+
import Chart from 'chart.js'
|
|
179
|
+
|
|
180
|
+
const canvasRef = useTemplateRef<HTMLCanvasElement>('canvas')
|
|
181
|
+
let chart: Chart | null = null
|
|
182
|
+
|
|
183
|
+
onMounted(() => {
|
|
184
|
+
if (canvasRef.value) {
|
|
185
|
+
chart = new Chart(canvasRef.value, {
|
|
186
|
+
// options
|
|
187
|
+
})
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
onUnmounted(() => {
|
|
192
|
+
chart?.destroy()
|
|
193
|
+
})
|
|
194
|
+
</script>
|
|
195
|
+
|
|
196
|
+
<template>
|
|
197
|
+
<canvas ref="canvas"></canvas>
|
|
198
|
+
</template>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Important Notes
|
|
202
|
+
|
|
203
|
+
1. **Refs are null before mount** - access in `onMounted` or later
|
|
204
|
+
2. **Conditional refs can be null** - elements with `v-if` may not exist
|
|
205
|
+
3. **Use optional chaining** - `ref.value?.method()` for safety
|
|
206
|
+
4. **Avoid overusing** - prefer declarative approaches when possible
|
|
207
|
+
|
|
208
|
+
<!--
|
|
209
|
+
Source references:
|
|
210
|
+
- https://vuejs.org/guide/essentials/template-refs.html
|
|
211
|
+
- https://vuejs.org/guide/typescript/composition-api.html#typing-template-refs
|
|
212
|
+
-->
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typescript-integration
|
|
3
|
+
description: Type Vue components with TypeScript in Composition API
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TypeScript with Vue
|
|
7
|
+
|
|
8
|
+
Vue provides excellent TypeScript support in Composition API.
|
|
9
|
+
|
|
10
|
+
## Typing Props
|
|
11
|
+
|
|
12
|
+
### Type-based declaration (recommended)
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
interface Props {
|
|
17
|
+
title: string
|
|
18
|
+
count?: number
|
|
19
|
+
items: string[]
|
|
20
|
+
user: { name: string; age: number }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const props = defineProps<Props>()
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### With defaults (3.5+)
|
|
27
|
+
|
|
28
|
+
```vue
|
|
29
|
+
<script setup lang="ts">
|
|
30
|
+
interface Props {
|
|
31
|
+
msg?: string
|
|
32
|
+
labels?: string[]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const { msg = 'hello', labels = ['one'] } = defineProps<Props>()
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### With withDefaults (3.4 and below)
|
|
39
|
+
|
|
40
|
+
```vue
|
|
41
|
+
<script setup lang="ts">
|
|
42
|
+
interface Props {
|
|
43
|
+
msg?: string
|
|
44
|
+
labels?: string[]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
48
|
+
msg: 'hello',
|
|
49
|
+
labels: () => ['one', 'two']
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Complex prop types
|
|
54
|
+
|
|
55
|
+
```vue
|
|
56
|
+
<script setup lang="ts">
|
|
57
|
+
interface Book {
|
|
58
|
+
title: string
|
|
59
|
+
author: string
|
|
60
|
+
year: number
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const props = defineProps<{
|
|
64
|
+
book: Book
|
|
65
|
+
callback: (id: number) => void
|
|
66
|
+
}>()
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Typing Emits
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<script setup lang="ts">
|
|
73
|
+
// Call signature syntax
|
|
74
|
+
const emit = defineEmits<{
|
|
75
|
+
(e: 'change', id: number): void
|
|
76
|
+
(e: 'update', value: string): void
|
|
77
|
+
}>()
|
|
78
|
+
|
|
79
|
+
// Named tuple syntax (3.3+, more concise)
|
|
80
|
+
const emit = defineEmits<{
|
|
81
|
+
change: [id: number]
|
|
82
|
+
update: [value: string]
|
|
83
|
+
}>()
|
|
84
|
+
</script>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Typing ref()
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { ref } from 'vue'
|
|
91
|
+
import type { Ref } from 'vue'
|
|
92
|
+
|
|
93
|
+
// Inferred
|
|
94
|
+
const count = ref(0) // Ref<number>
|
|
95
|
+
|
|
96
|
+
// Explicit generic
|
|
97
|
+
const name = ref<string>() // Ref<string | undefined>
|
|
98
|
+
|
|
99
|
+
// Type annotation
|
|
100
|
+
const id: Ref<string | number> = ref('abc')
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Typing reactive()
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
import { reactive } from 'vue'
|
|
107
|
+
|
|
108
|
+
interface State {
|
|
109
|
+
count: number
|
|
110
|
+
name: string
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Use interface on variable
|
|
114
|
+
const state: State = reactive({
|
|
115
|
+
count: 0,
|
|
116
|
+
name: 'Vue'
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Typing computed()
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
import { computed } from 'vue'
|
|
124
|
+
|
|
125
|
+
// Inferred from getter
|
|
126
|
+
const double = computed(() => count.value * 2) // ComputedRef<number>
|
|
127
|
+
|
|
128
|
+
// Explicit generic
|
|
129
|
+
const result = computed<string>(() => {
|
|
130
|
+
return String(value.value)
|
|
131
|
+
})
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Typing Event Handlers
|
|
135
|
+
|
|
136
|
+
```vue
|
|
137
|
+
<script setup lang="ts">
|
|
138
|
+
function handleChange(event: Event) {
|
|
139
|
+
const target = event.target as HTMLInputElement
|
|
140
|
+
console.log(target.value)
|
|
141
|
+
}
|
|
142
|
+
</script>
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
<input @change="handleChange" />
|
|
146
|
+
</template>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Typing Template Refs
|
|
150
|
+
|
|
151
|
+
### useTemplateRef (3.5+)
|
|
152
|
+
|
|
153
|
+
```vue
|
|
154
|
+
<script setup lang="ts">
|
|
155
|
+
import { useTemplateRef, onMounted } from 'vue'
|
|
156
|
+
|
|
157
|
+
const inputRef = useTemplateRef<HTMLInputElement>('input')
|
|
158
|
+
|
|
159
|
+
onMounted(() => {
|
|
160
|
+
inputRef.value?.focus()
|
|
161
|
+
})
|
|
162
|
+
</script>
|
|
163
|
+
|
|
164
|
+
<template>
|
|
165
|
+
<input ref="input" />
|
|
166
|
+
</template>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Legacy ref approach
|
|
170
|
+
|
|
171
|
+
```vue
|
|
172
|
+
<script setup lang="ts">
|
|
173
|
+
import { ref, onMounted } from 'vue'
|
|
174
|
+
|
|
175
|
+
const inputRef = ref<HTMLInputElement | null>(null)
|
|
176
|
+
|
|
177
|
+
onMounted(() => {
|
|
178
|
+
inputRef.value?.focus()
|
|
179
|
+
})
|
|
180
|
+
</script>
|
|
181
|
+
|
|
182
|
+
<template>
|
|
183
|
+
<input ref="inputRef" />
|
|
184
|
+
</template>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Typing Component Refs
|
|
188
|
+
|
|
189
|
+
```vue
|
|
190
|
+
<script setup lang="ts">
|
|
191
|
+
import { useTemplateRef } from 'vue'
|
|
192
|
+
import MyComponent from './MyComponent.vue'
|
|
193
|
+
|
|
194
|
+
type MyComponentInstance = InstanceType<typeof MyComponent>
|
|
195
|
+
const compRef = useTemplateRef<MyComponentInstance>('comp')
|
|
196
|
+
</script>
|
|
197
|
+
|
|
198
|
+
<template>
|
|
199
|
+
<MyComponent ref="comp" />
|
|
200
|
+
</template>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Typing Provide/Inject
|
|
204
|
+
|
|
205
|
+
```ts
|
|
206
|
+
import { provide, inject } from 'vue'
|
|
207
|
+
import type { InjectionKey, Ref } from 'vue'
|
|
208
|
+
|
|
209
|
+
// Define typed key
|
|
210
|
+
const countKey = Symbol() as InjectionKey<Ref<number>>
|
|
211
|
+
|
|
212
|
+
// Provider
|
|
213
|
+
provide(countKey, ref(0))
|
|
214
|
+
|
|
215
|
+
// Injector
|
|
216
|
+
const count = inject(countKey) // Ref<number> | undefined
|
|
217
|
+
|
|
218
|
+
// With default
|
|
219
|
+
const count = inject(countKey, ref(0)) // Ref<number>
|
|
220
|
+
|
|
221
|
+
// String key with explicit type
|
|
222
|
+
const foo = inject<string>('foo')
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Typing defineModel (3.4+)
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
// Basic
|
|
229
|
+
const model = defineModel<string>()
|
|
230
|
+
// ^? Ref<string | undefined>
|
|
231
|
+
|
|
232
|
+
// Required
|
|
233
|
+
const model = defineModel<string>({ required: true })
|
|
234
|
+
// ^? Ref<string>
|
|
235
|
+
|
|
236
|
+
// With modifiers
|
|
237
|
+
const [model, modifiers] = defineModel<string, 'trim' | 'uppercase'>()
|
|
238
|
+
// ^? Record<'trim' | 'uppercase', true | undefined>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Global Custom Properties
|
|
242
|
+
|
|
243
|
+
Extend `ComponentCustomProperties` for global properties:
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
// types/vue.d.ts
|
|
247
|
+
declare module 'vue' {
|
|
248
|
+
interface ComponentCustomProperties {
|
|
249
|
+
$http: typeof axios
|
|
250
|
+
$translate: (key: string) => string
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Generic Components
|
|
256
|
+
|
|
257
|
+
```vue
|
|
258
|
+
<script setup lang="ts" generic="T">
|
|
259
|
+
defineProps<{
|
|
260
|
+
items: T[]
|
|
261
|
+
selected: T
|
|
262
|
+
}>()
|
|
263
|
+
|
|
264
|
+
defineEmits<{
|
|
265
|
+
select: [item: T]
|
|
266
|
+
}>()
|
|
267
|
+
</script>
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
<!--
|
|
271
|
+
Source references:
|
|
272
|
+
- https://vuejs.org/guide/typescript/composition-api.html
|
|
273
|
+
- https://vuejs.org/guide/typescript/overview.html
|
|
274
|
+
-->
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 hyf0
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vue-best-practices
|
|
3
|
+
description: Vue 3 and Vue.js best practices for TypeScript, vue-tsc, and Volar. This skill should be used when writing, reviewing, or refactoring Vue components to ensure correct typing patterns. Triggers on tasks involving Vue components, props extraction, wrapper components, template type checking, or Volar configuration.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: hyf0
|
|
7
|
+
version: "8.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Capability Rules
|
|
11
|
+
|
|
12
|
+
| Rule | Keywords | Description |
|
|
13
|
+
|------|----------|-------------|
|
|
14
|
+
| [extract-component-props](rules/extract-component-props.md) | get props type, wrapper component, extend props, inherit props, ComponentProps | Extract types from .vue components |
|
|
15
|
+
| [vue-tsc-strict-templates](rules/vue-tsc-strict-templates.md) | undefined component, template error, strictTemplates | Catch undefined components in templates |
|
|
16
|
+
| [fallthrough-attributes](rules/fallthrough-attributes.md) | fallthrough, $attrs, wrapper component | Type-check fallthrough attributes |
|
|
17
|
+
| [strict-css-modules](rules/strict-css-modules.md) | css modules, $style, typo | Catch CSS module class typos |
|
|
18
|
+
| [data-attributes-config](rules/data-attributes-config.md) | data-*, strictTemplates, attribute | Allow data-* attributes |
|
|
19
|
+
| [volar-3-breaking-changes](rules/volar-3-breaking-changes.md) | volar, vue-language-server, editor | Fix Volar 3.0 upgrade issues |
|
|
20
|
+
| [module-resolution-bundler](rules/module-resolution-bundler.md) | cannot find module, @vue/tsconfig, moduleResolution | Fix module resolution errors |
|
|
21
|
+
| [define-model-update-event](rules/define-model-update-event.md) | defineModel, update event, undefined | Fix model update errors |
|
|
22
|
+
| [with-defaults-union-types](rules/with-defaults-union-types.md) | withDefaults, union type, default | Fix union type defaults |
|
|
23
|
+
| [deep-watch-numeric](rules/deep-watch-numeric.md) | watch, deep, array, Vue 3.5 | Efficient array watching |
|
|
24
|
+
| [vue-directive-comments](rules/vue-directive-comments.md) | @vue-ignore, @vue-skip, template | Control template type checking |
|
|
25
|
+
| [vue-router-typed-params](rules/vue-router-typed-params.md) | route params, typed router, unplugin | Fix route params typing |
|
|
26
|
+
|
|
27
|
+
## Efficiency Rules
|
|
28
|
+
|
|
29
|
+
| Rule | Keywords | Description |
|
|
30
|
+
|------|----------|-------------|
|
|
31
|
+
| [hmr-vue-ssr](rules/hmr-vue-ssr.md) | hmr, ssr, hot reload | Fix HMR in SSR apps |
|
|
32
|
+
| [pinia-store-mocking](rules/pinia-store-mocking.md) | pinia, mock, vitest, store | Mock Pinia stores |
|
|
33
|
+
|
|
34
|
+
## Reference
|
|
35
|
+
|
|
36
|
+
- [Vue Language Tools](https://github.com/vuejs/language-tools)
|
|
37
|
+
- [vue-component-type-helpers](https://github.com/vuejs/language-tools/tree/master/packages/component-type-helpers)
|
|
38
|
+
- [Vue 3 Documentation](https://vuejs.org/)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Fix Slow Save Times with Code Actions Setting
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: fixes 30-60 second save delays in large Vue projects
|
|
5
|
+
type: capability
|
|
6
|
+
tags: performance, save-time, vscode, code-actions, volar
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fix Slow Save Times with Code Actions Setting
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - fixes 30-60 second save delays in large Vue projects
|
|
12
|
+
|
|
13
|
+
In large Vue projects, saving files can take 30-60+ seconds due to VSCode's code actions triggering expensive TypeScript state synchronization.
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
Symptoms:
|
|
18
|
+
- Save operation takes 30+ seconds
|
|
19
|
+
- Editor becomes unresponsive during save
|
|
20
|
+
- CPU spikes when saving Vue files
|
|
21
|
+
- Happens more in larger projects
|
|
22
|
+
|
|
23
|
+
## Root Cause
|
|
24
|
+
|
|
25
|
+
VSCode emits document change events multiple times during save cycles. Each event triggers Volar to synchronize with TypeScript, causing expensive re-computation.
|
|
26
|
+
|
|
27
|
+
## Solution
|
|
28
|
+
|
|
29
|
+
Disable code actions or limit their timeout:
|
|
30
|
+
|
|
31
|
+
**Option 1: Disable code actions (fastest)**
|
|
32
|
+
```json
|
|
33
|
+
// .vscode/settings.json
|
|
34
|
+
{
|
|
35
|
+
"vue.codeActions.enabled": false
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Option 2: Limit code action time**
|
|
40
|
+
```json
|
|
41
|
+
// .vscode/settings.json
|
|
42
|
+
{
|
|
43
|
+
"vue.codeActions.savingTimeLimit": 1000
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Option 3: Disable specific code actions**
|
|
48
|
+
```json
|
|
49
|
+
// .vscode/settings.json
|
|
50
|
+
{
|
|
51
|
+
"vue.codeActions.enabled": true,
|
|
52
|
+
"editor.codeActionsOnSave": {
|
|
53
|
+
"source.organizeImports": "never"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## VSCode Version Requirement
|
|
59
|
+
|
|
60
|
+
VSCode 1.81.0+ includes fixes that reduce save time issues. Upgrade if using an older version.
|
|
61
|
+
|
|
62
|
+
## Additional Optimizations
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
// .vscode/settings.json
|
|
66
|
+
{
|
|
67
|
+
"vue.codeActions.enabled": false,
|
|
68
|
+
"editor.formatOnSave": true,
|
|
69
|
+
"editor.codeActionsOnSave": {},
|
|
70
|
+
"[vue]": {
|
|
71
|
+
"editor.formatOnSave": true,
|
|
72
|
+
"editor.defaultFormatter": "Vue.volar"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Reference
|
|
78
|
+
|
|
79
|
+
- [Vue Language Tools Discussion #2740](https://github.com/vuejs/language-tools/discussions/2740)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Allow Data Attributes with Strict Templates
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes data-testid and data-* attribute errors in strict mode
|
|
5
|
+
type: capability
|
|
6
|
+
tags: dataAttributes, vueCompilerOptions, strictTemplates, data-testid, testing
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Allow Data Attributes with Strict Templates
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes data-testid and data-* attribute errors in strict mode
|
|
12
|
+
|
|
13
|
+
With `strictTemplates` enabled, `data-*` attributes on components cause type errors. Use the `dataAttributes` option to allow specific patterns.
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
```vue
|
|
18
|
+
<template>
|
|
19
|
+
<!-- Error: Property 'data-testid' does not exist on type... -->
|
|
20
|
+
<MyComponent data-testid="submit-button" />
|
|
21
|
+
|
|
22
|
+
<!-- Error: Property 'data-cy' does not exist on type... -->
|
|
23
|
+
<MyComponent data-cy="login-form" />
|
|
24
|
+
</template>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Solution
|
|
28
|
+
|
|
29
|
+
Configure `dataAttributes` to allow specific patterns:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
// tsconfig.json or tsconfig.app.json
|
|
33
|
+
{
|
|
34
|
+
"vueCompilerOptions": {
|
|
35
|
+
"strictTemplates": true,
|
|
36
|
+
"dataAttributes": ["data-*"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Now all `data-*` attributes are allowed on any component.
|
|
42
|
+
|
|
43
|
+
## Specific Patterns
|
|
44
|
+
|
|
45
|
+
You can be more selective:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"vueCompilerOptions": {
|
|
50
|
+
"dataAttributes": [
|
|
51
|
+
"data-testid",
|
|
52
|
+
"data-cy",
|
|
53
|
+
"data-test-*"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This only allows the specified patterns, not all data attributes.
|
|
60
|
+
|
|
61
|
+
## Common Testing Attributes
|
|
62
|
+
|
|
63
|
+
For testing libraries, allow their specific attributes:
|
|
64
|
+
|
|
65
|
+
| Library | Attribute | Pattern |
|
|
66
|
+
|---------|-----------|---------|
|
|
67
|
+
| Testing Library | `data-testid` | `"data-testid"` |
|
|
68
|
+
| Cypress | `data-cy` | `"data-cy"` |
|
|
69
|
+
| Playwright | `data-testid` | `"data-testid"` |
|
|
70
|
+
| Generic | All data attributes | `"data-*"` |
|
|
71
|
+
|
|
72
|
+
## Reference
|
|
73
|
+
|
|
74
|
+
- [Vue Language Tools Wiki - Vue Compiler Options](https://github.com/vuejs/language-tools/wiki/Vue-Compiler-Options)
|