agy-superpowers 5.0.7 → 5.0.9
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/package.json +1 -1
- package/template/agent/rules/superpowers.md +54 -0
- package/template/agent/skills/api-design/SKILL.md +193 -0
- package/template/agent/skills/app-store-optimizer/SKILL.md +127 -0
- package/template/agent/skills/auth-and-identity/SKILL.md +167 -0
- package/template/agent/skills/backend-developer/SKILL.md +148 -0
- package/template/agent/skills/community-manager/SKILL.md +115 -0
- package/template/agent/skills/content-marketer/SKILL.md +111 -0
- package/template/agent/skills/conversion-optimizer/SKILL.md +142 -0
- package/template/agent/skills/copywriter/SKILL.md +114 -0
- package/template/agent/skills/cto-architect/SKILL.md +133 -0
- package/template/agent/skills/customer-success-manager/SKILL.md +126 -0
- package/template/agent/skills/data-analyst/SKILL.md +147 -0
- package/template/agent/skills/devops-engineer/SKILL.md +117 -0
- package/template/agent/skills/email-infrastructure/SKILL.md +164 -0
- package/template/agent/skills/frontend-developer/SKILL.md +172 -0
- package/template/agent/skills/frontend-developer/references/react-nextjs.md +343 -0
- package/template/agent/skills/frontend-developer/references/react-rules/_sections.md +46 -0
- package/template/agent/skills/frontend-developer/references/react-rules/_template.md +28 -0
- package/template/agent/skills/frontend-developer/references/react-rules/advanced-event-handler-refs.md +55 -0
- package/template/agent/skills/frontend-developer/references/react-rules/advanced-init-once.md +42 -0
- package/template/agent/skills/frontend-developer/references/react-rules/advanced-use-latest.md +39 -0
- package/template/agent/skills/frontend-developer/references/react-rules/async-api-routes.md +38 -0
- package/template/agent/skills/frontend-developer/references/react-rules/async-defer-await.md +80 -0
- package/template/agent/skills/frontend-developer/references/react-rules/async-dependencies.md +51 -0
- package/template/agent/skills/frontend-developer/references/react-rules/async-parallel.md +28 -0
- package/template/agent/skills/frontend-developer/references/react-rules/async-suspense-boundaries.md +99 -0
- package/template/agent/skills/frontend-developer/references/react-rules/bundle-barrel-imports.md +59 -0
- package/template/agent/skills/frontend-developer/references/react-rules/bundle-conditional.md +31 -0
- package/template/agent/skills/frontend-developer/references/react-rules/bundle-defer-third-party.md +49 -0
- package/template/agent/skills/frontend-developer/references/react-rules/bundle-dynamic-imports.md +35 -0
- package/template/agent/skills/frontend-developer/references/react-rules/bundle-preload.md +50 -0
- package/template/agent/skills/frontend-developer/references/react-rules/client-event-listeners.md +74 -0
- package/template/agent/skills/frontend-developer/references/react-rules/client-localstorage-schema.md +71 -0
- package/template/agent/skills/frontend-developer/references/react-rules/client-passive-event-listeners.md +48 -0
- package/template/agent/skills/frontend-developer/references/react-rules/client-swr-dedup.md +56 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-batch-dom-css.md +107 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-cache-function-results.md +80 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-cache-property-access.md +28 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-cache-storage.md +70 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-combine-iterations.md +32 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-early-exit.md +50 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-flatmap-filter.md +60 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-hoist-regexp.md +45 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-index-maps.md +37 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-length-check-first.md +49 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-min-max-loop.md +82 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-set-map-lookups.md +24 -0
- package/template/agent/skills/frontend-developer/references/react-rules/js-tosorted-immutable.md +57 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-activity.md +26 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-conditional-render.md +40 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-content-visibility.md +38 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-hoist-jsx.md +46 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-no-flicker.md +82 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-resource-hints.md +85 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-script-defer-async.md +68 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-svg-precision.md +28 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rendering-usetransition-loading.md +75 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-defer-reads.md +39 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-dependencies.md +45 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state-no-effect.md +40 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state.md +29 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-functional-setstate.md +74 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-lazy-state-init.md +58 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo-with-default-value.md +38 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo.md +44 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-move-effect-to-event.md +45 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-no-inline-components.md +82 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-split-combined-hooks.md +64 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-transitions.md +40 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-deferred-value.md +59 -0
- package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-ref-transient-values.md +73 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-after-nonblocking.md +73 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-auth-actions.md +96 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-cache-lru.md +41 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-cache-react.md +76 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-dedup-props.md +65 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-hoist-static-io.md +142 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-parallel-fetching.md +83 -0
- package/template/agent/skills/frontend-developer/references/react-rules/server-serialization.md +38 -0
- package/template/agent/skills/frontend-developer/references/svelte-sveltekit.md +220 -0
- package/template/agent/skills/frontend-developer/references/vanilla.md +275 -0
- package/template/agent/skills/frontend-developer/references/vue-nuxt.md +289 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/_index.md +154 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-class-based-technique.md +254 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-state-driven-technique.md +291 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-async.md +97 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-data-flow.md +307 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-fallthrough-attrs.md +174 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-keep-alive.md +137 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-slots.md +216 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-suspense.md +228 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-teleport.md +108 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition-group.md +128 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition.md +125 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/composables.md +290 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/directives.md +162 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-avoid-component-abstraction-in-lists.md +159 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-v-once-v-memo-directives.md +182 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-virtualize-large-lists.md +187 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/plugins.md +166 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/reactivity.md +344 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/render-functions.md +201 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/sfc.md +310 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/state-management.md +135 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/updated-hook-performance.md +187 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/_index.md +23 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforeenter-no-param-trigger.md +167 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforerouteenter-no-this.md +176 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-guard-async-await-pattern.md +227 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-infinite-loop.md +187 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-next-deprecated.md +150 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-param-change-no-lifecycle.md +181 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-simple-routing-cleanup.md +209 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/router/router-use-vue-router-for-production.md +183 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/_index.md +29 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/async-component-testing.md +163 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/teleport-testing-complexity.md +158 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-async-await-flushpromises.md +175 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-browser-vs-node-runners.md +208 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-component-blackbox-approach.md +144 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-composables-helper-wrapper.md +238 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-e2e-playwright-recommended.md +242 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-no-snapshot-only.md +197 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-pinia-store-setup.md +228 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-suspense-async-components.md +229 -0
- package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-vitest-recommended-for-vue.md +204 -0
- package/template/agent/skills/game-design/SKILL.md +194 -0
- package/template/agent/skills/game-developer/SKILL.md +175 -0
- package/template/agent/skills/growth-hacker/SKILL.md +122 -0
- package/template/agent/skills/i18n-localization/SKILL.md +126 -0
- package/template/agent/skills/influencer-marketer/SKILL.md +141 -0
- package/template/agent/skills/mobile-developer/SKILL.md +194 -0
- package/template/agent/skills/mobile-developer/references/android-native.md +396 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-accessibility.md +36 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-architecture.md +52 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-coroutines.md +139 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-data-layer.md +51 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-emulator-skill.md +108 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-gradle-logic.md +126 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-retrofit.md +142 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-testing.md +102 -0
- package/template/agent/skills/mobile-developer/references/android-rules/android-viewmodel.md +43 -0
- package/template/agent/skills/mobile-developer/references/android-rules/coil-compose.md +74 -0
- package/template/agent/skills/mobile-developer/references/android-rules/compose-navigation.md +422 -0
- package/template/agent/skills/mobile-developer/references/android-rules/compose-performance-audit.md +199 -0
- package/template/agent/skills/mobile-developer/references/android-rules/compose-ui.md +49 -0
- package/template/agent/skills/mobile-developer/references/android-rules/gradle-build-performance.md +346 -0
- package/template/agent/skills/mobile-developer/references/android-rules/kotlin-concurrency-expert.md +169 -0
- package/template/agent/skills/mobile-developer/references/android-rules/rxjava-to-coroutines-migration.md +101 -0
- package/template/agent/skills/mobile-developer/references/android-rules/xml-to-compose-migration.md +338 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-best-practices.md +52 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-checks-migration.md +134 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-cli-app-best-practices.md +123 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-doc-validation.md +45 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-matcher-best-practices.md +106 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-modern-features.md +241 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-package-maintenance.md +75 -0
- package/template/agent/skills/mobile-developer/references/flutter-rules/dart-test-fundamentals.md +124 -0
- package/template/agent/skills/mobile-developer/references/flutter.md +291 -0
- package/template/agent/skills/mobile-developer/references/ios-native.md +358 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/accessibility-patterns.md +215 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/animation-advanced.md +403 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/animation-basics.md +284 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/animation-transitions.md +326 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/charts-accessibility.md +135 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/charts.md +602 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/image-optimization.md +203 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/latest-apis.md +464 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/layout-best-practices.md +266 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/liquid-glass.md +416 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/list-patterns.md +394 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/macos-scenes.md +318 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/macos-views.md +357 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/macos-window-styling.md +303 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/performance-patterns.md +403 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/scroll-patterns.md +293 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/sheet-navigation-patterns.md +363 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/state-management.md +417 -0
- package/template/agent/skills/mobile-developer/references/ios-rules/view-structure.md +389 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/_sections.md +86 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/_template.md +28 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/animation-derived-value.md +53 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gesture-detector-press.md +95 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gpu-properties.md +65 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/design-system-compound-components.md +66 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/fonts-config-plugin.md +71 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/imports-design-system-folder.md +68 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/js-hoist-intl.md +61 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-callbacks.md +44 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-function-references.md +132 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-images.md +53 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-inline-objects.md +97 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-expensive.md +94 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-memo.md +82 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-types.md +104 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-virtualize.md +67 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-native-deps-in-app.md +46 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-single-dependency-versions.md +63 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/navigation-native-navigators.md +188 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-destructure-functions.md +50 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-reanimated-shared-values.md +48 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-dispatcher.md +91 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-fallback.md +56 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-minimize.md +65 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-no-falsy-and.md +74 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-text-in-text-component.md +36 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/scroll-position-no-state.md +82 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/state-ground-truth.md +80 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-expo-image.md +66 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-image-gallery.md +104 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-measure-views.md +78 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-menus.md +174 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-native-modals.md +77 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-pressable.md +61 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-safe-area-scroll.md +65 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-scrollview-content-inset.md +45 -0
- package/template/agent/skills/mobile-developer/references/react-native-rules/ui-styling.md +87 -0
- package/template/agent/skills/mobile-developer/references/react-native.md +345 -0
- package/template/agent/skills/monetization-strategist/SKILL.md +119 -0
- package/template/agent/skills/paid-acquisition-specialist/SKILL.md +119 -0
- package/template/agent/skills/product-manager/SKILL.md +105 -0
- package/template/agent/skills/real-time-features/SKILL.md +194 -0
- package/template/agent/skills/retention-specialist/SKILL.md +123 -0
- package/template/agent/skills/saas-architect/SKILL.md +139 -0
- package/template/agent/skills/security-engineer/SKILL.md +133 -0
- package/template/agent/skills/seo-specialist/SKILL.md +130 -0
- package/template/agent/skills/subscription-billing/SKILL.md +179 -0
- package/template/agent/skills/ux-designer/SKILL.md +128 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Vanilla JS/TS + Web Components Reference
|
|
2
|
+
|
|
3
|
+
> **Philosophy:** Zero dependencies. Platform APIs first.
|
|
4
|
+
> The best framework is the one you don't need.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Project Setup & Detection
|
|
9
|
+
|
|
10
|
+
**Stack indicators:** No framework dependency in `package.json`. Plain `index.html` + `<script>` tags, or Vite with no framework plugin.
|
|
11
|
+
|
|
12
|
+
**Key config files:**
|
|
13
|
+
|
|
14
|
+
| File | Purpose |
|
|
15
|
+
|------|---------|
|
|
16
|
+
| `index.html` | Entry point |
|
|
17
|
+
| `vite.config.ts` | Build tool (if using Vite) |
|
|
18
|
+
| `tsconfig.json` | TypeScript configuration |
|
|
19
|
+
| `package.json` | Dependencies (minimal or none) |
|
|
20
|
+
|
|
21
|
+
**Recommended project structure:**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
src/
|
|
25
|
+
components/
|
|
26
|
+
header.ts # Custom elements / component modules
|
|
27
|
+
modal.ts
|
|
28
|
+
services/
|
|
29
|
+
api.ts # Fetch wrapper
|
|
30
|
+
storage.ts # localStorage abstraction
|
|
31
|
+
utils/
|
|
32
|
+
dom.ts # DOM utility functions
|
|
33
|
+
events.ts # Event system
|
|
34
|
+
styles/
|
|
35
|
+
main.css # Global styles
|
|
36
|
+
components/ # Component-scoped CSS
|
|
37
|
+
main.ts # Entry point
|
|
38
|
+
router.ts # Client-side router (if SPA)
|
|
39
|
+
index.html
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Architecture Patterns
|
|
45
|
+
|
|
46
|
+
### Web Components (Custom Elements)
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
class MyCounter extends HTMLElement {
|
|
50
|
+
#count = 0
|
|
51
|
+
#shadow: ShadowRoot
|
|
52
|
+
|
|
53
|
+
constructor() {
|
|
54
|
+
super()
|
|
55
|
+
this.#shadow = this.attachShadow({ mode: 'open' })
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
connectedCallback() {
|
|
59
|
+
this.render()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
render() {
|
|
63
|
+
this.#shadow.innerHTML = `
|
|
64
|
+
<style>
|
|
65
|
+
button { font-size: 1rem; padding: 0.5rem 1rem; cursor: pointer; }
|
|
66
|
+
</style>
|
|
67
|
+
<button>${this.#count}</button>
|
|
68
|
+
`
|
|
69
|
+
this.#shadow.querySelector('button')!
|
|
70
|
+
.addEventListener('click', () => { this.#count++; this.render() })
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
customElements.define('my-counter', MyCounter)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Module Pattern
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
// services/api.ts
|
|
81
|
+
const BASE_URL = '/api'
|
|
82
|
+
|
|
83
|
+
export async function get<T>(path: string): Promise<T> {
|
|
84
|
+
const res = await fetch(`${BASE_URL}${path}`)
|
|
85
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`)
|
|
86
|
+
return res.json()
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function post<T>(path: string, body: unknown): Promise<T> {
|
|
90
|
+
const res = await fetch(`${BASE_URL}${path}`, {
|
|
91
|
+
method: 'POST',
|
|
92
|
+
headers: { 'Content-Type': 'application/json' },
|
|
93
|
+
body: JSON.stringify(body),
|
|
94
|
+
})
|
|
95
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`)
|
|
96
|
+
return res.json()
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### State Management
|
|
101
|
+
|
|
102
|
+
| Approach | Use When |
|
|
103
|
+
|----------|----------|
|
|
104
|
+
| **Module-level variables** | Simple state, single module access |
|
|
105
|
+
| **Custom EventTarget** | Pub/sub across modules |
|
|
106
|
+
| **Proxy-based reactivity** | Automatic DOM updates |
|
|
107
|
+
| **URL state** (`URLSearchParams`) | Shareable, bookmarkable state |
|
|
108
|
+
|
|
109
|
+
**Proxy-based reactivity:**
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
function createStore<T extends object>(initial: T, onChange: () => void): T {
|
|
113
|
+
return new Proxy(initial, {
|
|
114
|
+
set(target, prop, value) {
|
|
115
|
+
Reflect.set(target, prop, value)
|
|
116
|
+
onChange()
|
|
117
|
+
return true
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Performance Optimization
|
|
126
|
+
|
|
127
|
+
### Modern Browser APIs to Use
|
|
128
|
+
|
|
129
|
+
| API | Purpose |
|
|
130
|
+
|-----|---------|
|
|
131
|
+
| `fetch` | Network requests (replaces XMLHttpRequest) |
|
|
132
|
+
| `IntersectionObserver` | Lazy loading, infinite scroll |
|
|
133
|
+
| `ResizeObserver` | Responsive components |
|
|
134
|
+
| `MutationObserver` | DOM change detection |
|
|
135
|
+
| `requestIdleCallback` | Defer non-critical work |
|
|
136
|
+
| `requestAnimationFrame` | Smooth animations |
|
|
137
|
+
| `Web Workers` | Offload heavy computation |
|
|
138
|
+
| `AbortController` | Cancel fetch requests |
|
|
139
|
+
| `structuredClone` | Deep clone objects |
|
|
140
|
+
| `URLPattern` | URL matching/routing |
|
|
141
|
+
| `View Transitions API` | Page transition animations |
|
|
142
|
+
| `Popover API` | Native popovers (no JS library) |
|
|
143
|
+
| `<dialog>` | Native modal dialogs |
|
|
144
|
+
|
|
145
|
+
### Key Optimizations
|
|
146
|
+
|
|
147
|
+
1. **Event delegation** — one listener on parent, not N listeners on children.
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
// ❌ Bad: N listeners
|
|
151
|
+
items.forEach(item => item.addEventListener('click', handler))
|
|
152
|
+
|
|
153
|
+
// ✅ Good: 1 listener with delegation
|
|
154
|
+
list.addEventListener('click', (e) => {
|
|
155
|
+
const item = (e.target as HTMLElement).closest('[data-id]')
|
|
156
|
+
if (item) handleClick(item.dataset.id!)
|
|
157
|
+
})
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
2. **`DocumentFragment`** — batch DOM insertions.
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
const fragment = document.createDocumentFragment()
|
|
164
|
+
items.forEach(item => {
|
|
165
|
+
const li = document.createElement('li')
|
|
166
|
+
li.textContent = item.name
|
|
167
|
+
fragment.appendChild(li)
|
|
168
|
+
})
|
|
169
|
+
list.appendChild(fragment) // single reflow
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
3. **CSS `content-visibility: auto`** — skip rendering off-screen content.
|
|
173
|
+
|
|
174
|
+
4. **`<link rel="modulepreload">`** — preload ES modules.
|
|
175
|
+
|
|
176
|
+
5. **`loading="lazy"`** on images and iframes — native lazy loading.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Common Libraries (Minimal Dependencies)
|
|
181
|
+
|
|
182
|
+
| Category | Lightweight Pick | Why Not Full Framework |
|
|
183
|
+
|----------|-----------------|----------------------|
|
|
184
|
+
| **Routing** | `navigo` / custom History API | 2KB vs router libraries |
|
|
185
|
+
| **HTTP** | `fetch` (built-in) | No library needed |
|
|
186
|
+
| **Templating** | `lit-html` | Tagged templates, 5KB |
|
|
187
|
+
| **State** | `nanostores` | Framework-agnostic, 1KB |
|
|
188
|
+
| **Build** | `vite` | Fast, ESM-native |
|
|
189
|
+
| **Testing** | `vitest` | Fast, compatible |
|
|
190
|
+
| **E2E** | `playwright` | Cross-browser |
|
|
191
|
+
| **CSS** | CSS custom properties | Native variables |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Anti-Patterns & Gotchas
|
|
196
|
+
|
|
197
|
+
| ❌ Don't | Why | ✅ Do Instead |
|
|
198
|
+
|----------|-----|---------------|
|
|
199
|
+
| `innerHTML` with user input | XSS vulnerability | `textContent` or sanitize |
|
|
200
|
+
| `document.write()` | Blocks parsing, destroys page | DOM manipulation methods |
|
|
201
|
+
| jQuery for new projects | Unnecessary, browser APIs suffice | Native `querySelector`, `fetch` |
|
|
202
|
+
| Sync XHR | Blocks main thread | `fetch` with async/await |
|
|
203
|
+
| `var` declarations | Hoisting bugs, no block scope | `const` / `let` |
|
|
204
|
+
| `==` loose equality | Type coercion bugs | `===` strict equality |
|
|
205
|
+
| Missing `type="module"` on scripts | No ES module support | `<script type="module">` |
|
|
206
|
+
| Global variables | Namespace pollution | ES modules |
|
|
207
|
+
| Polling for DOM changes | Wasteful | `MutationObserver` |
|
|
208
|
+
| `setTimeout` for animations | Inconsistent frame rate | `requestAnimationFrame` |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Testing
|
|
213
|
+
|
|
214
|
+
| Layer | Tool | Purpose |
|
|
215
|
+
|-------|------|---------|
|
|
216
|
+
| **Unit** | Vitest | Functions, modules |
|
|
217
|
+
| **DOM** | Vitest + `happy-dom` | Component rendering |
|
|
218
|
+
| **E2E** | Playwright | Full browser flows |
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
import { describe, it, expect } from 'vitest'
|
|
222
|
+
import { createStore } from '../src/store'
|
|
223
|
+
|
|
224
|
+
describe('Store', () => {
|
|
225
|
+
it('notifies on change', () => {
|
|
226
|
+
let called = false
|
|
227
|
+
const store = createStore({ count: 0 }, () => { called = true })
|
|
228
|
+
store.count = 1
|
|
229
|
+
expect(called).toBe(true)
|
|
230
|
+
})
|
|
231
|
+
})
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Deployment & Distribution
|
|
237
|
+
|
|
238
|
+
### Static Hosting (Most Common)
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Build (Vite)
|
|
242
|
+
vite build
|
|
243
|
+
|
|
244
|
+
# Output: dist/
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Deploy `dist/` to any static host: Cloudflare Pages, Netlify, Vercel, GitHub Pages, S3 + CloudFront.
|
|
248
|
+
|
|
249
|
+
### No-Build Option
|
|
250
|
+
|
|
251
|
+
For simple projects, no build step needed:
|
|
252
|
+
|
|
253
|
+
```html
|
|
254
|
+
<!DOCTYPE html>
|
|
255
|
+
<html>
|
|
256
|
+
<head>
|
|
257
|
+
<link rel="stylesheet" href="styles/main.css">
|
|
258
|
+
</head>
|
|
259
|
+
<body>
|
|
260
|
+
<script type="module" src="src/main.ts"></script>
|
|
261
|
+
</body>
|
|
262
|
+
</html>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Modern browsers support ES modules natively. Use import maps for bare specifiers:
|
|
266
|
+
|
|
267
|
+
```html
|
|
268
|
+
<script type="importmap">
|
|
269
|
+
{
|
|
270
|
+
"imports": {
|
|
271
|
+
"lit-html": "https://esm.sh/lit-html"
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
</script>
|
|
275
|
+
```
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Vue 3 + Nuxt Reference
|
|
2
|
+
|
|
3
|
+
> **Philosophy:** Progressive framework. Reactivity-first. Convention over configuration.
|
|
4
|
+
> Vue makes the simple things simple and the complex things manageable.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Project Setup & Detection
|
|
9
|
+
|
|
10
|
+
**Stack indicators:** `nuxt.config.ts` / `vue.config.js`, `package.json` with `vue` or `nuxt` dependency.
|
|
11
|
+
|
|
12
|
+
**Key config files:**
|
|
13
|
+
|
|
14
|
+
| File | Purpose |
|
|
15
|
+
|------|---------|
|
|
16
|
+
| `nuxt.config.ts` | Nuxt configuration (modules, plugins, runtime config) |
|
|
17
|
+
| `app.config.ts` | App-level configuration (reactive, client-side) |
|
|
18
|
+
| `tsconfig.json` | TypeScript configuration |
|
|
19
|
+
| `.env` | Environment variables |
|
|
20
|
+
|
|
21
|
+
**Recommended project structure (Nuxt 3):**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
app/
|
|
25
|
+
pages/
|
|
26
|
+
index.vue # Home (/), file-based routing
|
|
27
|
+
about.vue # /about
|
|
28
|
+
users/
|
|
29
|
+
[id].vue # /users/:id (dynamic route)
|
|
30
|
+
layouts/
|
|
31
|
+
default.vue # Default layout
|
|
32
|
+
dashboard.vue # Dashboard layout
|
|
33
|
+
components/
|
|
34
|
+
ui/ # Reusable UI components
|
|
35
|
+
forms/ # Form components
|
|
36
|
+
composables/ # Auto-imported composables (useAuth, etc.)
|
|
37
|
+
stores/ # Pinia stores
|
|
38
|
+
server/
|
|
39
|
+
api/ # Server API routes
|
|
40
|
+
middleware/ # Server middleware
|
|
41
|
+
plugins/ # Vue plugins
|
|
42
|
+
middleware/ # Route middleware (auth guards)
|
|
43
|
+
utils/ # Auto-imported utility functions
|
|
44
|
+
assets/ # Styles, images (processed by Vite)
|
|
45
|
+
public/ # Static files (served as-is)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Architecture Patterns
|
|
51
|
+
|
|
52
|
+
### Composition API (Default)
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<script setup lang="ts">
|
|
56
|
+
import { ref, computed, onMounted } from 'vue'
|
|
57
|
+
|
|
58
|
+
const count = ref(0)
|
|
59
|
+
const doubled = computed(() => count.value * 2)
|
|
60
|
+
|
|
61
|
+
function increment() {
|
|
62
|
+
count.value++
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
onMounted(() => {
|
|
66
|
+
console.log('Component mounted')
|
|
67
|
+
})
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<template>
|
|
71
|
+
<button @click="increment">{{ count }} ({{ doubled }})</button>
|
|
72
|
+
</template>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### State Management
|
|
76
|
+
|
|
77
|
+
| Approach | Use When |
|
|
78
|
+
|----------|----------|
|
|
79
|
+
| **Pinia** (recommended) | Global/shared state — devtools, SSR, TypeScript |
|
|
80
|
+
| **Composables** (`useState` in Nuxt) | SSR-safe state shared across components |
|
|
81
|
+
| **`ref`/`reactive`** | Component-local state |
|
|
82
|
+
| **URL state** (`useRoute().query`) | Filters, pagination, shareable state |
|
|
83
|
+
|
|
84
|
+
**Pinia store:**
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
// stores/auth.ts
|
|
88
|
+
export const useAuthStore = defineStore('auth', () => {
|
|
89
|
+
const user = ref<User | null>(null)
|
|
90
|
+
const isLoggedIn = computed(() => !!user.value)
|
|
91
|
+
|
|
92
|
+
async function login(credentials: Credentials) {
|
|
93
|
+
user.value = await $fetch('/api/auth/login', { method: 'POST', body: credentials })
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return { user, isLoggedIn, login }
|
|
97
|
+
})
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Data Fetching (Nuxt)
|
|
101
|
+
|
|
102
|
+
| Composable | Use When |
|
|
103
|
+
|------------|----------|
|
|
104
|
+
| **`useFetch`** | SSR + client — auto-deduplication, caching |
|
|
105
|
+
| **`useAsyncData`** | Custom async logic, multiple sources |
|
|
106
|
+
| **`$fetch`** | Client-only calls, server API routes, event handlers |
|
|
107
|
+
| **`useLazyFetch`** | Non-blocking fetch (shows page immediately) |
|
|
108
|
+
|
|
109
|
+
```vue
|
|
110
|
+
<script setup>
|
|
111
|
+
const { data: posts, pending, error } = await useFetch('/api/posts')
|
|
112
|
+
</script>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Performance Optimization
|
|
118
|
+
|
|
119
|
+
### Key Optimizations
|
|
120
|
+
|
|
121
|
+
1. **Auto-imports** — Nuxt auto-imports composables, components, and utils. No manual imports needed.
|
|
122
|
+
|
|
123
|
+
2. **`<Suspense>` and `<NuxtLoadingIndicator>`** — built-in loading states.
|
|
124
|
+
|
|
125
|
+
3. **`defineAsyncComponent`** — lazy load heavy components.
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
const HeavyChart = defineAsyncComponent(() => import('~/components/Chart.vue'))
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
4. **`v-once`** — render static content once, skip future updates.
|
|
132
|
+
|
|
133
|
+
5. **`v-memo`** — memoize template sub-trees (Vue 3.2+).
|
|
134
|
+
|
|
135
|
+
6. **`shallowRef`** — avoid deep reactivity for large objects.
|
|
136
|
+
|
|
137
|
+
7. **Route-based code splitting** — Nuxt splits by page automatically.
|
|
138
|
+
|
|
139
|
+
8. **Image optimization** — use `nuxt/image` module for `<NuxtImg>` and `<NuxtPicture>`.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Common Libraries Ecosystem
|
|
144
|
+
|
|
145
|
+
| Category | Recommended | Alternative |
|
|
146
|
+
|----------|-------------|-------------|
|
|
147
|
+
| **UI** | `nuxt-ui` / `primevue` | `vuetify`, `quasar` |
|
|
148
|
+
| **Styling** | `tailwindcss` (via `@nuxtjs/tailwindcss`) | `unocss` |
|
|
149
|
+
| **State** | `pinia` (built-in Nuxt module) | `vuex` (legacy) |
|
|
150
|
+
| **Forms** | `vee-validate` + `zod` | `formkit` |
|
|
151
|
+
| **Auth** | `sidebase/nuxt-auth` | `nuxt-auth-utils` |
|
|
152
|
+
| **Database** | `prisma` / `drizzle` | `nuxt-mongoose` |
|
|
153
|
+
| **i18n** | `@nuxtjs/i18n` | — |
|
|
154
|
+
| **Testing** | `vitest` + `@vue/test-utils` | — |
|
|
155
|
+
| **E2E** | `playwright` | `cypress` |
|
|
156
|
+
| **Icons** | `nuxt-icon` | `unplugin-icons` |
|
|
157
|
+
| **SEO** | `nuxt-seo` module suite | manual `useHead()` |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Anti-Patterns & Gotchas
|
|
162
|
+
|
|
163
|
+
| ❌ Don't | Why | ✅ Do Instead |
|
|
164
|
+
|----------|-----|---------------|
|
|
165
|
+
| Options API for new code | Less composable, worse TypeScript | `<script setup>` Composition API |
|
|
166
|
+
| `this.$store` (Vuex) | Legacy, replaced by Pinia | Use Pinia stores |
|
|
167
|
+
| Mutating props | One-way data flow violation, bugs | Emit events or use `v-model` |
|
|
168
|
+
| `watch` for derived state | Extra re-render cycle | Use `computed` |
|
|
169
|
+
| `$fetch` in `setup` for SSR data | Runs on both server AND client (duplicate) | `useFetch` or `useAsyncData` |
|
|
170
|
+
| `ref.value` in template | `.value` is auto-unwrapped in templates | Just `{{ count }}`, not `{{ count.value }}` |
|
|
171
|
+
| Missing `key` on `v-for` | Re-render bugs, broken state | Always `:key="item.id"` |
|
|
172
|
+
| Barrel exports in composables | Nuxt auto-imports from `composables/` | One composable per file |
|
|
173
|
+
| `process.env` in client | Only works in Node.js | `useRuntimeConfig()` |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Testing
|
|
178
|
+
|
|
179
|
+
| Layer | Tool | Purpose |
|
|
180
|
+
|-------|------|---------|
|
|
181
|
+
| **Unit** | Vitest + `@vue/test-utils` | Components, composables |
|
|
182
|
+
| **Component** | `@nuxt/test-utils` | Full Nuxt component context |
|
|
183
|
+
| **E2E** | Playwright | Full user flows |
|
|
184
|
+
|
|
185
|
+
```ts
|
|
186
|
+
import { mount } from '@vue/test-utils'
|
|
187
|
+
import Counter from '~/components/Counter.vue'
|
|
188
|
+
|
|
189
|
+
test('increments', async () => {
|
|
190
|
+
const wrapper = mount(Counter)
|
|
191
|
+
await wrapper.find('button').trigger('click')
|
|
192
|
+
expect(wrapper.text()).toContain('1')
|
|
193
|
+
})
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Deployment & Distribution
|
|
199
|
+
|
|
200
|
+
### Nitro Server (Nuxt 3)
|
|
201
|
+
|
|
202
|
+
Nuxt 3 uses Nitro — deploy anywhere:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Build
|
|
206
|
+
nuxt build # Server (SSR)
|
|
207
|
+
nuxt generate # Static (SSG)
|
|
208
|
+
|
|
209
|
+
# Preview
|
|
210
|
+
nuxt preview
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
| Platform | Preset |
|
|
214
|
+
|----------|--------|
|
|
215
|
+
| **Vercel** | `vercel` (auto-detected) |
|
|
216
|
+
| **Netlify** | `netlify` |
|
|
217
|
+
| **Cloudflare** | `cloudflare-pages` |
|
|
218
|
+
| **Node.js** | `node-server` |
|
|
219
|
+
| **Docker** | `node-server` + Dockerfile |
|
|
220
|
+
| **Static** | `nuxt generate` → any CDN |
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Quick Reference — Granular Rules
|
|
225
|
+
|
|
226
|
+
Individual rule files in `vue-rules/` with detailed code examples and best
|
|
227
|
+
practices from the Vue ecosystem. Read the specific rule when working in that area.
|
|
228
|
+
|
|
229
|
+
> Source: [antfu/skills](https://github.com/antfu/skills) (from [vuejs-ai/skills](https://github.com/vuejs-ai/skills))
|
|
230
|
+
|
|
231
|
+
### Best Practices — Components
|
|
232
|
+
|
|
233
|
+
- [sfc.md](vue-rules/best-practices/sfc.md) — Single File Component patterns
|
|
234
|
+
- [component-data-flow.md](vue-rules/best-practices/component-data-flow.md) — Props, events, v-model
|
|
235
|
+
- [component-slots.md](vue-rules/best-practices/component-slots.md) — Slot patterns
|
|
236
|
+
- [component-fallthrough-attrs.md](vue-rules/best-practices/component-fallthrough-attrs.md) — Fallthrough attributes
|
|
237
|
+
- [component-async.md](vue-rules/best-practices/component-async.md) — Async components
|
|
238
|
+
- [component-keep-alive.md](vue-rules/best-practices/component-keep-alive.md) — KeepAlive caching
|
|
239
|
+
- [component-suspense.md](vue-rules/best-practices/component-suspense.md) — Suspense for async
|
|
240
|
+
- [component-teleport.md](vue-rules/best-practices/component-teleport.md) — Teleport for portals
|
|
241
|
+
- [component-transition.md](vue-rules/best-practices/component-transition.md) — Transition animations
|
|
242
|
+
- [component-transition-group.md](vue-rules/best-practices/component-transition-group.md) — TransitionGroup for lists
|
|
243
|
+
|
|
244
|
+
### Best Practices — Core
|
|
245
|
+
|
|
246
|
+
- [reactivity.md](vue-rules/best-practices/reactivity.md) — Reactivity system deep dive
|
|
247
|
+
- [composables.md](vue-rules/best-practices/composables.md) — Composable patterns
|
|
248
|
+
- [state-management.md](vue-rules/best-practices/state-management.md) — State management approaches
|
|
249
|
+
- [directives.md](vue-rules/best-practices/directives.md) — Custom directives
|
|
250
|
+
- [plugins.md](vue-rules/best-practices/plugins.md) — Plugin architecture
|
|
251
|
+
- [render-functions.md](vue-rules/best-practices/render-functions.md) — Render functions & JSX
|
|
252
|
+
|
|
253
|
+
### Best Practices — Performance
|
|
254
|
+
|
|
255
|
+
- [perf-virtualize-large-lists.md](vue-rules/best-practices/perf-virtualize-large-lists.md) — Virtualize large lists
|
|
256
|
+
- [perf-avoid-component-abstraction-in-lists.md](vue-rules/best-practices/perf-avoid-component-abstraction-in-lists.md) — Avoid abstraction in lists
|
|
257
|
+
- [perf-v-once-v-memo-directives.md](vue-rules/best-practices/perf-v-once-v-memo-directives.md) — v-once and v-memo
|
|
258
|
+
- [updated-hook-performance.md](vue-rules/best-practices/updated-hook-performance.md) — Updated hook pitfalls
|
|
259
|
+
|
|
260
|
+
### Best Practices — Animation
|
|
261
|
+
|
|
262
|
+
- [animation-class-based-technique.md](vue-rules/best-practices/animation-class-based-technique.md) — CSS class-based animations
|
|
263
|
+
- [animation-state-driven-technique.md](vue-rules/best-practices/animation-state-driven-technique.md) — State-driven animations
|
|
264
|
+
|
|
265
|
+
### Router
|
|
266
|
+
|
|
267
|
+
- [router-guard-async-await-pattern.md](vue-rules/router/router-guard-async-await-pattern.md) — Async guard pattern
|
|
268
|
+
- [router-navigation-guard-next-deprecated.md](vue-rules/router/router-navigation-guard-next-deprecated.md) — next() is deprecated
|
|
269
|
+
- [router-navigation-guard-infinite-loop.md](vue-rules/router/router-navigation-guard-infinite-loop.md) — Avoid guard infinite loops
|
|
270
|
+
- [router-param-change-no-lifecycle.md](vue-rules/router/router-param-change-no-lifecycle.md) — Param changes skip lifecycle
|
|
271
|
+
- [router-beforerouteenter-no-this.md](vue-rules/router/router-beforerouteenter-no-this.md) — No `this` in beforeRouteEnter
|
|
272
|
+
- [router-beforeenter-no-param-trigger.md](vue-rules/router/router-beforeenter-no-param-trigger.md) — beforeEnter vs param changes
|
|
273
|
+
- [router-simple-routing-cleanup.md](vue-rules/router/router-simple-routing-cleanup.md) — Simple routing cleanup
|
|
274
|
+
- [router-use-vue-router-for-production.md](vue-rules/router/router-use-vue-router-for-production.md) — Use Vue Router in production
|
|
275
|
+
|
|
276
|
+
### Testing
|
|
277
|
+
|
|
278
|
+
- [testing-vitest-recommended-for-vue.md](vue-rules/testing/testing-vitest-recommended-for-vue.md) — Vitest is recommended
|
|
279
|
+
- [testing-component-blackbox-approach.md](vue-rules/testing/testing-component-blackbox-approach.md) — Black-box testing
|
|
280
|
+
- [testing-composables-helper-wrapper.md](vue-rules/testing/testing-composables-helper-wrapper.md) — Test composables with wrapper
|
|
281
|
+
- [testing-pinia-store-setup.md](vue-rules/testing/testing-pinia-store-setup.md) — Pinia store testing setup
|
|
282
|
+
- [testing-async-await-flushpromises.md](vue-rules/testing/testing-async-await-flushpromises.md) — Async testing patterns
|
|
283
|
+
- [testing-suspense-async-components.md](vue-rules/testing/testing-suspense-async-components.md) — Suspense testing
|
|
284
|
+
- [async-component-testing.md](vue-rules/testing/async-component-testing.md) — Async component testing
|
|
285
|
+
- [teleport-testing-complexity.md](vue-rules/testing/teleport-testing-complexity.md) — Teleport testing
|
|
286
|
+
- [testing-no-snapshot-only.md](vue-rules/testing/testing-no-snapshot-only.md) — Don't rely on snapshots only
|
|
287
|
+
- [testing-browser-vs-node-runners.md](vue-rules/testing/testing-browser-vs-node-runners.md) — Browser vs Node runners
|
|
288
|
+
- [testing-e2e-playwright-recommended.md](vue-rules/testing/testing-e2e-playwright-recommended.md) — Playwright for E2E
|
|
289
|
+
|