Update npm dependencies#821
Merged
Merged
Conversation
✅ Deploy Preview for ucmacm ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




This PR contains the following updates:
5.101.2→5.101.45.101.2→5.101.46.0.3→6.0.41.73.0→1.75.05.17.3→5.18.05.17.3→5.18.05.17.3→5.18.05.17.3→5.18.0^0.59.0→^0.60.01.74.0→1.75.0^0.8.0→^0.9.0^0.25.0→^7.0.011.15.1→11.16.019.2.7→19.2.819.2.7→19.2.83.9.2→3.10.04.13.1→4.14.08.64.0→8.65.0Release Notes
TanStack/query (@tanstack/eslint-plugin-query)
v5.101.4Compare Source
Patch Changes
7ac45ed- Relaxexhaustive-depsso function call targets are not required in query keys while values referenced in nested callbacks are still checked.v5.101.3Compare Source
TanStack/query (@tanstack/react-query)
v5.101.4Compare Source
Patch Changes
v5.101.3Compare Source
Patch Changes
7e3c822]:vitejs/vite-plugin-react (@vitejs/plugin-react)
v6.0.4Compare Source
Fixed
$RefreshSig$ is not definederror when runningvite devwithNODE_ENV=productionWhen running
vite devwithNODE_ENV=production, the app errored with$RefreshSig$ is not defined.This error is now fixed.
oxc-project/eslint-plugin-oxlint (eslint-plugin-oxlint)
v1.75.0Compare Source
What's Changed
Full Changelog: oxc-project/eslint-plugin-oxlint@v1.73.0...v1.75.0
Rel1cx/eslint-react (eslint-plugin-react-dom)
v5.18.0Compare Source
✨ New
@eslint-react/core: addedisUseRefLikeCalland a newadditionalRefHookssetting for declaring custom ref-creating hooks; the following rules now recognize them: (#1922, closes #1904)react-x/refsreact-x/immutabilityreact-x/set-state-in-effectreact-naming-convention/ref-namereact-debug/is-from-ref📝 Documentation
🏗️ Internal
@local/testkit: simplified internals.react-x: extracted a sharedcreateImplicitPropListenerhelper used byno-implicit-children,no-implicit-key, andno-implicit-ref. (#1923)tsdownto0.22.13,typescript-eslintto8.65.0,eslint-plugin-jsdocto63.2.0,import-integrity-lintto1.2.0,reactto19.2.8,nextto16.2.11, andpostcssto8.5.21.vite-nodewithnubfor running workspace scripts. (#1919)@eslint-react/astand@eslint-react/core.Full Changelog: Rel1cx/eslint-react@v5.17.3...v5.18.0
oxc-project/oxc (oxfmt)
v0.60.0Compare Source
oxc-project/oxc (oxlint)
v1.75.0Compare Source
🚀 Features
dd18383linter/node: Implement no-top-level-await rule (#24634) (Connor Shea)16a65f2linter/react: Implement function-component-definition rule (#24471) (Cole Ellison)7f1f585linter: Reusejest/padding-around-test-blocksforvitest/padding-around-test-blocks(#24519) (Mikhail Baev)99978a8linter/import/consistent-type-specifier-style: Supportprefer-top-level-if-only-type-importsoption (#24502) (camc314)🐛 Bug Fixes
8694167linter/eslint/prefer-destructuring: Handle typed declarations (#24616) (camc314)millionco/react-doctor (oxlint-plugin-react-doctor)
v0.9.0Compare Source
Patch Changes
#1423
3d7ea66Thanks @aidenybai! - Speed up custom Hook and wildcard re-export analysis, and upgrade the Oxc toolchain.#1422
599e30dThanks @skoshx! - Fix false positives in loading-reset, promise-handler, effect-cleanup, and class-unmount rules when control flow includes proven-safe global formatting calls such asMath.round(),performance.now(), and static console methods. Keep dynamic, unknown, and shadowed global lookalikes conservative.#1424
76263ecThanks @aidenybai! - Add direct Three.js and WebGL diagnostics derived from the React Three Fiber suite, covering hot animation and pointer paths, render-time construction, resource cleanup, device pixel ratio, shadowed point lights, frame delta, instance-buffer and projection updates, WebGPU legacy APIs, TSL uniform branches, and synchronous GPU readbacks. Prevent cyclic config bindings from crashing project discovery.v0.8.3Compare Source
v0.8.2Compare Source
Patch Changes
#1371
5b468f8Thanks @aidenybai! - Add import-aware React Three Fiber and Three.js rules for frame-loop allocation, timing and interpolation, React state updates, unstable constructor props, primitive and loader-cache ownership, selector stability, async callbacks, private package imports, invalid frame scheduling arguments, recursive animation loops, unstable portal containers, nullish and imperative loaders, inline and undisposed GPU resources, instanced-buffer uploads, camera projection updates, renderer and manual-root cleanup, positive-priority rendering, uncapped DPR, excessive point-light shadows, declarative-ref attachment, catalogue registration during render, whole-namespace Three.js registration, unreleased global render-loop effects, synchronous readback, pointer capture, and WebGPU state, Canvas, TSL-uniform, and render-pipeline mistakes. Activate Three.js lifecycle rules independently from Fiber-only rules, gate version-specific contracts on the lowest detected Fiber major, and require file-local runtime provenance before interpreting R3F JSX intrinsics. Recognize ESM, TypeScript import-equals, and global CommonJSrequire()bindings across Three.js and the public Fiber root, native, legacy, WebGPU, Drei, and deprecated package entry points while rejecting shadowed APIs. Preserve symbol-proven mutually exclusive primitive mounts, detect co-mounted resources returned by inline render helpers, prune statically safe logical loader fallbacks, distinguish shared loader assets from locally owned GPU resources, and reject nested returns as render-loop cleanup.Add handbook-derived coverage for non-reactive mutable
useThreescalar selectors, React updates and allocations in R3F pointer-move handlers, shared pointer-event point mutation, redundant Canvas renderer resize listeners,window.onresizeassignments, andResizeObservercallbacks, component-owned imperative controls cleanup, and legacy shader-material and post-processing APIs below both the R3F 10 WebGPU Canvas and stable R3F 9 Canvas instances with a proven WebGPU renderer factory. Preserve converging boolean-latch transitions written withif, ternary,&&, or||guards in high-frequency state-update rules, name both the mutable leaf and stable root in deep-selector diagnostics, and track immutable TSL uniforms created outside WebGPU node-graph callbacks.Track component-owned Three.js resources stored in direct or guarded-lazy
useRefbindings, and diagnose renderersetAnimationLoopscheduling that competes with R3FuseFrame.Require component-owned Three.js animation mixers to stop cached actions and uncache their root, and require modern WebGL postprocessing composers and resource-owning passes imported from either
three/examples/jsmorthree/addons, including Three's postprocessing barrel, to dispose their GPU resources without conflating Three's borrowed passes with pmndrs composer ownership. Gate pass cleanup on the earliest supported Three.js release, composer cleanup on release 146, the addon barrel on release 158, andFXAAPasson release 177.Recognize immediate disposal, conditional instanced-color uploads, reassigned effect cleanup closures, module-scoped WeakMap registration caches, bounded frame-state transitions, resetting frame timers, boolean ref latches, discrete BatchedMesh pointer hits, and conditional controls connections. Ignore whole-namespace registration in test-like files and the documented WebGPU namespace catalogue setup, and diagnose eagerly constructed base textures held in state.
#1402
cd9ca68Thanks @aidenybai! - Add correctness rules for unsafe parser inputs, selector and regular-expression construction, collapsed literal chains, and accidental object or array string coercion.#1388
b4556e3Thanks @aidenybai! - Fix confirmed rule false positives by restoring the correctjsx-keyspread ordering, requiring positive evidence that a spread can override a key, ignoring JSX arrays consumed as non-rendering data, skipping redirect-only Next.js pages innextjs-missing-metadata, and allowing multi-suffix env template files. Restrictjsx-no-target-blankto projects that explicitly target browsers or Electron versions without implicit opener protection.#1398
7eca0eeThanks @aidenybai! - Addzustand-no-whole-store-destructureto catch whole-store Zustand subscriptions that rerender for every store update.#1327
82c4a12Thanks @aidenybai! - Fixeffect-needs-cleanupfalse positives for legacy MediaQueryList listeners with matching stable cleanup callbacks.#1400
f4aa821Thanks @aidenybai! - Detect Remotion v4+ projects and add nine correctness rules for frame-driven animation, deterministic randomness, render-aware media and image loading, stable delay handles, module-scoped render blocking, and abortablecalculateMetadatafetches.#1380
5332cb6Thanks @aidenybai! - Recognize matching event listener cleanup across nested collections#1419
8c4959bThanks @aidenybai! - Correct false positives and false negatives found by an all-rules 2,000-project parity audit. Tighten project capability detection, browser-target compatibility, React Compiler configuration reachability, Tailwind conflict handling, JSX attribute ordering, accessible-name evidence, server-action provenance, state/effect execution analysis, image and motion evidence, and framework export handling.#1337
0b0b5acThanks @aidenybai! - Add deterministic design-quality lint rules spanning motion performance, accessibility, and Tailwind/JSX hygiene.Add
react-doctor design [directory]for a focused UI audit. The command runs the complete design-rule bucket plus other explicitly design-tagged rules, deliberately activates that family's focused opt-in diagnostics, respects explicit per-rule disablements, and skips unrelated analyzers, external lint configuration, custom plugins, and health scoring.Motion
motion-create-in-render— Motion component factories executed during a component or custom-hook render, including synchronous iteration callbacks. Module scope, event/effect callbacks, and stable React initializers remain valid.motion-value-constructor-in-render— manualmotionValue()objects recreated during React render. RecommendsuseMotionValue()while preserving module-scope and explicitly stabilized values.motion-use-transform-range-length— statically provableuseTransform()input and output arrays with different lengths. Aliased and namespace imports are resolved; dynamic and spread-backed ranges are skipped.motion-keyframe-times-mismatch— static Motion keyframe arrays whose transitiontimescount does not match the keyframe count, including transition objects nested insideanimate.motion-value-subscription-in-render—.on()subscriptions attached to proven hook-created Motion values during render. Effect/event subscriptions anduseMotionValueEvent()remain valid.motion-imperative-animation-in-render— imperativeanimate()calls, animation-control starts, and Motion-value writes executed during React render. Resolves imported APIs, aliases, anduseAnimate()tuple bindings while preserving effects, event handlers, deferred callbacks, and userland lookalikes.motion-animate-presence-must-outlive-child— presence boundaries removed by the same condition as an exit-bearing child, which prevents Motion from observing the child leave. Stable outer boundaries, correctly propagated nested boundaries, and JSX hidden inside uninvoked callbacks remain valid.motion-unstable-layout-id-in-iteration— repeated literal or index-derivedlayoutIdvalues insidemap()andflatMap()callbacks. Stable item-derived IDs, conditional shared markers, and item-scoped layout groups remain valid.motion-layout-on-inline-element— proven Motion layout animations attached to an explicitly inline element, where transform-based layout animation cannot take effect. Static inline styles and unvariant Tailwind display utilities are resolved with CSS precedence.motion-drag-axis-constraint-mismatch— x-axis drags constrained only by vertical bounds, y-axis drags constrained only by horizontal bounds, and statically inverted numeric intervals. Refs, dynamic objects, spreads, and userland lookalikes remain valid.waapi-animation-in-render—Element.animate()calls on proven DOM receivers during component or custom-hook render, including synchronous callbacks and memo initializers. Effects, handlers, deferred work, module scope, and userland methods remain valid.web-animation-offsets-valid— Web Animations keyframe offsets outside[0, 1]or in descending order, across array-form and property-indexed keyframes. Equal, missing, null, dynamic, and spread-backed offsets remain valid.no-conflicting-spring-options— proven Motion transition objects that combine physics spring controls (stiffness,damping, ormass) with duration controls (durationorbounce) that Motion ignores. Handles direct and nested transition objects while skipping dynamic and spread-overridden configurations.prefer-motion-transform-property— opt-in guidance for compositor-critical Motion animations that use individual transform keys instead of one directly acceleratedtransformvalue. Scope resolution limits findings to actual Motion components.pointer-capture-needs-cancel-handler— manual intrinsic-element drags that capture their pointer and define move/up handling without a pointer-cancel or lost-capture cleanup path. Requires a proven localevent.currentTarget.setPointerCapture(event.pointerId)call and skips spreads, custom components, nested callbacks, and uncertain handlers.no-unthrottled-scroll-mutation— direct animation-style writes orElement.animate()calls from an unthrottled native scroll listener. Read-only handlers, small class toggles, non-animation style changes, timer throttles, and unknown emitters remain valid.no-unbounded-animation-frame-loop— opt-in detection for a self-reschedulingrequestAnimationFramecallback with no stop gate and no retained request ID.no-layout-property-animation(extended) — now inspects statically provable Web Animations API keyframes in addition to Motion props.no-large-animated-blur(extended) — now covers Motion and Web Animations keyframes while no longer misclassifying a static inline blur as animation.no-permanent-will-change(extended) — now recognizes permanently active static Tailwindwill-change-*utilities while preserving state-prefixed and scroll-position cases.no-global-css-variable-animation(narrowed) — reports animated variables only on the document root or body, avoiding false positives for variables deliberately scoped to one element.no-transition-all(extended) — now also flags the Tailwindtransition-allclass (was inline-style-only). Animating every property that changes includes expensive layout properties and instant ones like focus rings; name the properties (transition-colors,transition-transform).no-tailwind-layout-transition— Tailwind arbitrarytransition-[width|height|top|left|right|bottom|margin|padding], which animates layout properties the browser recomputes every frame. Animatetransform/opacityinstead.no-ease-in-motion— exact inline, Motion, and Tailwindease-intiming that delays the visible response, including transition configuration nested inside static Motion animation targets; preservesease-in-outand dynamic timing values.no-long-transition-duration(extended) — now covers static Motion transition objects, including nested transition configuration, while preserving perpetual loops, decorative hidden motion, dynamic values, unproven components, and duration values ignored by physics-based springs.no-scale-from-zero(extended) — now covers inline transform transitions and Tailwind scale transitions in addition to proven Motion components.no-excessive-motion-stagger— opt-in detection for proven Motion stagger intervals above 80 ms, includingstaggerChildrenand scope-resolvedstagger()calls used bydelayChildren.no-hover-only-reveal(extended) — now recognizes statically hidden Motion opacity states revealed bywhileHoverwithout an equivalentwhileFocusstate, in addition to Tailwind hover utilities.Accessibility
no-static-motion-config-never— root application Motion policies that permanently opt out of the user's reduced-motion setting. Subtree policies, dynamic user preferences, aliases, development conditionals, spreads, and non-Motion components remain valid.no-blocked-paste— password, username, and one-time-code inputs whose paste handler definitely prevents the event, while preserving conditional policies, custom controls, spread-owned handlers, and non-authentication confirmation fields.no-autoplay-without-muted—<video autoPlay>/<audio autoPlay>missingmuted(sound-on autoplay is hostile to users and browser-blocked). Skips dynamicautoPlay, spreads, and truthy/dynamicmuted.no-uninformative-aria-label— anaria-labelwhose value is a content-free element-type word ("icon","button","image","link", …) that tells screen-reader users nothing about the action.no-invalid-progress-range— statically impossible native and ARIA progress ranges, including nonpositive native maxima, inverted ARIA bounds, and current values outside their declared range. Dynamic values and spread-owned props remain valid.role-button-requires-complete-keyboard-activation— custom intrinsic elements withrole="button"whose statically resolved keyboard activation handles Enter or Space but not both. Native buttons, opaque handlers, spreads, and uncertain control flow remain valid.no-low-contrast-inline-style— computes the real WCAG 2.1 contrast ratio from a co-located inlinecolor+backgroundColorand flags pairs below 4.5:1 (3:1 for large/bold text). Only fires on opaque, statically-resolvable colors (skips alpha,var(), gradients).no-broken-image-source— intrinsic<img>elements with missing, empty, or hash-only static sources; skips dynamic and spread-provided sources.no-placeholder-only-field— text inputs and textareas that rely on placeholder text without an associated label; recognizes wrapping labels,htmlFor, explicit ARIA names, and uncertain spread props.no-all-caps-body-text— long semantic body passages transformed to uppercase or authored entirely in capitals; short labels and headings remain valid.no-tight-body-leading— long body copy with a statically proven line-height ratio below 1.3, including precise inline values and Tailwind's tight leading utilities.no-crushed-letter-spacing— static inline or arbitrary Tailwind tracking below -0.08em on text-bearing elements.no-overwide-text-measure— explicit body-text widths above 80ch in inline styles or arbitrary Tailwind utilities.no-skipped-heading-level— opt-in analysis of explicit heading sequences inside static page or article trees, without inferring across component boundaries.no-cramped-container-padding— text inside an explicitly bounded or colored surface with less than 8px of static padding.no-assertive-status: flags status regions that use assertive live announcements instead of a deliberate alert.no-focusable-content-in-aria-hidden: finds statically focusable descendants inside anaria-hiddensubtree.no-multiple-unlabeled-navigation-landmarks: finds static JSX trees with multiple unnamed navigation landmarks.no-aria-invalid-without-description: opt-in detection for invalid controls that do not reference explanatory text.details-requires-summary: opt-in detection for native disclosure widgets without a first-child summary.fieldset-requires-legend: opt-in detection for field groups with multiple controls but no direct legend.data-table-requires-accessible-name: opt-in detection for tables with header cells but no caption or ARIA name.no-multiple-main-landmarks: finds static JSX trees with multiple main landmarks.no-nonresizable-textarea: opt-in detection for textareas that disable both resize axes.form-control-requires-name: opt-in detection for native form controls that cannot contribute a name to form submission.no-ungated-tailwind-animation: opt-in detection for continuous Tailwind animations without a reduced-motion gate.no-transitioned-focus-ring— detects Tailwind focus rings or outlines whose box-shadow/outline transition delays visible keyboard focus; color-only hover transitions remain valid.aria-braille-equivalent— opt-in detection for nonempty braille labels or role descriptions without a provable non-braille accessible equivalent.no-aria-hidden-on-body— opt-in detection for a statically truearia-hiddenon the document body.no-focusable-content-in-role-text— opt-in detection for intrinsic focusable controls whose semantics are flattened by a staticrole="text"ancestor.empty-table-header— opt-in detection for native or ARIA table headers with no accessible content or explicit name.html-xml-lang-mismatch— opt-in detection for conflicting static base languages in rootlangandxml:langdeclarations.no-duplicate-static-id-reference— opt-in static-tree detection for duplicated literal IDs used by labels or ARIA ID references.iframe-title-unique— opt-in static-tree detection for frames whose normalized literal titles are duplicated.no-server-side-image-map— opt-in detection for statically enabled server-side image maps.no-presentation-role-conflict— opt-in detection for presentational elements that remain focusable or expose global ARIA state.html-no-nested-interactive(extended) — now catches statically focusable descendants inside roles whose children become presentational, including controls with a negativetabIndex.Design / Tailwind hygiene
no-redundant-display-class— a display utility matching the element's default (blockon a<div>,inlineon a<span>); skips variant-prefixed and meaningful displays (flex,grid,hidden).prefer-truncate-shorthand—overflow-hidden text-ellipsis whitespace-nowrapcollapses to the singletruncateutility.no-full-viewport-width—w-screen/w-[100vw]/ inline100vw, which overflows horizontally when a scrollbar is visible; preferw-full/width: 100%.no-svg-currentcolor-with-fill-class—fill="currentColor"/stroke="currentColor"fighting afill-*/stroke-*color class (the class silently wins); keep one, or usefill-current.no-pointer-disabled-enabled-control— opt-in detection for enabled native controls that statically disable pointer input through inline styles or an unvariant Tailwind utility. Disabled, inert, hidden, nonfocusable, dynamic, and variant-scoped cases remain valid.no-clipped-overlay— absolute menus, listboxes, dialogs, and tooltips nested underoverflow-hiddenoroverflow-clipcontainers.no-nested-card-surface— opt-in detection for a complete rounded, bounded card treatment nested inside another card surface.no-side-tab-border(extended) — also recognizes heavy top or bottom accents on rounded surfaces while preserving square dividers.no-oversized-long-heading— opt-in detection for sentence-length<h1>copy set at an explicit hero display size.no-italic-serif-display-heading— opt-in detection for oversized headings that combine serif and italic treatments.no-repeated-kicker-labels— opt-in file-level detection for three or more short uppercase tracked labels immediately preceding headings.no-numbered-section-markers— opt-in detection for consecutive decorative number labels preceding section headings.no-image-hover-transform— opt-in detection for images that scale or rotate on hover through static Tailwind utilities.no-repeating-gradient-decoration— opt-in detection for repeating CSS gradients used as generic surface texture.no-hairline-border-wide-shadow— opt-in detection for card treatments that combine a one-pixel border with a broad shadow.no-icon-tile-heading-stack— opt-in detection for repeated card composition built from a colored icon tile followed by a heading.no-hero-eyebrow-chip— opt-in detection for tracked uppercase eyebrow copy placed immediately before an oversized hero heading.no-common-root-font— opt-in detection for page roots that explicitly select a commonly reused UI font.no-default-warm-page-surface— opt-in detection for full-page warm-neutral Tailwind surfaces.no-default-purple-page-gradient— opt-in detection for full-page purple-to-blue or purple-to-cyan Tailwind gradients.no-generic-purple-blue-icon-gradient— opt-in detection for compact, rounded purple-to-blue gradient tiles used as generic icons or avatars.no-dynamic-tailwind-class-fragment— opt-in detection for Tailwind utilities assembled across runtime template interpolations, which the Tailwind source scanner cannot discover as complete class names.no-emoji-heading-decoration— opt-in detection for decorative emoji embedded in static native heading copy while preserving dynamic content, icon components, and non-product example paths.no-inert-pointer-affordance— opt-in detection for noninteractive native elements that advertise clickability withcursor-pointerbut have no local or delegated interaction signal.no-repeated-placeholder-navigation— opt-in detection for navigation containers that repeat barehref="#"destinations while preserving real fragment links and isolated scroll-to-top anchors.no-tiny-uppercase-tracked-label— opt-in detection for static labels that combine an explicit font size of 11 px or less with uppercase transformation and non-default tracking, while preserving code-like values, dynamic copy, responsive-only styles, and readable sizes.Tailwind-specific design detectors now require a detected Tailwind dependency, and JSX-only design detectors require React. The newest visual heuristics also abstain when spreads, custom-component forwarding, later utility precedence, or semantic emoji placement make the verdict uncertain.
no-flat-page-type-scale— opt-in page-level analysis for three or more explicit text sizes compressed into less than a 2× range.no-monotonous-page-spacing— opt-in page-level analysis for a dominant spacing value repeated across a sufficiently large static sample.no-generic-marketing-copy— opt-in detection for broad promotional phrases in static page or article copy.no-manufactured-contrast-copy— opt-in detection for pages that repeatedly frame claims as short artificial contrasts.no-decorative-grid-background— opt-in detection for layered one-pixel linear gradients that draw a coordinate grid outside data-visualization contexts.no-smooth-scroll-without-reduced-motion: opt-in detection for smooth-scrolling utilities without a reduced-motion override.no-inert-sticky-position: opt-in detection for sticky elements without a static inset anchor.no-img-without-dimensions: opt-in detection for images without intrinsic dimensions or a statically reserved CSS box.no-small-form-control-text: opt-in detection for native controls with a static font size below 16 px.no-undersized-icon-button: opt-in detection for icon-only buttons with a provable target below 24 px on either axis.no-layout-shifting-interaction-state: opt-in detection for interaction utilities that change layout geometry or font metrics.no-hover-only-reveal: opt-in detection for content revealed on hover without an equivalent keyboard-focus state.no-invisible-focus-control: opt-in detection for fully transparent native controls whose proxy surface provides no visible keyboard-focus treatment.no-fixed-inside-transformed-ancestor: opt-in detection for fixed descendants whose static ancestor establishes a containing block.no-decorative-blur-orb— opt-in detection for empty, absolutely positioned, strongly blurred circular color fields used as generic decoration.no-repeated-glass-surfaces— opt-in page-level detection for three or more complete translucent, blurred, bordered, and rounded surface treatments.no-excessive-pill-treatment— opt-in page-level detection for five or more short labels or actions presented as filled or outlined pills.no-uniform-feature-card-grid— opt-in detection for grids whose direct children all repeat the same complete card, heading, and paragraph composition.no-excessive-centered-copy— opt-in page-level detection for repeated substantial paragraphs set as centered copy.no-full-viewport-centered-hero— opt-in detection for structurally simple hero sections that combine full-viewport height, centered layout, and a primary heading.no-repeated-emoji-tiles— opt-in page-level detection for three or more emoji-only glyphs placed in small, rounded, colored square tiles.no-uppercase-mono-label— opt-in detection for static short labels that combine monospace, uppercase, and explicit tracking while preserving code elements and dynamic identifiers.no-tight-display-tracking— opt-in detection for static primary headings using Tailwind's tightest built-in letter spacing.no-excessive-card-surfaces— opt-in page-level detection for six or more complete card surfaces in a static page tree.no-repeated-section-shells— opt-in detection for pages that repeat the same large vertical section padding and centered max-width wrapper structure at least three times.no-pure-black-shadow— opt-in detection for visible inline or Tailwind shadows colored with opaque or translucent pure black.no-decorative-pulse— opt-in detection for stable text that pulses continuously outside a proven loading or progress state.no-excessive-font-families— opt-in page-level detection for four or more literal font families while preserving tokenized font variables.no-fake-browser-chrome— opt-in detection for framed previews that recreate empty red, yellow, and green browser controls as decoration.no-overloaded-hover-state— opt-in detection for a single hover state that stacks three or more effect families such as motion, color, shadow, opacity, or filters.no-placeholder-persona-copy— opt-in detection for generic sample identities rendered in top-level page copy.no-repeated-hover-scale— opt-in page-level detection for the same hover scale repeated on at least three elements within one static page root.no-tight-all-caps-heading— opt-in detection for long all-caps headings with a statically proven line-height below 1.0.prefer-tabular-numeric-data— opt-in detection for dynamically formatted numeric table cells without inherited tabular or monospace figures.require-autoplay-video-poster— opt-in detection for statically autoplaying intrinsic videos without a poster frame.no-empty-card-shell— opt-in detection for empty elements styled as complete card surfaces.no-mixed-icon-libraries— opt-in file-level detection for JSX that mixes imports from multiple icon-system families.no-pill-navigation-count— opt-in detection for bare numeric navigation counts styled as generic pills instead of semantic badges.no-redundant-title-tooltip— opt-in detection fortitletext that merely repeats an element's visible static label.no-symmetric-text-button-padding— opt-in detection for text buttons whose static Tailwind padding is symmetric on both axes.no-uppercase-tracked-navigation-label— opt-in detection for static navigation labels combining uppercase and expanded tracking.require-scale-reveal-transform-origin— opt-in detection for proven Motion reveal elements that animate scale without a static transform origin.no-gradient-text(extended) — now recognizes Tailwind v4 linear, radial, conic, numeric-angle, and arbitrary gradient background utilities without combining utilities across variants.design-no-three-period-ellipsis(extended) — now checks static placeholders, titles, alternative text, and ARIA labels in addition to JSX text.design-no-vague-button-label(narrowed) — preserves conventional Continue navigation when the same form proves a Back or Previous action.design-no-em-dash-in-jsx-text(narrowed) — skips files in conventional long-form documentation, article, blog, content, and post paths.no-cramped-container-padding(narrowed) — no longer treats a one-sided table or layout divider as a closed container around text.Render lifecycle
no-create-object-url-in-render— detects globalURL.createObjectURL()calls in component or custom-hook render, including memo and state initializers, where discarded renders can leak disposable browser resources.HTML and component contracts
html-no-nested-form: finds statically nested native forms, which HTML parsing and submission do not support.html-label-has-single-control: finds labels that statically contain more than one labelable control.motion-animate-presence-requires-key: requires keys on direct static children of proven MotionAnimatePresencecomponents.motion-animate-presence-wait-single-child: findsmode="wait"instances with multiple direct static children.no-mixed-srcset-descriptors: findssrcSetcandidates that mix width and pixel-density descriptor modes.shadcn-tabs-trigger-requires-list: opt-in detection for proven shadcn-style tab triggers outside a corresponding tab list.no-srcset-without-sizes: requiressizeswhen an intrinsic image uses width descriptors in a staticsrcSet.Metadata
nextjs-metadata-url-consistency— statically provable disagreement between a Next.js page's canonical URL andopenGraph.url, with normalization for equivalent trailing slashes and no claims about dynamic or inherited values.Tailwind canonicalization (distilled from ui.sh's canonicalize-tailwind guidance)
no-deprecated-tailwind-class— Tailwind v4 renamed/removedbg-gradient-*→bg-linear-*,flex-shrink-*→shrink-*,flex-grow-*→grow-*,overflow-ellipsis→text-ellipsis. Gated on a newtailwind:4capability so v3 projects are unaffected.no-arbitrary-px-font-size—text-[13px]doesn't scale with the user's root font size; use rem (text-[0.8125rem]). Pixels stay fine forborder-*/outline-*.prefer-dvh-over-vh—h-screen/min-h-screen/h-[100vh]overflow under mobile browser chrome; preferdvh(h-dvh/min-h-dvh). Gated ontailwind:3.4.Also adds a
tailwind:4project capability to@react-doctor/corefor version-gated Tailwind rules.React Compiler detection now recognizes the Vite 6
reactCompilerPreset()integration, the supported JavaScript, TypeScript, CommonJS, and ESM Babel configuration filenames, and the official Rsbuild and RspackreactCompilerconfiguration. This keeps compiler-redundant diagnostics disabled when those integrations are active without changing the JSON report shape.Large-corpus validation keeps the highest-noise visual heuristics (
no-arbitrary-px-font-size,no-cramped-container-padding,no-full-viewport-width, andprefer-motion-transform-property) in the focused design scan instead of the general scan. It also avoids diagnostics for responsive navigation variants and opaque navigation wrappers, translated fragment content, custom label components, display-sized paragraphs, test image mocks, imperatively sourced image refs, non-production placeholder fields, link-named editor actions, image boxes controlled by unresolved CSS, card-styled controls and code blocks, and terminal-style technical labels.#1415
284b4e4Thanks @aidenybai! - Harden shared detector utilities for stable React initializers, resource aliases, and static JSX strings.#1407
6fcd9c9Thanks @aidenybai! - Detect synchronous Zustand get() calls during store initialization#1394
21221c2Thanks @aidenybai! - Fix effect-needs-cleanup cleanup ownership for matched listener capture projections, one-shot timers with stable unmount ownership, and separately guarded timer releases.#1404
fc1b3a3Thanks @aidenybai! - Add a version-gated Ink ruleset with 19 default checks and an opt-inusePastemigration. Preserve the two disproven Newline and Suspense rule IDs as retired configuration aliases.#1325
26b4a0cThanks @aidenybai! - Recognize lazily initialized DOM ref Maps as committed external synchronization inno-effect-chain.#1405
61bf03eThanks @aidenybai! - Add MobX core-version and React-binding capabilities plus three gated diagnostics for discardedreactions, unsupported
makeAutoObservableinheritance, and invalidobserver(memo(...))wrapperorder.
[#1412](https://redirect.github.com/milli
Configuration
📅 Schedule: (UTC)
* 0-3 * * 1)🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.