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,66 +0,0 @@
|
|
|
1
|
-
# Sections
|
|
2
|
-
|
|
3
|
-
This file defines all sections, their ordering, impact levels, and descriptions.
|
|
4
|
-
The section ID (in parentheses) is the filename prefix used to group rules.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 1. Animation Principles (timing, physics, staging)
|
|
9
|
-
|
|
10
|
-
**Impact:** CRITICAL
|
|
11
|
-
**Description:** Disney's 12 principles adapted for web. Timing, physics, and staging rules ensure animations feel natural and purposeful. Violations here produce the most noticeable quality issues.
|
|
12
|
-
|
|
13
|
-
## 2. Timing Functions (spring, easing, duration, none)
|
|
14
|
-
|
|
15
|
-
**Impact:** HIGH
|
|
16
|
-
**Description:** Choosing the right timing function—spring, easing curve, or no animation—based on whether motion is user-driven, system-driven, or high-frequency.
|
|
17
|
-
|
|
18
|
-
## 3. Exit Animations (exit, presence, mode, nested)
|
|
19
|
-
|
|
20
|
-
**Impact:** HIGH
|
|
21
|
-
**Description:** AnimatePresence and exit animation patterns in Motion/Framer Motion. Correct usage prevents layout shifts, stale interactions, and orphaned elements.
|
|
22
|
-
|
|
23
|
-
## 4. CSS Pseudo Elements (pseudo, transition, native)
|
|
24
|
-
|
|
25
|
-
**Impact:** MEDIUM
|
|
26
|
-
**Description:** Leveraging ::before, ::after, View Transitions API, and native pseudo-elements (::backdrop, ::placeholder, ::selection) to reduce DOM nodes and improve transitions.
|
|
27
|
-
|
|
28
|
-
## 5. Audio Feedback (a11y, appropriate, impl, weight)
|
|
29
|
-
|
|
30
|
-
**Impact:** MEDIUM
|
|
31
|
-
**Description:** When and how to use sound in UI. Covers accessibility, appropriateness heuristics, implementation patterns, and matching sound weight to action importance.
|
|
32
|
-
|
|
33
|
-
## 6. Sound Synthesis (context, envelope, design, param)
|
|
34
|
-
|
|
35
|
-
**Impact:** MEDIUM
|
|
36
|
-
**Description:** Web Audio API best practices for procedural sound generation. Covers AudioContext management, envelope shaping, sound design patterns, and parameter ranges.
|
|
37
|
-
|
|
38
|
-
## 7. Morphing Icons (morphing)
|
|
39
|
-
|
|
40
|
-
**Impact:** LOW
|
|
41
|
-
**Description:** Building icon components that morph between any two icons through SVG line transformation. All icons share a 3-line structure enabling seamless transitions.
|
|
42
|
-
|
|
43
|
-
## 8. Container Animation (container)
|
|
44
|
-
|
|
45
|
-
**Impact:** MEDIUM
|
|
46
|
-
**Description:** Animating container width and height using a measure-and-animate pattern with ResizeObserver and Motion. The two-div pattern separates measurement from animation to avoid feedback loops.
|
|
47
|
-
|
|
48
|
-
## 9. Laws of UX (ux)
|
|
49
|
-
|
|
50
|
-
**Impact:** HIGH
|
|
51
|
-
**Description:** Psychological principles behind interfaces that feel right. Covers Fitts's Law (target sizing), Hick's Law (choice reduction), Miller's Law (chunking), Doherty Threshold (response time), and Postel's Law (input tolerance).
|
|
52
|
-
|
|
53
|
-
## 10. Predictive Prefetching (prefetch)
|
|
54
|
-
|
|
55
|
-
**Impact:** MEDIUM
|
|
56
|
-
**Description:** Loading content before the user clicks by analyzing cursor trajectory, reducing perceived latency by 100-200ms. Covers trajectory vs hover vs click strategies and device-aware fallbacks.
|
|
57
|
-
|
|
58
|
-
## 11. Typography (type)
|
|
59
|
-
|
|
60
|
-
**Impact:** MEDIUM
|
|
61
|
-
**Description:** CSS font and text properties most developers overlook. OpenType features, numeric variants, variable font axes, text rendering, wrapping, and decoration controls that make typography feel considered.
|
|
62
|
-
|
|
63
|
-
## 12. Visual Design (visual)
|
|
64
|
-
|
|
65
|
-
**Impact:** HIGH
|
|
66
|
-
**Description:** CSS design fundamentals that compound into visual polish. Concentric border radius, layered shadows, consistent spacing scales, and alpha borders. Small details that separate considered interfaces from default ones.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Rule Title Here
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Optional description of impact
|
|
5
|
-
tags: tag1, tag2
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Rule Title Here
|
|
9
|
-
|
|
10
|
-
Brief explanation of the rule and why it matters.
|
|
11
|
-
|
|
12
|
-
**Incorrect (description of what's wrong):**
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
// Bad code example here
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (description of what's right):**
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
// Good code example here
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Reference: [Link to documentation or resource](https://example.com)
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Respect prefers-reduced-motion for Sound
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: a11y, reduced-motion, sound
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Respect prefers-reduced-motion for Sound
|
|
8
|
-
|
|
9
|
-
Respect prefers-reduced-motion as proxy for sound sensitivity.
|
|
10
|
-
|
|
11
|
-
**Incorrect (ignores preference):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function playSound(name: string) {
|
|
15
|
-
audio.play();
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (checks preference):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
function playSound(name: string) {
|
|
23
|
-
const prefersReducedMotion = window.matchMedia(
|
|
24
|
-
"(prefers-reduced-motion: reduce)"
|
|
25
|
-
).matches;
|
|
26
|
-
|
|
27
|
-
if (prefersReducedMotion) return;
|
|
28
|
-
audio.play();
|
|
29
|
-
}
|
|
30
|
-
```
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Toggle Setting to Disable Sounds
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: a11y, settings, toggle
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Toggle Setting to Disable Sounds
|
|
8
|
-
|
|
9
|
-
Provide explicit toggle to disable sounds in settings.
|
|
10
|
-
|
|
11
|
-
**Incorrect (no way to disable):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function App() {
|
|
15
|
-
return <SoundProvider>{children}</SoundProvider>;
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (toggle available):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
function App() {
|
|
23
|
-
const { soundEnabled } = usePreferences();
|
|
24
|
-
return (
|
|
25
|
-
<SoundProvider enabled={soundEnabled}>
|
|
26
|
-
{children}
|
|
27
|
-
</SoundProvider>
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
```
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Visual Equivalent for Every Sound
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: a11y, visual, sound
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Visual Equivalent for Every Sound
|
|
8
|
-
|
|
9
|
-
Every audio cue must have a visual equivalent; sound never replaces visual feedback.
|
|
10
|
-
|
|
11
|
-
**Incorrect (sound without visual):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function SubmitButton({ onClick }) {
|
|
15
|
-
const handleClick = () => {
|
|
16
|
-
playSound("success");
|
|
17
|
-
onClick();
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Correct (sound with visual):**
|
|
23
|
-
|
|
24
|
-
```tsx
|
|
25
|
-
function SubmitButton({ onClick }) {
|
|
26
|
-
const [status, setStatus] = useState("idle");
|
|
27
|
-
|
|
28
|
-
const handleClick = () => {
|
|
29
|
-
playSound("success");
|
|
30
|
-
setStatus("success");
|
|
31
|
-
onClick();
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
return <button data-status={status}>Submit</button>;
|
|
35
|
-
}
|
|
36
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Independent Volume Control
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: a11y, volume, settings
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Independent Volume Control
|
|
8
|
-
|
|
9
|
-
Allow volume adjustment independent of system volume.
|
|
10
|
-
|
|
11
|
-
**Incorrect (always full volume):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function playSound() {
|
|
15
|
-
audio.volume = 1;
|
|
16
|
-
audio.play();
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (user-controlled volume):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
function playSound() {
|
|
24
|
-
const { volume } = usePreferences();
|
|
25
|
-
audio.volume = volume;
|
|
26
|
-
audio.play();
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Sound for Confirmations
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: appropriate, confirmation, payment
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Sound for Confirmations
|
|
8
|
-
|
|
9
|
-
Sound is appropriate for confirmations: payments, uploads, form submissions.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
async function handlePayment() {
|
|
15
|
-
await processPayment();
|
|
16
|
-
playSound("success");
|
|
17
|
-
showConfirmation();
|
|
18
|
-
}
|
|
19
|
-
```
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Sound for Errors and Warnings
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: appropriate, error, warning
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Sound for Errors and Warnings
|
|
8
|
-
|
|
9
|
-
Sound is appropriate for errors and warnings that can't be overlooked.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function handleError(error: Error) {
|
|
15
|
-
playSound("error");
|
|
16
|
-
showErrorToast(error.message);
|
|
17
|
-
}
|
|
18
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Decorative Sound
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: appropriate, decorative, hover
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Decorative Sound
|
|
8
|
-
|
|
9
|
-
Do not add sound to decorative moments with no informational value.
|
|
10
|
-
|
|
11
|
-
**Incorrect (hover sound):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function Card({ onHover }) {
|
|
15
|
-
return (
|
|
16
|
-
<div onMouseEnter={() => playSound("hover")}>
|
|
17
|
-
{children}
|
|
18
|
-
</div>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: No Sound on High-Frequency Interactions
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: appropriate, frequency, typing
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## No Sound on High-Frequency Interactions
|
|
8
|
-
|
|
9
|
-
Do not add sound to high-frequency interactions (typing, keyboard navigation).
|
|
10
|
-
|
|
11
|
-
**Incorrect (sound on every keystroke):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function Input({ onChange }) {
|
|
15
|
-
const handleChange = (e) => {
|
|
16
|
-
playSound("keystroke");
|
|
17
|
-
onChange(e);
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Correct (no sound on typing):**
|
|
23
|
-
|
|
24
|
-
```tsx
|
|
25
|
-
function Input({ onChange }) {
|
|
26
|
-
return <input onChange={onChange} />;
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Informative Not Punishing Sound
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: appropriate, error, tone
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Informative Not Punishing Sound
|
|
8
|
-
|
|
9
|
-
Sound should inform, not punish; avoid harsh sounds for user mistakes.
|
|
10
|
-
|
|
11
|
-
**Incorrect (harsh buzzer):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function ValidationError() {
|
|
15
|
-
playSound("loud-buzzer");
|
|
16
|
-
return <span>Invalid input</span>;
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Correct (gentle alert):**
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
function ValidationError() {
|
|
24
|
-
playSound("gentle-alert");
|
|
25
|
-
return <span>Invalid input</span>;
|
|
26
|
-
}
|
|
27
|
-
```
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use Callback Ref for Measurement
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: container, ref, callback
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use Callback Ref for Measurement
|
|
8
|
-
|
|
9
|
-
Use a callback ref (not useRef) for measurement hooks so the observer attaches when the DOM node is ready.
|
|
10
|
-
|
|
11
|
-
**Incorrect (useRef may be null on first effect):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
const ref = useRef(null);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
if (!ref.current) return;
|
|
17
|
-
observer.observe(ref.current);
|
|
18
|
-
}, []);
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Correct (callback ref guarantees node):**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
const [element, setElement] = useState(null);
|
|
25
|
-
const ref = useCallback((node) => setElement(node), []);
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
if (!element) return;
|
|
28
|
-
observer.observe(element);
|
|
29
|
-
return () => observer.disconnect();
|
|
30
|
-
}, [element]);
|
|
31
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Guard Against Zero on Initial Render
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: container, measure, initial-render
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Guard Against Zero on Initial Render
|
|
8
|
-
|
|
9
|
-
On initial render, measured bounds are 0. Guard against this to prevent animating from 0 to actual size.
|
|
10
|
-
|
|
11
|
-
**Incorrect (animates from 0 on mount):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div animate={{ width: bounds.width }}>
|
|
15
|
-
<div ref={ref}>{children}</div>
|
|
16
|
-
</motion.div>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (falls back to auto on first frame):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<motion.div animate={{ width: bounds.width > 0 ? bounds.width : "auto" }}>
|
|
23
|
-
<div ref={ref}>{children}</div>
|
|
24
|
-
</motion.div>
|
|
25
|
-
```
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use Animated Bounds Sparingly
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: container, performance, restraint
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use Animated Bounds Sparingly
|
|
8
|
-
|
|
9
|
-
Animated bounds is a subtle effect. Use it for buttons, accordions, and interactive elements — not everywhere.
|
|
10
|
-
|
|
11
|
-
**Good use cases:** loading state buttons, expandable sections, accordions, FAQs, content reveals.
|
|
12
|
-
|
|
13
|
-
**Bad use cases:** every container on the page, static layouts, elements that don't change size.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Overflow Hidden on Animated Container
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: container, overflow, clip
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Overflow Hidden on Animated Container
|
|
8
|
-
|
|
9
|
-
Set overflow: hidden on the animated outer container to clip content during size transitions.
|
|
10
|
-
|
|
11
|
-
**Incorrect (content overflows during animation):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div animate={{ height: bounds.height }}>
|
|
15
|
-
<div ref={ref}>{children}</div>
|
|
16
|
-
</motion.div>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (clipped during transition):**
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<motion.div animate={{ height: bounds.height }} style={{ overflow: "hidden" }}>
|
|
23
|
-
<div ref={ref}>{children}</div>
|
|
24
|
-
</motion.div>
|
|
25
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Add Delay for Natural Container Transitions
|
|
3
|
-
impact: LOW
|
|
4
|
-
tags: container, delay, transition, natural
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Add Delay for Natural Container Transitions
|
|
8
|
-
|
|
9
|
-
Add a small delay to container size animations so the transition feels like it's catching up to the content.
|
|
10
|
-
|
|
11
|
-
**Correct:**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
<motion.div
|
|
15
|
-
animate={{ height: bounds.height }}
|
|
16
|
-
transition={{ duration: 0.2, delay: 0.05 }}
|
|
17
|
-
style={{ overflow: "hidden" }}
|
|
18
|
-
>
|
|
19
|
-
<div ref={ref}>{children}</div>
|
|
20
|
-
</motion.div>
|
|
21
|
-
```
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Two-Div Pattern for Animated Bounds
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: container, measure, motion
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Two-Div Pattern for Animated Bounds
|
|
8
|
-
|
|
9
|
-
Use an outer animated div and an inner measured div. Never measure and animate the same element.
|
|
10
|
-
|
|
11
|
-
**Incorrect (measure and animate same element — creates feedback loop):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function AnimatedContainer({ children }) {
|
|
15
|
-
const [ref, bounds] = useMeasure();
|
|
16
|
-
return (
|
|
17
|
-
<motion.div ref={ref} animate={{ height: bounds.height }}>
|
|
18
|
-
{children}
|
|
19
|
-
</motion.div>
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Correct (separate measure and animate targets):**
|
|
25
|
-
|
|
26
|
-
```tsx
|
|
27
|
-
function AnimatedContainer({ children }) {
|
|
28
|
-
const [ref, bounds] = useMeasure();
|
|
29
|
-
return (
|
|
30
|
-
<motion.div animate={{ height: bounds.height }}>
|
|
31
|
-
<div ref={ref}>{children}</div>
|
|
32
|
-
</motion.div>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
```
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use ResizeObserver for Measurement
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: container, resize-observer, performance
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Use ResizeObserver for Measurement
|
|
8
|
-
|
|
9
|
-
Use ResizeObserver to track element dimensions. It fires on resize without causing layout thrashing.
|
|
10
|
-
|
|
11
|
-
**Incorrect (measuring on every render):**
|
|
12
|
-
|
|
13
|
-
```tsx
|
|
14
|
-
function useMeasure(ref) {
|
|
15
|
-
const [bounds, setBounds] = useState({ width: 0, height: 0 });
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
if (ref.current) {
|
|
18
|
-
const rect = ref.current.getBoundingClientRect();
|
|
19
|
-
setBounds({ width: rect.width, height: rect.height });
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
return bounds;
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**Correct (ResizeObserver):**
|
|
27
|
-
|
|
28
|
-
```tsx
|
|
29
|
-
function useMeasure() {
|
|
30
|
-
const [element, setElement] = useState(null);
|
|
31
|
-
const [bounds, setBounds] = useState({ width: 0, height: 0 });
|
|
32
|
-
const ref = useCallback((node) => setElement(node), []);
|
|
33
|
-
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
if (!element) return;
|
|
36
|
-
const observer = new ResizeObserver(([entry]) => {
|
|
37
|
-
setBounds({
|
|
38
|
-
width: entry.contentRect.width,
|
|
39
|
-
height: entry.contentRect.height,
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
observer.observe(element);
|
|
43
|
-
return () => observer.disconnect();
|
|
44
|
-
}, [element]);
|
|
45
|
-
|
|
46
|
-
return [ref, bounds];
|
|
47
|
-
}
|
|
48
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Clean Up Audio Nodes After Playback
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: context, cleanup, disconnect
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Clean Up Audio Nodes After Playback
|
|
8
|
-
|
|
9
|
-
Disconnect and clean up audio nodes after playback.
|
|
10
|
-
|
|
11
|
-
**Incorrect (nodes remain connected):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
source.start();
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (cleaned up on end):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
source.start();
|
|
21
|
-
source.onended = () => {
|
|
22
|
-
source.disconnect();
|
|
23
|
-
gain.disconnect();
|
|
24
|
-
};
|
|
25
|
-
```
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Resume Suspended AudioContext
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: context, resume, suspended
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Resume Suspended AudioContext
|
|
8
|
-
|
|
9
|
-
Check and resume suspended AudioContext before playing.
|
|
10
|
-
|
|
11
|
-
**Incorrect (plays without checking):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
function playSound() {
|
|
15
|
-
const ctx = getAudioContext();
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (resumes if suspended):**
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
function playSound() {
|
|
23
|
-
const ctx = getAudioContext();
|
|
24
|
-
if (ctx.state === "suspended") {
|
|
25
|
-
ctx.resume();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
```
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Reuse Single AudioContext
|
|
3
|
-
impact: HIGH
|
|
4
|
-
tags: context, audio-context, singleton
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Reuse Single AudioContext
|
|
8
|
-
|
|
9
|
-
Reuse a single AudioContext instance; do not create new ones per sound.
|
|
10
|
-
|
|
11
|
-
**Incorrect (new context per call):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
function playSound() {
|
|
15
|
-
const ctx = new AudioContext();
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Correct (singleton):**
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
let audioContext: AudioContext | null = null;
|
|
23
|
-
|
|
24
|
-
function getAudioContext(): AudioContext {
|
|
25
|
-
if (!audioContext) {
|
|
26
|
-
audioContext = new AudioContext();
|
|
27
|
-
}
|
|
28
|
-
return audioContext;
|
|
29
|
-
}
|
|
30
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Bandpass Filter for Sound Character
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: design, filter, bandpass
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Bandpass Filter for Sound Character
|
|
8
|
-
|
|
9
|
-
Apply bandpass filter to shape percussive sounds.
|
|
10
|
-
|
|
11
|
-
**Incorrect (raw noise):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
source.connect(gain).connect(ctx.destination);
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Correct (filtered noise):**
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
const filter = ctx.createBiquadFilter();
|
|
21
|
-
filter.type = "bandpass";
|
|
22
|
-
filter.frequency.value = 4000;
|
|
23
|
-
filter.Q.value = 3;
|
|
24
|
-
source.connect(filter).connect(gain).connect(ctx.destination);
|
|
25
|
-
```
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Noise for Percussive Sounds
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
tags: design, noise, percussion
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Noise for Percussive Sounds
|
|
8
|
-
|
|
9
|
-
Use filtered noise for clicks/taps, not oscillators.
|
|
10
|
-
|
|
11
|
-
**Incorrect (oscillator for click):**
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const osc = ctx.createOscillator();
|
|
15
|
-
osc.type = "sine";
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**Correct (noise burst for click):**
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
const buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);
|
|
22
|
-
const data = buffer.getChannelData(0);
|
|
23
|
-
for (let i = 0; i < data.length; i++) {
|
|
24
|
-
data[i] = (Math.random() * 2 - 1) * Math.exp(-i / 50);
|
|
25
|
-
}
|
|
26
|
-
```
|