Skip to content

React Review Audit #2

Description

@react-doctor
32 errors, ⚠️ 975 warnings 50 score
Copy as prompt
Fix the following React Review diagnostics in my codebase.

## Errors (32)

1. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:39
   Unexpected `any`. Specify a different type.

2. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:50
   Unexpected `any`. Specify a different type.

3. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:73
   Unexpected `any`. Specify a different type.

4. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:84
   Unexpected `any`. Specify a different type.

5. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:357
   Unexpected `any`. Specify a different type.

6. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:403
   Unexpected `any`. Specify a different type.

7. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:404
   Unexpected `any`. Specify a different type.

8. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:414
   Unexpected `any`. Specify a different type.

9. [error] no-explicit-any — packages/benchmark/components/bench-harness.tsx:415
   Unexpected `any`. Specify a different type.

10. [error] no-nested-component-definition — packages/benchmark/components/navigation/pagination.tsx:44
   Component "PageButton" defined inside "Pagination" — creates new instance every render, destroying state

11. [error] no-empty-object-type — packages/benchmark/components/primitives/card.tsx:38
   Do not use an empty interface declaration.

12. [error] no-empty-object-type — packages/benchmark/components/primitives/card.tsx:52
   Do not use an empty interface declaration.

13. [error] no-empty-object-type — packages/benchmark/components/primitives/dialog.tsx:49
   Do not use an empty interface declaration.

14. [error] rules-of-hooks — packages/benchmark/components/portals/notification-portal.tsx:12
   React Hook "useState" is called in function "Anonymous" that is neither a React function component nor a custom React Hook function. React component names must start with an uppercase letter. React Hook names must start with the word "use".

15. [error] rules-of-hooks — packages/benchmark/components/portals/notification-portal.tsx:13
   React Hook "useEffect" is called in function "Anonymous" that is neither a React function component nor a custom React Hook function. React component names must start with an uppercase letter. React Hook names must start with the word "use".

16. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:85
   Unexpected `any`. Specify a different type.

17. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:97
   Unexpected `any`. Specify a different type.

18. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:220
   Unexpected `any`. Specify a different type.

19. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:254
   Unexpected `any`. Specify a different type.

20. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:277
   Unexpected `any`. Specify a different type.

21. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:628
   Unexpected `any`. Specify a different type.

22. [error] no-explicit-any — packages/benchmark/e2e/bench.spec.ts:634
   Unexpected `any`. Specify a different type.

23. [error] no-explicit-any — packages/benchmark/e2e/retrieval-bench.ts:155
   Unexpected `any`. Specify a different type.

24. [error] no-explicit-any — packages/benchmark/e2e/utils/collect-element-context.ts:29
   Unexpected `any`. Specify a different type.

25. [error] no-explicit-any — packages/benchmark/e2e/utils/collect-element-context.ts:30
   Unexpected `any`. Specify a different type.

26. [error] no-explicit-any — packages/benchmark/e2e/utils/collect-element-context.ts:49
   Unexpected `any`. Specify a different type.

27. [error] no-explicit-any — packages/benchmark/e2e/utils/collect-element-context.ts:60
   Unexpected `any`. Specify a different type.

28. [error] no-explicit-any — packages/benchmark/e2e/utils/collect-element-context.ts:72
   Unexpected `any`. Specify a different type.

29. [error] no-explicit-any — packages/benchmark/isolates/react-grab.ts:16
   Unexpected `any`. Specify a different type.

30. [error] no-unsafe-function-type — packages/benchmark/lib/cursor-browser-inspector.ts:145
   The `Function` type accepts any function-like value.

31. [error] no-explicit-any — packages/benchmark/isolates/cursor-browser.ts:16
   Unexpected `any`. Specify a different type.

32. [error] require-reduced-motion — packages/website/package.json:0
   Project uses a motion library but has no prefers-reduced-motion handling — required for accessibility (WCAG 2.3.3)

## Warnings (975)

33. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/bookings/(booking-layout)/[bookingId]/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

34. [warning] no-inline-exhaustive-style — packages/benchmark/components/aliased/internal-alert-impl.tsx:17
   9 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

35. [warning] no-react19-deprecated-apis — packages/benchmark/components/actions/icon-button.tsx:13
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

36. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/bookings/(booking-layout)/past/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

37. [warning] design-no-em-dash-in-jsx-text — packages/benchmark/components/adapter-wrapped/deployment-status.tsx:23
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

38. [warning] no-outline-none — packages/benchmark/components/aliased/internal-search-core.tsx:32
   outline: none removes keyboard focus visibility — use :focus-visible styling instead, or provide a box-shadow focus ring

39. [warning] no-static-element-interactions — packages/benchmark/components/atoms/card.tsx:32
   Static HTML elements with event handlers require a role.

40. [warning] click-events-have-key-events — packages/benchmark/components/atoms/card.tsx:32
   Enforce a clickable non-interactive element has at least one keyboard event listener.

41. [warning] no-tiny-text — packages/benchmark/components/adapter-wrapped/incident-banner.tsx:19
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

42. [warning] design-no-em-dash-in-jsx-text — packages/benchmark/components/adapter-wrapped/incident-banner.tsx:19
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

43. [warning] no-autofocus — packages/benchmark/components/atoms/input.tsx:41
   The `autoFocus` attribute is found here, which can cause usability issues for sighted and non-sighted users.

44. [warning] no-outline-none — packages/benchmark/components/atoms/input.tsx:50
   outline: none removes keyboard focus visibility — use :focus-visible styling instead, or provide a box-shadow focus ring

45. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/input.tsx:44
   9 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

46. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/integrations/(integration-layout)/installed/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

47. [warning] no-static-element-interactions — packages/benchmark/components/_deprecated/old-card.tsx:39
   Static HTML elements with event handlers require a role.

48. [warning] click-events-have-key-events — packages/benchmark/components/_deprecated/old-card.tsx:39
   Enforce a clickable non-interactive element has at least one keyboard event listener.

49. [warning] design-no-bold-heading — packages/benchmark/components/auth/login-form.tsx:32
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

50. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:33
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

51. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:47
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

52. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:58
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

53. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:58
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

54. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:58
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

55. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:65
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

56. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:76
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

57. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:76
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

58. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:76
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

59. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:81
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

60. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:81
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

61. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:90
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

62. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:97
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

63. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:107
   bg-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

64. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:107
   bg-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

65. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/login-form.tsx:107
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

66. [warning] no-giant-component — packages/benchmark/app/client-benchmarks.tsx:611
   Component "ClientBenchmarks" is 1399 lines — consider breaking it into smaller focused components

67. [warning] design-no-bold-heading — packages/benchmark/app/client-benchmarks.tsx:616
   fontWeight: 800 on <h1> crushes counter shapes at display sizes — use 500 or 600

68. [warning] design-no-three-period-ellipsis — packages/benchmark/app/client-benchmarks.tsx:1680
   Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)

69. [warning] use-lazy-motion — packages/benchmark/components/challenge/animation-maze.tsx:3
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

70. [warning] no-inline-exhaustive-style — packages/benchmark/components/challenge/animation-maze.tsx:43
   10 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

71. [warning] nextjs-missing-metadata — packages/benchmark/app/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

72. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/button.tsx:54
   15 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

73. [warning] no-react19-deprecated-apis — packages/benchmark/components/challenge/russian-doll.tsx:2
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

74. [warning] use-lazy-motion — packages/benchmark/components/challenge/russian-doll.tsx:3
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

75. [warning] anchor-is-valid — packages/benchmark/app/auth/login/page.tsx:81
   Use of incorrect `href` for the 'a' element.

76. [warning] anchor-is-valid — packages/benchmark/app/auth/login/page.tsx:105
   Use of incorrect `href` for the 'a' element.

77. [warning] nextjs-missing-metadata — packages/benchmark/app/auth/login/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

78. [warning] rendering-usetransition-loading — packages/benchmark/app/auth/login/page.tsx:8
   useState for "isLoading" — if this guards a state transition (not an async fetch), consider useTransition instead

79. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:33
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

80. [warning] design-no-redundant-size-axes — packages/benchmark/app/auth/login/page.tsx:36
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

81. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:36
   bg-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

82. [warning] design-no-bold-heading — packages/benchmark/app/auth/login/page.tsx:39
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

83. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:39
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

84. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:40
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

85. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:58
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

86. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:69
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

87. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:69
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

88. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:69
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

89. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:69
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

90. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:77
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

91. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:81
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

92. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:91
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

93. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:91
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

94. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:91
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

95. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:98
   bg-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

96. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:98
   bg-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

97. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:98
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

98. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:103
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

99. [warning] design-no-default-tailwind-palette — packages/benchmark/app/auth/login/page.tsx:105
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

100. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/bookings/(booking-layout)/cancelled/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

101. [warning] design-no-redundant-size-axes — packages/benchmark/components/auth/auth-guard.tsx:54
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

102. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/auth-guard.tsx:54
   border-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

103. [warning] design-no-three-period-ellipsis — packages/benchmark/components/auth/auth-guard.tsx:89
   Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)

104. [warning] no-unused-vars — packages/benchmark/components/bench-harness.tsx:12
   Identifier 'findNearestComponentSource' is imported but never used.

105. [warning] async-parallel — packages/benchmark/components/bench-harness.tsx:97
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

106. [warning] async-parallel — packages/benchmark/components/bench-harness.tsx:153
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

107. [warning] async-await-in-loop — packages/benchmark/components/bench-harness.tsx:229
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

108. [warning] async-await-in-loop — packages/benchmark/components/bench-harness.tsx:251
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

109. [warning] js-tosorted-immutable — packages/benchmark/components/common/data-table.tsx:42
   [...array].sort() — use array.toSorted() for immutable sorting (ES2023)

110. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:84
   divide-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

111. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:85
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

112. [warning] design-no-redundant-padding-axes — packages/benchmark/components/common/data-table.tsx:88
   px-3 py-3 → use the shorthand p-3

113. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:93
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

114. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:118
   divide-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

115. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:123
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

116. [warning] design-no-redundant-padding-axes — packages/benchmark/components/common/data-table.tsx:141
   px-3 py-3 → use the shorthand p-3

117. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:148
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

118. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/data-table.tsx:155
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

119. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/event-types/(event-type-layout)/[eventTypeId]/availability/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

120. [warning] use-lazy-motion — packages/benchmark/components/challenge/portal-inception.tsx:7
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

121. [warning] no-inline-exhaustive-style — packages/benchmark/components/challenge/portal-inception.tsx:54
   8 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

122. [warning] design-no-bold-heading — packages/benchmark/app/settings/page.tsx:65
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

123. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:65
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

124. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:68
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

125. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:74
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

126. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:75
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

127. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:84
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

128. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:121
   bg-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

129. [warning] design-no-default-tailwind-palette — packages/benchmark/app/settings/page.tsx:121
   bg-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

130. [warning] no-generic-handler-names — packages/benchmark/components/actions/button.tsx:46
   Non-descriptive handler name "handleClick" — name should describe what it does, not when it runs

131. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/integrations/(integration-layout)/[integrationId]/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

132. [warning] no-tiny-text — packages/benchmark/components/adapter-wrapped/changelog-entry.tsx:16
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

133. [warning] no-static-element-interactions — packages/benchmark/components/common/card.tsx:30
   Static HTML elements with event handlers require a role.

134. [warning] click-events-have-key-events — packages/benchmark/components/common/card.tsx:30
   Enforce a clickable non-interactive element has at least one keyboard event listener.

135. [warning] no-inline-exhaustive-style — packages/benchmark/components/adapter-wrapped/team-member-row.tsx:22
   10 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

136. [warning] no-tiny-text — packages/benchmark/components/adapter-wrapped/team-member-row.tsx:41
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

137. [warning] no-tiny-text — packages/benchmark/components/adapter-wrapped/quota-gauge.tsx:39
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

138. [warning] design-no-em-dash-in-jsx-text — packages/benchmark/components/adapter-wrapped/quota-gauge.tsx:39
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

139. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/availability/(availability-layout)/[scheduleId]/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

140. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/event-types/(event-type-layout)/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

141. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/badge.tsx:36
   9 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

142. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/bookings/(booking-layout)/[bookingId]/reschedule/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

143. [warning] no-img-element — packages/benchmark/components/atoms/avatar.tsx:62
   Using `<img>` could result in slower LCP and higher bandwidth.

144. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/avatar.tsx:43
   13 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

145. [warning] nextjs-no-img-element — packages/benchmark/components/atoms/avatar.tsx:62
   Use next/image instead of <img> — provides automatic optimization, lazy loading, and responsive srcset

146. [warning] no-static-element-interactions — packages/benchmark/components/atoms/dialog.tsx:36
   Static HTML elements with event handlers require a role.

147. [warning] click-events-have-key-events — packages/benchmark/components/atoms/dialog.tsx:36
   Enforce a clickable non-interactive element has at least one keyboard event listener.

148. [warning] prefer-use-effect-event — packages/benchmark/components/atoms/dialog.tsx:31
   "onClose" is read only inside `addEventListener` — wrap it with useEffectEvent and remove it from the dep array so the effect doesn't re-synchronize on every parent render

149. [warning] no-z-index-9999 — packages/benchmark/components/atoms/dialog.tsx:42
   z-index: 9999 is arbitrarily high — use a deliberate z-index scale (1–50). Extreme values signal a stacking context problem, not a fix

150. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/bookings/(booking-layout)/upcoming/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

151. [warning] no-static-element-interactions — packages/benchmark/components/atoms/checkbox.tsx:32
   Static HTML elements with event handlers require a role.

152. [warning] click-events-have-key-events — packages/benchmark/components/atoms/checkbox.tsx:32
   Enforce a clickable non-interactive element has at least one keyboard event listener.

153. [warning] no-transition-all — packages/benchmark/components/atoms/checkbox.tsx:45
   transition: "all" animates every property including layout — list only the properties you animate

154. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/checkbox.tsx:34
   11 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

155. [warning] no-static-element-interactions — packages/benchmark/components/atoms/switch.tsx:35
   Static HTML elements with event handlers require a role.

156. [warning] click-events-have-key-events — packages/benchmark/components/atoms/switch.tsx:35
   Enforce a clickable non-interactive element has at least one keyboard event listener.

157. [warning] no-inline-exhaustive-style — packages/benchmark/components/atoms/switch.tsx:47
   9 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

158. [warning] design-no-bold-heading — packages/benchmark/components/auth/signup-form.tsx:45
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

159. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:46
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

160. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:60
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

161. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:71
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

162. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:71
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

163. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:71
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

164. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:78
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

165. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:89
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

166. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:89
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

167. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:89
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

168. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:96
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

169. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:106
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

170. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:106
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

171. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:106
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

172. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:120
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

173. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:130
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

174. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:130
   border-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

175. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:130
   ring-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

176. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:140
   bg-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

177. [warning] design-no-default-tailwind-palette — packages/benchmark/components/auth/signup-form.tsx:140
   bg-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

178. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/workflows/(workflow-layout)/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

179. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/workflows/(workflow-layout)/[workflowId]/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

180. [warning] nextjs-missing-metadata — packages/benchmark/app/benchmarks/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

181. [warning] no-fetch-in-effect — packages/benchmark/app/benchmarks/page.tsx:50
   fetch() inside useEffect — use a data fetching library (react-query, SWR) or server component

182. [warning] nextjs-no-client-fetch-for-server-data — packages/benchmark/app/benchmarks/page.tsx:50
   useEffect + fetch in a page/layout — fetch data server-side with a server component instead

183. [warning] design-no-three-period-ellipsis — packages/benchmark/app/benchmarks/page.tsx:63
   Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)

184. [warning] js-flatmap-filter — packages/benchmark/app/benchmarks/page.tsx:72
   .map().filter(Boolean) iterates twice — use .flatMap() to transform and filter in a single pass

185. [warning] no-tiny-text — packages/benchmark/app/benchmarks/page.tsx:307
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

186. [warning] no-unused-vars — packages/benchmark/components/challenge/identity-crisis.tsx:2
   Identifier 'forwardRef' is imported but never used.

187. [warning] no-react19-deprecated-apis — packages/benchmark/components/challenge/identity-crisis.tsx:2
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

188. [warning] use-lazy-motion — packages/benchmark/components/challenge/the-gauntlet.tsx:3
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

189. [warning] server-hoist-static-io — packages/benchmark/app/api/bench-results/route.ts:15
   readFileSync() in GET route handler reads the same static asset every request — hoist to module scope so the read happens once at module load

190. [warning] use-lazy-motion — packages/benchmark/components/challenge/shapeshifter.tsx:4
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

191. [warning] design-no-default-tailwind-palette — packages/benchmark/components/actions/action-menu.tsx:43
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

192. [warning] design-no-default-tailwind-palette — packages/benchmark/components/actions/action-menu.tsx:43
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

193. [warning] no-array-index-as-key — packages/benchmark/components/actions/action-menu.tsx:58
   Array index "i" used as key — causes bugs when list is reordered or filtered

194. [warning] design-no-default-tailwind-palette — packages/benchmark/components/actions/action-menu.tsx:60
   border-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

195. [warning] design-no-bold-heading — packages/benchmark/app/dashboard/page.tsx:61
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

196. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:61
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

197. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:64
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

198. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:75
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

199. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:77
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

200. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:92
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

201. [warning] design-no-redundant-size-axes — packages/benchmark/app/dashboard/page.tsx:98
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

202. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:98
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

203. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:98
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

204. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:105
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

205. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:109
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

206. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:116
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

207. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:117
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

208. [warning] design-no-default-tailwind-palette — packages/benchmark/app/dashboard/page.tsx:117
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

209. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/event-types/(event-type-layout)/[eventTypeId]/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

210. [warning] no-react19-deprecated-apis — packages/benchmark/components/common/button.tsx:3
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

211. [warning] design-no-redundant-size-axes — packages/benchmark/components/common/button.tsx:62
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

212. [warning] no-static-element-interactions — packages/benchmark/components/_deprecated/legacy-modal.tsx:103
   Static HTML elements with event handlers require a role.

213. [warning] click-events-have-key-events — packages/benchmark/components/_deprecated/legacy-modal.tsx:103
   Enforce a clickable non-interactive element has at least one keyboard event listener.

214. [warning] design-no-redundant-size-axes — packages/benchmark/components/common/badge.tsx:61
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

215. [warning] design-no-redundant-size-axes — packages/benchmark/components/common/badge.tsx:65
   w-2.5 h-2.5 → use the shorthand size-2.5 (Tailwind v3.4+)

216. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/integrations/(integration-layout)/available/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

217. [warning] nextjs-missing-metadata — packages/benchmark/app/(use-page-wrapper)/(main-layout)/availability/(availability-layout)/page.tsx:1
   Page without metadata or generateMetadata export — hurts SEO

218. [warning] design-no-three-period-ellipsis — packages/benchmark/components/dynamic-import/settings-panel-map.tsx:25
   Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)

219. [warning] no-generic-handler-names — packages/benchmark/components/common/nav-item.tsx:45
   Non-descriptive handler name "handleClick" — name should describe what it does, not when it runs

220. [warning] design-no-redundant-size-axes — packages/benchmark/components/common/nav-item.tsx:55
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

221. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/nav-item.tsx:63
   bg-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

222. [warning] design-no-default-tailwind-palette — packages/benchmark/components/common/nav-item.tsx:63
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

223. [warning] js-hoist-intl — packages/benchmark/components/features/analytics/analytics-card.tsx:19
   new Intl.NumberFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

224. [warning] js-hoist-intl — packages/benchmark/components/features/analytics/analytics-card.tsx:26
   new Intl.NumberFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

225. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:58
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

226. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:59
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

227. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:64
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

228. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:64
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

229. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:78
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

230. [warning] no-array-index-as-key — packages/benchmark/components/features/analytics/analytics-card.tsx:88
   Array index "i" used as key — causes bugs when list is reordered or filtered

231. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-card.tsx:89
   bg-indigo-200 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

232. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:41
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

233. [warning] no-array-index-as-key — packages/benchmark/components/features/analytics/analytics-chart.tsx:45
   Array index "index" used as key — causes bugs when list is reordered or filtered

234. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:47
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

235. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:49
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

236. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:54
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

237. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:73
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

238. [warning] no-array-index-as-key — packages/benchmark/components/features/analytics/analytics-chart.tsx:80
   Array index "index" used as key — causes bugs when list is reordered or filtered

239. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:84
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

240. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-chart.tsx:100
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

241. [warning] no-tiny-text — packages/benchmark/components/features/analytics/charts/metric-chart.tsx:105
   Font size 10px is too small — body text should be at least 12px for readability, 16px is ideal

242. [warning] no-tiny-text — packages/benchmark/components/computed/conditional-tree.tsx:32
   Font size 11px is too small — body text should be at least 12px for readability, 16px is ideal

243. [warning] no-react19-deprecated-apis — packages/benchmark/components/core/base-button.tsx:32
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

244. [warning] no-transition-all — packages/benchmark/components/core/base-button.tsx:60
   transition: "all" animates every property including layout — list only the properties you animate

245. [warning] no-inline-exhaustive-style — packages/benchmark/components/core/base-button.tsx:48
   12 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

246. [warning] no-static-element-interactions — packages/benchmark/components/features/availability/components/availability-override-dialog.tsx:29
   Static HTML elements with event handlers require a role.

247. [warning] no-static-element-interactions — packages/benchmark/components/features/availability/components/availability-override-dialog.tsx:30
   Static HTML elements with event handlers require a role.

248. [warning] click-events-have-key-events — packages/benchmark/components/features/availability/components/availability-override-dialog.tsx:29
   Enforce a clickable non-interactive element has at least one keyboard event listener.

249. [warning] click-events-have-key-events — packages/benchmark/components/features/availability/components/availability-override-dialog.tsx:30
   Enforce a clickable non-interactive element has at least one keyboard event listener.

250. [warning] no-array-index-as-key — packages/benchmark/components/features/availability/components/availability-override-dialog.tsx:47
   Array index "i" used as key — causes bugs when list is reordered or filtered

251. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-card.tsx:41
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

252. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-card.tsx:42
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

253. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-card.tsx:45
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

254. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-card.tsx:47
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

255. [warning] no-unused-vars — packages/benchmark/components/features/availability/components/availability-schedule.tsx:3
   Identifier 'useState' is imported but never used.

256. [warning] no-static-element-interactions — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:24
   Static HTML elements with event handlers require a role.

257. [warning] no-static-element-interactions — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:25
   Static HTML elements with event handlers require a role.

258. [warning] label-has-associated-control — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:31
   A form label must be associated with a control.

259. [warning] label-has-associated-control — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:44
   A form label must be associated with a control.

260. [warning] click-events-have-key-events — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:24
   Enforce a clickable non-interactive element has at least one keyboard event listener.

261. [warning] click-events-have-key-events — packages/benchmark/components/features/availability/components/schedule-copy-dialog.tsx:25
   Enforce a clickable non-interactive element has at least one keyboard event listener.

262. [warning] no-array-index-as-key — packages/benchmark/components/dashboard/dashboard-stats.tsx:38
   Array index "index" used as key — causes bugs when list is reordered or filtered

263. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-stats.tsx:41
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

264. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-stats.tsx:45
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

265. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-stats.tsx:61
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

266. [warning] no-unused-vars — packages/benchmark/components/features/availability/hooks/use-availability.ts:16
   Parameter 'scheduleId' is declared but never used. Unused parameters should start with a '_'.

267. [warning] no-unused-vars — packages/benchmark/components/features/availability/hooks/use-availability.ts:18
   Variable 'setIsLoading' is declared but never used. Unused variables should start with a '_'.

268. [warning] no-unused-vars — packages/benchmark/components/features/availability/hooks/use-availability.ts:19
   Variable 'setIsSaving' is declared but never used. Unused variables should start with a '_'.

269. [warning] rendering-usetransition-loading — packages/benchmark/components/features/availability/hooks/use-availability.ts:18
   useState for "isLoading" — if this guards a state transition (not an async fetch), consider useTransition instead

270. [warning] js-hoist-intl — packages/benchmark/components/features/availability/components/timezone-select.tsx:35
   new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

271. [warning] js-hoist-intl — packages/benchmark/components/features/availability/hooks/use-timezone.ts:12
   new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

272. [warning] js-hoist-intl — packages/benchmark/components/features/availability/lib/timezone-utils.ts:3
   new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

273. [warning] no-generic-handler-names — packages/benchmark/components/features/booking/actions/confirm-booking-button.tsx:36
   Non-descriptive handler name "handleClick" — name should describe what it does, not when it runs

274. [warning] no-transition-all — packages/benchmark/components/features/booking/actions/confirm-booking-button.tsx:51
   transition: "all" animates every property including layout — list only the properties you animate

275. [warning] no-inline-exhaustive-style — packages/benchmark/components/features/booking/actions/confirm-booking-button.tsx:38
   13 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse

276. [warning] design-no-three-period-ellipsis — packages/benchmark/components/dispatchers/element-renderer.tsx:52
   Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)

277. [warning] no-array-index-as-key — packages/benchmark/components/dashboard/dashboard-nav.tsx:32
   Array index "index" used as key — causes bugs when list is reordered or filtered

278. [warning] design-no-redundant-size-axes — packages/benchmark/components/dashboard/dashboard-nav.tsx:40
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

279. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-nav.tsx:43
   bg-indigo-100 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

280. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-nav.tsx:43
   text-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

281. [warning] no-img-element — packages/benchmark/components/data-display/avatar.tsx:66
   Using `<img>` could result in slower LCP and higher bandwidth.

282. [warning] nextjs-no-img-element — packages/benchmark/components/data-display/avatar.tsx:66
   Use next/image instead of <img> — provides automatic optimization, lazy loading, and responsive srcset

283. [warning] design-no-space-on-flex-children — packages/benchmark/components/dashboard/dashboard-header.tsx:28
   space-x-1 on a flex/grid parent — use gap-x-1 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL

284. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-header.tsx:28
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

285. [warning] no-array-index-as-key — packages/benchmark/components/dashboard/dashboard-header.tsx:30
   Array index "index" used as key — causes bugs when list is reordered or filtered

286. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-header.tsx:35
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

287. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-header.tsx:40
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

288. [warning] design-no-bold-heading — packages/benchmark/components/dashboard/dashboard-header.tsx:48
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

289. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-header.tsx:48
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

290. [warning] design-no-default-tailwind-palette — packages/benchmark/components/dashboard/dashboard-header.tsx:52
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

291. [warning] no-unused-expressions — packages/benchmark/components/data-display/data-table.tsx:110
   Expected expression to be used

292. [warning] prefer-useReducer — packages/benchmark/components/data-display/data-table.tsx:27
   Component "DataTable" has 5 useState calls — consider useReducer for related state

293. [warning] js-tosorted-immutable — packages/benchmark/components/data-display/data-table.tsx:47
   [...array].sort() — use array.toSorted() for immutable sorting (ES2023)

294. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:67
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

295. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:70
   border-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

296. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:72
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

297. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:99
   divide-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

298. [warning] no-array-index-as-key — packages/benchmark/components/data-display/data-table.tsx:101
   Array index "i" used as key — causes bugs when list is reordered or filtered

299. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:101
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

300. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:117
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

301. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/data-table.tsx:127
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

302. [warning] no-static-element-interactions — packages/benchmark/components/data-display/list-item.tsx:27
   Static HTML elements with event handlers require a role.

303. [warning] click-events-have-key-events — packages/benchmark/components/data-display/list-item.tsx:27
   Enforce a clickable non-interactive element has at least one keyboard event listener.

304. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/list-item.tsx:39
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

305. [warning] design-no-default-tailwind-palette — packages/benchmark/components/data-display/list-item.tsx:43
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

306. [warning] js-tosorted-immutable — packages/benchmark/components/features/analytics/analytics-table.tsx:38
   [...array].sort() — use array.toSorted() for immutable sorting (ES2023)

307. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:77
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

308. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:83
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

309. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:100
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

310. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:101
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

311. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:104
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

312. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:107
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

313. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:110
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

314. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:113
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

315. [warning] design-no-default-tailwind-palette — packages/benchmark/components/features/analytics/analytics-table.tsx:123
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

316. [warning] design-no-default-tailwind-palette — packages/benchmark/co

---

_Issue body truncated. See the full report at [react.review/dashboard](https://react.review/dashboard)._

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions