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: Prefetch by Intent, Not Viewport
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: prefetch, viewport, intent, bundle-size
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Prefetch by Intent, Not Viewport
|
|
8
|
-
|
|
9
|
-
Don't prefetch everything visible in the viewport. Prefetch based on user intent to avoid wasted bandwidth.
|
|
10
|
-
|
|
11
|
-
**Incorrect (prefetch all visible links):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<Link href="/page" prefetch={true}>Page</Link>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (intent-based prefetching):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
<Link href="/page" prefetch={false}>Page</Link>
|
|
21
|
-
// Let trajectory/hover prediction handle it
|
|
22
|
-
```
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Fall Back Gracefully on Touch Devices
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: prefetch, touch, mobile, fallback
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Fall Back Gracefully on Touch Devices
|
|
8
|
-
|
|
9
|
-
Touch devices have no cursor. Fall back to viewport or touch-start strategies automatically.
|
|
10
|
-
|
|
11
|
-
**Incorrect (assumes cursor exists):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function PrefetchLink({ href, children }) {
|
|
15
|
-
return (
|
|
16
|
-
<Link
|
|
17
|
-
href={href}
|
|
18
|
-
onMouseMove={() => prefetch(href)}
|
|
19
|
-
>
|
|
20
|
-
{children}
|
|
21
|
-
</Link>
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**Correct (device-aware strategy):**
|
|
27
|
-
|
|
28
|
-
```tsx
|
|
29
|
-
const { elementRef } = useForesight({
|
|
30
|
-
callback: () => router.prefetch(href),
|
|
31
|
-
hitSlop: 20,
|
|
32
|
-
});
|
|
33
|
-
// Automatically falls back to touch-start on mobile
|
|
34
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Trajectory Prediction Over Hover Prefetching
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: prefetch, trajectory, hover, performance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Trajectory Prediction Over Hover Prefetching
|
|
8
|
-
|
|
9
|
-
Hover prefetching starts too late. Trajectory prediction fires while the cursor is still in motion, reclaiming 100-200ms.
|
|
10
|
-
|
|
11
|
-
**Incorrect (waits for hover):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<Link
|
|
15
|
-
href="/about"
|
|
16
|
-
onMouseEnter={() => router.prefetch("/about")}
|
|
17
|
-
>
|
|
18
|
-
About
|
|
19
|
-
</Link>
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Correct (trajectory-based):**
|
|
23
|
-
|
|
24
|
-
```tsx
|
|
25
|
-
const { elementRef } = useForesight({
|
|
26
|
-
callback: () => router.prefetch("/about"),
|
|
27
|
-
hitSlop: 20,
|
|
28
|
-
name: "about-link",
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
<Link ref={elementRef} href="/about">About</Link>
|
|
32
|
-
```
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use Predictive Prefetching Selectively
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: prefetch, selective, performance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use Predictive Prefetching Selectively
|
|
8
|
-
|
|
9
|
-
Predictive prefetching doesn't belong in every project. Use it where navigation latency is noticeable.
|
|
10
|
-
|
|
11
|
-
**Good use cases:** data-heavy dashboards, multi-page apps with slow API responses, e-commerce product pages.
|
|
12
|
-
|
|
13
|
-
**Bad use cases:** static sites with instant navigation, single-page apps with all data preloaded.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Disable Interactions on Exiting Elements
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: presence, interaction, exit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Disable Interactions on Exiting Elements
|
|
8
|
-
|
|
9
|
-
Disable interactions on exiting elements using isPresent.
|
|
10
|
-
|
|
11
|
-
**Incorrect (clickable during exit):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function Card() {
|
|
15
|
-
const isPresent = useIsPresent();
|
|
16
|
-
return <button onClick={handleClick}>Click</button>;
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (disabled during exit):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
function Card() {
|
|
24
|
-
const isPresent = useIsPresent();
|
|
25
|
-
return (
|
|
26
|
-
<button onClick={handleClick} disabled={!isPresent}>
|
|
27
|
-
Click
|
|
28
|
-
</button>
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
```
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: useIsPresent in Child Component
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: presence, hook, component-hierarchy
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## useIsPresent in Child Component
|
|
8
|
-
|
|
9
|
-
useIsPresent must be called from child of AnimatePresence, not parent.
|
|
10
|
-
|
|
11
|
-
**Incorrect (hook in parent):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function Parent() {
|
|
15
|
-
const isPresent = useIsPresent();
|
|
16
|
-
return (
|
|
17
|
-
<AnimatePresence>
|
|
18
|
-
{show && <Child />}
|
|
19
|
-
</AnimatePresence>
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Correct (hook in child):**
|
|
25
|
-
|
|
26
|
-
```tsx
|
|
27
|
-
function Child() {
|
|
28
|
-
const isPresent = useIsPresent();
|
|
29
|
-
return <motion.div data-exiting={!isPresent} />;
|
|
30
|
-
}
|
|
31
|
-
```
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Call safeToRemove After Async Work
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: presence, safe-to-remove, async
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Call safeToRemove After Async Work
|
|
8
|
-
|
|
9
|
-
When using usePresence, always call safeToRemove after async work.
|
|
10
|
-
|
|
11
|
-
**Incorrect (missing safeToRemove):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function AsyncComponent() {
|
|
15
|
-
const [isPresent, safeToRemove] = usePresence();
|
|
16
|
-
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (!isPresent) {
|
|
19
|
-
cleanup();
|
|
20
|
-
}
|
|
21
|
-
}, [isPresent]);
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
**Correct (safeToRemove called):**
|
|
26
|
-
|
|
27
|
-
```tsx
|
|
28
|
-
function AsyncComponent() {
|
|
29
|
-
const [isPresent, safeToRemove] = usePresence();
|
|
30
|
-
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (!isPresent) {
|
|
33
|
-
cleanup().then(safeToRemove);
|
|
34
|
-
}
|
|
35
|
-
}, [isPresent, safeToRemove]);
|
|
36
|
-
}
|
|
37
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Content Property Required for Pseudo-Elements
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: pseudo, content, before-after
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Content Property Required for Pseudo-Elements
|
|
8
|
-
|
|
9
|
-
::before and ::after require content property to render.
|
|
10
|
-
|
|
11
|
-
**Incorrect (missing content):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.button::before {
|
|
15
|
-
position: absolute;
|
|
16
|
-
background: var(--gray-3);
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (content set):**
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
.button::before {
|
|
24
|
-
content: "";
|
|
25
|
-
position: absolute;
|
|
26
|
-
background: var(--gray-3);
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ::first-line for Typographic Treatments
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: pseudo, first-line, typography
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ::first-line for Typographic Treatments
|
|
8
|
-
|
|
9
|
-
Use ::first-line for drop-cap-adjacent styling without JavaScript or hardcoded spans.
|
|
10
|
-
|
|
11
|
-
**Incorrect (manual span):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<p>
|
|
15
|
-
<span className={styles["first-line"]}>The opening line of this paragraph</span>
|
|
16
|
-
is styled differently from the rest.
|
|
17
|
-
</p>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (native ::first-line):**
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
.article p:first-of-type::first-line {
|
|
24
|
-
font-variant-caps: small-caps;
|
|
25
|
-
font-weight: var(--font-weight-medium);
|
|
26
|
-
}
|
|
27
|
-
```
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Hit Target Expansion with Pseudo-Elements
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: pseudo, hit-target, accessibility
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Hit Target Expansion with Pseudo-Elements
|
|
8
|
-
|
|
9
|
-
Use negative inset values to expand hit targets without extra markup.
|
|
10
|
-
|
|
11
|
-
**Incorrect (wrapper for hit target):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<div className={styles.wrapper}>
|
|
15
|
-
<a className={styles.link}>Link</a>
|
|
16
|
-
</div>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (pseudo-element expansion):**
|
|
20
|
-
|
|
21
|
-
```css
|
|
22
|
-
.link {
|
|
23
|
-
position: relative;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.link::before {
|
|
27
|
-
content: "";
|
|
28
|
-
position: absolute;
|
|
29
|
-
inset: -8px -12px;
|
|
30
|
-
}
|
|
31
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ::marker for Custom List Bullets
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: pseudo, marker, list, bullets
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ::marker for Custom List Bullets
|
|
8
|
-
|
|
9
|
-
Use ::marker to style list bullets without extra elements or background-image hacks.
|
|
10
|
-
|
|
11
|
-
**Incorrect (background image hack):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
li {
|
|
15
|
-
list-style: none;
|
|
16
|
-
background: url("bullet.svg") no-repeat 0 4px;
|
|
17
|
-
padding-left: 20px;
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (native ::marker):**
|
|
22
|
-
|
|
23
|
-
```css
|
|
24
|
-
li::marker {
|
|
25
|
-
color: var(--gray-8);
|
|
26
|
-
font-size: 0.8em;
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Pseudo-Elements Over DOM Nodes
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: pseudo, dom, decorative
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Pseudo-Elements Over DOM Nodes
|
|
8
|
-
|
|
9
|
-
Use pseudo-elements for decorative content instead of extra DOM nodes.
|
|
10
|
-
|
|
11
|
-
**Incorrect (extra DOM node):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<button className={styles.button}>
|
|
15
|
-
<span className={styles.background} />
|
|
16
|
-
Click me
|
|
17
|
-
</button>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (pseudo-element):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
<button className={styles.button}>
|
|
24
|
-
Click me
|
|
25
|
-
</button>
|
|
26
|
-
```
|
|
27
|
-
```css
|
|
28
|
-
.button::before {
|
|
29
|
-
content: "";
|
|
30
|
-
/* decorative background */
|
|
31
|
-
}
|
|
32
|
-
```
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Position Relative Parent for Pseudo-Elements
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: pseudo, position, relative
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Position Relative Parent for Pseudo-Elements
|
|
8
|
-
|
|
9
|
-
Parent must have position: relative for absolute pseudo-elements.
|
|
10
|
-
|
|
11
|
-
**Incorrect (no position on parent):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.button::before {
|
|
15
|
-
content: "";
|
|
16
|
-
position: absolute;
|
|
17
|
-
inset: 0;
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (parent positioned):**
|
|
22
|
-
|
|
23
|
-
```css
|
|
24
|
-
.button {
|
|
25
|
-
position: relative;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.button::before {
|
|
29
|
-
content: "";
|
|
30
|
-
position: absolute;
|
|
31
|
-
inset: 0;
|
|
32
|
-
}
|
|
33
|
-
```
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Z-Index Layering for Pseudo-Elements
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: pseudo, z-index, layering
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Z-Index Layering for Pseudo-Elements
|
|
8
|
-
|
|
9
|
-
Pseudo-elements need z-index to layer correctly with content.
|
|
10
|
-
|
|
11
|
-
**Incorrect (covers text):**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
.button::before {
|
|
15
|
-
content: "";
|
|
16
|
-
position: absolute;
|
|
17
|
-
inset: 0;
|
|
18
|
-
background: var(--gray-3);
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Correct (layered behind):**
|
|
23
|
-
|
|
24
|
-
```css
|
|
25
|
-
.button {
|
|
26
|
-
position: relative;
|
|
27
|
-
z-index: 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.button::before {
|
|
31
|
-
content: "";
|
|
32
|
-
position: absolute;
|
|
33
|
-
inset: 0;
|
|
34
|
-
background: var(--gray-3);
|
|
35
|
-
z-index: -1;
|
|
36
|
-
}
|
|
37
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Springs for Gesture-Driven Motion
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: spring, gesture, drag
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Springs for Gesture-Driven Motion
|
|
8
|
-
|
|
9
|
-
Gesture-driven motion (drag, flick, swipe) must use springs.
|
|
10
|
-
|
|
11
|
-
**Incorrect (easing for drag):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
drag="x"
|
|
16
|
-
transition={{ duration: 0.3, ease: "easeOut" }}
|
|
17
|
-
/>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (spring for drag):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
<motion.div
|
|
24
|
-
drag="x"
|
|
25
|
-
transition={{ type: "spring", stiffness: 500, damping: 30 }}
|
|
26
|
-
/>
|
|
27
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Springs for Interruptible Motion
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: spring, interruptible, animation
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Springs for Interruptible Motion
|
|
8
|
-
|
|
9
|
-
Motion that can be interrupted must use springs.
|
|
10
|
-
|
|
11
|
-
**Incorrect (easing for interruptible):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
animate={{ x: isOpen ? 200 : 0 }}
|
|
16
|
-
transition={{ duration: 0.3 }}
|
|
17
|
-
/>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (spring for interruptible):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
<motion.div
|
|
24
|
-
animate={{ x: isOpen ? 200 : 0 }}
|
|
25
|
-
transition={{ type: "spring", stiffness: 400, damping: 25 }}
|
|
26
|
-
/>
|
|
27
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Balanced Spring Parameters
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: spring, stiffness, damping
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Balanced Spring Parameters
|
|
8
|
-
|
|
9
|
-
Spring parameters must be balanced; avoid excessive oscillation.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too bouncy):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
transition={{
|
|
15
|
-
type: "spring",
|
|
16
|
-
stiffness: 1000,
|
|
17
|
-
damping: 5,
|
|
18
|
-
}}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (balanced):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
transition={{
|
|
25
|
-
type: "spring",
|
|
26
|
-
stiffness: 500,
|
|
27
|
-
damping: 30,
|
|
28
|
-
}}
|
|
29
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Springs Preserve Input Velocity
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: spring, velocity, drag
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Springs Preserve Input Velocity
|
|
8
|
-
|
|
9
|
-
When velocity matters, use springs to preserve input energy.
|
|
10
|
-
|
|
11
|
-
**Incorrect (velocity ignored):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
onDragEnd={(e, info) => {
|
|
15
|
-
animate(target, { x: 0 }, { duration: 0.3 });
|
|
16
|
-
}}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (velocity preserved):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
onDragEnd={(e, info) => {
|
|
23
|
-
animate(target, { x: 0 }, {
|
|
24
|
-
type: "spring",
|
|
25
|
-
velocity: info.velocity.x,
|
|
26
|
-
});
|
|
27
|
-
}}
|
|
28
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Dim Background for Focus
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Transparent overlays fail to direct focus; dimmed backgrounds isolate the modal and reduce distraction.
|
|
5
|
-
tags: staging, modal, overlay
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Dim Background for Focus
|
|
9
|
-
|
|
10
|
-
Modal/dialog backgrounds should dim to direct focus.
|
|
11
|
-
|
|
12
|
-
**Incorrect (transparent overlay):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.overlay { background: transparent; }
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (dimmed overlay):**
|
|
19
|
-
|
|
20
|
-
```css
|
|
21
|
-
.overlay { background: var(--black-a6); }
|
|
22
|
-
```
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Single Focal Point
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Competing animations split attention and reduce clarity; one focal point guides the user effectively.
|
|
5
|
-
tags: staging, focus, attention
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Single Focal Point
|
|
9
|
-
|
|
10
|
-
Only one element should animate prominently at a time.
|
|
11
|
-
|
|
12
|
-
**Incorrect (competing animations):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
<motion.div animate={{ scale: 1.1 }} />
|
|
16
|
-
<motion.div animate={{ scale: 1.1 }} />
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (single focal point):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<motion.div animate={{ scale: 1.1 }} />
|
|
23
|
-
<motion.div animate={{ scale: 1 }} />
|
|
24
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Z-Index Layering for Animated Elements
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Missing z-index causes tooltips and overlays to render behind other content, breaking the visual hierarchy.
|
|
5
|
-
tags: staging, z-index, layering
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Z-Index Layering for Animated Elements
|
|
9
|
-
|
|
10
|
-
Animated elements must respect z-index layering.
|
|
11
|
-
|
|
12
|
-
**Incorrect (no z-index):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.tooltip { /* No z-index, may render behind other elements */ }
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (explicit z-index):**
|
|
19
|
-
|
|
20
|
-
```css
|
|
21
|
-
.tooltip { z-index: 50; }
|
|
22
|
-
```
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Consistent Timing for Similar Elements
|
|
3
|
-
impact: CRITICAL
|
|
4
|
-
impactDescription: Inconsistent timing across similar elements creates a disjointed, unpolished feel and undermines design system coherence.
|
|
5
|
-
tags: timing, consistency, animation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Consistent Timing for Similar Elements
|
|
9
|
-
|
|
10
|
-
Similar elements must use identical timing values.
|
|
11
|
-
|
|
12
|
-
**Incorrect (inconsistent timing):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.button-primary { transition: 200ms; }
|
|
16
|
-
.button-secondary { transition: 150ms; }
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (consistent timing):**
|
|
20
|
-
|
|
21
|
-
```css
|
|
22
|
-
.button-primary { transition: 200ms; }
|
|
23
|
-
.button-secondary { transition: 200ms; }
|
|
24
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Entrance Animation on Context Menus
|
|
3
|
-
impact: HIGH
|
|
4
|
-
impactDescription: Entrance animations on context menus delay access to options and feel unnecessary for ephemeral UI.
|
|
5
|
-
tags: timing, context-menu, entrance
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## No Entrance Animation on Context Menus
|
|
9
|
-
|
|
10
|
-
Context menus should not animate on entrance (exit only).
|
|
11
|
-
|
|
12
|
-
**Incorrect (animates entrance):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} />
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (exit only):**
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
<motion.div exit={{ opacity: 0 }} />
|
|
22
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: User Animations Under 300ms
|
|
3
|
-
impact: CRITICAL
|
|
4
|
-
impactDescription: Exceeding 300ms for user-initiated actions degrades perceived responsiveness and makes the interface feel sluggish.
|
|
5
|
-
tags: timing, duration, animation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## User Animations Under 300ms
|
|
9
|
-
|
|
10
|
-
User-initiated animations must complete within 300ms.
|
|
11
|
-
|
|
12
|
-
**Incorrect (exceeds 300ms limit):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.button { transition: transform 400ms; }
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (within 300ms):**
|
|
19
|
-
|
|
20
|
-
```css
|
|
21
|
-
.button { transition: transform 200ms; }
|
|
22
|
-
```
|