lsd-pi 1.2.0 → 1.2.2
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/dist/cli.js +7 -1
- package/dist/onboarding.js +3 -3
- package/dist/resources/agents/scout.md +6 -0
- package/dist/resources/extensions/slash-commands/plan.js +7 -1
- package/dist/resources/extensions/subagent/index.js +10 -2
- package/dist/resources/extensions/usage/index.js +87 -36
- package/package.json +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +8 -2
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/src/agent.ts +8 -2
- package/packages/pi-ai/dist/models.generated.d.ts +222 -1
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +227 -6
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/models.test.js +28 -0
- package/packages/pi-ai/dist/models.test.js.map +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +10 -100
- package/packages/pi-ai/src/models.generated.ts +227 -6
- package/packages/pi-ai/src/models.test.ts +30 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +28 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/path-display.test.js +13 -0
- package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js +15 -0
- package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +35 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +26 -0
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/packages/pi-coding-agent/src/tests/path-display.test.ts +14 -0
- package/pkg/package.json +1 -1
- package/src/resources/agents/scout.md +6 -0
- package/src/resources/extensions/slash-commands/plan.ts +11 -1
- package/src/resources/extensions/subagent/index.ts +10 -2
- package/src/resources/extensions/usage/index.ts +92 -38
- package/dist/resources/agents/javascript-pro.md +0 -280
- package/dist/resources/agents/researcher.md +0 -29
- package/dist/resources/agents/teams-builder.md +0 -74
- package/dist/resources/agents/teams-reviewer.md +0 -113
- package/dist/resources/agents/typescript-pro.md +0 -255
- package/dist/resources/skills/accessibility/SKILL.md +0 -522
- package/dist/resources/skills/accessibility/references/WCAG.md +0 -162
- package/dist/resources/skills/core-web-vitals/SKILL.md +0 -441
- package/dist/resources/skills/core-web-vitals/references/LCP.md +0 -208
- package/dist/resources/skills/frontend-design/SKILL.md +0 -45
- package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
- package/dist/resources/skills/make-interfaces-feel-better/animations.md +0 -379
- package/dist/resources/skills/make-interfaces-feel-better/performance.md +0 -88
- package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
- package/dist/resources/skills/make-interfaces-feel-better/typography.md +0 -123
- package/dist/resources/skills/react-best-practices/README.md +0 -123
- package/dist/resources/skills/react-best-practices/SKILL.md +0 -136
- package/dist/resources/skills/react-best-practices/metadata.json +0 -15
- package/dist/resources/skills/react-best-practices/rules/_sections.md +0 -46
- package/dist/resources/skills/react-best-practices/rules/_template.md +0 -28
- package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
- package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
- package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
- package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
- package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
- package/dist/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
- package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
- package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
- package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
- package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
- package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
- package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
- package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
- package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
- package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
- package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
- package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
- package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
- package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
- package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
- package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
- package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
- package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
- package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
- package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
- package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
- package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
- package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/dist/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
- package/dist/resources/skills/userinterface-wiki/SKILL.md +0 -253
- package/dist/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
- package/dist/resources/skills/userinterface-wiki/rules/_template.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
- package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
- package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
- package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
- package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
- package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
- package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
- package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
- package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
- package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
- package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
- package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
- package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
- package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
- package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
- package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
- package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
- package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
- package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
- package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
- package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
- package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
- package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
- package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
- package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
- package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
- package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
- package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
- package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
- package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
- package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
- package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
- package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
- package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
- package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
- package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
- package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
- package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
- package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
- package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
- package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
- package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
- package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
- package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
- package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
- package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
- package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
- package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
- package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
- package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
- package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
- package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
- package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
- package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
- package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
- package/dist/resources/skills/web-design-guidelines/SKILL.md +0 -39
- package/dist/resources/skills/web-quality-audit/SKILL.md +0 -168
- package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
- package/src/resources/agents/javascript-pro.md +0 -280
- package/src/resources/agents/researcher.md +0 -29
- package/src/resources/agents/teams-builder.md +0 -74
- package/src/resources/agents/teams-reviewer.md +0 -113
- package/src/resources/agents/typescript-pro.md +0 -255
- package/src/resources/skills/accessibility/SKILL.md +0 -522
- package/src/resources/skills/accessibility/references/WCAG.md +0 -162
- package/src/resources/skills/core-web-vitals/SKILL.md +0 -441
- package/src/resources/skills/core-web-vitals/references/LCP.md +0 -208
- package/src/resources/skills/frontend-design/SKILL.md +0 -45
- package/src/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
- package/src/resources/skills/make-interfaces-feel-better/animations.md +0 -379
- package/src/resources/skills/make-interfaces-feel-better/performance.md +0 -88
- package/src/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
- package/src/resources/skills/make-interfaces-feel-better/typography.md +0 -123
- package/src/resources/skills/react-best-practices/README.md +0 -123
- package/src/resources/skills/react-best-practices/SKILL.md +0 -136
- package/src/resources/skills/react-best-practices/metadata.json +0 -15
- package/src/resources/skills/react-best-practices/rules/_sections.md +0 -46
- package/src/resources/skills/react-best-practices/rules/_template.md +0 -28
- package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
- package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
- package/src/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
- package/src/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
- package/src/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
- package/src/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
- package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
- package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/src/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
- package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
- package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
- package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
- package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
- package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
- package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
- package/src/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
- package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/src/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
- package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
- package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
- package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/src/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
- package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
- package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
- package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/src/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
- package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
- package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
- package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
- package/src/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
- package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
- package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/src/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
- package/src/resources/skills/userinterface-wiki/SKILL.md +0 -253
- package/src/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
- package/src/resources/skills/userinterface-wiki/rules/_template.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
- package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
- package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
- package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
- package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
- package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
- package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
- package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
- package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
- package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
- package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
- package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
- package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
- package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
- package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
- package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
- package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
- package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
- package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
- package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
- package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
- package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
- package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
- package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
- package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
- package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
- package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
- package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
- package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
- package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
- package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
- package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
- package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
- package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
- package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
- package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
- package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
- package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
- package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
- package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
- package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
- package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
- package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
- package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
- package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
- package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
- package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
- package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
- package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
- package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
- package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
- package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
- package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
- package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
- package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
- package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
- package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
- package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
- package/src/resources/skills/web-design-guidelines/SKILL.md +0 -39
- package/src/resources/skills/web-quality-audit/SKILL.md +0 -168
- package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Oscillators for Tonal Sounds
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: design, oscillator, tonal
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Oscillators for Tonal Sounds
|
|
8
|
-
|
|
9
|
-
Use oscillators with pitch movement for tonal sounds (pops, confirmations).
|
|
10
|
-
|
|
11
|
-
**Incorrect (static frequency):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
osc.frequency.value = 400;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (pitch sweep):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
osc.frequency.setValueAtTime(400, t);
|
|
21
|
-
osc.frequency.exponentialRampToValueAtTime(600, t + 0.04);
|
|
22
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Max 300ms for User Actions
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: duration, max, user-action
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Max 300ms for User Actions
|
|
8
|
-
|
|
9
|
-
User-initiated animations must not exceed 300ms.
|
|
10
|
-
|
|
11
|
-
**Incorrect (exceeds limit):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div transition={{ duration: 0.5 }} />
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (within limit):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
<motion.div transition={{ duration: 0.25 }} />
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Press and Hover 120-180ms
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: duration, press, hover
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Press and Hover 120-180ms
|
|
8
|
-
|
|
9
|
-
Press and hover interactions should use 120-180ms duration.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too slow):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.button:hover { transition: background-color 400ms; }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (appropriate duration):**
|
|
18
|
-
|
|
19
|
-
```css
|
|
20
|
-
.button:hover { transition: background-color 150ms; }
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Shorten Duration Before Adjusting Curve
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: duration, optimization
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Shorten Duration Before Adjusting Curve
|
|
8
|
-
|
|
9
|
-
If animation feels slow, shorten duration before adjusting curve.
|
|
10
|
-
|
|
11
|
-
**Incorrect (adjusting curve instead):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.element { transition: 400ms cubic-bezier(0, 0.9, 0.1, 1); }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (shorter duration):**
|
|
18
|
-
|
|
19
|
-
```css
|
|
20
|
-
.element { transition: 200ms ease-out; }
|
|
21
|
-
```
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Small State Changes 180-260ms
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: duration, state-change
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Small State Changes 180-260ms
|
|
8
|
-
|
|
9
|
-
Small state changes should use 180-260ms duration.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.toggle { transition: transform 200ms ease; }
|
|
15
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Ease-Out for Entrances
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: easing, entrance, ease-out
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Ease-Out for Entrances
|
|
8
|
-
|
|
9
|
-
Entrances must use ease-out (arrive fast, settle gently).
|
|
10
|
-
|
|
11
|
-
**Incorrect (ease-in for entrance):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.modal-enter { animation-timing-function: ease-in; }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (ease-out for entrance):**
|
|
18
|
-
|
|
19
|
-
```css
|
|
20
|
-
.modal-enter { animation-timing-function: ease-out; }
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Ease-In for Exits
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: easing, exit, ease-in
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Ease-In for Exits
|
|
8
|
-
|
|
9
|
-
Exits must use ease-in (build momentum before departure).
|
|
10
|
-
|
|
11
|
-
**Incorrect (ease-out for exit):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.modal-exit { animation-timing-function: ease-out; }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (ease-in for exit):**
|
|
18
|
-
|
|
19
|
-
```css
|
|
20
|
-
.modal-exit { animation-timing-function: ease-in; }
|
|
21
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Easing for System State Changes
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: easing, state-change, system
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Easing for System State Changes
|
|
8
|
-
|
|
9
|
-
System-initiated state changes should use easing curves.
|
|
10
|
-
|
|
11
|
-
**Incorrect (spring for announcement):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
animate={{ y: 0 }}
|
|
16
|
-
transition={{ type: "spring" }}
|
|
17
|
-
/>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (easing for announcement):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
<motion.div
|
|
24
|
-
animate={{ y: 0 }}
|
|
25
|
-
transition={{ duration: 0.2, ease: "easeOut" }}
|
|
26
|
-
/>
|
|
27
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Linear Easing Only for Progress
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: easing, linear, progress
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Linear Easing Only for Progress
|
|
8
|
-
|
|
9
|
-
Linear easing only for progress bars and time representation.
|
|
10
|
-
|
|
11
|
-
**Incorrect (linear for motion):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.card-slide { transition: transform 200ms linear; }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (linear for progress):**
|
|
18
|
-
|
|
19
|
-
```css
|
|
20
|
-
.progress-bar { transition: width 100ms linear; }
|
|
21
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Exponential Ramps for Natural Decay
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Linear ramps for decay produce abrupt, unnatural cutoffs; exponential ramps match perceptual expectations.
|
|
5
|
-
tags: easing, decay, audio, animation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Exponential Ramps for Natural Decay
|
|
9
|
-
|
|
10
|
-
Use exponential ramps, not linear, for natural decay.
|
|
11
|
-
|
|
12
|
-
**Incorrect (linear ramp):**
|
|
13
|
-
|
|
14
|
-
```ts
|
|
15
|
-
gain.gain.linearRampToValueAtTime(0, t + 0.05);
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (exponential ramp):**
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);
|
|
22
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Linear Easing for Motion
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Linear easing for motion feels mechanical; reserve it for progress indicators where uniform speed is expected.
|
|
5
|
-
tags: easing, linear, animation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## No Linear Easing for Motion
|
|
9
|
-
|
|
10
|
-
Linear easing should only be used for progress indicators, not motion.
|
|
11
|
-
|
|
12
|
-
**Incorrect (linear for motion):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.card { transition: transform 200ms linear; }
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (linear for progress only):**
|
|
19
|
-
|
|
20
|
-
```css
|
|
21
|
-
.progress-bar { transition: width 100ms linear; }
|
|
22
|
-
```
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Ease-In-Out for View Transitions
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: easing, transition, ease-in-out
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Ease-In-Out for View Transitions
|
|
8
|
-
|
|
9
|
-
View/mode transitions use ease-in-out for neutral attention.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.page-transition { animation-timing-function: ease-in-out; }
|
|
15
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Exponential Decay for Natural Sound
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: envelope, decay, exponential
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Exponential Decay for Natural Sound
|
|
8
|
-
|
|
9
|
-
Use exponential ramps for natural decay, not linear.
|
|
10
|
-
|
|
11
|
-
**Incorrect (linear ramp):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
gain.gain.linearRampToValueAtTime(0, t + 0.05);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (exponential ramp):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Zero Target for Exponential Ramps
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: envelope, exponential, zero
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Zero Target for Exponential Ramps
|
|
8
|
-
|
|
9
|
-
Exponential ramps cannot target 0; use 0.001 or similar small value.
|
|
10
|
-
|
|
11
|
-
**Incorrect (targets zero):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
gain.gain.exponentialRampToValueAtTime(0, t + 0.05);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (targets near-zero):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);
|
|
21
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Set Initial Value Before Ramp
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: envelope, initial, glitch
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Set Initial Value Before Ramp
|
|
8
|
-
|
|
9
|
-
Set initial value before ramping to avoid glitches.
|
|
10
|
-
|
|
11
|
-
**Incorrect (no initial value):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (initial value set):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
gain.gain.setValueAtTime(0.3, t);
|
|
21
|
-
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);
|
|
22
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Unique Keys in AnimatePresence Lists
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: exit, key, list
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Unique Keys in AnimatePresence Lists
|
|
8
|
-
|
|
9
|
-
Dynamic lists inside AnimatePresence must have unique keys.
|
|
10
|
-
|
|
11
|
-
**Incorrect (index as key):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence>
|
|
15
|
-
{items.map((item, index) => (
|
|
16
|
-
<motion.div key={index} exit={{ opacity: 0 }} />
|
|
17
|
-
))}
|
|
18
|
-
</AnimatePresence>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (stable unique key):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<AnimatePresence>
|
|
25
|
-
{items.map((item) => (
|
|
26
|
-
<motion.div key={item.id} exit={{ opacity: 0 }} />
|
|
27
|
-
))}
|
|
28
|
-
</AnimatePresence>
|
|
29
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Exit Mirrors Initial for Symmetry
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: exit, initial, symmetry
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Exit Mirrors Initial for Symmetry
|
|
8
|
-
|
|
9
|
-
Exit animation should mirror initial for symmetry.
|
|
10
|
-
|
|
11
|
-
**Incorrect (asymmetric exit):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
initial={{ opacity: 0, y: 20 }}
|
|
16
|
-
animate={{ opacity: 1, y: 0 }}
|
|
17
|
-
exit={{ scale: 0 }}
|
|
18
|
-
/>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (symmetric exit):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<motion.div
|
|
25
|
-
initial={{ opacity: 0, y: 20 }}
|
|
26
|
-
animate={{ opacity: 1, y: 0 }}
|
|
27
|
-
exit={{ opacity: 0, y: 20 }}
|
|
28
|
-
/>
|
|
29
|
-
```
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Exit Prop Required Inside AnimatePresence
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: exit, prop, animate-presence
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Exit Prop Required Inside AnimatePresence
|
|
8
|
-
|
|
9
|
-
Elements inside AnimatePresence should have exit prop defined.
|
|
10
|
-
|
|
11
|
-
**Incorrect (missing exit):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence>
|
|
15
|
-
{isOpen && (
|
|
16
|
-
<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} />
|
|
17
|
-
)}
|
|
18
|
-
</AnimatePresence>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (exit defined):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<AnimatePresence>
|
|
25
|
-
{isOpen && (
|
|
26
|
-
<motion.div
|
|
27
|
-
initial={{ opacity: 0 }}
|
|
28
|
-
animate={{ opacity: 1 }}
|
|
29
|
-
exit={{ opacity: 0 }}
|
|
30
|
-
/>
|
|
31
|
-
)}
|
|
32
|
-
</AnimatePresence>
|
|
33
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: AnimatePresence Wrapper Required
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: exit, animate-presence, wrapper
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## AnimatePresence Wrapper Required
|
|
8
|
-
|
|
9
|
-
Conditional motion elements must be wrapped in AnimatePresence.
|
|
10
|
-
|
|
11
|
-
**Incorrect (no wrapper):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
{isVisible && (
|
|
15
|
-
<motion.div exit={{ opacity: 0 }} />
|
|
16
|
-
)}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (wrapped):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<AnimatePresence>
|
|
23
|
-
{isVisible && (
|
|
24
|
-
<motion.div exit={{ opacity: 0 }} />
|
|
25
|
-
)}
|
|
26
|
-
</AnimatePresence>
|
|
27
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Subtle Default Volume
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: impl, volume, default
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Subtle Default Volume
|
|
8
|
-
|
|
9
|
-
Default volume should be subtle, not loud.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too loud):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
const DEFAULT_VOLUME = 1.0;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (subtle):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
const DEFAULT_VOLUME = 0.3;
|
|
21
|
-
```
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Preload Audio Files
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: impl, preload, performance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Preload Audio Files
|
|
8
|
-
|
|
9
|
-
Preload audio files to avoid playback delay.
|
|
10
|
-
|
|
11
|
-
**Incorrect (loads on demand):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function playSound(name: string) {
|
|
15
|
-
const audio = new Audio(`/sounds/${name}.mp3`);
|
|
16
|
-
audio.play();
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (preloaded):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
const sounds = {
|
|
24
|
-
success: new Audio("/sounds/success.mp3"),
|
|
25
|
-
error: new Audio("/sounds/error.mp3"),
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
Object.values(sounds).forEach(audio => audio.load());
|
|
29
|
-
|
|
30
|
-
function playSound(name: keyof typeof sounds) {
|
|
31
|
-
sounds[name].currentTime = 0;
|
|
32
|
-
sounds[name].play();
|
|
33
|
-
}
|
|
34
|
-
```
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Reset currentTime Before Replay
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: impl, replay, current-time
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Reset currentTime Before Replay
|
|
8
|
-
|
|
9
|
-
Reset audio currentTime before replay to allow rapid triggering.
|
|
10
|
-
|
|
11
|
-
**Incorrect (won't replay if playing):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function playSound() {
|
|
15
|
-
audio.play();
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (reset before play):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
function playSound() {
|
|
23
|
-
audio.currentTime = 0;
|
|
24
|
-
audio.play();
|
|
25
|
-
}
|
|
26
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: popLayout for List Reordering
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: mode, pop-layout, list
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## popLayout for List Reordering
|
|
8
|
-
|
|
9
|
-
Use popLayout mode for list reordering animations.
|
|
10
|
-
|
|
11
|
-
**Incorrect (default mode causes shifts):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence>
|
|
15
|
-
{items.map(item => <ListItem key={item.id} />)}
|
|
16
|
-
</AnimatePresence>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (popLayout prevents shifts):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<AnimatePresence mode="popLayout">
|
|
23
|
-
{items.map(item => <ListItem key={item.id} />)}
|
|
24
|
-
</AnimatePresence>
|
|
25
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Mode "sync" Causes Layout Conflicts
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: mode, sync, layout
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Mode "sync" Causes Layout Conflicts
|
|
8
|
-
|
|
9
|
-
Mode "sync" causes layout conflicts; position exiting elements absolutely.
|
|
10
|
-
|
|
11
|
-
**Incorrect (sync with layout competition):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence mode="sync">
|
|
15
|
-
{items.map(item => (
|
|
16
|
-
<motion.div exit={{ opacity: 0 }}>{item}</motion.div>
|
|
17
|
-
))}
|
|
18
|
-
</AnimatePresence>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (popLayout instead):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<AnimatePresence mode="popLayout">
|
|
25
|
-
{items.map(item => (
|
|
26
|
-
<motion.div exit={{ opacity: 0 }}>{item}</motion.div>
|
|
27
|
-
))}
|
|
28
|
-
</AnimatePresence>
|
|
29
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Mode "wait" Doubles Duration
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: mode, wait, duration
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Mode "wait" Doubles Duration
|
|
8
|
-
|
|
9
|
-
Mode "wait" nearly doubles animation duration; adjust timing accordingly.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too slow with wait):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence mode="wait">
|
|
15
|
-
<motion.div transition={{ duration: 0.3 }} />
|
|
16
|
-
</AnimatePresence>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (halved timing):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<AnimatePresence mode="wait">
|
|
23
|
-
<motion.div transition={{ duration: 0.15 }} />
|
|
24
|
-
</AnimatePresence>
|
|
25
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Aria Hidden on Icon SVGs
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: morphing, a11y, aria
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Aria Hidden on Icon SVGs
|
|
8
|
-
|
|
9
|
-
Icon SVGs should be aria-hidden since they're decorative.
|
|
10
|
-
|
|
11
|
-
**Incorrect (no aria attribute):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<svg width={size} height={size}>...</svg>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (aria-hidden):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
<svg width={size} height={size} aria-hidden="true">...</svg>
|
|
21
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Consistent ViewBox Size
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: morphing, viewbox, svg
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Consistent ViewBox Size
|
|
8
|
-
|
|
9
|
-
All icons must use the same viewBox (14x14 recommended).
|
|
10
|
-
|
|
11
|
-
**Incorrect (mixed scales):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const icon1 = { lines: [{ x1: 2, y1: 7, x2: 12, y2: 7 }, ...] }; // 14x14
|
|
15
|
-
const icon2 = { lines: [{ x1: 4, y1: 14, x2: 24, y2: 14 }, ...] }; // 28x28
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (consistent scale):**
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
const VIEWBOX_SIZE = 14;
|
|
22
|
-
const CENTER = 7;
|
|
23
|
-
```
|