@xonovex/skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +21 -0
- package/commands/code-align.md +108 -0
- package/commands/code-harden.md +74 -0
- package/commands/code-simplify.md +145 -0
- package/commands/git-commit.md +146 -0
- package/commands/insights-extract.md +109 -0
- package/commands/insights-integrate.md +100 -0
- package/commands/plan-continue.md +167 -0
- package/commands/plan-create.md +107 -0
- package/commands/plan-research.md +113 -0
- package/commands/plan-subplans-create.md +111 -0
- package/commands/plan-tdd-create.md +128 -0
- package/commands/plan-update.md +99 -0
- package/commands/plan-validate.md +100 -0
- package/commands/plan-worktree-abandon.md +104 -0
- package/commands/plan-worktree-create.md +92 -0
- package/commands/plan-worktree-merge.md +132 -0
- package/package.json +44 -0
- package/skills/astro-guidelines/SKILL.md +23 -0
- package/skills/astro-guidelines/reference/accessibility.md +31 -0
- package/skills/astro-guidelines/reference/components.md +42 -0
- package/skills/astro-guidelines/reference/content-collections.md +32 -0
- package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
- package/skills/astro-guidelines/reference/project-structure.md +32 -0
- package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
- package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
- package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
- package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
- package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
- package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
- package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
- package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
- package/skills/c99-guidelines/SKILL.md +29 -0
- package/skills/c99-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
- package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
- package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
- package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
- package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
- package/skills/cmake-guidelines/SKILL.md +31 -0
- package/skills/cmake-guidelines/reference/compile-options.md +34 -0
- package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
- package/skills/cmake-guidelines/reference/find-package.md +29 -0
- package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
- package/skills/cmake-guidelines/reference/installation.md +38 -0
- package/skills/cmake-guidelines/reference/project-structure.md +40 -0
- package/skills/cmake-guidelines/reference/target-types.md +37 -0
- package/skills/cmake-guidelines/reference/testing.md +30 -0
- package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
- package/skills/content-guidelines/SKILL.md +36 -0
- package/skills/content-guidelines/reference/humanize.md +30 -0
- package/skills/content-guidelines/reference/news.md +28 -0
- package/skills/content-guidelines/reference/travelguide.md +31 -0
- package/skills/docker-guidelines/SKILL.md +23 -0
- package/skills/docker-guidelines/reference/docker-compose.md +40 -0
- package/skills/docker-guidelines/reference/layer-caching.md +25 -0
- package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
- package/skills/docker-guidelines/reference/production-config.md +32 -0
- package/skills/docker-guidelines/reference/security.md +27 -0
- package/skills/express.js-guidelines/SKILL.md +32 -0
- package/skills/express.js-guidelines/reference/app-setup.md +39 -0
- package/skills/express.js-guidelines/reference/authentication.md +39 -0
- package/skills/express.js-guidelines/reference/controllers.md +49 -0
- package/skills/express.js-guidelines/reference/error-handling.md +54 -0
- package/skills/express.js-guidelines/reference/project-structure.md +29 -0
- package/skills/express.js-guidelines/reference/responses.md +30 -0
- package/skills/express.js-guidelines/reference/routes.md +29 -0
- package/skills/express.js-guidelines/reference/testing.md +39 -0
- package/skills/express.js-guidelines/reference/validation.md +41 -0
- package/skills/general-fp-guidelines/SKILL.md +28 -0
- package/skills/general-oop-guidelines/SKILL.md +28 -0
- package/skills/git-guidelines/SKILL.md +46 -0
- package/skills/git-guidelines/reference/commit.md +32 -0
- package/skills/git-guidelines/reference/merge-resolve.md +38 -0
- package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
- package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
- package/skills/git-guidelines/reference/worktree-commit.md +46 -0
- package/skills/git-guidelines/reference/worktree-create.md +42 -0
- package/skills/git-guidelines/reference/worktree-merge.md +45 -0
- package/skills/git-guidelines/reference/worktree-validate.md +44 -0
- package/skills/hono-guidelines/SKILL.md +49 -0
- package/skills/hono-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-guidelines/reference/websocket-support.md +59 -0
- package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
- package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
- package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
- package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
- package/skills/insights-guidelines/SKILL.md +28 -0
- package/skills/insights-guidelines/reference/insights-extract.md +31 -0
- package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
- package/skills/instruction-guidelines/SKILL.md +26 -0
- package/skills/instruction-guidelines/reference/assimilate.md +38 -0
- package/skills/instruction-guidelines/reference/simplify.md +46 -0
- package/skills/instruction-guidelines/reference/sync.md +41 -0
- package/skills/kubernetes-guidelines/SKILL.md +28 -0
- package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
- package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
- package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
- package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
- package/skills/kubernetes-guidelines/reference/services.md +36 -0
- package/skills/kubernetes-guidelines/reference/validation.md +32 -0
- package/skills/lua-guidelines/SKILL.md +29 -0
- package/skills/lua-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-guidelines/reference/metatables.md +52 -0
- package/skills/lua-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
- package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
- package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
- package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
- package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
- package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
- package/skills/moon-guidelines/SKILL.md +30 -0
- package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
- package/skills/moon-guidelines/reference/project-constraints.md +25 -0
- package/skills/moon-guidelines/reference/query-language.md +27 -0
- package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
- package/skills/moon-guidelines/reference/task-configuration.md +38 -0
- package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
- package/skills/motion-react-guidelines/SKILL.md +66 -0
- package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
- package/skills/motion-react-guidelines/reference/entrance.md +36 -0
- package/skills/motion-react-guidelines/reference/exit.md +35 -0
- package/skills/motion-react-guidelines/reference/gestures.md +23 -0
- package/skills/motion-react-guidelines/reference/layout.md +39 -0
- package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
- package/skills/motion-react-guidelines/reference/performance.md +32 -0
- package/skills/motion-react-guidelines/reference/scroll.md +38 -0
- package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
- package/skills/motion-react-guidelines/reference/stagger.md +34 -0
- package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
- package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
- package/skills/plan-guidelines/SKILL.md +56 -0
- package/skills/plan-guidelines/reference/code-align.md +23 -0
- package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
- package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
- package/skills/plan-guidelines/reference/code-harden.md +30 -0
- package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
- package/skills/plan-guidelines/reference/code-simplify.md +33 -0
- package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
- package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
- package/skills/plan-guidelines/reference/general-research.md +35 -0
- package/skills/plan-guidelines/reference/plan-create.md +37 -0
- package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
- package/skills/plan-guidelines/reference/todos.md +39 -0
- package/skills/presentation-guidelines/SKILL.md +25 -0
- package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
- package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
- package/skills/python-guidelines/SKILL.md +32 -0
- package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
- package/skills/python-guidelines/reference/caching-functions.md +47 -0
- package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
- package/skills/python-guidelines/reference/exception-handling.md +72 -0
- package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
- package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
- package/skills/python-guidelines/reference/resource-management.md +58 -0
- package/skills/python-guidelines/reference/string-formatting.md +41 -0
- package/skills/python-guidelines/reference/type-checking.md +47 -0
- package/skills/react-guidelines/SKILL.md +105 -0
- package/skills/react-guidelines/reference/accessibility.md +31 -0
- package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
- package/skills/react-guidelines/reference/component-design.md +57 -0
- package/skills/react-guidelines/reference/hooks.md +39 -0
- package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
- package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
- package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
- package/skills/react-guidelines/reference/migration-typescript.md +95 -0
- package/skills/react-guidelines/reference/new-hooks.md +94 -0
- package/skills/react-guidelines/reference/performance-optimization.md +41 -0
- package/skills/react-guidelines/reference/react-compiler.md +34 -0
- package/skills/react-guidelines/reference/server-components.md +99 -0
- package/skills/react-guidelines/reference/state-management.md +72 -0
- package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
- package/skills/remotion-guidelines/SKILL.md +67 -0
- package/skills/remotion-guidelines/reference/animations.md +121 -0
- package/skills/remotion-guidelines/reference/assets.md +21 -0
- package/skills/remotion-guidelines/reference/captions.md +33 -0
- package/skills/remotion-guidelines/reference/charts.md +35 -0
- package/skills/remotion-guidelines/reference/compositions.md +40 -0
- package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
- package/skills/remotion-guidelines/reference/gifs.md +33 -0
- package/skills/remotion-guidelines/reference/lottie.md +41 -0
- package/skills/remotion-guidelines/reference/maps.md +26 -0
- package/skills/remotion-guidelines/reference/media.md +39 -0
- package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
- package/skills/remotion-guidelines/reference/sequencing.md +44 -0
- package/skills/remotion-guidelines/reference/text.md +24 -0
- package/skills/remotion-guidelines/reference/three-d.md +33 -0
- package/skills/remotion-guidelines/reference/timing.md +22 -0
- package/skills/remotion-guidelines/reference/transitions.md +52 -0
- package/skills/shell-scripting-guidelines/SKILL.md +31 -0
- package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
- package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
- package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
- package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
- package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
- package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
- package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
- package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
- package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
- package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
- package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
- package/skills/skill-guidelines/SKILL.md +33 -0
- package/skills/skill-guidelines/reference/assimilate.md +51 -0
- package/skills/skill-guidelines/reference/create.md +48 -0
- package/skills/skill-guidelines/reference/extract.md +48 -0
- package/skills/skill-guidelines/reference/simplify.md +56 -0
- package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
- package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
- package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
- package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
- package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
- package/skills/strudel-guidelines/SKILL.md +52 -0
- package/skills/strudel-guidelines/reference/arrangement.md +24 -0
- package/skills/strudel-guidelines/reference/conditionals.md +22 -0
- package/skills/strudel-guidelines/reference/effects.md +22 -0
- package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
- package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
- package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
- package/skills/strudel-guidelines/reference/layering.md +22 -0
- package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
- package/skills/strudel-guidelines/reference/modulation.md +22 -0
- package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
- package/skills/strudel-guidelines/reference/sounds.md +89 -0
- package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
- package/skills/terraform-guidelines/SKILL.md +28 -0
- package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
- package/skills/terraform-guidelines/reference/locals.md +53 -0
- package/skills/terraform-guidelines/reference/module-definition.md +81 -0
- package/skills/terraform-guidelines/reference/module-structure.md +51 -0
- package/skills/terraform-guidelines/reference/remote-state.md +38 -0
- package/skills/terraform-guidelines/reference/root-module.md +71 -0
- package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
- package/skills/threejs-guidelines/SKILL.md +38 -0
- package/skills/threejs-guidelines/reference/animation.md +26 -0
- package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
- package/skills/threejs-guidelines/reference/geometry.md +22 -0
- package/skills/threejs-guidelines/reference/interaction.md +25 -0
- package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
- package/skills/threejs-guidelines/reference/loaders.md +29 -0
- package/skills/threejs-guidelines/reference/materials.md +25 -0
- package/skills/threejs-guidelines/reference/math.md +27 -0
- package/skills/threejs-guidelines/reference/node-materials.md +32 -0
- package/skills/threejs-guidelines/reference/patterns.md +29 -0
- package/skills/threejs-guidelines/reference/performance.md +24 -0
- package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
- package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
- package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
- package/skills/threejs-guidelines/reference/shaders.md +28 -0
- package/skills/threejs-guidelines/reference/textures.md +21 -0
- package/skills/threejs-guidelines/reference/webgpu.md +34 -0
- package/skills/typescript-guidelines/SKILL.md +37 -0
- package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
- package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
- package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
- package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
- package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
- package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
- package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
- package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
- package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
- package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
- package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
- package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
- package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
- package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
- package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
- package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
- package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
- package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
- package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
- package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
- package/skills/vitest-guidelines/SKILL.md +32 -0
- package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
- package/skills/vitest-guidelines/reference/http-testing.md +57 -0
- package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
- package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
- package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
- package/skills/vitest-guidelines/reference/test-organization.md +25 -0
- package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
- package/skills/vitest-guidelines/reference/type-safety.md +55 -0
- package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
- package/skills/zod-guidelines/SKILL.md +33 -0
- package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
- package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
- package/skills/zod-guidelines/reference/migration-v4.md +46 -0
- package/skills/zod-guidelines/reference/schema-organization.md +73 -0
- package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: motion-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on Motion animations, `whileHover`, `whileInView`, scroll effects, spring physics, gesture animations. Use when creating React animations with Motion. Apply for entrance animations, hover effects, scroll reveals, layout transitions, drag interactions. Keywords: Motion, motion/react, animation, React, spring physics, whileHover, whileTap, useScroll, layoutId, AnimatePresence.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Motion Animation Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Install: `npm install motion`
|
|
12
|
+
- Import: `import { motion } from "motion/react"`
|
|
13
|
+
|
|
14
|
+
## Essentials
|
|
15
|
+
|
|
16
|
+
- **Entrance animations** - Use `initial`/`animate` with opacity+transform; 0.6-0.8s duration, ease `[0.22, 1, 0.36, 1]`, see [reference/entrance.md](reference/entrance.md)
|
|
17
|
+
- **Gesture interactions** - Use `whileHover`/`whileTap` with spring physics (stiffness: 300, damping: 20), see [reference/gestures.md](reference/gestures.md)
|
|
18
|
+
- **Scroll effects** - Use `whileInView` with `viewport={{once: true, amount: 0.3}}`; use `useScroll`/`useTransform` for parallax, see [reference/scroll.md](reference/scroll.md)
|
|
19
|
+
- **Layout animations** - Use `layout` prop for automatic FLIP; use `layoutId` for shared element morphing, see [reference/layout.md](reference/layout.md)
|
|
20
|
+
- **Stagger sequences** - Use variants with `staggerChildren: 0.1` and `delayChildren`, see [reference/stagger.md](reference/stagger.md)
|
|
21
|
+
- **Exit animations** - Wrap in `<AnimatePresence>` with `exit` prop, see [reference/exit.md](reference/exit.md)
|
|
22
|
+
- **Performance** - Only animate transform/opacity; use `useReducedMotion()` for accessibility, see [reference/performance.md](reference/performance.md)
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import {motion} from "motion/react";
|
|
28
|
+
|
|
29
|
+
export function FadeUp({children}: {children: React.ReactNode}) {
|
|
30
|
+
return (
|
|
31
|
+
<motion.div
|
|
32
|
+
initial={{opacity: 0, y: 20}}
|
|
33
|
+
animate={{opacity: 1, y: 0}}
|
|
34
|
+
transition={{duration: 0.6, ease: [0.22, 1, 0.36, 1]}}
|
|
35
|
+
>
|
|
36
|
+
{children}
|
|
37
|
+
</motion.div>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function HoverCard({children}: {children: React.ReactNode}) {
|
|
42
|
+
return (
|
|
43
|
+
<motion.div
|
|
44
|
+
whileHover={{y: -8, boxShadow: "0 20px 40px rgba(0,0,0,0.12)"}}
|
|
45
|
+
transition={{type: "spring", stiffness: 300, damping: 20}}
|
|
46
|
+
>
|
|
47
|
+
{children}
|
|
48
|
+
</motion.div>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Progressive Disclosure
|
|
54
|
+
|
|
55
|
+
- Read [reference/entrance.md](reference/entrance.md) - When creating fade-in, slide-up, or hero animations
|
|
56
|
+
- Read [reference/gestures.md](reference/gestures.md) - When adding hover, tap, or focus interactions
|
|
57
|
+
- Read [reference/scroll.md](reference/scroll.md) - When building scroll reveals or parallax effects
|
|
58
|
+
- Read [reference/layout.md](reference/layout.md) - When animating layout changes or shared elements
|
|
59
|
+
- Read [reference/stagger.md](reference/stagger.md) - When orchestrating sequential child animations
|
|
60
|
+
- Read [reference/exit.md](reference/exit.md) - When animating component unmounting
|
|
61
|
+
- Read [reference/spring-physics.md](reference/spring-physics.md) - When tuning spring stiffness, damping, mass
|
|
62
|
+
- Read [reference/motion-values.md](reference/motion-values.md) - When using useMotionValue, useSpring, useTransform, useAnimate, or MotionConfig
|
|
63
|
+
- Read [reference/performance.md](reference/performance.md) - When optimizing animations or supporting reduced motion
|
|
64
|
+
- Read [reference/svg-path.md](reference/svg-path.md) - When animating SVG paths or strokes
|
|
65
|
+
- Read [reference/3d-effects.md](reference/3d-effects.md) - When creating 3D cards, perspective, or rotations
|
|
66
|
+
- Read [reference/text-effects.md](reference/text-effects.md) - When animating text reveals, scramble, or typewriter effects
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# filename: 3d-effects
|
|
2
|
+
|
|
3
|
+
**Guideline:** Set `perspective` on parent; use `transformStyle: "preserve-3d"` on children; drive 3D via `useMotionValue` + `useSpring`.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Perspective creates 3D depth; preserve-3d enables layering; motion values drive smooth tilt/flip without re-renders.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function Card3D({children}: {children: React.ReactNode}) {
|
|
10
|
+
const x = useMotionValue(0);
|
|
11
|
+
const y = useMotionValue(0);
|
|
12
|
+
const rotateX = useSpring(useTransform(y, [-0.5, 0.5], [15, -15]));
|
|
13
|
+
const rotateY = useSpring(useTransform(x, [-0.5, 0.5], [-15, 15]));
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<motion.div
|
|
17
|
+
style={{rotateX, rotateY, transformStyle: "preserve-3d"}}
|
|
18
|
+
onMouseMove={(e) => {
|
|
19
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
20
|
+
x.set((e.clientX - rect.left) / rect.width - 0.5);
|
|
21
|
+
}}
|
|
22
|
+
>
|
|
23
|
+
{children}
|
|
24
|
+
</motion.div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- Parent perspective: `style={{perspective: 1000}}`; higher = less depth distortion
|
|
31
|
+
- Flip cards: `animate={{rotateY: isFlipped ? 180 : 0}}`; use `backfaceVisibility: "hidden"`
|
|
32
|
+
- 3D carousel: Position items with `rotateY(angle)` and `translateZ()` in transforms
|
|
33
|
+
- Layered stacks: `translateZ(i * 20px)` for depth; `whileHover={{rotateX, rotateY}}` on container
|
|
34
|
+
- Shine effect: Use `useTransform()` to derive shine position from mouse coordinates; gradient follows
|
|
35
|
+
- Transform properties: `rotateX/Y/Z`, `x/y/z`, `scale/scaleX/Y/Z`, `transformOrigin`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# filename: entrance
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `initial`/`animate` with opacity and transforms (y, x, scale); apply Apple easing `[0.22, 1, 0.36, 1]` for smooth deceleration.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Opacity + transforms are GPU-optimized; transforms avoid layout thrashing; easing creates polished, professional feel.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function FadeUp({children}) {
|
|
10
|
+
return (
|
|
11
|
+
<motion.div
|
|
12
|
+
initial={{opacity: 0, y: 20}}
|
|
13
|
+
animate={{opacity: 1, y: 0}}
|
|
14
|
+
transition={{duration: 0.6, ease: [0.22, 1, 0.36, 1]}}
|
|
15
|
+
>
|
|
16
|
+
{children}
|
|
17
|
+
</motion.div>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Staggered hero
|
|
22
|
+
<motion.section initial="hidden" animate="visible"
|
|
23
|
+
variants={{visible: {transition: {staggerChildren: 0.15}}}}>
|
|
24
|
+
<motion.h1 variants={{hidden: {opacity: 0, y: 30}, visible: {opacity: 1, y: 0}}} />
|
|
25
|
+
</motion.section>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Techniques:**
|
|
29
|
+
- Fade up: `initial={{opacity: 0, y: 20}}` → `animate={{opacity: 1, y: 0}}`
|
|
30
|
+
- Fade in scale: `initial={{opacity: 0, scale: 0.95}}` for zoom-in effect
|
|
31
|
+
- Slide directions: `x: -50` (left), `x: 50` (right), `y: 50` (bottom)
|
|
32
|
+
- Spring entrance: `type: "spring", stiffness: 300, damping: 20` for bouncy
|
|
33
|
+
- Duration hierarchy: Headlines 0.8s, subheadings 0.6s, body 0.5s, small 0.3-0.4s
|
|
34
|
+
- Stagger children: Parent variant with `staggerChildren: 0.1-0.15` for cascading
|
|
35
|
+
- Apple easing: `ease: [0.22, 1, 0.36, 1]` for professional smooth deceleration
|
|
36
|
+
- Always combine opacity with transform for optimal performance; never use margin for animation
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# filename: exit
|
|
2
|
+
|
|
3
|
+
**Guideline:** Wrap conditionally rendered elements in `<AnimatePresence>` to enable exit animations; React removes elements instantly without it.
|
|
4
|
+
|
|
5
|
+
**Rationale:** AnimatePresence delays DOM removal until exit animation completes; enables smooth transitions and proper cleanup.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function Modal({isOpen, onClose}) {
|
|
10
|
+
return (
|
|
11
|
+
<AnimatePresence>
|
|
12
|
+
{isOpen && (
|
|
13
|
+
<motion.div
|
|
14
|
+
initial={{opacity: 0, scale: 0.95}}
|
|
15
|
+
animate={{opacity: 1, scale: 1}}
|
|
16
|
+
exit={{opacity: 0, scale: 0.95}}
|
|
17
|
+
transition={{type: "spring", stiffness: 300}}
|
|
18
|
+
>
|
|
19
|
+
Modal content
|
|
20
|
+
</motion.div>
|
|
21
|
+
)}
|
|
22
|
+
</AnimatePresence>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Techniques:**
|
|
28
|
+
- Always wrap conditionals: `<AnimatePresence>{condition && <motion.div exit={{...}} />}</AnimatePresence>`
|
|
29
|
+
- Unique keys: Required for list animations; prevents animation identity loss on reorder
|
|
30
|
+
- Exit modes: `"sync"` (enter/exit simultaneous), `"wait"` (exit first, then enter), `"popLayout"` (exit removed from flow)
|
|
31
|
+
- Exit callbacks: `onExitComplete={() => {...}}` fires when all exit animations finish
|
|
32
|
+
- Page transitions: Use `key={location.pathname}` with router to trigger exit/enter on route change
|
|
33
|
+
- List animations: `height: 0` on exit shrinks before removal; `opacity: 0` fades
|
|
34
|
+
- Staggered exit: Use parent variant with `staggerDirection: -1` to reverse animation order
|
|
35
|
+
- Modal backdrop: Animate both backdrop (fade) and content (scale) simultaneously for depth
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# gestures: Gesture Interactions
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use whileHover/whileTap/whileFocus with spring physics; never use duration for gestures (springs feel responsive).
|
|
4
|
+
|
|
5
|
+
**Rationale:** Spring transitions feel instantaneous and natural; duration-based easing delays feedback.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
<motion.button
|
|
10
|
+
whileHover={{scale: 1.05}}
|
|
11
|
+
whileTap={{scale: 0.95}}
|
|
12
|
+
whileFocus={{boxShadow: "0 0 0 3px rgba(66, 153, 225, 0.6)"}}
|
|
13
|
+
transition={{type: "spring", stiffness: 400, damping: 25}}
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Techniques:**
|
|
18
|
+
- whileHover/whileTap/whileFocus: Gesture states; always use spring transitions
|
|
19
|
+
- Spring presets: Snappy (buttons) 400/25, smooth (cards) 300/20, bouncy 200/10
|
|
20
|
+
- Hover effects: y: -8, boxShadow, scale 1.02-1.05
|
|
21
|
+
- Magnetic button: useMotionValue + useSpring for cursor tracking
|
|
22
|
+
- Dock scaling: Distance-based proximity effect via Math.abs(index - hovered)
|
|
23
|
+
- Accessibility: Include whileFocus for keyboard users; test with Tab key
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# filename: layout
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `layout` prop for automatic FLIP animations on size/position changes; use `layoutId` for shared element transitions between DOM nodes.
|
|
4
|
+
|
|
5
|
+
**Rationale:** `layout` auto-animates position/size without manually specifying targets; `layoutId` enables seamless transitions across screens (gallery → modal).
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function ExpandingCard({expanded}) {
|
|
10
|
+
return (
|
|
11
|
+
<motion.div
|
|
12
|
+
layout
|
|
13
|
+
style={{width: expanded ? 400 : 200}}
|
|
14
|
+
transition={{type: "spring", stiffness: 300}}
|
|
15
|
+
/>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Shared element transition
|
|
20
|
+
<motion.div layoutId={`card-${id}`} onClick={() => setSelected(item)}>
|
|
21
|
+
<motion.img layoutId={`image-${id}`} src={item.image} />
|
|
22
|
+
</motion.div>
|
|
23
|
+
|
|
24
|
+
{selected && (
|
|
25
|
+
<motion.div layoutId={`card-${selected.id}`} style={{position: "fixed"}}>
|
|
26
|
+
<motion.img layoutId={`image-${selected.id}`} src={selected.image} />
|
|
27
|
+
</motion.div>
|
|
28
|
+
)}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Techniques:**
|
|
32
|
+
- `layout`: Animate position and size changes automatically (FLIP algorithm)
|
|
33
|
+
- `layout="position"`: Only position (for text); `layout="size"`: Only size
|
|
34
|
+
- `layoutId`: Same ID on elements across different DOM states for smooth morphing
|
|
35
|
+
- `<Reorder.Group values={items} onReorder={setItems}>`: Drag-to-reorder with auto-layout
|
|
36
|
+
- `<Reorder.Item value={item}>`: Draggable list item
|
|
37
|
+
- Accordion: Combine `layout` with `AnimatePresence` for smooth expand/collapse
|
|
38
|
+
- Tabs indicator: `layoutId="tab-indicator"` + conditional render for smooth underline transition
|
|
39
|
+
- Always wrap conditional elements in `<AnimatePresence>` for exit animations
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# filename: motion-values
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `useMotionValue` for high-frequency updates (mouse, scroll) without re-renders; derive with `useTransform`; smooth with `useSpring`.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Motion values bypass React rendering; enables 60fps tracking; perfect for animations that don't need state.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function MouseTracker() {
|
|
10
|
+
const x = useMotionValue(0);
|
|
11
|
+
const springX = useSpring(x, {stiffness: 150, damping: 15});
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div onMouseMove={(e) => x.set(e.clientX)}>
|
|
15
|
+
<motion.div style={{x: springX}} />
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Derive multiple values from one source
|
|
21
|
+
const background = useTransform(x, [-100, 0, 100], ["red", "white", "green"]);
|
|
22
|
+
const scale = useTransform(x, [-100, 100], [0.5, 1.5]);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Techniques:**
|
|
26
|
+
- `useMotionValue(initial)`: Create raw value; `.set()` updates without renders
|
|
27
|
+
- `useTransform(value, [input], [output])`: Map range; supports colors, strings, numbers
|
|
28
|
+
- `useSpring(value, config)`: Add spring physics (stiffness, damping, mass)
|
|
29
|
+
- `useMotionTemplate`: Dynamic CSS strings with backticks: `` `radial-gradient(... ${x}px ...)` ``
|
|
30
|
+
- `useScroll()`: Returns `scrollX`/`scrollY`/`scrollXProgress`/`scrollYProgress` (0-1)
|
|
31
|
+
- Subscription: `value.on("change", latest => {...})`; unsubscribe in cleanup
|
|
32
|
+
- `useAnimate()`: Imperative control - `const [scope, animate] = useAnimate()`, then `await animate(scope.current, {...})`
|
|
33
|
+
- Performance: Never use state for real-time values; motion values skip renders for 60fps tracking
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# performance: Performance and Accessibility
|
|
2
|
+
|
|
3
|
+
**Guideline:** Animate only GPU-accelerated transforms (x/y/scale/rotate) and opacity; use scaleX/Y or layout for size changes; support prefers-reduced-motion.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Transform/opacity don't trigger layout recalculation; width/height cause jank. Respecting prefers-reduced-motion is legal requirement (WCAG 2.1).
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
import {motion, useReducedMotion} from "motion/react";
|
|
10
|
+
|
|
11
|
+
function AccessibleDiv({children}) {
|
|
12
|
+
const shouldReduceMotion = useReducedMotion();
|
|
13
|
+
return (
|
|
14
|
+
<motion.div
|
|
15
|
+
initial={shouldReduceMotion ? false : {opacity: 0, y: 20}}
|
|
16
|
+
animate={{opacity: 1, y: 0}}
|
|
17
|
+
transition={shouldReduceMotion ? {duration: 0} : {duration: 0.6}}
|
|
18
|
+
>
|
|
19
|
+
{children}
|
|
20
|
+
</motion.div>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Techniques:**
|
|
26
|
+
- GPU-accelerated: x, y, z, scale, rotate, opacity, skew (no layout recalc)
|
|
27
|
+
- Never animate: width, height, margin, padding, left/top/right/bottom (triggers jank)
|
|
28
|
+
- useReducedMotion(): Check for prefers-reduced-motion; skip animations if true
|
|
29
|
+
- Layout prop: Use `layout` for size/position changes instead of animating dimensions
|
|
30
|
+
- LazyMotion: Wrap app with LazyMotion + domAnimation to reduce bundle (use `m` instead of `motion`)
|
|
31
|
+
- willChange: Add for high-frequency animations
|
|
32
|
+
- Accessible wrapper: Create MotionSafe component that skips animations for reduced-motion users
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# filename: scroll
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `whileInView` for scroll-triggered reveals; use `useScroll()` + `useTransform()` for precise parallax and scroll-linked effects.
|
|
4
|
+
|
|
5
|
+
**Rationale:** `whileInView` leverages Intersection Observer; `useScroll()` enables smooth parallax without scroll listeners; `useTransform` maps scroll range to outputs.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function ScrollReveal({children}) {
|
|
10
|
+
return (
|
|
11
|
+
<motion.div
|
|
12
|
+
initial={{opacity: 0, y: 50}}
|
|
13
|
+
whileInView={{opacity: 1, y: 0}}
|
|
14
|
+
viewport={{once: true, amount: 0.3}}
|
|
15
|
+
transition={{duration: 0.6}}
|
|
16
|
+
>
|
|
17
|
+
{children}
|
|
18
|
+
</motion.div>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Parallax
|
|
23
|
+
function Parallax() {
|
|
24
|
+
const ref = useRef(null);
|
|
25
|
+
const {scrollYProgress} = useScroll({target: ref, offset: ["start end", "end start"]});
|
|
26
|
+
const backgroundY = useTransform(scrollYProgress, [0, 1], [0, -150]);
|
|
27
|
+
return <motion.div ref={ref} style={{y: backgroundY}} />;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Techniques:**
|
|
32
|
+
- `whileInView`: Animates when element enters viewport; `viewport={{once: true, amount: 0.3}}` triggers at 30% visible
|
|
33
|
+
- `useScroll()`: Returns `scrollX/Y` and `scrollXProgress/scrollYProgress` (0-1 normalized)
|
|
34
|
+
- `useTransform(scrollProgress, [0, 1], [outputStart, outputEnd])`: Map scroll to colors, positions, scale
|
|
35
|
+
- `useInView(ref, {once: true})`: Imperative boolean hook for manual control
|
|
36
|
+
- Staggered scroll reveal: `variants` with `staggerChildren` inside `whileInView`
|
|
37
|
+
- Scroll progress bar: `scaleX: scrollYProgress` with `transformOrigin: "left"`
|
|
38
|
+
- Viewport options: `amount` (0-1), `margin` (CSS pixels), `once: true` (single animation)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# filename: spring-physics
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `type: "spring"` for interactive gestures; adjust `stiffness` (speed), `damping` (bounce), `mass` (weight) for feel.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Spring animations are interruptible and natural; duration animations are rigid but synchronized; match animation type to use case.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
// Snappy (buttons, quick interactions)
|
|
10
|
+
<motion.div
|
|
11
|
+
whileHover={{scale: 1.05}}
|
|
12
|
+
transition={{type: "spring", stiffness: 400, damping: 25}}
|
|
13
|
+
/>
|
|
14
|
+
|
|
15
|
+
// Bouncy (playful entrance)
|
|
16
|
+
<motion.div
|
|
17
|
+
initial={{scale: 0.9}}
|
|
18
|
+
animate={{scale: 1}}
|
|
19
|
+
transition={{type: "spring", stiffness: 200, damping: 8}}
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
// Smooth (cards, panels)
|
|
23
|
+
<motion.div
|
|
24
|
+
whileHover={{y: -8}}
|
|
25
|
+
transition={{type: "spring", stiffness: 300, damping: 20}}
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- `stiffness: 100-500`: Response speed; higher = faster snap to target
|
|
31
|
+
- `damping: 10-50`: Bounce control; higher = less bouncy/overshoot
|
|
32
|
+
- `mass: 0.5-3`: Perceived weight; higher = heavier, slower response
|
|
33
|
+
- Snappy preset: `stiffness: 400, damping: 25` for buttons, quick feedback
|
|
34
|
+
- Smooth preset: `stiffness: 300, damping: 20` for regular elements
|
|
35
|
+
- Bouncy preset: `stiffness: 200, damping: 8` for attention-grabbing/playful
|
|
36
|
+
- Heavy preset: `stiffness: 100, damping: 15, mass: 2` for modals, large elements
|
|
37
|
+
- Gentle preset: `stiffness: 150, damping: 15` for subtle, understated movements
|
|
38
|
+
- Use `useSpring()` hook for smoothing raw motion values (mouse tracking, scroll)
|
|
39
|
+
- Spring for: Gestures, hover, tap, drag interactions, interactive feedback, layout changes
|
|
40
|
+
- Duration for: Entrance sequences, scroll reveals, page transitions, synchronized multi-element animations
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# filename: stagger
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `staggerChildren` in parent variant transitions to orchestrate sequential child animations; never use manual delays.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Variants + stagger maintains maintainability; auto-sequencing prevents timing bugs; reversible with `staggerDirection: -1`.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
const container = {
|
|
10
|
+
hidden: {},
|
|
11
|
+
visible: {
|
|
12
|
+
transition: {staggerChildren: 0.1, delayChildren: 0.2}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const item = {
|
|
16
|
+
hidden: {opacity: 0, y: 20},
|
|
17
|
+
visible: {opacity: 1, y: 0, transition: {duration: 0.5}}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
<motion.ul variants={container} initial="hidden" animate="visible">
|
|
21
|
+
{items.map((i, idx) => (
|
|
22
|
+
<motion.li key={idx} variants={item}>{i}</motion.li>
|
|
23
|
+
))}
|
|
24
|
+
</motion.ul>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Techniques:**
|
|
28
|
+
- Parent variant: `staggerChildren` (per-child delay), `delayChildren` (initial delay before first)
|
|
29
|
+
- Child variant: individual `initial`/`visible`/`exit` states
|
|
30
|
+
- Grid stagger: 0.02-0.05 for dense layouts; 0.08-0.12 for lists; 0.15-0.2 for hero sections
|
|
31
|
+
- Reverse exit: `exit: {transition: {staggerDirection: -1}}` for backwards animation
|
|
32
|
+
- Scroll trigger: `whileInView="visible"` + `viewport={{once: true}}` for scroll-triggered stagger
|
|
33
|
+
- Always use unique `key` on list items for proper animation tracking
|
|
34
|
+
- Never use `delay: i * 0.1`; always use variants + staggerChildren for maintainability
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# filename: svg-path
|
|
2
|
+
|
|
3
|
+
**Guideline:** Animate SVG paths with `pathLength` from 0 to 1 for drawing effects; pair with `opacity` for simultaneous fade-in.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Motion's `pathLength` auto-calculates stroke-dash math; simpler than manual `strokeDasharray`/`strokeDashoffset`.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function DrawingIcon() {
|
|
10
|
+
return (
|
|
11
|
+
<svg width="100" height="100" viewBox="0 0 100 100">
|
|
12
|
+
<motion.path
|
|
13
|
+
d="M 10 50 Q 50 10 90 50 Q 50 90 10 50"
|
|
14
|
+
fill="none"
|
|
15
|
+
stroke="#667eea"
|
|
16
|
+
strokeWidth={2}
|
|
17
|
+
initial={{pathLength: 0, opacity: 0}}
|
|
18
|
+
animate={{pathLength: 1, opacity: 1}}
|
|
19
|
+
transition={{duration: 1.5}}
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Techniques:**
|
|
27
|
+
- Path animation: `initial={{pathLength: 0}}` → `animate={{pathLength: 1}}`; 0-1 range
|
|
28
|
+
- Staggered paths: Use `variants` + `custom` prop for per-path delays
|
|
29
|
+
- Progress circles: `animate={{pathLength: progress}}` (0 to dynamic value)
|
|
30
|
+
- Checkmarks: Combine `pathLength` animation with `opacity` transition on different durations
|
|
31
|
+
- Flowing lines: Use `strokeDasharray="10 5"` + `strokeDashoffset: [0, -30]` with `repeat: Infinity`
|
|
32
|
+
- Connection lines: Bezier curves `C` command for smooth connections; `rotateY` adjustment for vertical lines
|
|
33
|
+
- Stroke caps: `strokeLinecap="round"` + `strokeLinejoin="round"` for smoother endpoints
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# filename: text-effects
|
|
2
|
+
|
|
3
|
+
**Guideline:** Split text into words/characters in spans; use `overflow: hidden` with `y: ["100%", 0]` for elegant reveal animations.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Splitting enables per-element stagger; `overflow: hidden` masks overflow for clean Y-translate reveals; avoid animating entire text blocks.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```tsx
|
|
9
|
+
function TextReveal({text}) {
|
|
10
|
+
return (
|
|
11
|
+
<motion.div initial="hidden" animate="visible" variants={{
|
|
12
|
+
hidden: {},
|
|
13
|
+
visible: {transition: {staggerChildren: 0.1}}
|
|
14
|
+
}}>
|
|
15
|
+
{text.split(" ").map((word, i) => (
|
|
16
|
+
<span key={i} style={{display: "inline-block", overflow: "hidden"}}>
|
|
17
|
+
<motion.span variants={{
|
|
18
|
+
hidden: {y: "100%", opacity: 0},
|
|
19
|
+
visible: {y: 0, opacity: 1}
|
|
20
|
+
}} style={{display: "inline-block"}}>
|
|
21
|
+
{word}
|
|
22
|
+
</motion.span>
|
|
23
|
+
<span> </span>
|
|
24
|
+
</span>
|
|
25
|
+
))}
|
|
26
|
+
</motion.div>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Techniques:**
|
|
32
|
+
- Word reveal: Split by space, `y: ["100%", 0]`, stagger 0.05-0.15
|
|
33
|
+
- Character reveal: Split by `""`, stagger 0.02-0.05, add `y: 20` for bounce effect
|
|
34
|
+
- Typewriter: Use `useState` + `setInterval`, slice() text incrementally, add blinking cursor
|
|
35
|
+
- Wavy text: Per-character `y: [0, -10, 0]` with delay based on index
|
|
36
|
+
- Gradient animation: `backgroundPosition` with `backgroundSize: "300% 100%"`
|
|
37
|
+
- Word highlight: Overlay `scaleX: 0` → `scaleX: 1` highlight box behind word
|
|
38
|
+
- Overflow masking: Always wrap in `<span style={{overflow: "hidden"}}>` for clean reveals
|
|
39
|
+
- Keep stagger delays small: 0.02-0.1 for natural flow
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on planning sessions, research tasks, architecture decisions. Use when planning research and analysis tasks. Apply for code alignment, simplification, hardening, template extraction. Keywords: research, planning, task breakdown, code analysis, refactoring, template extraction, shared libraries, TODO scanning.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Planning Research Guidelines
|
|
8
|
+
|
|
9
|
+
## Core Principles
|
|
10
|
+
|
|
11
|
+
- **Research First** - Analyze before creating implementation plans, see [reference/general-research.md](reference/general-research.md)
|
|
12
|
+
- **Use Task Agents** - Leverage Explore subagent with model=haiku, see [reference/general-research.md](reference/general-research.md)
|
|
13
|
+
- **Validation Required** - All analysis validates with typecheck/lint/build
|
|
14
|
+
- **Reports, Not Code** - Research generates reports without modifications
|
|
15
|
+
|
|
16
|
+
## Research Workflow
|
|
17
|
+
|
|
18
|
+
- **Launch Exploration** - Use Task tool with subagent_type=Explore and model=haiku
|
|
19
|
+
- **Analyze and Report** - Process results, identify patterns, document findings
|
|
20
|
+
|
|
21
|
+
## Planning Workflow
|
|
22
|
+
|
|
23
|
+
- **Create Implementation Plan** - Document architecture, technology choices, create tasks, see [reference/plan-create.md](reference/plan-create.md)
|
|
24
|
+
- **Break Down Work** - Use TaskCreate for each step with subject/description/activeForm
|
|
25
|
+
- **Define Dependencies** - Use TaskUpdate to set blockedBy/blocks relationships
|
|
26
|
+
- **Track Progress** - Use TaskList, TaskGet, TaskUpdate to manage execution
|
|
27
|
+
|
|
28
|
+
## Skills to Consult
|
|
29
|
+
|
|
30
|
+
- **Include in all plans** - Add "Skills to consult:" section with comma-separated list, see [reference/plan-create.md](reference/plan-create.md)
|
|
31
|
+
|
|
32
|
+
## Progressive Disclosure
|
|
33
|
+
|
|
34
|
+
### Research Analysis
|
|
35
|
+
- Read [reference/general-research.md](reference/general-research.md) - Research codebase and web for requirements
|
|
36
|
+
- Read [reference/code-align.md](reference/code-align.md) - Compare two similar implementations
|
|
37
|
+
- Read [reference/code-barrels-remove.md](reference/code-barrels-remove.md) - Analyze barrel exports for removal
|
|
38
|
+
- Read [reference/code-comments-remove.md](reference/code-comments-remove.md) - Identify non-essential comments
|
|
39
|
+
- Read [reference/code-harden.md](reference/code-harden.md) - Improve type safety and error handling
|
|
40
|
+
- Read [reference/code-shared-extract.md](reference/code-shared-extract.md) - Find duplicated patterns to extract
|
|
41
|
+
- Read [reference/code-simplify.md](reference/code-simplify.md) - Reduce code complexity
|
|
42
|
+
- Read [reference/code-template-extract.md](reference/code-template-extract.md) - Create reusable templates
|
|
43
|
+
- Read [reference/code-template-scaffold.md](reference/code-template-scaffold.md) - Generate from templates
|
|
44
|
+
- Read [reference/todos.md](reference/todos.md) - Scan and group TODO comments
|
|
45
|
+
|
|
46
|
+
### Plan Creation
|
|
47
|
+
- Read [reference/plan-create.md](reference/plan-create.md) - Create plan with task breakdown and dependencies
|
|
48
|
+
- Read [reference/plan-tdd-create.md](reference/plan-tdd-create.md) - Create TDD plan with sequential RED-GREEN-COMMIT tasks
|
|
49
|
+
|
|
50
|
+
## Task Management
|
|
51
|
+
|
|
52
|
+
- **TaskCreate** - Create with subject, description, activeForm
|
|
53
|
+
- **TaskUpdate** - Set dependencies (addBlockedBy/addBlocks), update status
|
|
54
|
+
- **TaskList** - View all tasks with status and dependencies
|
|
55
|
+
- **TaskGet** - Retrieve full details before starting work
|
|
56
|
+
- **Dependencies** - Independent (no blockedBy), Sequential (set blockedBy), TDD (strict order)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# code-align: Analyze Code Alignment Between Similar Implementations
|
|
2
|
+
|
|
3
|
+
**Guideline:** Compare implementations to identify structural differences, inconsistencies, and alignment opportunities.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Similar code should follow consistent patterns. Identifies bugs from missing error handling, outdated APIs, or logic differences.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```
|
|
9
|
+
// Compare two API implementations
|
|
10
|
+
File A: imports v3.5, uses async/await, has try-catch
|
|
11
|
+
File B: imports v2.1, uses callbacks, missing error handling
|
|
12
|
+
|
|
13
|
+
Report: Version mismatch (v3.5 vs v2.1), pattern divergence (async vs callback)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- Load both files and detect code type (TypeScript, Python, Go, etc.)
|
|
18
|
+
- Compare imports, dependencies, and version constraints across implementations
|
|
19
|
+
- Analyze interfaces, types, and function signatures for structural differences
|
|
20
|
+
- Examine error handling patterns, validation logic, and edge cases
|
|
21
|
+
- Review code organization, constants, and configuration defaults
|
|
22
|
+
- Generate alignment report with percentage match and critical differences
|
|
23
|
+
- Document recommendations for standardizing diverged implementations
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# code-barrels-remove: Analyze Sub-Directory Barrel Exports for Removal
|
|
2
|
+
|
|
3
|
+
**Guideline:** Identify sub-directory barrel files for removal and convert imports to direct file paths.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Sub-barrels add indirection without clear benefits. Removing them simplifies navigation, makes imports explicit, and reduces circular dependency risks.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```typescript
|
|
9
|
+
// Before: Barrel indirection
|
|
10
|
+
import { User, Role } from './auth' // From src/auth/index.ts
|
|
11
|
+
|
|
12
|
+
// After: Direct imports
|
|
13
|
+
import { User } from './auth/user'
|
|
14
|
+
import { Role } from './auth/role'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Techniques:**
|
|
18
|
+
- Find all `index.ts`/`index.js` files in subdirectories (exclude root `src/index.ts`)
|
|
19
|
+
- Confirm each is a barrel by verifying it contains only re-exports
|
|
20
|
+
- Search for all imports from sub-barrel paths (pattern: `from "./subdir"`)
|
|
21
|
+
- Map each import to its actual source files to understand impact
|
|
22
|
+
- Update root barrel to convert relative paths to direct source context
|
|
23
|
+
- Track all usages across codebase and plan import migrations
|
|
24
|
+
- Generate report with line savings, import count, and deletion plan
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# code-comments-remove: Identify Non-Essential Comments for Removal
|
|
2
|
+
|
|
3
|
+
**Guideline:** Analyze and remove non-essential comments while preserving functional directives.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Self-documenting code preferred over comments. Remove explanatory, obvious, and commented-out code while preserving functional directives (eslint-disable, @ts-expect-error, TODO).
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```typescript
|
|
9
|
+
// REMOVE: Redundant comment
|
|
10
|
+
// Get the user ID
|
|
11
|
+
const userId = user.id
|
|
12
|
+
|
|
13
|
+
// KEEP: Functional directive
|
|
14
|
+
// eslint-disable-next-line no-unsafe-optional-chaining
|
|
15
|
+
const role = user?.profile?.role?.name
|
|
16
|
+
|
|
17
|
+
// REMOVE: Commented-out code
|
|
18
|
+
// const oldUserId = user.legacy_id
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Techniques:**
|
|
22
|
+
- Detect comment syntax by language (C-style: `//`, `/* */`; hash-style: `#`)
|
|
23
|
+
- Distinguish functional directives (eslint, prettier, type hints) from explanatory comments
|
|
24
|
+
- Identify and categorize comments: explanatory, obvious, or commented-out code blocks
|
|
25
|
+
- Preserve critical directives: TODO, FIXME, @ts-expect-error, eslint-disable, go:generate, etc.
|
|
26
|
+
- Flag explanatory comments that duplicate clear code logic
|
|
27
|
+
- Find commented-out code blocks for removal (often outdated)
|
|
28
|
+
- Generate removal report with counts by category and impact summary
|