lsd-pi 1.2.0 → 1.2.1
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/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-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/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/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/src/core/agent-session.ts +35 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +26 -0
- package/packages/pi-coding-agent/src/tests/path-display.test.ts +14 -0
- 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,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Shared Group for Rotational Variants
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: morphing, group, rotation
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Shared Group for Rotational Variants
|
|
8
|
-
|
|
9
|
-
Icons that are rotational variants MUST share the same group and base lines.
|
|
10
|
-
|
|
11
|
-
**Incorrect (different line definitions):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const arrowRight = { lines: [{ x1: 2, y1: 7, x2: 12, y2: 7 }, ...] };
|
|
15
|
-
const arrowDown = { lines: [{ x1: 7, y1: 2, x2: 7, y2: 12 }, ...] };
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (shared base lines):**
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
const arrowLines: [IconLine, IconLine, IconLine] = [
|
|
22
|
-
{ x1: 2, y1: 7, x2: 12, y2: 7 },
|
|
23
|
-
{ x1: 7.5, y1: 2.5, x2: 12, y2: 7 },
|
|
24
|
-
{ x1: 7.5, y1: 11.5, x2: 12, y2: 7 },
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
const icons = {
|
|
28
|
-
"arrow-right": { lines: arrowLines, rotation: 0, group: "arrow" },
|
|
29
|
-
"arrow-down": { lines: arrowLines, rotation: 90, group: "arrow" },
|
|
30
|
-
"arrow-left": { lines: arrowLines, rotation: 180, group: "arrow" },
|
|
31
|
-
"arrow-up": { lines: arrowLines, rotation: -90, group: "arrow" },
|
|
32
|
-
};
|
|
33
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Instant Jump for Non-Grouped Icons
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: morphing, jump, group
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Instant Jump for Non-Grouped Icons
|
|
8
|
-
|
|
9
|
-
When transitioning between icons NOT in the same group, rotation should jump instantly.
|
|
10
|
-
|
|
11
|
-
**Incorrect (always animates rotation):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
rotation.set(definition.rotation ?? 0);
|
|
16
|
-
}, [definition]);
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (jumps when not grouped):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
if (shouldRotate) {
|
|
24
|
-
rotation.set(definition.rotation ?? 0);
|
|
25
|
-
} else {
|
|
26
|
-
rotation.jump(definition.rotation ?? 0);
|
|
27
|
-
}
|
|
28
|
-
}, [definition, shouldRotate]);
|
|
29
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Reduced Motion Support for Icons
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: morphing, a11y, reduced-motion
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Reduced Motion Support for Icons
|
|
8
|
-
|
|
9
|
-
Respect prefers-reduced-motion by disabling animations.
|
|
10
|
-
|
|
11
|
-
**Incorrect (always animates):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function MorphingIcon({ icon }: Props) {
|
|
15
|
-
return <motion.line animate={...} transition={{ duration: 0.4 }} />;
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (respects preference):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
function MorphingIcon({ icon }: Props) {
|
|
23
|
-
const reducedMotion = useReducedMotion() ?? false;
|
|
24
|
-
const activeTransition = reducedMotion ? { duration: 0 } : transition;
|
|
25
|
-
|
|
26
|
-
return <motion.line animate={...} transition={activeTransition} />;
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Spring Physics for Rotation
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: morphing, spring, rotation
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Spring Physics for Rotation
|
|
8
|
-
|
|
9
|
-
Rotation between grouped icons should use spring physics for natural motion.
|
|
10
|
-
|
|
11
|
-
**Incorrect (duration-based rotation):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.g animate={{ rotate: rotation }} transition={{ duration: 0.3 }} />
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (spring rotation):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
const rotation = useSpring(definition.rotation ?? 0, activeTransition);
|
|
21
|
-
|
|
22
|
-
<motion.g style={{ rotate: rotation, transformOrigin: "center" }} />
|
|
23
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Round Stroke Line Caps
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: morphing, stroke, svg
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Round Stroke Line Caps
|
|
8
|
-
|
|
9
|
-
Lines should use strokeLinecap="round" for polished endpoints.
|
|
10
|
-
|
|
11
|
-
**Incorrect (butt caps):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.line strokeLinecap="butt" />
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (round caps):**
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
<motion.line strokeLinecap="round" />
|
|
21
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Icons Must Use Exactly Three Lines
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: morphing, svg, structure
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Icons Must Use Exactly Three Lines
|
|
8
|
-
|
|
9
|
-
Every icon MUST use exactly 3 lines. No more, no fewer.
|
|
10
|
-
|
|
11
|
-
**Incorrect (only 2 lines):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const checkIcon = {
|
|
15
|
-
lines: [
|
|
16
|
-
{ x1: 2, y1: 7.5, x2: 5.5, y2: 11 },
|
|
17
|
-
{ x1: 5.5, y1: 11, x2: 12, y2: 3 },
|
|
18
|
-
],
|
|
19
|
-
};
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Correct (3 lines with collapsed):**
|
|
23
|
-
|
|
24
|
-
```ts
|
|
25
|
-
const checkIcon = {
|
|
26
|
-
lines: [
|
|
27
|
-
{ x1: 2, y1: 7.5, x2: 5.5, y2: 11 },
|
|
28
|
-
{ x1: 5.5, y1: 11, x2: 12, y2: 3 },
|
|
29
|
-
collapsed,
|
|
30
|
-
],
|
|
31
|
-
};
|
|
32
|
-
```
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use Collapsed Constant for Unused Lines
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: morphing, collapsed, structure
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use Collapsed Constant for Unused Lines
|
|
8
|
-
|
|
9
|
-
Unused lines must use the collapsed constant, not omission or null.
|
|
10
|
-
|
|
11
|
-
**Incorrect (null for unused):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const minusIcon = {
|
|
15
|
-
lines: [
|
|
16
|
-
{ x1: 2, y1: 7, x2: 12, y2: 7 },
|
|
17
|
-
null,
|
|
18
|
-
null,
|
|
19
|
-
],
|
|
20
|
-
};
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**Correct (collapsed constant):**
|
|
24
|
-
|
|
25
|
-
```ts
|
|
26
|
-
const minusIcon = {
|
|
27
|
-
lines: [
|
|
28
|
-
{ x1: 2, y1: 7, x2: 12, y2: 7 },
|
|
29
|
-
collapsed,
|
|
30
|
-
collapsed,
|
|
31
|
-
],
|
|
32
|
-
};
|
|
33
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ::backdrop for Dialog Backgrounds
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: native, backdrop, dialog
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ::backdrop for Dialog Backgrounds
|
|
8
|
-
|
|
9
|
-
Use ::backdrop pseudo-element for dialog/popover backgrounds.
|
|
10
|
-
|
|
11
|
-
**Incorrect (extra overlay node):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<>
|
|
15
|
-
<div className={styles.overlay} onClick={close} />
|
|
16
|
-
<dialog className={styles.dialog}>{children}</dialog>
|
|
17
|
-
</>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (native ::backdrop):**
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
dialog::backdrop {
|
|
24
|
-
background: var(--black-a6);
|
|
25
|
-
backdrop-filter: blur(4px);
|
|
26
|
-
}
|
|
27
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ::placeholder for Input Styling
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: native, placeholder, input
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ::placeholder for Input Styling
|
|
8
|
-
|
|
9
|
-
Use ::placeholder for input placeholder styling, not wrapper elements.
|
|
10
|
-
|
|
11
|
-
**Incorrect (custom placeholder node):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<div className={styles.inputWrapper}>
|
|
15
|
-
{!value && <span className={styles.placeholder}>Enter text...</span>}
|
|
16
|
-
<input value={value} />
|
|
17
|
-
</div>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (native ::placeholder):**
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
input::placeholder {
|
|
24
|
-
color: var(--gray-9);
|
|
25
|
-
opacity: 1;
|
|
26
|
-
}
|
|
27
|
-
```
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ::selection for Text Styling
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: native, selection, text
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ::selection for Text Styling
|
|
8
|
-
|
|
9
|
-
Use ::selection for text selection styling.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```css
|
|
14
|
-
::selection {
|
|
15
|
-
background: var(--blue-a5);
|
|
16
|
-
color: var(--gray-12);
|
|
17
|
-
}
|
|
18
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Coordinated Parent-Child Exit Timing
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: nested, timing, exit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Coordinated Parent-Child Exit Timing
|
|
8
|
-
|
|
9
|
-
Parent and child exit durations should be coordinated.
|
|
10
|
-
|
|
11
|
-
**Incorrect (parent too fast):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div exit={{ opacity: 0 }} transition={{ duration: 0.1 }}>
|
|
15
|
-
<motion.div exit={{ scale: 0 }} transition={{ duration: 0.5 }} />
|
|
16
|
-
</motion.div>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (coordinated timing):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<motion.div exit={{ opacity: 0 }} transition={{ duration: 0.2 }}>
|
|
23
|
-
<motion.div exit={{ scale: 0 }} transition={{ duration: 0.15 }} />
|
|
24
|
-
</motion.div>
|
|
25
|
-
```
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Propagate Prop for Nested AnimatePresence
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: nested, propagate, exit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Propagate Prop for Nested AnimatePresence
|
|
8
|
-
|
|
9
|
-
Nested AnimatePresence must use propagate prop for coordinated exits.
|
|
10
|
-
|
|
11
|
-
**Incorrect (children vanish instantly):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<AnimatePresence>
|
|
15
|
-
{isOpen && (
|
|
16
|
-
<motion.div exit={{ opacity: 0 }}>
|
|
17
|
-
<AnimatePresence>
|
|
18
|
-
{items.map(item => (
|
|
19
|
-
<motion.div key={item.id} exit={{ scale: 0 }} />
|
|
20
|
-
))}
|
|
21
|
-
</AnimatePresence>
|
|
22
|
-
</motion.div>
|
|
23
|
-
)}
|
|
24
|
-
</AnimatePresence>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
**Correct (propagate on both):**
|
|
28
|
-
|
|
29
|
-
```tsx
|
|
30
|
-
<AnimatePresence propagate>
|
|
31
|
-
{isOpen && (
|
|
32
|
-
<motion.div exit={{ opacity: 0 }}>
|
|
33
|
-
<AnimatePresence propagate>
|
|
34
|
-
{items.map(item => (
|
|
35
|
-
<motion.div key={item.id} exit={{ scale: 0 }} />
|
|
36
|
-
))}
|
|
37
|
-
</AnimatePresence>
|
|
38
|
-
</motion.div>
|
|
39
|
-
)}
|
|
40
|
-
</AnimatePresence>
|
|
41
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Entrance Animation for Context Menus
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: none, context-menu, entrance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Entrance Animation for Context Menus
|
|
8
|
-
|
|
9
|
-
Context menus should not animate on entrance (exit only).
|
|
10
|
-
|
|
11
|
-
**Incorrect (entrance animation):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
initial={{ opacity: 0, scale: 0.95 }}
|
|
16
|
-
animate={{ opacity: 1, scale: 1 }}
|
|
17
|
-
exit={{ opacity: 0 }}
|
|
18
|
-
/>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (exit only):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<motion.div exit={{ opacity: 0, scale: 0.95 }} />
|
|
25
|
-
```
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Animation for High-Frequency Interactions
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: none, high-frequency, performance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Animation for High-Frequency Interactions
|
|
8
|
-
|
|
9
|
-
High-frequency interactions should have no animation.
|
|
10
|
-
|
|
11
|
-
**Incorrect (animated on every keystroke):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function SearchInput() {
|
|
15
|
-
return (
|
|
16
|
-
<motion.div animate={{ scale: [1, 1.02, 1] }}>
|
|
17
|
-
<input onChange={handleSearch} />
|
|
18
|
-
</motion.div>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**Correct (no animation):**
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
function SearchInput() {
|
|
27
|
-
return <input onChange={handleSearch} />;
|
|
28
|
-
}
|
|
29
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Animation for Keyboard Navigation
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: none, keyboard, a11y
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Animation for Keyboard Navigation
|
|
8
|
-
|
|
9
|
-
Keyboard navigation should be instant, no animation.
|
|
10
|
-
|
|
11
|
-
**Incorrect (animated focus):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function Menu() {
|
|
15
|
-
return items.map(item => (
|
|
16
|
-
<motion.li
|
|
17
|
-
whileFocus={{ scale: 1.05 }}
|
|
18
|
-
transition={{ duration: 0.2 }}
|
|
19
|
-
/>
|
|
20
|
-
));
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Correct (CSS focus-visible only):**
|
|
25
|
-
|
|
26
|
-
```tsx
|
|
27
|
-
function Menu() {
|
|
28
|
-
return items.map(item => (
|
|
29
|
-
<li className={styles.menuItem} />
|
|
30
|
-
));
|
|
31
|
-
}
|
|
32
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Click Duration 5-15ms
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: param, click, duration
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Click Duration 5-15ms
|
|
8
|
-
|
|
9
|
-
Click/tap sounds should be 5-15ms duration.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too long):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const buffer = ctx.createBuffer(1, ctx.sampleRate * 0.1, ctx.sampleRate);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (appropriate duration):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
const buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Click Filter 3000-6000Hz
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: param, filter, frequency
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Click Filter 3000-6000Hz
|
|
8
|
-
|
|
9
|
-
Bandpass filter for clicks should be 3000-6000Hz.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too low):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
filter.frequency.value = 500;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (crisp range):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
filter.frequency.value = 4000;
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Filter Q Value 2-5
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: param, q-value, filter
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Filter Q Value 2-5
|
|
8
|
-
|
|
9
|
-
Filter Q for clicks should be 2-5 for focused but not harsh sound.
|
|
10
|
-
|
|
11
|
-
**Incorrect (too resonant):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
filter.Q.value = 15;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (balanced Q):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
filter.Q.value = 3;
|
|
21
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Gain Under 1.0
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: param, gain, clipping
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Gain Under 1.0
|
|
8
|
-
|
|
9
|
-
Gain values should not exceed 1.0 to prevent clipping.
|
|
10
|
-
|
|
11
|
-
**Incorrect (clipping):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
gain.gain.setValueAtTime(1.5, t);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (safe gain):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
gain.gain.setValueAtTime(0.3, t);
|
|
21
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Active State Scale Transform
|
|
3
|
-
impact: HIGH
|
|
4
|
-
impactDescription: Missing active state makes interactive elements feel unresponsive and reduces tactile feedback.
|
|
5
|
-
tags: physics, interaction, active-state
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Active State Scale Transform
|
|
9
|
-
|
|
10
|
-
Interactive elements must have active/pressed state with scale transform.
|
|
11
|
-
|
|
12
|
-
**Incorrect (no active state):**
|
|
13
|
-
|
|
14
|
-
```css
|
|
15
|
-
.button:hover { background: var(--gray-3); }
|
|
16
|
-
/* Missing :active state */
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (active state present):**
|
|
20
|
-
|
|
21
|
-
```css
|
|
22
|
-
.button:active { transform: scale(0.98); }
|
|
23
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Stagger Under 50ms Per Item
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Excessive stagger delays list readiness and feels sluggish; keep per-item delay minimal.
|
|
5
|
-
tags: physics, stagger, list-animation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Stagger Under 50ms Per Item
|
|
9
|
-
|
|
10
|
-
Stagger delays must not exceed 50ms per item.
|
|
11
|
-
|
|
12
|
-
**Incorrect (excessive stagger):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
transition={{ staggerChildren: 0.15 }}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (reasonable stagger):**
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
transition={{ staggerChildren: 0.03 }}
|
|
22
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Springs for Overshoot and Settle
|
|
3
|
-
impact: HIGH
|
|
4
|
-
impactDescription: Easing cannot produce natural overshoot; springs are required for organic bounce-and-settle motion.
|
|
5
|
-
tags: physics, spring, overshoot
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Springs for Overshoot and Settle
|
|
9
|
-
|
|
10
|
-
Use springs (not easing) when overshoot-and-settle is needed.
|
|
11
|
-
|
|
12
|
-
**Incorrect (easing for bounce):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
<motion.div transition={{ duration: 0.3, ease: "easeOut" }} />
|
|
16
|
-
// When element should bounce/settle
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (spring physics):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<motion.div transition={{ type: "spring", stiffness: 500, damping: 30 }} />
|
|
23
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Subtle Squash and Stretch
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Excessive squash/stretch feels cartoonish and distracts from the interface; subtle deformation adds polish.
|
|
5
|
-
tags: physics, squash-stretch, deformation
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Subtle Squash and Stretch
|
|
9
|
-
|
|
10
|
-
Squash/stretch deformation must be subtle (0.95-1.05 range).
|
|
11
|
-
|
|
12
|
-
**Incorrect (excessive deformation):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
<motion.div whileTap={{ scale: 0.8 }} />
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (subtle deformation):**
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
<motion.div whileTap={{ scale: 0.98 }} />
|
|
22
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use hitSlop to Trigger Predictions Earlier
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: prefetch, hit-slop, target
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use hitSlop to Trigger Predictions Earlier
|
|
8
|
-
|
|
9
|
-
Expand the invisible prediction area around elements with hitSlop to start loading sooner.
|
|
10
|
-
|
|
11
|
-
**Incorrect (tight prediction area):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
const { elementRef } = useForesight({
|
|
15
|
-
callback: () => prefetch(),
|
|
16
|
-
hitSlop: 0,
|
|
17
|
-
});
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (expanded prediction area):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
const { elementRef } = useForesight({
|
|
24
|
-
callback: () => prefetch(),
|
|
25
|
-
hitSlop: 20,
|
|
26
|
-
});
|
|
27
|
-
```
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Prefetch on Keyboard Navigation
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: prefetch, keyboard, tab, a11y
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Prefetch on Keyboard Navigation
|
|
8
|
-
|
|
9
|
-
Monitor focus changes and prefetch when the user is a few tab stops away from a registered element.
|
|
10
|
-
|
|
11
|
-
**Correct (tab-aware prefetching):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
const { elementRef } = useForesight({
|
|
15
|
-
callback: () => router.prefetch("/settings"),
|
|
16
|
-
name: "settings-link",
|
|
17
|
-
// Tab prediction fires when focus approaches
|
|
18
|
-
});
|
|
19
|
-
```
|