@empline/preflight 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1589) hide show
  1. package/README.md +540 -0
  2. package/dist/bin/approve.d.ts +24 -0
  3. package/dist/bin/approve.d.ts.map +1 -0
  4. package/dist/bin/approve.js +249 -0
  5. package/dist/bin/approve.js.map +1 -0
  6. package/dist/bin/audit.d.ts +64 -0
  7. package/dist/bin/audit.d.ts.map +1 -0
  8. package/dist/bin/audit.js +464 -0
  9. package/dist/bin/audit.js.map +1 -0
  10. package/dist/bin/install-hooks.d.ts +20 -0
  11. package/dist/bin/install-hooks.d.ts.map +1 -0
  12. package/dist/bin/install-hooks.js +204 -0
  13. package/dist/bin/install-hooks.js.map +1 -0
  14. package/dist/bin/preflight.d.ts +21 -0
  15. package/dist/bin/preflight.d.ts.map +1 -0
  16. package/dist/bin/preflight.js +218 -0
  17. package/dist/bin/preflight.js.map +1 -0
  18. package/dist/bin/preinstall.d.ts +15 -0
  19. package/dist/bin/preinstall.d.ts.map +1 -0
  20. package/dist/bin/preinstall.js +247 -0
  21. package/dist/bin/preinstall.js.map +1 -0
  22. package/dist/bin/review-drift.d.ts +17 -0
  23. package/dist/bin/review-drift.d.ts.map +1 -0
  24. package/dist/bin/review-drift.js +292 -0
  25. package/dist/bin/review-drift.js.map +1 -0
  26. package/dist/bin/review.d.ts +22 -0
  27. package/dist/bin/review.d.ts.map +1 -0
  28. package/dist/bin/review.js +179 -0
  29. package/dist/bin/review.js.map +1 -0
  30. package/dist/bin/submit-drift.d.ts +36 -0
  31. package/dist/bin/submit-drift.d.ts.map +1 -0
  32. package/dist/bin/submit-drift.js +534 -0
  33. package/dist/bin/submit-drift.js.map +1 -0
  34. package/dist/bin/submit.d.ts +23 -0
  35. package/dist/bin/submit.d.ts.map +1 -0
  36. package/dist/bin/submit.js +263 -0
  37. package/dist/bin/submit.js.map +1 -0
  38. package/dist/bin/watch.d.ts +27 -0
  39. package/dist/bin/watch.d.ts.map +1 -0
  40. package/dist/bin/watch.js +327 -0
  41. package/dist/bin/watch.js.map +1 -0
  42. package/dist/checks/ai/card-size-detection-validation.d.ts +23 -0
  43. package/dist/checks/ai/card-size-detection-validation.d.ts.map +1 -0
  44. package/dist/checks/ai/card-size-detection-validation.js +455 -0
  45. package/dist/checks/ai/card-size-detection-validation.js.map +1 -0
  46. package/dist/checks/ai/code-quality-ai.d.ts +17 -0
  47. package/dist/checks/ai/code-quality-ai.d.ts.map +1 -0
  48. package/dist/checks/ai/code-quality-ai.js +399 -0
  49. package/dist/checks/ai/code-quality-ai.js.map +1 -0
  50. package/dist/checks/ai/recognition-pipeline-validation.d.ts +30 -0
  51. package/dist/checks/ai/recognition-pipeline-validation.d.ts.map +1 -0
  52. package/dist/checks/ai/recognition-pipeline-validation.js +882 -0
  53. package/dist/checks/ai/recognition-pipeline-validation.js.map +1 -0
  54. package/dist/checks/ai/series-subset-hierarchy.d.ts +22 -0
  55. package/dist/checks/ai/series-subset-hierarchy.d.ts.map +1 -0
  56. package/dist/checks/ai/series-subset-hierarchy.js +374 -0
  57. package/dist/checks/ai/series-subset-hierarchy.js.map +1 -0
  58. package/dist/checks/api/api-completeness-check.d.ts +27 -0
  59. package/dist/checks/api/api-completeness-check.d.ts.map +1 -0
  60. package/dist/checks/api/api-completeness-check.js +326 -0
  61. package/dist/checks/api/api-completeness-check.js.map +1 -0
  62. package/dist/checks/api/api-contract-validation.d.ts +24 -0
  63. package/dist/checks/api/api-contract-validation.d.ts.map +1 -0
  64. package/dist/checks/api/api-contract-validation.js +219 -0
  65. package/dist/checks/api/api-contract-validation.js.map +1 -0
  66. package/dist/checks/api/api-error-abstraction.d.ts +29 -0
  67. package/dist/checks/api/api-error-abstraction.d.ts.map +1 -0
  68. package/dist/checks/api/api-error-abstraction.js +245 -0
  69. package/dist/checks/api/api-error-abstraction.js.map +1 -0
  70. package/dist/checks/api/pagination-validation.d.ts +21 -0
  71. package/dist/checks/api/pagination-validation.d.ts.map +1 -0
  72. package/dist/checks/api/pagination-validation.js +282 -0
  73. package/dist/checks/api/pagination-validation.js.map +1 -0
  74. package/dist/checks/api/response-consistency.d.ts +21 -0
  75. package/dist/checks/api/response-consistency.d.ts.map +1 -0
  76. package/dist/checks/api/response-consistency.js +246 -0
  77. package/dist/checks/api/response-consistency.js.map +1 -0
  78. package/dist/checks/api/response-schema-validation.d.ts +25 -0
  79. package/dist/checks/api/response-schema-validation.d.ts.map +1 -0
  80. package/dist/checks/api/response-schema-validation.js +294 -0
  81. package/dist/checks/api/response-schema-validation.js.map +1 -0
  82. package/dist/checks/api/response-time-budget.d.ts +18 -0
  83. package/dist/checks/api/response-time-budget.d.ts.map +1 -0
  84. package/dist/checks/api/response-time-budget.js +312 -0
  85. package/dist/checks/api/response-time-budget.js.map +1 -0
  86. package/dist/checks/api/variant-switching-integrity.d.ts +23 -0
  87. package/dist/checks/api/variant-switching-integrity.d.ts.map +1 -0
  88. package/dist/checks/api/variant-switching-integrity.js +312 -0
  89. package/dist/checks/api/variant-switching-integrity.js.map +1 -0
  90. package/dist/checks/architecture/admin-page-consistency.d.ts +28 -0
  91. package/dist/checks/architecture/admin-page-consistency.d.ts.map +1 -0
  92. package/dist/checks/architecture/admin-page-consistency.js +300 -0
  93. package/dist/checks/architecture/admin-page-consistency.js.map +1 -0
  94. package/dist/checks/architecture/backend-ui-coverage.d.ts +26 -0
  95. package/dist/checks/architecture/backend-ui-coverage.d.ts.map +1 -0
  96. package/dist/checks/architecture/backend-ui-coverage.js +565 -0
  97. package/dist/checks/architecture/backend-ui-coverage.js.map +1 -0
  98. package/dist/checks/architecture/component-architecture.d.ts +27 -0
  99. package/dist/checks/architecture/component-architecture.d.ts.map +1 -0
  100. package/dist/checks/architecture/component-architecture.js +517 -0
  101. package/dist/checks/architecture/component-architecture.js.map +1 -0
  102. package/dist/checks/architecture/component-consolidation-opportunities.d.ts +29 -0
  103. package/dist/checks/architecture/component-consolidation-opportunities.d.ts.map +1 -0
  104. package/dist/checks/architecture/component-consolidation-opportunities.js +344 -0
  105. package/dist/checks/architecture/component-consolidation-opportunities.js.map +1 -0
  106. package/dist/checks/architecture/orphaned-pages-detection.d.ts +35 -0
  107. package/dist/checks/architecture/orphaned-pages-detection.d.ts.map +1 -0
  108. package/dist/checks/architecture/orphaned-pages-detection.js +470 -0
  109. package/dist/checks/architecture/orphaned-pages-detection.js.map +1 -0
  110. package/dist/checks/architecture/primitive-component-enforcement.d.ts +26 -0
  111. package/dist/checks/architecture/primitive-component-enforcement.d.ts.map +1 -0
  112. package/dist/checks/architecture/primitive-component-enforcement.js +311 -0
  113. package/dist/checks/architecture/primitive-component-enforcement.js.map +1 -0
  114. package/dist/checks/architecture/shared-component-enforcement.d.ts +34 -0
  115. package/dist/checks/architecture/shared-component-enforcement.d.ts.map +1 -0
  116. package/dist/checks/architecture/shared-component-enforcement.js +725 -0
  117. package/dist/checks/architecture/shared-component-enforcement.js.map +1 -0
  118. package/dist/checks/async-cleanup-validation.d.ts +22 -0
  119. package/dist/checks/async-cleanup-validation.d.ts.map +1 -0
  120. package/dist/checks/async-cleanup-validation.js +193 -0
  121. package/dist/checks/async-cleanup-validation.js.map +1 -0
  122. package/dist/checks/auth/auth-page-consistency.d.ts +25 -0
  123. package/dist/checks/auth/auth-page-consistency.d.ts.map +1 -0
  124. package/dist/checks/auth/auth-page-consistency.js +582 -0
  125. package/dist/checks/auth/auth-page-consistency.js.map +1 -0
  126. package/dist/checks/auth/authenticated-redirect.d.ts +56 -0
  127. package/dist/checks/auth/authenticated-redirect.d.ts.map +1 -0
  128. package/dist/checks/auth/authenticated-redirect.js +392 -0
  129. package/dist/checks/auth/authenticated-redirect.js.map +1 -0
  130. package/dist/checks/auth/role-validation.d.ts +32 -0
  131. package/dist/checks/auth/role-validation.d.ts.map +1 -0
  132. package/dist/checks/auth/role-validation.js +256 -0
  133. package/dist/checks/auth/role-validation.js.map +1 -0
  134. package/dist/checks/auth/session-integrity-validation.d.ts +59 -0
  135. package/dist/checks/auth/session-integrity-validation.d.ts.map +1 -0
  136. package/dist/checks/auth/session-integrity-validation.js +405 -0
  137. package/dist/checks/auth/session-integrity-validation.js.map +1 -0
  138. package/dist/checks/auth/session-security.d.ts +69 -0
  139. package/dist/checks/auth/session-security.d.ts.map +1 -0
  140. package/dist/checks/auth/session-security.js +420 -0
  141. package/dist/checks/auth/session-security.js.map +1 -0
  142. package/dist/checks/auth/session-update-safety.d.ts +97 -0
  143. package/dist/checks/auth/session-update-safety.d.ts.map +1 -0
  144. package/dist/checks/auth/session-update-safety.js +700 -0
  145. package/dist/checks/auth/session-update-safety.js.map +1 -0
  146. package/dist/checks/auth/store-access-delegation.d.ts +35 -0
  147. package/dist/checks/auth/store-access-delegation.d.ts.map +1 -0
  148. package/dist/checks/auth/store-access-delegation.js +344 -0
  149. package/dist/checks/auth/store-access-delegation.js.map +1 -0
  150. package/dist/checks/business/business-invariants.d.ts +21 -0
  151. package/dist/checks/business/business-invariants.d.ts.map +1 -0
  152. package/dist/checks/business/business-invariants.js +177 -0
  153. package/dist/checks/business/business-invariants.js.map +1 -0
  154. package/dist/checks/business/currency-precision.d.ts +21 -0
  155. package/dist/checks/business/currency-precision.d.ts.map +1 -0
  156. package/dist/checks/business/currency-precision.js +342 -0
  157. package/dist/checks/business/currency-precision.js.map +1 -0
  158. package/dist/checks/business/idempotency-key-validation.d.ts +27 -0
  159. package/dist/checks/business/idempotency-key-validation.d.ts.map +1 -0
  160. package/dist/checks/business/idempotency-key-validation.js +275 -0
  161. package/dist/checks/business/idempotency-key-validation.js.map +1 -0
  162. package/dist/checks/business/image-metadata-injection.d.ts +20 -0
  163. package/dist/checks/business/image-metadata-injection.d.ts.map +1 -0
  164. package/dist/checks/business/image-metadata-injection.js +370 -0
  165. package/dist/checks/business/image-metadata-injection.js.map +1 -0
  166. package/dist/checks/business/image-processing-config-sync.d.ts +36 -0
  167. package/dist/checks/business/image-processing-config-sync.d.ts.map +1 -0
  168. package/dist/checks/business/image-processing-config-sync.js +442 -0
  169. package/dist/checks/business/image-processing-config-sync.js.map +1 -0
  170. package/dist/checks/business/image-upload-optimization.d.ts +21 -0
  171. package/dist/checks/business/image-upload-optimization.d.ts.map +1 -0
  172. package/dist/checks/business/image-upload-optimization.js +274 -0
  173. package/dist/checks/business/image-upload-optimization.js.map +1 -0
  174. package/dist/checks/business/inventory-atomicity-validation.d.ts +20 -0
  175. package/dist/checks/business/inventory-atomicity-validation.d.ts.map +1 -0
  176. package/dist/checks/business/inventory-atomicity-validation.js +263 -0
  177. package/dist/checks/business/inventory-atomicity-validation.js.map +1 -0
  178. package/dist/checks/business/listing-status-validation.d.ts +28 -0
  179. package/dist/checks/business/listing-status-validation.d.ts.map +1 -0
  180. package/dist/checks/business/listing-status-validation.js +274 -0
  181. package/dist/checks/business/listing-status-validation.js.map +1 -0
  182. package/dist/checks/business/order-state-machine-validation.d.ts +20 -0
  183. package/dist/checks/business/order-state-machine-validation.d.ts.map +1 -0
  184. package/dist/checks/business/order-state-machine-validation.js +294 -0
  185. package/dist/checks/business/order-state-machine-validation.js.map +1 -0
  186. package/dist/checks/business/price-calculation-validation.d.ts +20 -0
  187. package/dist/checks/business/price-calculation-validation.d.ts.map +1 -0
  188. package/dist/checks/business/price-calculation-validation.js +258 -0
  189. package/dist/checks/business/price-calculation-validation.js.map +1 -0
  190. package/dist/checks/business/price-display-validation.d.ts +22 -0
  191. package/dist/checks/business/price-display-validation.d.ts.map +1 -0
  192. package/dist/checks/business/price-display-validation.js +152 -0
  193. package/dist/checks/business/price-display-validation.js.map +1 -0
  194. package/dist/checks/business/resilient-recognition-validation.d.ts +28 -0
  195. package/dist/checks/business/resilient-recognition-validation.d.ts.map +1 -0
  196. package/dist/checks/business/resilient-recognition-validation.js +241 -0
  197. package/dist/checks/business/resilient-recognition-validation.js.map +1 -0
  198. package/dist/checks/business/store-approval-listing-filter.d.ts +21 -0
  199. package/dist/checks/business/store-approval-listing-filter.d.ts.map +1 -0
  200. package/dist/checks/business/store-approval-listing-filter.js +188 -0
  201. package/dist/checks/business/store-approval-listing-filter.js.map +1 -0
  202. package/dist/checks/business/timezone-handling.d.ts +28 -0
  203. package/dist/checks/business/timezone-handling.d.ts.map +1 -0
  204. package/dist/checks/business/timezone-handling.js +303 -0
  205. package/dist/checks/business/timezone-handling.js.map +1 -0
  206. package/dist/checks/card-processing/card-property-consistency.d.ts +22 -0
  207. package/dist/checks/card-processing/card-property-consistency.d.ts.map +1 -0
  208. package/dist/checks/card-processing/card-property-consistency.js +317 -0
  209. package/dist/checks/card-processing/card-property-consistency.js.map +1 -0
  210. package/dist/checks/card-processing/card-size-consistency.d.ts +21 -0
  211. package/dist/checks/card-processing/card-size-consistency.d.ts.map +1 -0
  212. package/dist/checks/card-processing/card-size-consistency.js +324 -0
  213. package/dist/checks/card-processing/card-size-consistency.js.map +1 -0
  214. package/dist/checks/card-processing/catalog-fk-safety-validation.d.ts +29 -0
  215. package/dist/checks/card-processing/catalog-fk-safety-validation.d.ts.map +1 -0
  216. package/dist/checks/card-processing/catalog-fk-safety-validation.js +280 -0
  217. package/dist/checks/card-processing/catalog-fk-safety-validation.js.map +1 -0
  218. package/dist/checks/card-processing/database-first-pattern.d.ts +26 -0
  219. package/dist/checks/card-processing/database-first-pattern.d.ts.map +1 -0
  220. package/dist/checks/card-processing/database-first-pattern.js +213 -0
  221. package/dist/checks/card-processing/database-first-pattern.js.map +1 -0
  222. package/dist/checks/card-processing/image-workflow-validation.d.ts +49 -0
  223. package/dist/checks/card-processing/image-workflow-validation.d.ts.map +1 -0
  224. package/dist/checks/card-processing/image-workflow-validation.js +511 -0
  225. package/dist/checks/card-processing/image-workflow-validation.js.map +1 -0
  226. package/dist/checks/card-processing/prisma-enum-sync.d.ts +21 -0
  227. package/dist/checks/card-processing/prisma-enum-sync.d.ts.map +1 -0
  228. package/dist/checks/card-processing/prisma-enum-sync.js +304 -0
  229. package/dist/checks/card-processing/prisma-enum-sync.js.map +1 -0
  230. package/dist/checks/card-processing/recognition-progress-validation.d.ts +29 -0
  231. package/dist/checks/card-processing/recognition-progress-validation.d.ts.map +1 -0
  232. package/dist/checks/card-processing/recognition-progress-validation.js +302 -0
  233. package/dist/checks/card-processing/recognition-progress-validation.js.map +1 -0
  234. package/dist/checks/card-processing/reftable-config-sync.d.ts +26 -0
  235. package/dist/checks/card-processing/reftable-config-sync.d.ts.map +1 -0
  236. package/dist/checks/card-processing/reftable-config-sync.js +171 -0
  237. package/dist/checks/card-processing/reftable-config-sync.js.map +1 -0
  238. package/dist/checks/card-processing/test-image-processing-pipeline.d.ts +24 -0
  239. package/dist/checks/card-processing/test-image-processing-pipeline.d.ts.map +1 -0
  240. package/dist/checks/card-processing/test-image-processing-pipeline.js +188 -0
  241. package/dist/checks/card-processing/test-image-processing-pipeline.js.map +1 -0
  242. package/dist/checks/code-hygiene/any-type-detection.d.ts +30 -0
  243. package/dist/checks/code-hygiene/any-type-detection.d.ts.map +1 -0
  244. package/dist/checks/code-hygiene/any-type-detection.js +214 -0
  245. package/dist/checks/code-hygiene/any-type-detection.js.map +1 -0
  246. package/dist/checks/code-hygiene/api-error-handling.d.ts +29 -0
  247. package/dist/checks/code-hygiene/api-error-handling.d.ts.map +1 -0
  248. package/dist/checks/code-hygiene/api-error-handling.js +285 -0
  249. package/dist/checks/code-hygiene/api-error-handling.js.map +1 -0
  250. package/dist/checks/code-hygiene/broken-template-literals.d.ts +25 -0
  251. package/dist/checks/code-hygiene/broken-template-literals.d.ts.map +1 -0
  252. package/dist/checks/code-hygiene/broken-template-literals.js +220 -0
  253. package/dist/checks/code-hygiene/broken-template-literals.js.map +1 -0
  254. package/dist/checks/code-hygiene/comment-hygiene.d.ts +27 -0
  255. package/dist/checks/code-hygiene/comment-hygiene.d.ts.map +1 -0
  256. package/dist/checks/code-hygiene/comment-hygiene.js +428 -0
  257. package/dist/checks/code-hygiene/comment-hygiene.js.map +1 -0
  258. package/dist/checks/code-hygiene/console-chars-sync.d.ts +27 -0
  259. package/dist/checks/code-hygiene/console-chars-sync.d.ts.map +1 -0
  260. package/dist/checks/code-hygiene/console-chars-sync.js +420 -0
  261. package/dist/checks/code-hygiene/console-chars-sync.js.map +1 -0
  262. package/dist/checks/code-hygiene/console-log-detection.d.ts +27 -0
  263. package/dist/checks/code-hygiene/console-log-detection.d.ts.map +1 -0
  264. package/dist/checks/code-hygiene/console-log-detection.js +202 -0
  265. package/dist/checks/code-hygiene/console-log-detection.js.map +1 -0
  266. package/dist/checks/code-hygiene/dead-code-detection.d.ts +28 -0
  267. package/dist/checks/code-hygiene/dead-code-detection.d.ts.map +1 -0
  268. package/dist/checks/code-hygiene/dead-code-detection.js +217 -0
  269. package/dist/checks/code-hygiene/dead-code-detection.js.map +1 -0
  270. package/dist/checks/code-hygiene/decorative-separators.d.ts +33 -0
  271. package/dist/checks/code-hygiene/decorative-separators.d.ts.map +1 -0
  272. package/dist/checks/code-hygiene/decorative-separators.js +259 -0
  273. package/dist/checks/code-hygiene/decorative-separators.js.map +1 -0
  274. package/dist/checks/code-hygiene/empty-catch-detection.d.ts +25 -0
  275. package/dist/checks/code-hygiene/empty-catch-detection.d.ts.map +1 -0
  276. package/dist/checks/code-hygiene/empty-catch-detection.js +190 -0
  277. package/dist/checks/code-hygiene/empty-catch-detection.js.map +1 -0
  278. package/dist/checks/code-hygiene/fix-hardcoded-emoji.d.ts +19 -0
  279. package/dist/checks/code-hygiene/fix-hardcoded-emoji.d.ts.map +1 -0
  280. package/dist/checks/code-hygiene/fix-hardcoded-emoji.js +335 -0
  281. package/dist/checks/code-hygiene/fix-hardcoded-emoji.js.map +1 -0
  282. package/dist/checks/code-hygiene/log-level-misuse.d.ts +26 -0
  283. package/dist/checks/code-hygiene/log-level-misuse.d.ts.map +1 -0
  284. package/dist/checks/code-hygiene/log-level-misuse.js +390 -0
  285. package/dist/checks/code-hygiene/log-level-misuse.js.map +1 -0
  286. package/dist/checks/code-hygiene/missing-logger-import.d.ts +17 -0
  287. package/dist/checks/code-hygiene/missing-logger-import.d.ts.map +1 -0
  288. package/dist/checks/code-hygiene/missing-logger-import.js +161 -0
  289. package/dist/checks/code-hygiene/missing-logger-import.js.map +1 -0
  290. package/dist/checks/code-hygiene/root-file-hygiene.d.ts +32 -0
  291. package/dist/checks/code-hygiene/root-file-hygiene.d.ts.map +1 -0
  292. package/dist/checks/code-hygiene/root-file-hygiene.js +288 -0
  293. package/dist/checks/code-hygiene/root-file-hygiene.js.map +1 -0
  294. package/dist/checks/code-hygiene/todo-tracking.d.ts +25 -0
  295. package/dist/checks/code-hygiene/todo-tracking.d.ts.map +1 -0
  296. package/dist/checks/code-hygiene/todo-tracking.js +213 -0
  297. package/dist/checks/code-hygiene/todo-tracking.js.map +1 -0
  298. package/dist/checks/code-hygiene/unicode-console-compatibility.d.ts +22 -0
  299. package/dist/checks/code-hygiene/unicode-console-compatibility.d.ts.map +1 -0
  300. package/dist/checks/code-hygiene/unicode-console-compatibility.js +240 -0
  301. package/dist/checks/code-hygiene/unicode-console-compatibility.js.map +1 -0
  302. package/dist/checks/code-quality/api-route-patterns.d.ts +30 -0
  303. package/dist/checks/code-quality/api-route-patterns.d.ts.map +1 -0
  304. package/dist/checks/code-quality/api-route-patterns.js +356 -0
  305. package/dist/checks/code-quality/api-route-patterns.js.map +1 -0
  306. package/dist/checks/code-quality/barrel-export-orphans.d.ts +21 -0
  307. package/dist/checks/code-quality/barrel-export-orphans.d.ts.map +1 -0
  308. package/dist/checks/code-quality/barrel-export-orphans.js +327 -0
  309. package/dist/checks/code-quality/barrel-export-orphans.js.map +1 -0
  310. package/dist/checks/code-quality/barrel-export-validation.d.ts +19 -0
  311. package/dist/checks/code-quality/barrel-export-validation.d.ts.map +1 -0
  312. package/dist/checks/code-quality/barrel-export-validation.js +315 -0
  313. package/dist/checks/code-quality/barrel-export-validation.js.map +1 -0
  314. package/dist/checks/code-quality/circular-dependency-detection.d.ts +20 -0
  315. package/dist/checks/code-quality/circular-dependency-detection.d.ts.map +1 -0
  316. package/dist/checks/code-quality/circular-dependency-detection.js +322 -0
  317. package/dist/checks/code-quality/circular-dependency-detection.js.map +1 -0
  318. package/dist/checks/code-quality/deprecated-patterns.d.ts +23 -0
  319. package/dist/checks/code-quality/deprecated-patterns.d.ts.map +1 -0
  320. package/dist/checks/code-quality/deprecated-patterns.js +366 -0
  321. package/dist/checks/code-quality/deprecated-patterns.js.map +1 -0
  322. package/dist/checks/code-quality/duplicate-implementation-detection.d.ts +21 -0
  323. package/dist/checks/code-quality/duplicate-implementation-detection.d.ts.map +1 -0
  324. package/dist/checks/code-quality/duplicate-implementation-detection.js +165 -0
  325. package/dist/checks/code-quality/duplicate-implementation-detection.js.map +1 -0
  326. package/dist/checks/code-quality/duplicate-logic-detection.d.ts +39 -0
  327. package/dist/checks/code-quality/duplicate-logic-detection.d.ts.map +1 -0
  328. package/dist/checks/code-quality/duplicate-logic-detection.js +269 -0
  329. package/dist/checks/code-quality/duplicate-logic-detection.js.map +1 -0
  330. package/dist/checks/code-quality/feature-flag-hygiene.d.ts +26 -0
  331. package/dist/checks/code-quality/feature-flag-hygiene.d.ts.map +1 -0
  332. package/dist/checks/code-quality/feature-flag-hygiene.js +357 -0
  333. package/dist/checks/code-quality/feature-flag-hygiene.js.map +1 -0
  334. package/dist/checks/code-quality/grading-config-usage.d.ts +30 -0
  335. package/dist/checks/code-quality/grading-config-usage.d.ts.map +1 -0
  336. package/dist/checks/code-quality/grading-config-usage.js +213 -0
  337. package/dist/checks/code-quality/grading-config-usage.js.map +1 -0
  338. package/dist/checks/code-quality/legacy-code-detection.d.ts +24 -0
  339. package/dist/checks/code-quality/legacy-code-detection.d.ts.map +1 -0
  340. package/dist/checks/code-quality/legacy-code-detection.js +287 -0
  341. package/dist/checks/code-quality/legacy-code-detection.js.map +1 -0
  342. package/dist/checks/code-quality/legacy-data-pattern-detection.d.ts +36 -0
  343. package/dist/checks/code-quality/legacy-data-pattern-detection.d.ts.map +1 -0
  344. package/dist/checks/code-quality/legacy-data-pattern-detection.js +460 -0
  345. package/dist/checks/code-quality/legacy-data-pattern-detection.js.map +1 -0
  346. package/dist/checks/code-quality/magic-number-detection.d.ts +30 -0
  347. package/dist/checks/code-quality/magic-number-detection.d.ts.map +1 -0
  348. package/dist/checks/code-quality/magic-number-detection.js +402 -0
  349. package/dist/checks/code-quality/magic-number-detection.js.map +1 -0
  350. package/dist/checks/code-quality/mock-function-detection.d.ts +33 -0
  351. package/dist/checks/code-quality/mock-function-detection.d.ts.map +1 -0
  352. package/dist/checks/code-quality/mock-function-detection.js +247 -0
  353. package/dist/checks/code-quality/mock-function-detection.js.map +1 -0
  354. package/dist/checks/code-quality/no-console-production.d.ts +27 -0
  355. package/dist/checks/code-quality/no-console-production.d.ts.map +1 -0
  356. package/dist/checks/code-quality/no-console-production.js +269 -0
  357. package/dist/checks/code-quality/no-console-production.js.map +1 -0
  358. package/dist/checks/code-quality/orphaned-module-detection.d.ts +20 -0
  359. package/dist/checks/code-quality/orphaned-module-detection.d.ts.map +1 -0
  360. package/dist/checks/code-quality/orphaned-module-detection.js +287 -0
  361. package/dist/checks/code-quality/orphaned-module-detection.js.map +1 -0
  362. package/dist/checks/code-quality/shared-utility-gaps.d.ts +28 -0
  363. package/dist/checks/code-quality/shared-utility-gaps.d.ts.map +1 -0
  364. package/dist/checks/code-quality/shared-utility-gaps.js +414 -0
  365. package/dist/checks/code-quality/shared-utility-gaps.js.map +1 -0
  366. package/dist/checks/code-quality/stub-script-detection.d.ts +33 -0
  367. package/dist/checks/code-quality/stub-script-detection.d.ts.map +1 -0
  368. package/dist/checks/code-quality/stub-script-detection.js +214 -0
  369. package/dist/checks/code-quality/stub-script-detection.js.map +1 -0
  370. package/dist/checks/code-quality/typescript-type-safety.d.ts +31 -0
  371. package/dist/checks/code-quality/typescript-type-safety.d.ts.map +1 -0
  372. package/dist/checks/code-quality/typescript-type-safety.js +228 -0
  373. package/dist/checks/code-quality/typescript-type-safety.js.map +1 -0
  374. package/dist/checks/code-quality/unused-lib-detection.d.ts +20 -0
  375. package/dist/checks/code-quality/unused-lib-detection.d.ts.map +1 -0
  376. package/dist/checks/code-quality/unused-lib-detection.js +262 -0
  377. package/dist/checks/code-quality/unused-lib-detection.js.map +1 -0
  378. package/dist/checks/component-imports.d.ts +15 -0
  379. package/dist/checks/component-imports.d.ts.map +1 -0
  380. package/dist/checks/component-imports.js +232 -0
  381. package/dist/checks/component-imports.js.map +1 -0
  382. package/dist/checks/config/configuration-drift-detection.d.ts +24 -0
  383. package/dist/checks/config/configuration-drift-detection.d.ts.map +1 -0
  384. package/dist/checks/config/configuration-drift-detection.js +286 -0
  385. package/dist/checks/config/configuration-drift-detection.js.map +1 -0
  386. package/dist/checks/config/env-completeness.d.ts +20 -0
  387. package/dist/checks/config/env-completeness.d.ts.map +1 -0
  388. package/dist/checks/config/env-completeness.js +193 -0
  389. package/dist/checks/config/env-completeness.js.map +1 -0
  390. package/dist/checks/coverage-gap-analysis.d.ts +21 -0
  391. package/dist/checks/coverage-gap-analysis.d.ts.map +1 -0
  392. package/dist/checks/coverage-gap-analysis.js +779 -0
  393. package/dist/checks/coverage-gap-analysis.js.map +1 -0
  394. package/dist/checks/css/dead-css-detection.d.ts +15 -0
  395. package/dist/checks/css/dead-css-detection.d.ts.map +1 -0
  396. package/dist/checks/css/dead-css-detection.js +225 -0
  397. package/dist/checks/css/dead-css-detection.js.map +1 -0
  398. package/dist/checks/css/sticky-header-validation.d.ts +19 -0
  399. package/dist/checks/css/sticky-header-validation.d.ts.map +1 -0
  400. package/dist/checks/css/sticky-header-validation.js +256 -0
  401. package/dist/checks/css/sticky-header-validation.js.map +1 -0
  402. package/dist/checks/data-integrity/cart-data-integrity.d.ts +21 -0
  403. package/dist/checks/data-integrity/cart-data-integrity.d.ts.map +1 -0
  404. package/dist/checks/data-integrity/cart-data-integrity.js +242 -0
  405. package/dist/checks/data-integrity/cart-data-integrity.js.map +1 -0
  406. package/dist/checks/data-integrity/entity-casing-validation.d.ts +24 -0
  407. package/dist/checks/data-integrity/entity-casing-validation.d.ts.map +1 -0
  408. package/dist/checks/data-integrity/entity-casing-validation.js +278 -0
  409. package/dist/checks/data-integrity/entity-casing-validation.js.map +1 -0
  410. package/dist/checks/data-integrity/enum-special-chars-validation.d.ts +27 -0
  411. package/dist/checks/data-integrity/enum-special-chars-validation.d.ts.map +1 -0
  412. package/dist/checks/data-integrity/enum-special-chars-validation.js +100 -0
  413. package/dist/checks/data-integrity/enum-special-chars-validation.js.map +1 -0
  414. package/dist/checks/data-integrity/notification-template-alignment.d.ts +23 -0
  415. package/dist/checks/data-integrity/notification-template-alignment.d.ts.map +1 -0
  416. package/dist/checks/data-integrity/notification-template-alignment.js +379 -0
  417. package/dist/checks/data-integrity/notification-template-alignment.js.map +1 -0
  418. package/dist/checks/data-integrity/product-data-flow-validation.d.ts +23 -0
  419. package/dist/checks/data-integrity/product-data-flow-validation.d.ts.map +1 -0
  420. package/dist/checks/data-integrity/product-data-flow-validation.js +576 -0
  421. package/dist/checks/data-integrity/product-data-flow-validation.js.map +1 -0
  422. package/dist/checks/data-integrity/r2-metadata-management.d.ts +18 -0
  423. package/dist/checks/data-integrity/r2-metadata-management.d.ts.map +1 -0
  424. package/dist/checks/data-integrity/r2-metadata-management.js +302 -0
  425. package/dist/checks/data-integrity/r2-metadata-management.js.map +1 -0
  426. package/dist/checks/data-integrity/store-data-integrity.d.ts +20 -0
  427. package/dist/checks/data-integrity/store-data-integrity.d.ts.map +1 -0
  428. package/dist/checks/data-integrity/store-data-integrity.js +405 -0
  429. package/dist/checks/data-integrity/store-data-integrity.js.map +1 -0
  430. package/dist/checks/data-integrity/unwired-functionality.d.ts +23 -0
  431. package/dist/checks/data-integrity/unwired-functionality.d.ts.map +1 -0
  432. package/dist/checks/data-integrity/unwired-functionality.js +556 -0
  433. package/dist/checks/data-integrity/unwired-functionality.js.map +1 -0
  434. package/dist/checks/database/block-db-push.d.ts +30 -0
  435. package/dist/checks/database/block-db-push.d.ts.map +1 -0
  436. package/dist/checks/database/block-db-push.js +144 -0
  437. package/dist/checks/database/block-db-push.js.map +1 -0
  438. package/dist/checks/database/grade-integrity.d.ts +13 -0
  439. package/dist/checks/database/grade-integrity.d.ts.map +1 -0
  440. package/dist/checks/database/grade-integrity.js +134 -0
  441. package/dist/checks/database/grade-integrity.js.map +1 -0
  442. package/dist/checks/database/migration-integrity.d.ts +27 -0
  443. package/dist/checks/database/migration-integrity.d.ts.map +1 -0
  444. package/dist/checks/database/migration-integrity.js +242 -0
  445. package/dist/checks/database/migration-integrity.js.map +1 -0
  446. package/dist/checks/database/migration-reversibility.d.ts +26 -0
  447. package/dist/checks/database/migration-reversibility.d.ts.map +1 -0
  448. package/dist/checks/database/migration-reversibility.js +280 -0
  449. package/dist/checks/database/migration-reversibility.js.map +1 -0
  450. package/dist/checks/database/migration-safety.d.ts +27 -0
  451. package/dist/checks/database/migration-safety.d.ts.map +1 -0
  452. package/dist/checks/database/migration-safety.js +243 -0
  453. package/dist/checks/database/migration-safety.js.map +1 -0
  454. package/dist/checks/database/prisma-client-db-sync.d.ts +25 -0
  455. package/dist/checks/database/prisma-client-db-sync.d.ts.map +1 -0
  456. package/dist/checks/database/prisma-client-db-sync.js +229 -0
  457. package/dist/checks/database/prisma-client-db-sync.js.map +1 -0
  458. package/dist/checks/database/prisma-drift-prevention.d.ts +30 -0
  459. package/dist/checks/database/prisma-drift-prevention.d.ts.map +1 -0
  460. package/dist/checks/database/prisma-drift-prevention.js +617 -0
  461. package/dist/checks/database/prisma-drift-prevention.js.map +1 -0
  462. package/dist/checks/database/prisma-overfetch-detection.d.ts +27 -0
  463. package/dist/checks/database/prisma-overfetch-detection.d.ts.map +1 -0
  464. package/dist/checks/database/prisma-overfetch-detection.js +669 -0
  465. package/dist/checks/database/prisma-overfetch-detection.js.map +1 -0
  466. package/dist/checks/database/prisma-precommit-guard.d.ts +26 -0
  467. package/dist/checks/database/prisma-precommit-guard.d.ts.map +1 -0
  468. package/dist/checks/database/prisma-precommit-guard.js +194 -0
  469. package/dist/checks/database/prisma-precommit-guard.js.map +1 -0
  470. package/dist/checks/database/prisma-schema-syntax.d.ts +18 -0
  471. package/dist/checks/database/prisma-schema-syntax.d.ts.map +1 -0
  472. package/dist/checks/database/prisma-schema-syntax.js +64 -0
  473. package/dist/checks/database/prisma-schema-syntax.js.map +1 -0
  474. package/dist/checks/database/prod-db-guardrail.d.ts +21 -0
  475. package/dist/checks/database/prod-db-guardrail.d.ts.map +1 -0
  476. package/dist/checks/database/prod-db-guardrail.js +190 -0
  477. package/dist/checks/database/prod-db-guardrail.js.map +1 -0
  478. package/dist/checks/database/schema-best-practices.d.ts +25 -0
  479. package/dist/checks/database/schema-best-practices.d.ts.map +1 -0
  480. package/dist/checks/database/schema-best-practices.js +396 -0
  481. package/dist/checks/database/schema-best-practices.js.map +1 -0
  482. package/dist/checks/database/schema-migration-column-sync.d.ts +34 -0
  483. package/dist/checks/database/schema-migration-column-sync.d.ts.map +1 -0
  484. package/dist/checks/database/schema-migration-column-sync.js +574 -0
  485. package/dist/checks/database/schema-migration-column-sync.js.map +1 -0
  486. package/dist/checks/database/seed-coverage-validation.d.ts +30 -0
  487. package/dist/checks/database/seed-coverage-validation.d.ts.map +1 -0
  488. package/dist/checks/database/seed-coverage-validation.js +598 -0
  489. package/dist/checks/database/seed-coverage-validation.js.map +1 -0
  490. package/dist/checks/database/soft-delete-consistency.d.ts +24 -0
  491. package/dist/checks/database/soft-delete-consistency.d.ts.map +1 -0
  492. package/dist/checks/database/soft-delete-consistency.js +273 -0
  493. package/dist/checks/database/soft-delete-consistency.js.map +1 -0
  494. package/dist/checks/database/tcg-seed-validation.d.ts +30 -0
  495. package/dist/checks/database/tcg-seed-validation.d.ts.map +1 -0
  496. package/dist/checks/database/tcg-seed-validation.js +284 -0
  497. package/dist/checks/database/tcg-seed-validation.js.map +1 -0
  498. package/dist/checks/database/transaction-integrity.d.ts +25 -0
  499. package/dist/checks/database/transaction-integrity.d.ts.map +1 -0
  500. package/dist/checks/database/transaction-integrity.js +275 -0
  501. package/dist/checks/database/transaction-integrity.js.map +1 -0
  502. package/dist/checks/database/unused-schema-detection.d.ts +29 -0
  503. package/dist/checks/database/unused-schema-detection.d.ts.map +1 -0
  504. package/dist/checks/database/unused-schema-detection.js +627 -0
  505. package/dist/checks/database/unused-schema-detection.js.map +1 -0
  506. package/dist/checks/dependencies/deprecated-packages.d.ts +17 -0
  507. package/dist/checks/dependencies/deprecated-packages.d.ts.map +1 -0
  508. package/dist/checks/dependencies/deprecated-packages.js +220 -0
  509. package/dist/checks/dependencies/deprecated-packages.js.map +1 -0
  510. package/dist/checks/dependencies/weekly-stable-updates.d.ts +27 -0
  511. package/dist/checks/dependencies/weekly-stable-updates.d.ts.map +1 -0
  512. package/dist/checks/dependencies/weekly-stable-updates.js +490 -0
  513. package/dist/checks/dependencies/weekly-stable-updates.js.map +1 -0
  514. package/dist/checks/deployment/esm-import-extensions.d.ts +24 -0
  515. package/dist/checks/deployment/esm-import-extensions.d.ts.map +1 -0
  516. package/dist/checks/deployment/esm-import-extensions.js +186 -0
  517. package/dist/checks/deployment/esm-import-extensions.js.map +1 -0
  518. package/dist/checks/deployment/pre-production-checklist-quick.d.ts +16 -0
  519. package/dist/checks/deployment/pre-production-checklist-quick.d.ts.map +1 -0
  520. package/dist/checks/deployment/pre-production-checklist-quick.js +146 -0
  521. package/dist/checks/deployment/pre-production-checklist-quick.js.map +1 -0
  522. package/dist/checks/deployment/pre-production-checklist.d.ts +19 -0
  523. package/dist/checks/deployment/pre-production-checklist.d.ts.map +1 -0
  524. package/dist/checks/deployment/pre-production-checklist.js +225 -0
  525. package/dist/checks/deployment/pre-production-checklist.js.map +1 -0
  526. package/dist/checks/deployment/production-config.d.ts +36 -0
  527. package/dist/checks/deployment/production-config.d.ts.map +1 -0
  528. package/dist/checks/deployment/production-config.js +424 -0
  529. package/dist/checks/deployment/production-config.js.map +1 -0
  530. package/dist/checks/deployment/production-env-validation.d.ts +19 -0
  531. package/dist/checks/deployment/production-env-validation.d.ts.map +1 -0
  532. package/dist/checks/deployment/production-env-validation.js +168 -0
  533. package/dist/checks/deployment/production-env-validation.js.map +1 -0
  534. package/dist/checks/deployment/rollback-compatibility.d.ts +28 -0
  535. package/dist/checks/deployment/rollback-compatibility.d.ts.map +1 -0
  536. package/dist/checks/deployment/rollback-compatibility.js +330 -0
  537. package/dist/checks/deployment/rollback-compatibility.js.map +1 -0
  538. package/dist/checks/deprecated-api-usage.d.ts +86 -0
  539. package/dist/checks/deprecated-api-usage.d.ts.map +1 -0
  540. package/dist/checks/deprecated-api-usage.js +382 -0
  541. package/dist/checks/deprecated-api-usage.js.map +1 -0
  542. package/dist/checks/drift-prevention/api-contract-consistency.d.ts +18 -0
  543. package/dist/checks/drift-prevention/api-contract-consistency.d.ts.map +1 -0
  544. package/dist/checks/drift-prevention/api-contract-consistency.js +279 -0
  545. package/dist/checks/drift-prevention/api-contract-consistency.js.map +1 -0
  546. package/dist/checks/drift-prevention/breaking-change-detection.d.ts +29 -0
  547. package/dist/checks/drift-prevention/breaking-change-detection.d.ts.map +1 -0
  548. package/dist/checks/drift-prevention/breaking-change-detection.js +367 -0
  549. package/dist/checks/drift-prevention/breaking-change-detection.js.map +1 -0
  550. package/dist/checks/drift-prevention/component-prop-consistency.d.ts +18 -0
  551. package/dist/checks/drift-prevention/component-prop-consistency.d.ts.map +1 -0
  552. package/dist/checks/drift-prevention/component-prop-consistency.js +289 -0
  553. package/dist/checks/drift-prevention/component-prop-consistency.js.map +1 -0
  554. package/dist/checks/drift-prevention/database-query-patterns.d.ts +19 -0
  555. package/dist/checks/drift-prevention/database-query-patterns.d.ts.map +1 -0
  556. package/dist/checks/drift-prevention/database-query-patterns.js +340 -0
  557. package/dist/checks/drift-prevention/database-query-patterns.js.map +1 -0
  558. package/dist/checks/drift-prevention/design-system-consistency.d.ts +18 -0
  559. package/dist/checks/drift-prevention/design-system-consistency.d.ts.map +1 -0
  560. package/dist/checks/drift-prevention/design-system-consistency.js +419 -0
  561. package/dist/checks/drift-prevention/design-system-consistency.js.map +1 -0
  562. package/dist/checks/drift-prevention/empty-state-consistency.d.ts +17 -0
  563. package/dist/checks/drift-prevention/empty-state-consistency.d.ts.map +1 -0
  564. package/dist/checks/drift-prevention/empty-state-consistency.js +257 -0
  565. package/dist/checks/drift-prevention/empty-state-consistency.js.map +1 -0
  566. package/dist/checks/drift-prevention/performance-regression-detection.d.ts +18 -0
  567. package/dist/checks/drift-prevention/performance-regression-detection.d.ts.map +1 -0
  568. package/dist/checks/drift-prevention/performance-regression-detection.js +444 -0
  569. package/dist/checks/drift-prevention/performance-regression-detection.js.map +1 -0
  570. package/dist/checks/drift-prevention/size-convention-consistency.d.ts +40 -0
  571. package/dist/checks/drift-prevention/size-convention-consistency.d.ts.map +1 -0
  572. package/dist/checks/drift-prevention/size-convention-consistency.js +221 -0
  573. package/dist/checks/drift-prevention/size-convention-consistency.js.map +1 -0
  574. package/dist/checks/drift-prevention/state-management-patterns.d.ts +18 -0
  575. package/dist/checks/drift-prevention/state-management-patterns.d.ts.map +1 -0
  576. package/dist/checks/drift-prevention/state-management-patterns.js +240 -0
  577. package/dist/checks/drift-prevention/state-management-patterns.js.map +1 -0
  578. package/dist/checks/e2e/e2e-action-outcome-validator.d.ts +22 -0
  579. package/dist/checks/e2e/e2e-action-outcome-validator.d.ts.map +1 -0
  580. package/dist/checks/e2e/e2e-action-outcome-validator.js +295 -0
  581. package/dist/checks/e2e/e2e-action-outcome-validator.js.map +1 -0
  582. package/dist/checks/e2e/e2e-interaction-coverage-scan.d.ts +22 -0
  583. package/dist/checks/e2e/e2e-interaction-coverage-scan.d.ts.map +1 -0
  584. package/dist/checks/e2e/e2e-interaction-coverage-scan.js +1665 -0
  585. package/dist/checks/e2e/e2e-interaction-coverage-scan.js.map +1 -0
  586. package/dist/checks/e2e/e2e-interaction-regression.d.ts +20 -0
  587. package/dist/checks/e2e/e2e-interaction-regression.d.ts.map +1 -0
  588. package/dist/checks/e2e/e2e-interaction-regression.js +1042 -0
  589. package/dist/checks/e2e/e2e-interaction-regression.js.map +1 -0
  590. package/dist/checks/e2e/e2e-outcome-validation.d.ts +34 -0
  591. package/dist/checks/e2e/e2e-outcome-validation.d.ts.map +1 -0
  592. package/dist/checks/e2e/e2e-outcome-validation.js +613 -0
  593. package/dist/checks/e2e/e2e-outcome-validation.js.map +1 -0
  594. package/dist/checks/e2e/e2e-performance-baseline.d.ts +14 -0
  595. package/dist/checks/e2e/e2e-performance-baseline.d.ts.map +1 -0
  596. package/dist/checks/e2e/e2e-performance-baseline.js +289 -0
  597. package/dist/checks/e2e/e2e-performance-baseline.js.map +1 -0
  598. package/dist/checks/e2e/e2e-performance-patterns.d.ts +19 -0
  599. package/dist/checks/e2e/e2e-performance-patterns.d.ts.map +1 -0
  600. package/dist/checks/e2e/e2e-performance-patterns.js +464 -0
  601. package/dist/checks/e2e/e2e-performance-patterns.js.map +1 -0
  602. package/dist/checks/e2e/e2e-performance-regression.d.ts +18 -0
  603. package/dist/checks/e2e/e2e-performance-regression.d.ts.map +1 -0
  604. package/dist/checks/e2e/e2e-performance-regression.js +230 -0
  605. package/dist/checks/e2e/e2e-performance-regression.js.map +1 -0
  606. package/dist/checks/e2e/e2e-resource-monitoring.d.ts +17 -0
  607. package/dist/checks/e2e/e2e-resource-monitoring.d.ts.map +1 -0
  608. package/dist/checks/e2e/e2e-resource-monitoring.js +368 -0
  609. package/dist/checks/e2e/e2e-resource-monitoring.js.map +1 -0
  610. package/dist/checks/e2e/e2e-test-redundancy-scan.d.ts +28 -0
  611. package/dist/checks/e2e/e2e-test-redundancy-scan.d.ts.map +1 -0
  612. package/dist/checks/e2e/e2e-test-redundancy-scan.js +480 -0
  613. package/dist/checks/e2e/e2e-test-redundancy-scan.js.map +1 -0
  614. package/dist/checks/e2e/playwright-config-validator.d.ts +26 -0
  615. package/dist/checks/e2e/playwright-config-validator.d.ts.map +1 -0
  616. package/dist/checks/e2e/playwright-config-validator.js +561 -0
  617. package/dist/checks/e2e/playwright-config-validator.js.map +1 -0
  618. package/dist/checks/environment/env-duplicates.d.ts +17 -0
  619. package/dist/checks/environment/env-duplicates.d.ts.map +1 -0
  620. package/dist/checks/environment/env-duplicates.js +169 -0
  621. package/dist/checks/environment/env-duplicates.js.map +1 -0
  622. package/dist/checks/event-listener-cleanup.d.ts +18 -0
  623. package/dist/checks/event-listener-cleanup.d.ts.map +1 -0
  624. package/dist/checks/event-listener-cleanup.js +189 -0
  625. package/dist/checks/event-listener-cleanup.js.map +1 -0
  626. package/dist/checks/file-naming-conventions.d.ts +21 -0
  627. package/dist/checks/file-naming-conventions.d.ts.map +1 -0
  628. package/dist/checks/file-naming-conventions.js +1258 -0
  629. package/dist/checks/file-naming-conventions.js.map +1 -0
  630. package/dist/checks/framework/framework-compatibility.d.ts +36 -0
  631. package/dist/checks/framework/framework-compatibility.d.ts.map +1 -0
  632. package/dist/checks/framework/framework-compatibility.js +173 -0
  633. package/dist/checks/framework/framework-compatibility.js.map +1 -0
  634. package/dist/checks/framework/turbopack-enforcement.d.ts +23 -0
  635. package/dist/checks/framework/turbopack-enforcement.d.ts.map +1 -0
  636. package/dist/checks/framework/turbopack-enforcement.js +174 -0
  637. package/dist/checks/framework/turbopack-enforcement.js.map +1 -0
  638. package/dist/checks/governance/check-ui-uniformity.d.ts +19 -0
  639. package/dist/checks/governance/check-ui-uniformity.d.ts.map +1 -0
  640. package/dist/checks/governance/check-ui-uniformity.js +126 -0
  641. package/dist/checks/governance/check-ui-uniformity.js.map +1 -0
  642. package/dist/checks/governance/codeowners-coverage.d.ts +27 -0
  643. package/dist/checks/governance/codeowners-coverage.d.ts.map +1 -0
  644. package/dist/checks/governance/codeowners-coverage.js +293 -0
  645. package/dist/checks/governance/codeowners-coverage.js.map +1 -0
  646. package/dist/checks/governance/naming-conventions.d.ts +7 -0
  647. package/dist/checks/governance/naming-conventions.d.ts.map +1 -0
  648. package/dist/checks/governance/naming-conventions.js +115 -0
  649. package/dist/checks/governance/naming-conventions.js.map +1 -0
  650. package/dist/checks/governance/seller-store-naming-consistency.d.ts +34 -0
  651. package/dist/checks/governance/seller-store-naming-consistency.d.ts.map +1 -0
  652. package/dist/checks/governance/seller-store-naming-consistency.js +248 -0
  653. package/dist/checks/governance/seller-store-naming-consistency.js.map +1 -0
  654. package/dist/checks/governance/store-seller-route-names.d.ts +19 -0
  655. package/dist/checks/governance/store-seller-route-names.d.ts.map +1 -0
  656. package/dist/checks/governance/store-seller-route-names.js +177 -0
  657. package/dist/checks/governance/store-seller-route-names.js.map +1 -0
  658. package/dist/checks/grading-config-usage.d.ts +23 -0
  659. package/dist/checks/grading-config-usage.d.ts.map +1 -0
  660. package/dist/checks/grading-config-usage.js +197 -0
  661. package/dist/checks/grading-config-usage.js.map +1 -0
  662. package/dist/checks/help-center-features-validation.d.ts +21 -0
  663. package/dist/checks/help-center-features-validation.d.ts.map +1 -0
  664. package/dist/checks/help-center-features-validation.js +529 -0
  665. package/dist/checks/help-center-features-validation.js.map +1 -0
  666. package/dist/checks/help-center-validation.d.ts +21 -0
  667. package/dist/checks/help-center-validation.d.ts.map +1 -0
  668. package/dist/checks/help-center-validation.js +325 -0
  669. package/dist/checks/help-center-validation.js.map +1 -0
  670. package/dist/checks/image/card-edge-protection.d.ts +22 -0
  671. package/dist/checks/image/card-edge-protection.d.ts.map +1 -0
  672. package/dist/checks/image/card-edge-protection.js +236 -0
  673. package/dist/checks/image/card-edge-protection.js.map +1 -0
  674. package/dist/checks/image/card-orientation-validation.d.ts +35 -0
  675. package/dist/checks/image/card-orientation-validation.d.ts.map +1 -0
  676. package/dist/checks/image/card-orientation-validation.js +522 -0
  677. package/dist/checks/image/card-orientation-validation.js.map +1 -0
  678. package/dist/checks/image/image-processing-config-sync.d.ts +33 -0
  679. package/dist/checks/image/image-processing-config-sync.d.ts.map +1 -0
  680. package/dist/checks/image/image-processing-config-sync.js +284 -0
  681. package/dist/checks/image/image-processing-config-sync.js.map +1 -0
  682. package/dist/checks/integrations/integration-feature-implementation.d.ts +28 -0
  683. package/dist/checks/integrations/integration-feature-implementation.d.ts.map +1 -0
  684. package/dist/checks/integrations/integration-feature-implementation.js +516 -0
  685. package/dist/checks/integrations/integration-feature-implementation.js.map +1 -0
  686. package/dist/checks/integrations/integration-field-mapping.d.ts +25 -0
  687. package/dist/checks/integrations/integration-field-mapping.d.ts.map +1 -0
  688. package/dist/checks/integrations/integration-field-mapping.js +383 -0
  689. package/dist/checks/integrations/integration-field-mapping.js.map +1 -0
  690. package/dist/checks/integrations/integration-status-display.d.ts +24 -0
  691. package/dist/checks/integrations/integration-status-display.d.ts.map +1 -0
  692. package/dist/checks/integrations/integration-status-display.js +945 -0
  693. package/dist/checks/integrations/integration-status-display.js.map +1 -0
  694. package/dist/checks/integrations/integrations-consolidated.d.ts +83 -0
  695. package/dist/checks/integrations/integrations-consolidated.d.ts.map +1 -0
  696. package/dist/checks/integrations/integrations-consolidated.js +912 -0
  697. package/dist/checks/integrations/integrations-consolidated.js.map +1 -0
  698. package/dist/checks/integrations/platform-feed-integrity.d.ts +76 -0
  699. package/dist/checks/integrations/platform-feed-integrity.d.ts.map +1 -0
  700. package/dist/checks/integrations/platform-feed-integrity.js +490 -0
  701. package/dist/checks/integrations/platform-feed-integrity.js.map +1 -0
  702. package/dist/checks/integrations/woocommerce-template-keys.d.ts +58 -0
  703. package/dist/checks/integrations/woocommerce-template-keys.d.ts.map +1 -0
  704. package/dist/checks/integrations/woocommerce-template-keys.js +270 -0
  705. package/dist/checks/integrations/woocommerce-template-keys.js.map +1 -0
  706. package/dist/checks/integrations/woocommerce-template-validation.d.ts +27 -0
  707. package/dist/checks/integrations/woocommerce-template-validation.d.ts.map +1 -0
  708. package/dist/checks/integrations/woocommerce-template-validation.js +428 -0
  709. package/dist/checks/integrations/woocommerce-template-validation.js.map +1 -0
  710. package/dist/checks/master-preflight.d.ts +57 -0
  711. package/dist/checks/master-preflight.d.ts.map +1 -0
  712. package/dist/checks/master-preflight.js +257 -0
  713. package/dist/checks/master-preflight.js.map +1 -0
  714. package/dist/checks/nextjs/dynamic-route-exports.d.ts +29 -0
  715. package/dist/checks/nextjs/dynamic-route-exports.d.ts.map +1 -0
  716. package/dist/checks/nextjs/dynamic-route-exports.js +204 -0
  717. package/dist/checks/nextjs/dynamic-route-exports.js.map +1 -0
  718. package/dist/checks/nextjs/essential-files-validation.d.ts +24 -0
  719. package/dist/checks/nextjs/essential-files-validation.d.ts.map +1 -0
  720. package/dist/checks/nextjs/essential-files-validation.js +361 -0
  721. package/dist/checks/nextjs/essential-files-validation.js.map +1 -0
  722. package/dist/checks/nextjs/ignore-build-errors.d.ts +16 -0
  723. package/dist/checks/nextjs/ignore-build-errors.d.ts.map +1 -0
  724. package/dist/checks/nextjs/ignore-build-errors.js +126 -0
  725. package/dist/checks/nextjs/ignore-build-errors.js.map +1 -0
  726. package/dist/checks/nextjs/metadata-api-placement.d.ts +30 -0
  727. package/dist/checks/nextjs/metadata-api-placement.d.ts.map +1 -0
  728. package/dist/checks/nextjs/metadata-api-placement.js +277 -0
  729. package/dist/checks/nextjs/metadata-api-placement.js.map +1 -0
  730. package/dist/checks/nextjs/nextjs-image-validation.d.ts +52 -0
  731. package/dist/checks/nextjs/nextjs-image-validation.d.ts.map +1 -0
  732. package/dist/checks/nextjs/nextjs-image-validation.js +255 -0
  733. package/dist/checks/nextjs/nextjs-image-validation.js.map +1 -0
  734. package/dist/checks/nextjs/nextjs16-compatibility.d.ts +40 -0
  735. package/dist/checks/nextjs/nextjs16-compatibility.d.ts.map +1 -0
  736. package/dist/checks/nextjs/nextjs16-compatibility.js +1210 -0
  737. package/dist/checks/nextjs/nextjs16-compatibility.js.map +1 -0
  738. package/dist/checks/nextjs/static-generation-check.d.ts +26 -0
  739. package/dist/checks/nextjs/static-generation-check.d.ts.map +1 -0
  740. package/dist/checks/nextjs/static-generation-check.js +181 -0
  741. package/dist/checks/nextjs/static-generation-check.js.map +1 -0
  742. package/dist/checks/observability/centralized-logging-validation.d.ts +22 -0
  743. package/dist/checks/observability/centralized-logging-validation.d.ts.map +1 -0
  744. package/dist/checks/observability/centralized-logging-validation.js +285 -0
  745. package/dist/checks/observability/centralized-logging-validation.js.map +1 -0
  746. package/dist/checks/order-number-consistency.d.ts +27 -0
  747. package/dist/checks/order-number-consistency.d.ts.map +1 -0
  748. package/dist/checks/order-number-consistency.js +294 -0
  749. package/dist/checks/order-number-consistency.js.map +1 -0
  750. package/dist/checks/organization/agent-steering-validation.d.ts +16 -0
  751. package/dist/checks/organization/agent-steering-validation.d.ts.map +1 -0
  752. package/dist/checks/organization/agent-steering-validation.js +186 -0
  753. package/dist/checks/organization/agent-steering-validation.js.map +1 -0
  754. package/dist/checks/organization/api-route-consolidation.d.ts +24 -0
  755. package/dist/checks/organization/api-route-consolidation.d.ts.map +1 -0
  756. package/dist/checks/organization/api-route-consolidation.js +370 -0
  757. package/dist/checks/organization/api-route-consolidation.js.map +1 -0
  758. package/dist/checks/organization/api-route-naming-validation.d.ts +24 -0
  759. package/dist/checks/organization/api-route-naming-validation.d.ts.map +1 -0
  760. package/dist/checks/organization/api-route-naming-validation.js +497 -0
  761. package/dist/checks/organization/api-route-naming-validation.js.map +1 -0
  762. package/dist/checks/organization/file-organization-validation.d.ts +19 -0
  763. package/dist/checks/organization/file-organization-validation.d.ts.map +1 -0
  764. package/dist/checks/organization/file-organization-validation.js +568 -0
  765. package/dist/checks/organization/file-organization-validation.js.map +1 -0
  766. package/dist/checks/organization/npm-script-bloat-prevention.d.ts +41 -0
  767. package/dist/checks/organization/npm-script-bloat-prevention.d.ts.map +1 -0
  768. package/dist/checks/organization/npm-script-bloat-prevention.js +417 -0
  769. package/dist/checks/organization/npm-script-bloat-prevention.js.map +1 -0
  770. package/dist/checks/organization/preflight-env-check.d.ts +13 -0
  771. package/dist/checks/organization/preflight-env-check.d.ts.map +1 -0
  772. package/dist/checks/organization/preflight-env-check.js +163 -0
  773. package/dist/checks/organization/preflight-env-check.js.map +1 -0
  774. package/dist/checks/organization/preflight-progress-consistency.d.ts +30 -0
  775. package/dist/checks/organization/preflight-progress-consistency.d.ts.map +1 -0
  776. package/dist/checks/organization/preflight-progress-consistency.js +230 -0
  777. package/dist/checks/organization/preflight-progress-consistency.js.map +1 -0
  778. package/dist/checks/organization/preflight-system-validation.d.ts +19 -0
  779. package/dist/checks/organization/preflight-system-validation.d.ts.map +1 -0
  780. package/dist/checks/organization/preflight-system-validation.js +487 -0
  781. package/dist/checks/organization/preflight-system-validation.js.map +1 -0
  782. package/dist/checks/organization/preflight-typescript-validation.d.ts +15 -0
  783. package/dist/checks/organization/preflight-typescript-validation.d.ts.map +1 -0
  784. package/dist/checks/organization/preflight-typescript-validation.js +57 -0
  785. package/dist/checks/organization/preflight-typescript-validation.js.map +1 -0
  786. package/dist/checks/organization/route-structure-validation.d.ts +19 -0
  787. package/dist/checks/organization/route-structure-validation.d.ts.map +1 -0
  788. package/dist/checks/organization/route-structure-validation.js +241 -0
  789. package/dist/checks/organization/route-structure-validation.js.map +1 -0
  790. package/dist/checks/organization/steering-bloat-prevention.d.ts +88 -0
  791. package/dist/checks/organization/steering-bloat-prevention.d.ts.map +1 -0
  792. package/dist/checks/organization/steering-bloat-prevention.js +1199 -0
  793. package/dist/checks/organization/steering-bloat-prevention.js.map +1 -0
  794. package/dist/checks/performance/bundle-optimization-drift.d.ts +19 -0
  795. package/dist/checks/performance/bundle-optimization-drift.d.ts.map +1 -0
  796. package/dist/checks/performance/bundle-optimization-drift.js +263 -0
  797. package/dist/checks/performance/bundle-optimization-drift.js.map +1 -0
  798. package/dist/checks/performance/bundle-size-regression.d.ts +15 -0
  799. package/dist/checks/performance/bundle-size-regression.d.ts.map +1 -0
  800. package/dist/checks/performance/bundle-size-regression.js +239 -0
  801. package/dist/checks/performance/bundle-size-regression.js.map +1 -0
  802. package/dist/checks/performance/core-web-vitals.d.ts +39 -0
  803. package/dist/checks/performance/core-web-vitals.d.ts.map +1 -0
  804. package/dist/checks/performance/core-web-vitals.js +445 -0
  805. package/dist/checks/performance/core-web-vitals.js.map +1 -0
  806. package/dist/checks/performance/mobile-performance-budget.d.ts +30 -0
  807. package/dist/checks/performance/mobile-performance-budget.d.ts.map +1 -0
  808. package/dist/checks/performance/mobile-performance-budget.js +401 -0
  809. package/dist/checks/performance/mobile-performance-budget.js.map +1 -0
  810. package/dist/checks/performance/runtime-regression.d.ts +17 -0
  811. package/dist/checks/performance/runtime-regression.d.ts.map +1 -0
  812. package/dist/checks/performance/runtime-regression.js +425 -0
  813. package/dist/checks/performance/runtime-regression.js.map +1 -0
  814. package/dist/checks/performance/unused-preload-detection.d.ts +18 -0
  815. package/dist/checks/performance/unused-preload-detection.d.ts.map +1 -0
  816. package/dist/checks/performance/unused-preload-detection.js +191 -0
  817. package/dist/checks/performance/unused-preload-detection.js.map +1 -0
  818. package/dist/checks/prisma/prisma7-compatibility.d.ts +30 -0
  819. package/dist/checks/prisma/prisma7-compatibility.d.ts.map +1 -0
  820. package/dist/checks/prisma/prisma7-compatibility.js +443 -0
  821. package/dist/checks/prisma/prisma7-compatibility.js.map +1 -0
  822. package/dist/checks/quality/component-size.d.ts +14 -0
  823. package/dist/checks/quality/component-size.d.ts.map +1 -0
  824. package/dist/checks/quality/component-size.js +107 -0
  825. package/dist/checks/quality/component-size.js.map +1 -0
  826. package/dist/checks/quality/critical-type-imports.d.ts +24 -0
  827. package/dist/checks/quality/critical-type-imports.d.ts.map +1 -0
  828. package/dist/checks/quality/critical-type-imports.js +635 -0
  829. package/dist/checks/quality/critical-type-imports.js.map +1 -0
  830. package/dist/checks/quality/development.d.ts +14 -0
  831. package/dist/checks/quality/development.d.ts.map +1 -0
  832. package/dist/checks/quality/development.js +101 -0
  833. package/dist/checks/quality/development.js.map +1 -0
  834. package/dist/checks/quality/docs-code-sync.d.ts +28 -0
  835. package/dist/checks/quality/docs-code-sync.d.ts.map +1 -0
  836. package/dist/checks/quality/docs-code-sync.js +369 -0
  837. package/dist/checks/quality/docs-code-sync.js.map +1 -0
  838. package/dist/checks/quality/duplicate-jsx-attributes.d.ts +24 -0
  839. package/dist/checks/quality/duplicate-jsx-attributes.d.ts.map +1 -0
  840. package/dist/checks/quality/duplicate-jsx-attributes.js +202 -0
  841. package/dist/checks/quality/duplicate-jsx-attributes.js.map +1 -0
  842. package/dist/checks/quality/file-size.d.ts +14 -0
  843. package/dist/checks/quality/file-size.d.ts.map +1 -0
  844. package/dist/checks/quality/file-size.js +100 -0
  845. package/dist/checks/quality/file-size.js.map +1 -0
  846. package/dist/checks/quality/file-validation.d.ts +14 -0
  847. package/dist/checks/quality/file-validation.d.ts.map +1 -0
  848. package/dist/checks/quality/file-validation.js +106 -0
  849. package/dist/checks/quality/file-validation.js.map +1 -0
  850. package/dist/checks/quality/i18n-hardcoded-strings.d.ts +29 -0
  851. package/dist/checks/quality/i18n-hardcoded-strings.d.ts.map +1 -0
  852. package/dist/checks/quality/i18n-hardcoded-strings.js +339 -0
  853. package/dist/checks/quality/i18n-hardcoded-strings.js.map +1 -0
  854. package/dist/checks/quality/lint-preflight.d.ts +70 -0
  855. package/dist/checks/quality/lint-preflight.d.ts.map +1 -0
  856. package/dist/checks/quality/lint-preflight.js +479 -0
  857. package/dist/checks/quality/lint-preflight.js.map +1 -0
  858. package/dist/checks/quality/react-namespace-import.d.ts +28 -0
  859. package/dist/checks/quality/react-namespace-import.d.ts.map +1 -0
  860. package/dist/checks/quality/react-namespace-import.js +205 -0
  861. package/dist/checks/quality/react-namespace-import.js.map +1 -0
  862. package/dist/checks/quality/strict-lint.d.ts +14 -0
  863. package/dist/checks/quality/strict-lint.d.ts.map +1 -0
  864. package/dist/checks/quality/strict-lint.js +44 -0
  865. package/dist/checks/quality/strict-lint.js.map +1 -0
  866. package/dist/checks/quality/syntax.d.ts +14 -0
  867. package/dist/checks/quality/syntax.d.ts.map +1 -0
  868. package/dist/checks/quality/syntax.js +97 -0
  869. package/dist/checks/quality/syntax.js.map +1 -0
  870. package/dist/checks/quality/unused-imports.d.ts +15 -0
  871. package/dist/checks/quality/unused-imports.d.ts.map +1 -0
  872. package/dist/checks/quality/unused-imports.js +175 -0
  873. package/dist/checks/quality/unused-imports.js.map +1 -0
  874. package/dist/checks/react/component-best-practices.d.ts +24 -0
  875. package/dist/checks/react/component-best-practices.d.ts.map +1 -0
  876. package/dist/checks/react/component-best-practices.js +274 -0
  877. package/dist/checks/react/component-best-practices.js.map +1 -0
  878. package/dist/checks/react/component-callback-consolidation.d.ts +29 -0
  879. package/dist/checks/react/component-callback-consolidation.d.ts.map +1 -0
  880. package/dist/checks/react/component-callback-consolidation.js +246 -0
  881. package/dist/checks/react/component-callback-consolidation.js.map +1 -0
  882. package/dist/checks/react/data-fetching-patterns.d.ts +29 -0
  883. package/dist/checks/react/data-fetching-patterns.d.ts.map +1 -0
  884. package/dist/checks/react/data-fetching-patterns.js +234 -0
  885. package/dist/checks/react/data-fetching-patterns.js.map +1 -0
  886. package/dist/checks/react/dialog-state-consolidation.d.ts +29 -0
  887. package/dist/checks/react/dialog-state-consolidation.d.ts.map +1 -0
  888. package/dist/checks/react/dialog-state-consolidation.js +227 -0
  889. package/dist/checks/react/dialog-state-consolidation.js.map +1 -0
  890. package/dist/checks/react/error-boundary-consistency.d.ts +29 -0
  891. package/dist/checks/react/error-boundary-consistency.d.ts.map +1 -0
  892. package/dist/checks/react/error-boundary-consistency.js +220 -0
  893. package/dist/checks/react/error-boundary-consistency.js.map +1 -0
  894. package/dist/checks/react/error-boundary-coverage.d.ts +28 -0
  895. package/dist/checks/react/error-boundary-coverage.d.ts.map +1 -0
  896. package/dist/checks/react/error-boundary-coverage.js +304 -0
  897. package/dist/checks/react/error-boundary-coverage.js.map +1 -0
  898. package/dist/checks/react/loading-empty-state-composition.d.ts +29 -0
  899. package/dist/checks/react/loading-empty-state-composition.d.ts.map +1 -0
  900. package/dist/checks/react/loading-empty-state-composition.js +255 -0
  901. package/dist/checks/react/loading-empty-state-composition.js.map +1 -0
  902. package/dist/checks/react/memory-leak-detection.d.ts +23 -0
  903. package/dist/checks/react/memory-leak-detection.d.ts.map +1 -0
  904. package/dist/checks/react/memory-leak-detection.js +274 -0
  905. package/dist/checks/react/memory-leak-detection.js.map +1 -0
  906. package/dist/checks/react/memory-leak-patterns.d.ts +29 -0
  907. package/dist/checks/react/memory-leak-patterns.d.ts.map +1 -0
  908. package/dist/checks/react/memory-leak-patterns.js +330 -0
  909. package/dist/checks/react/memory-leak-patterns.js.map +1 -0
  910. package/dist/checks/react/pagination-state-consolidation.d.ts +29 -0
  911. package/dist/checks/react/pagination-state-consolidation.d.ts.map +1 -0
  912. package/dist/checks/react/pagination-state-consolidation.js +258 -0
  913. package/dist/checks/react/pagination-state-consolidation.js.map +1 -0
  914. package/dist/checks/react/react19-compatibility.d.ts +16 -0
  915. package/dist/checks/react/react19-compatibility.d.ts.map +1 -0
  916. package/dist/checks/react/react19-compatibility.js +437 -0
  917. package/dist/checks/react/react19-compatibility.js.map +1 -0
  918. package/dist/checks/react/sort-state-consolidation.d.ts +29 -0
  919. package/dist/checks/react/sort-state-consolidation.d.ts.map +1 -0
  920. package/dist/checks/react/sort-state-consolidation.js +261 -0
  921. package/dist/checks/react/sort-state-consolidation.js.map +1 -0
  922. package/dist/checks/react/useeffect-loop-detector.d.ts +26 -0
  923. package/dist/checks/react/useeffect-loop-detector.d.ts.map +1 -0
  924. package/dist/checks/react/useeffect-loop-detector.js +219 -0
  925. package/dist/checks/react/useeffect-loop-detector.js.map +1 -0
  926. package/dist/checks/runtime/client-process-env-usage.d.ts +28 -0
  927. package/dist/checks/runtime/client-process-env-usage.d.ts.map +1 -0
  928. package/dist/checks/runtime/client-process-env-usage.js +196 -0
  929. package/dist/checks/runtime/client-process-env-usage.js.map +1 -0
  930. package/dist/checks/runtime/client-runtime-errors.d.ts +34 -0
  931. package/dist/checks/runtime/client-runtime-errors.d.ts.map +1 -0
  932. package/dist/checks/runtime/client-runtime-errors.js +308 -0
  933. package/dist/checks/runtime/client-runtime-errors.js.map +1 -0
  934. package/dist/checks/runtime/dev-error-monitoring-system.d.ts +21 -0
  935. package/dist/checks/runtime/dev-error-monitoring-system.d.ts.map +1 -0
  936. package/dist/checks/runtime/dev-error-monitoring-system.js +210 -0
  937. package/dist/checks/runtime/dev-error-monitoring-system.js.map +1 -0
  938. package/dist/checks/runtime/gtm-installation.d.ts +22 -0
  939. package/dist/checks/runtime/gtm-installation.d.ts.map +1 -0
  940. package/dist/checks/runtime/gtm-installation.js +343 -0
  941. package/dist/checks/runtime/gtm-installation.js.map +1 -0
  942. package/dist/checks/runtime/json-parse-safety.d.ts +22 -0
  943. package/dist/checks/runtime/json-parse-safety.d.ts.map +1 -0
  944. package/dist/checks/runtime/json-parse-safety.js +179 -0
  945. package/dist/checks/runtime/json-parse-safety.js.map +1 -0
  946. package/dist/checks/runtime/missing-public-env-import.d.ts +26 -0
  947. package/dist/checks/runtime/missing-public-env-import.d.ts.map +1 -0
  948. package/dist/checks/runtime/missing-public-env-import.js +181 -0
  949. package/dist/checks/runtime/missing-public-env-import.js.map +1 -0
  950. package/dist/checks/runtime/node-deprecations.d.ts +24 -0
  951. package/dist/checks/runtime/node-deprecations.d.ts.map +1 -0
  952. package/dist/checks/runtime/node-deprecations.js +168 -0
  953. package/dist/checks/runtime/node-deprecations.js.map +1 -0
  954. package/dist/checks/runtime/node25-compatibility.d.ts +30 -0
  955. package/dist/checks/runtime/node25-compatibility.d.ts.map +1 -0
  956. package/dist/checks/runtime/node25-compatibility.js +209 -0
  957. package/dist/checks/runtime/node25-compatibility.js.map +1 -0
  958. package/dist/checks/runtime/process-stdio-usage.d.ts +25 -0
  959. package/dist/checks/runtime/process-stdio-usage.d.ts.map +1 -0
  960. package/dist/checks/runtime/process-stdio-usage.js +183 -0
  961. package/dist/checks/runtime/process-stdio-usage.js.map +1 -0
  962. package/dist/checks/runtime/server-client-decimal.d.ts +26 -0
  963. package/dist/checks/runtime/server-client-decimal.d.ts.map +1 -0
  964. package/dist/checks/runtime/server-client-decimal.js +246 -0
  965. package/dist/checks/runtime/server-client-decimal.js.map +1 -0
  966. package/dist/checks/security/client-external-api-calls.d.ts +25 -0
  967. package/dist/checks/security/client-external-api-calls.d.ts.map +1 -0
  968. package/dist/checks/security/client-external-api-calls.js +206 -0
  969. package/dist/checks/security/client-external-api-calls.js.map +1 -0
  970. package/dist/checks/security/csrf-protection.d.ts +20 -0
  971. package/dist/checks/security/csrf-protection.d.ts.map +1 -0
  972. package/dist/checks/security/csrf-protection.js +249 -0
  973. package/dist/checks/security/csrf-protection.js.map +1 -0
  974. package/dist/checks/security/dependency-audit.d.ts +25 -0
  975. package/dist/checks/security/dependency-audit.d.ts.map +1 -0
  976. package/dist/checks/security/dependency-audit.js +219 -0
  977. package/dist/checks/security/dependency-audit.js.map +1 -0
  978. package/dist/checks/security/env-value-leakage.d.ts +23 -0
  979. package/dist/checks/security/env-value-leakage.d.ts.map +1 -0
  980. package/dist/checks/security/env-value-leakage.js +307 -0
  981. package/dist/checks/security/env-value-leakage.js.map +1 -0
  982. package/dist/checks/security/no-tracked-env-files.d.ts +19 -0
  983. package/dist/checks/security/no-tracked-env-files.d.ts.map +1 -0
  984. package/dist/checks/security/no-tracked-env-files.js +253 -0
  985. package/dist/checks/security/no-tracked-env-files.js.map +1 -0
  986. package/dist/checks/security/open-redirect-prevention.d.ts +19 -0
  987. package/dist/checks/security/open-redirect-prevention.d.ts.map +1 -0
  988. package/dist/checks/security/open-redirect-prevention.js +238 -0
  989. package/dist/checks/security/open-redirect-prevention.js.map +1 -0
  990. package/dist/checks/security/path-traversal-prevention.d.ts +25 -0
  991. package/dist/checks/security/path-traversal-prevention.d.ts.map +1 -0
  992. package/dist/checks/security/path-traversal-prevention.js +252 -0
  993. package/dist/checks/security/path-traversal-prevention.js.map +1 -0
  994. package/dist/checks/security/permission-security-validation.d.ts +20 -0
  995. package/dist/checks/security/permission-security-validation.d.ts.map +1 -0
  996. package/dist/checks/security/permission-security-validation.js +332 -0
  997. package/dist/checks/security/permission-security-validation.js.map +1 -0
  998. package/dist/checks/security/prod-command-detection.d.ts +18 -0
  999. package/dist/checks/security/prod-command-detection.d.ts.map +1 -0
  1000. package/dist/checks/security/prod-command-detection.js +238 -0
  1001. package/dist/checks/security/prod-command-detection.js.map +1 -0
  1002. package/dist/checks/security/rate-limiting-validation.d.ts +19 -0
  1003. package/dist/checks/security/rate-limiting-validation.d.ts.map +1 -0
  1004. package/dist/checks/security/rate-limiting-validation.js +265 -0
  1005. package/dist/checks/security/rate-limiting-validation.js.map +1 -0
  1006. package/dist/checks/security/security-sla-enforcement.d.ts +35 -0
  1007. package/dist/checks/security/security-sla-enforcement.d.ts.map +1 -0
  1008. package/dist/checks/security/security-sla-enforcement.js +352 -0
  1009. package/dist/checks/security/security-sla-enforcement.js.map +1 -0
  1010. package/dist/checks/security/sensitive-data-exposure.d.ts +37 -0
  1011. package/dist/checks/security/sensitive-data-exposure.d.ts.map +1 -0
  1012. package/dist/checks/security/sensitive-data-exposure.js +525 -0
  1013. package/dist/checks/security/sensitive-data-exposure.js.map +1 -0
  1014. package/dist/checks/security/sql-injection-prevention.d.ts +25 -0
  1015. package/dist/checks/security/sql-injection-prevention.d.ts.map +1 -0
  1016. package/dist/checks/security/sql-injection-prevention.js +219 -0
  1017. package/dist/checks/security/sql-injection-prevention.js.map +1 -0
  1018. package/dist/checks/security/turnstile-scope-validation.d.ts +22 -0
  1019. package/dist/checks/security/turnstile-scope-validation.d.ts.map +1 -0
  1020. package/dist/checks/security/turnstile-scope-validation.js +247 -0
  1021. package/dist/checks/security/turnstile-scope-validation.js.map +1 -0
  1022. package/dist/checks/security/unvalidated-route-params.d.ts +28 -0
  1023. package/dist/checks/security/unvalidated-route-params.d.ts.map +1 -0
  1024. package/dist/checks/security/unvalidated-route-params.js +246 -0
  1025. package/dist/checks/security/unvalidated-route-params.js.map +1 -0
  1026. package/dist/checks/security/webhook-security-validation.d.ts +19 -0
  1027. package/dist/checks/security/webhook-security-validation.d.ts.map +1 -0
  1028. package/dist/checks/security/webhook-security-validation.js +266 -0
  1029. package/dist/checks/security/webhook-security-validation.js.map +1 -0
  1030. package/dist/checks/seo/missing-metadata.d.ts +26 -0
  1031. package/dist/checks/seo/missing-metadata.d.ts.map +1 -0
  1032. package/dist/checks/seo/missing-metadata.js +185 -0
  1033. package/dist/checks/seo/missing-metadata.js.map +1 -0
  1034. package/dist/checks/storage-keys-validation.d.ts +25 -0
  1035. package/dist/checks/storage-keys-validation.d.ts.map +1 -0
  1036. package/dist/checks/storage-keys-validation.js +314 -0
  1037. package/dist/checks/storage-keys-validation.js.map +1 -0
  1038. package/dist/checks/store-order-numbers.d.ts +20 -0
  1039. package/dist/checks/store-order-numbers.d.ts.map +1 -0
  1040. package/dist/checks/store-order-numbers.js +244 -0
  1041. package/dist/checks/store-order-numbers.js.map +1 -0
  1042. package/dist/checks/system/analyze-consolidation-candidates.d.ts +18 -0
  1043. package/dist/checks/system/analyze-consolidation-candidates.d.ts.map +1 -0
  1044. package/dist/checks/system/analyze-consolidation-candidates.js +227 -0
  1045. package/dist/checks/system/analyze-consolidation-candidates.js.map +1 -0
  1046. package/dist/checks/system/apply-universal-progress.d.ts +15 -0
  1047. package/dist/checks/system/apply-universal-progress.d.ts.map +1 -0
  1048. package/dist/checks/system/apply-universal-progress.js +292 -0
  1049. package/dist/checks/system/apply-universal-progress.js.map +1 -0
  1050. package/dist/checks/system/broken-preflight-detection.d.ts +34 -0
  1051. package/dist/checks/system/broken-preflight-detection.d.ts.map +1 -0
  1052. package/dist/checks/system/broken-preflight-detection.js +568 -0
  1053. package/dist/checks/system/broken-preflight-detection.js.map +1 -0
  1054. package/dist/checks/system/find-orphaned-preflights.d.ts +20 -0
  1055. package/dist/checks/system/find-orphaned-preflights.d.ts.map +1 -0
  1056. package/dist/checks/system/find-orphaned-preflights.js +159 -0
  1057. package/dist/checks/system/find-orphaned-preflights.js.map +1 -0
  1058. package/dist/checks/system/lint-preflight-consistency.d.ts +26 -0
  1059. package/dist/checks/system/lint-preflight-consistency.d.ts.map +1 -0
  1060. package/dist/checks/system/lint-preflight-consistency.js +377 -0
  1061. package/dist/checks/system/lint-preflight-consistency.js.map +1 -0
  1062. package/dist/checks/system/orphaned-scripts-detection.d.ts +25 -0
  1063. package/dist/checks/system/orphaned-scripts-detection.d.ts.map +1 -0
  1064. package/dist/checks/system/orphaned-scripts-detection.js +338 -0
  1065. package/dist/checks/system/orphaned-scripts-detection.js.map +1 -0
  1066. package/dist/checks/system/preflight-command-validation.d.ts +36 -0
  1067. package/dist/checks/system/preflight-command-validation.d.ts.map +1 -0
  1068. package/dist/checks/system/preflight-command-validation.js +634 -0
  1069. package/dist/checks/system/preflight-command-validation.js.map +1 -0
  1070. package/dist/checks/system/preflight-concurrency-support.d.ts +19 -0
  1071. package/dist/checks/system/preflight-concurrency-support.d.ts.map +1 -0
  1072. package/dist/checks/system/preflight-concurrency-support.js +210 -0
  1073. package/dist/checks/system/preflight-concurrency-support.js.map +1 -0
  1074. package/dist/checks/system/preflight-consolidation-safety.d.ts +17 -0
  1075. package/dist/checks/system/preflight-consolidation-safety.d.ts.map +1 -0
  1076. package/dist/checks/system/preflight-consolidation-safety.js +253 -0
  1077. package/dist/checks/system/preflight-consolidation-safety.js.map +1 -0
  1078. package/dist/checks/system/preflight-coverage-map.d.ts +27 -0
  1079. package/dist/checks/system/preflight-coverage-map.d.ts.map +1 -0
  1080. package/dist/checks/system/preflight-coverage-map.js +298 -0
  1081. package/dist/checks/system/preflight-coverage-map.js.map +1 -0
  1082. package/dist/checks/system/preflight-drift-detector.d.ts +28 -0
  1083. package/dist/checks/system/preflight-drift-detector.d.ts.map +1 -0
  1084. package/dist/checks/system/preflight-drift-detector.js +382 -0
  1085. package/dist/checks/system/preflight-drift-detector.js.map +1 -0
  1086. package/dist/checks/system/preflight-env-var-documentation.d.ts +26 -0
  1087. package/dist/checks/system/preflight-env-var-documentation.d.ts.map +1 -0
  1088. package/dist/checks/system/preflight-env-var-documentation.js +336 -0
  1089. package/dist/checks/system/preflight-env-var-documentation.js.map +1 -0
  1090. package/dist/checks/system/preflight-exit-code-validator.d.ts +31 -0
  1091. package/dist/checks/system/preflight-exit-code-validator.d.ts.map +1 -0
  1092. package/dist/checks/system/preflight-exit-code-validator.js +301 -0
  1093. package/dist/checks/system/preflight-exit-code-validator.js.map +1 -0
  1094. package/dist/checks/system/preflight-false-positive-tracker.d.ts +26 -0
  1095. package/dist/checks/system/preflight-false-positive-tracker.d.ts.map +1 -0
  1096. package/dist/checks/system/preflight-false-positive-tracker.js +265 -0
  1097. package/dist/checks/system/preflight-false-positive-tracker.js.map +1 -0
  1098. package/dist/checks/system/preflight-metadata-validator.d.ts +28 -0
  1099. package/dist/checks/system/preflight-metadata-validator.d.ts.map +1 -0
  1100. package/dist/checks/system/preflight-metadata-validator.js +222 -0
  1101. package/dist/checks/system/preflight-metadata-validator.js.map +1 -0
  1102. package/dist/checks/system/preflight-organization.d.ts +16 -0
  1103. package/dist/checks/system/preflight-organization.d.ts.map +1 -0
  1104. package/dist/checks/system/preflight-organization.js +214 -0
  1105. package/dist/checks/system/preflight-organization.js.map +1 -0
  1106. package/dist/checks/system/preflight-performance-optimizer.d.ts +17 -0
  1107. package/dist/checks/system/preflight-performance-optimizer.d.ts.map +1 -0
  1108. package/dist/checks/system/preflight-performance-optimizer.js +377 -0
  1109. package/dist/checks/system/preflight-performance-optimizer.js.map +1 -0
  1110. package/dist/checks/system/preflight-performance-validator.d.ts +28 -0
  1111. package/dist/checks/system/preflight-performance-validator.d.ts.map +1 -0
  1112. package/dist/checks/system/preflight-performance-validator.js +270 -0
  1113. package/dist/checks/system/preflight-performance-validator.js.map +1 -0
  1114. package/dist/checks/system/preflight-redundancy-detection.d.ts +29 -0
  1115. package/dist/checks/system/preflight-redundancy-detection.d.ts.map +1 -0
  1116. package/dist/checks/system/preflight-redundancy-detection.js +1171 -0
  1117. package/dist/checks/system/preflight-redundancy-detection.js.map +1 -0
  1118. package/dist/checks/system/preflight-reporting-standards.d.ts +17 -0
  1119. package/dist/checks/system/preflight-reporting-standards.d.ts.map +1 -0
  1120. package/dist/checks/system/preflight-reporting-standards.js +315 -0
  1121. package/dist/checks/system/preflight-reporting-standards.js.map +1 -0
  1122. package/dist/checks/system/preflight-runtime-health.d.ts +34 -0
  1123. package/dist/checks/system/preflight-runtime-health.d.ts.map +1 -0
  1124. package/dist/checks/system/preflight-runtime-health.js +356 -0
  1125. package/dist/checks/system/preflight-runtime-health.js.map +1 -0
  1126. package/dist/checks/system/preflight-schema-validator.d.ts +24 -0
  1127. package/dist/checks/system/preflight-schema-validator.d.ts.map +1 -0
  1128. package/dist/checks/system/preflight-schema-validator.js +343 -0
  1129. package/dist/checks/system/preflight-schema-validator.js.map +1 -0
  1130. package/dist/checks/system/preflight-test-coverage.d.ts +25 -0
  1131. package/dist/checks/system/preflight-test-coverage.d.ts.map +1 -0
  1132. package/dist/checks/system/preflight-test-coverage.js +245 -0
  1133. package/dist/checks/system/preflight-test-coverage.js.map +1 -0
  1134. package/dist/checks/system/relative-import-validation.d.ts +25 -0
  1135. package/dist/checks/system/relative-import-validation.d.ts.map +1 -0
  1136. package/dist/checks/system/relative-import-validation.js +180 -0
  1137. package/dist/checks/system/relative-import-validation.js.map +1 -0
  1138. package/dist/checks/system/script-path-validation.d.ts +34 -0
  1139. package/dist/checks/system/script-path-validation.d.ts.map +1 -0
  1140. package/dist/checks/system/script-path-validation.js +354 -0
  1141. package/dist/checks/system/script-path-validation.js.map +1 -0
  1142. package/dist/checks/system/stale-preflight-detection.d.ts +16 -0
  1143. package/dist/checks/system/stale-preflight-detection.d.ts.map +1 -0
  1144. package/dist/checks/system/stale-preflight-detection.js +203 -0
  1145. package/dist/checks/system/stale-preflight-detection.js.map +1 -0
  1146. package/dist/checks/system/universal-progress-reporter.d.ts +92 -0
  1147. package/dist/checks/system/universal-progress-reporter.d.ts.map +1 -0
  1148. package/dist/checks/system/universal-progress-reporter.js +272 -0
  1149. package/dist/checks/system/universal-progress-reporter.js.map +1 -0
  1150. package/dist/checks/tailwind/tailwind4-compatibility.d.ts +33 -0
  1151. package/dist/checks/tailwind/tailwind4-compatibility.d.ts.map +1 -0
  1152. package/dist/checks/tailwind/tailwind4-compatibility.js +494 -0
  1153. package/dist/checks/tailwind/tailwind4-compatibility.js.map +1 -0
  1154. package/dist/checks/tanstack/tanstack-query-compatibility.d.ts +32 -0
  1155. package/dist/checks/tanstack/tanstack-query-compatibility.d.ts.map +1 -0
  1156. package/dist/checks/tanstack/tanstack-query-compatibility.js +437 -0
  1157. package/dist/checks/tanstack/tanstack-query-compatibility.js.map +1 -0
  1158. package/dist/checks/ui/accessibility-critical.d.ts +19 -0
  1159. package/dist/checks/ui/accessibility-critical.d.ts.map +1 -0
  1160. package/dist/checks/ui/accessibility-critical.js +360 -0
  1161. package/dist/checks/ui/accessibility-critical.js.map +1 -0
  1162. package/dist/checks/ui/admin-table-client-patterns.d.ts +32 -0
  1163. package/dist/checks/ui/admin-table-client-patterns.d.ts.map +1 -0
  1164. package/dist/checks/ui/admin-table-client-patterns.js +387 -0
  1165. package/dist/checks/ui/admin-table-client-patterns.js.map +1 -0
  1166. package/dist/checks/ui/alert-button-gap.d.ts +27 -0
  1167. package/dist/checks/ui/alert-button-gap.d.ts.map +1 -0
  1168. package/dist/checks/ui/alert-button-gap.js +218 -0
  1169. package/dist/checks/ui/alert-button-gap.js.map +1 -0
  1170. package/dist/checks/ui/async-status-flash-detection.d.ts +33 -0
  1171. package/dist/checks/ui/async-status-flash-detection.d.ts.map +1 -0
  1172. package/dist/checks/ui/async-status-flash-detection.js +303 -0
  1173. package/dist/checks/ui/async-status-flash-detection.js.map +1 -0
  1174. package/dist/checks/ui/breadcrumb-consistency.d.ts +18 -0
  1175. package/dist/checks/ui/breadcrumb-consistency.d.ts.map +1 -0
  1176. package/dist/checks/ui/breadcrumb-consistency.js +237 -0
  1177. package/dist/checks/ui/breadcrumb-consistency.js.map +1 -0
  1178. package/dist/checks/ui/button-group-gap.d.ts +23 -0
  1179. package/dist/checks/ui/button-group-gap.d.ts.map +1 -0
  1180. package/dist/checks/ui/button-group-gap.js +197 -0
  1181. package/dist/checks/ui/button-group-gap.js.map +1 -0
  1182. package/dist/checks/ui/button-icon-prop.d.ts +41 -0
  1183. package/dist/checks/ui/button-icon-prop.d.ts.map +1 -0
  1184. package/dist/checks/ui/button-icon-prop.js +251 -0
  1185. package/dist/checks/ui/button-icon-prop.js.map +1 -0
  1186. package/dist/checks/ui/card-section-content-spacing.d.ts +32 -0
  1187. package/dist/checks/ui/card-section-content-spacing.d.ts.map +1 -0
  1188. package/dist/checks/ui/card-section-content-spacing.js +263 -0
  1189. package/dist/checks/ui/card-section-content-spacing.js.map +1 -0
  1190. package/dist/checks/ui/card-section-patterns.d.ts +35 -0
  1191. package/dist/checks/ui/card-section-patterns.d.ts.map +1 -0
  1192. package/dist/checks/ui/card-section-patterns.js +279 -0
  1193. package/dist/checks/ui/card-section-patterns.js.map +1 -0
  1194. package/dist/checks/ui/category-filter-coverage.d.ts +81 -0
  1195. package/dist/checks/ui/category-filter-coverage.d.ts.map +1 -0
  1196. package/dist/checks/ui/category-filter-coverage.js +520 -0
  1197. package/dist/checks/ui/category-filter-coverage.js.map +1 -0
  1198. package/dist/checks/ui/color-check.d.ts +8 -0
  1199. package/dist/checks/ui/color-check.d.ts.map +1 -0
  1200. package/dist/checks/ui/color-check.js +111 -0
  1201. package/dist/checks/ui/color-check.js.map +1 -0
  1202. package/dist/checks/ui/component-library-quality.d.ts +20 -0
  1203. package/dist/checks/ui/component-library-quality.d.ts.map +1 -0
  1204. package/dist/checks/ui/component-library-quality.js +237 -0
  1205. package/dist/checks/ui/component-library-quality.js.map +1 -0
  1206. package/dist/checks/ui/component-prop-validation.d.ts +22 -0
  1207. package/dist/checks/ui/component-prop-validation.d.ts.map +1 -0
  1208. package/dist/checks/ui/component-prop-validation.js +271 -0
  1209. package/dist/checks/ui/component-prop-validation.js.map +1 -0
  1210. package/dist/checks/ui/confirmation-page-consistency.d.ts +27 -0
  1211. package/dist/checks/ui/confirmation-page-consistency.d.ts.map +1 -0
  1212. package/dist/checks/ui/confirmation-page-consistency.js +366 -0
  1213. package/dist/checks/ui/confirmation-page-consistency.js.map +1 -0
  1214. package/dist/checks/ui/console-log-check.d.ts +8 -0
  1215. package/dist/checks/ui/console-log-check.d.ts.map +1 -0
  1216. package/dist/checks/ui/console-log-check.js +101 -0
  1217. package/dist/checks/ui/console-log-check.js.map +1 -0
  1218. package/dist/checks/ui/css-grid-gap-check.d.ts +25 -0
  1219. package/dist/checks/ui/css-grid-gap-check.d.ts.map +1 -0
  1220. package/dist/checks/ui/css-grid-gap-check.js +317 -0
  1221. package/dist/checks/ui/css-grid-gap-check.js.map +1 -0
  1222. package/dist/checks/ui/css-token-syntax.d.ts +23 -0
  1223. package/dist/checks/ui/css-token-syntax.d.ts.map +1 -0
  1224. package/dist/checks/ui/css-token-syntax.js +389 -0
  1225. package/dist/checks/ui/css-token-syntax.js.map +1 -0
  1226. package/dist/checks/ui/cva-empty-variants.d.ts +28 -0
  1227. package/dist/checks/ui/cva-empty-variants.d.ts.map +1 -0
  1228. package/dist/checks/ui/cva-empty-variants.js +240 -0
  1229. package/dist/checks/ui/cva-empty-variants.js.map +1 -0
  1230. package/dist/checks/ui/dark-mode-support.d.ts +96 -0
  1231. package/dist/checks/ui/dark-mode-support.d.ts.map +1 -0
  1232. package/dist/checks/ui/dark-mode-support.js +703 -0
  1233. package/dist/checks/ui/dark-mode-support.js.map +1 -0
  1234. package/dist/checks/ui/dashboard-section-patterns.d.ts +86 -0
  1235. package/dist/checks/ui/dashboard-section-patterns.d.ts.map +1 -0
  1236. package/dist/checks/ui/dashboard-section-patterns.js +1757 -0
  1237. package/dist/checks/ui/dashboard-section-patterns.js.map +1 -0
  1238. package/dist/checks/ui/dashboard-ui.d.ts +29 -0
  1239. package/dist/checks/ui/dashboard-ui.d.ts.map +1 -0
  1240. package/dist/checks/ui/dashboard-ui.js +509 -0
  1241. package/dist/checks/ui/dashboard-ui.js.map +1 -0
  1242. package/dist/checks/ui/dead-action-detector.d.ts +25 -0
  1243. package/dist/checks/ui/dead-action-detector.d.ts.map +1 -0
  1244. package/dist/checks/ui/dead-action-detector.js +470 -0
  1245. package/dist/checks/ui/dead-action-detector.js.map +1 -0
  1246. package/dist/checks/ui/dialog-state-management.d.ts +27 -0
  1247. package/dist/checks/ui/dialog-state-management.d.ts.map +1 -0
  1248. package/dist/checks/ui/dialog-state-management.js +301 -0
  1249. package/dist/checks/ui/dialog-state-management.js.map +1 -0
  1250. package/dist/checks/ui/doubled-padding-check.d.ts +31 -0
  1251. package/dist/checks/ui/doubled-padding-check.d.ts.map +1 -0
  1252. package/dist/checks/ui/doubled-padding-check.js +236 -0
  1253. package/dist/checks/ui/doubled-padding-check.js.map +1 -0
  1254. package/dist/checks/ui/dropdown-positioning-check.d.ts +27 -0
  1255. package/dist/checks/ui/dropdown-positioning-check.d.ts.map +1 -0
  1256. package/dist/checks/ui/dropdown-positioning-check.js +286 -0
  1257. package/dist/checks/ui/dropdown-positioning-check.js.map +1 -0
  1258. package/dist/checks/ui/duplicate-layout-detection.d.ts +20 -0
  1259. package/dist/checks/ui/duplicate-layout-detection.d.ts.map +1 -0
  1260. package/dist/checks/ui/duplicate-layout-detection.js +290 -0
  1261. package/dist/checks/ui/duplicate-layout-detection.js.map +1 -0
  1262. package/dist/checks/ui/duplicate-shared-component-detection.d.ts +25 -0
  1263. package/dist/checks/ui/duplicate-shared-component-detection.d.ts.map +1 -0
  1264. package/dist/checks/ui/duplicate-shared-component-detection.js +340 -0
  1265. package/dist/checks/ui/duplicate-shared-component-detection.js.map +1 -0
  1266. package/dist/checks/ui/feature-page-hero-consistency.d.ts +30 -0
  1267. package/dist/checks/ui/feature-page-hero-consistency.d.ts.map +1 -0
  1268. package/dist/checks/ui/feature-page-hero-consistency.js +234 -0
  1269. package/dist/checks/ui/feature-page-hero-consistency.js.map +1 -0
  1270. package/dist/checks/ui/filter-loading-states.d.ts +20 -0
  1271. package/dist/checks/ui/filter-loading-states.d.ts.map +1 -0
  1272. package/dist/checks/ui/filter-loading-states.js +199 -0
  1273. package/dist/checks/ui/filter-loading-states.js.map +1 -0
  1274. package/dist/checks/ui/flex-icon-text-gap.d.ts +31 -0
  1275. package/dist/checks/ui/flex-icon-text-gap.d.ts.map +1 -0
  1276. package/dist/checks/ui/flex-icon-text-gap.js +374 -0
  1277. package/dist/checks/ui/flex-icon-text-gap.js.map +1 -0
  1278. package/dist/checks/ui/flex-spacing-validation.d.ts +54 -0
  1279. package/dist/checks/ui/flex-spacing-validation.d.ts.map +1 -0
  1280. package/dist/checks/ui/flex-spacing-validation.js +263 -0
  1281. package/dist/checks/ui/flex-spacing-validation.js.map +1 -0
  1282. package/dist/checks/ui/floating-action-buttons.d.ts +36 -0
  1283. package/dist/checks/ui/floating-action-buttons.d.ts.map +1 -0
  1284. package/dist/checks/ui/floating-action-buttons.js +371 -0
  1285. package/dist/checks/ui/floating-action-buttons.js.map +1 -0
  1286. package/dist/checks/ui/form-control-layout-check.d.ts +31 -0
  1287. package/dist/checks/ui/form-control-layout-check.d.ts.map +1 -0
  1288. package/dist/checks/ui/form-control-layout-check.js +290 -0
  1289. package/dist/checks/ui/form-control-layout-check.js.map +1 -0
  1290. package/dist/checks/ui/form-field-consistency.d.ts +30 -0
  1291. package/dist/checks/ui/form-field-consistency.d.ts.map +1 -0
  1292. package/dist/checks/ui/form-field-consistency.js +273 -0
  1293. package/dist/checks/ui/form-field-consistency.js.map +1 -0
  1294. package/dist/checks/ui/gap-spacing-consistency.d.ts +36 -0
  1295. package/dist/checks/ui/gap-spacing-consistency.d.ts.map +1 -0
  1296. package/dist/checks/ui/gap-spacing-consistency.js +319 -0
  1297. package/dist/checks/ui/gap-spacing-consistency.js.map +1 -0
  1298. package/dist/checks/ui/header-action-text-color.d.ts +20 -0
  1299. package/dist/checks/ui/header-action-text-color.d.ts.map +1 -0
  1300. package/dist/checks/ui/header-action-text-color.js +128 -0
  1301. package/dist/checks/ui/header-action-text-color.js.map +1 -0
  1302. package/dist/checks/ui/header-vertical-alignment.d.ts +22 -0
  1303. package/dist/checks/ui/header-vertical-alignment.d.ts.map +1 -0
  1304. package/dist/checks/ui/header-vertical-alignment.js +215 -0
  1305. package/dist/checks/ui/header-vertical-alignment.js.map +1 -0
  1306. package/dist/checks/ui/image-component-check.d.ts +9 -0
  1307. package/dist/checks/ui/image-component-check.d.ts.map +1 -0
  1308. package/dist/checks/ui/image-component-check.js +99 -0
  1309. package/dist/checks/ui/image-component-check.js.map +1 -0
  1310. package/dist/checks/ui/image-pair-placeholder-priority.d.ts +40 -0
  1311. package/dist/checks/ui/image-pair-placeholder-priority.d.ts.map +1 -0
  1312. package/dist/checks/ui/image-pair-placeholder-priority.js +236 -0
  1313. package/dist/checks/ui/image-pair-placeholder-priority.js.map +1 -0
  1314. package/dist/checks/ui/image-url-double-suffix.d.ts +22 -0
  1315. package/dist/checks/ui/image-url-double-suffix.d.ts.map +1 -0
  1316. package/dist/checks/ui/image-url-double-suffix.js +314 -0
  1317. package/dist/checks/ui/image-url-double-suffix.js.map +1 -0
  1318. package/dist/checks/ui/inline-flex-gap-check.d.ts +27 -0
  1319. package/dist/checks/ui/inline-flex-gap-check.d.ts.map +1 -0
  1320. package/dist/checks/ui/inline-flex-gap-check.js +199 -0
  1321. package/dist/checks/ui/inline-flex-gap-check.js.map +1 -0
  1322. package/dist/checks/ui/inline-notification-misuse.d.ts +38 -0
  1323. package/dist/checks/ui/inline-notification-misuse.d.ts.map +1 -0
  1324. package/dist/checks/ui/inline-notification-misuse.js +348 -0
  1325. package/dist/checks/ui/inline-notification-misuse.js.map +1 -0
  1326. package/dist/checks/ui/inline-to-tailwind-check.d.ts +47 -0
  1327. package/dist/checks/ui/inline-to-tailwind-check.d.ts.map +1 -0
  1328. package/dist/checks/ui/inline-to-tailwind-check.js +332 -0
  1329. package/dist/checks/ui/inline-to-tailwind-check.js.map +1 -0
  1330. package/dist/checks/ui/input-label-gap.d.ts +35 -0
  1331. package/dist/checks/ui/input-label-gap.d.ts.map +1 -0
  1332. package/dist/checks/ui/input-label-gap.js +350 -0
  1333. package/dist/checks/ui/input-label-gap.js.map +1 -0
  1334. package/dist/checks/ui/input-width-consistency.d.ts +53 -0
  1335. package/dist/checks/ui/input-width-consistency.d.ts.map +1 -0
  1336. package/dist/checks/ui/input-width-consistency.js +343 -0
  1337. package/dist/checks/ui/input-width-consistency.js.map +1 -0
  1338. package/dist/checks/ui/js-responsive-visibility.d.ts +32 -0
  1339. package/dist/checks/ui/js-responsive-visibility.d.ts.map +1 -0
  1340. package/dist/checks/ui/js-responsive-visibility.js +216 -0
  1341. package/dist/checks/ui/js-responsive-visibility.js.map +1 -0
  1342. package/dist/checks/ui/label-description-spacing.d.ts +31 -0
  1343. package/dist/checks/ui/label-description-spacing.d.ts.map +1 -0
  1344. package/dist/checks/ui/label-description-spacing.js +288 -0
  1345. package/dist/checks/ui/label-description-spacing.js.map +1 -0
  1346. package/dist/checks/ui/layout-shift-detection.d.ts +32 -0
  1347. package/dist/checks/ui/layout-shift-detection.d.ts.map +1 -0
  1348. package/dist/checks/ui/layout-shift-detection.js +401 -0
  1349. package/dist/checks/ui/layout-shift-detection.js.map +1 -0
  1350. package/dist/checks/ui/list-item-text-pattern.d.ts +33 -0
  1351. package/dist/checks/ui/list-item-text-pattern.d.ts.map +1 -0
  1352. package/dist/checks/ui/list-item-text-pattern.js +197 -0
  1353. package/dist/checks/ui/list-item-text-pattern.js.map +1 -0
  1354. package/dist/checks/ui/loading-empty-state-consistency.d.ts +29 -0
  1355. package/dist/checks/ui/loading-empty-state-consistency.d.ts.map +1 -0
  1356. package/dist/checks/ui/loading-empty-state-consistency.js +333 -0
  1357. package/dist/checks/ui/loading-empty-state-consistency.js.map +1 -0
  1358. package/dist/checks/ui/margin-in-gap-container.d.ts +26 -0
  1359. package/dist/checks/ui/margin-in-gap-container.d.ts.map +1 -0
  1360. package/dist/checks/ui/margin-in-gap-container.js +625 -0
  1361. package/dist/checks/ui/margin-in-gap-container.js.map +1 -0
  1362. package/dist/checks/ui/mega-menu-dropdown-position.d.ts +26 -0
  1363. package/dist/checks/ui/mega-menu-dropdown-position.d.ts.map +1 -0
  1364. package/dist/checks/ui/mega-menu-dropdown-position.js +233 -0
  1365. package/dist/checks/ui/mega-menu-dropdown-position.js.map +1 -0
  1366. package/dist/checks/ui/mega-menu-scrollbar-overlap.d.ts +25 -0
  1367. package/dist/checks/ui/mega-menu-scrollbar-overlap.d.ts.map +1 -0
  1368. package/dist/checks/ui/mega-menu-scrollbar-overlap.js +286 -0
  1369. package/dist/checks/ui/mega-menu-scrollbar-overlap.js.map +1 -0
  1370. package/dist/checks/ui/mega-menu-spacing-check.d.ts +22 -0
  1371. package/dist/checks/ui/mega-menu-spacing-check.d.ts.map +1 -0
  1372. package/dist/checks/ui/mega-menu-spacing-check.js +247 -0
  1373. package/dist/checks/ui/mega-menu-spacing-check.js.map +1 -0
  1374. package/dist/checks/ui/missing-shared-component-detection.d.ts +30 -0
  1375. package/dist/checks/ui/missing-shared-component-detection.d.ts.map +1 -0
  1376. package/dist/checks/ui/missing-shared-component-detection.js +707 -0
  1377. package/dist/checks/ui/missing-shared-component-detection.js.map +1 -0
  1378. package/dist/checks/ui/notification-feedback-check.d.ts +38 -0
  1379. package/dist/checks/ui/notification-feedback-check.d.ts.map +1 -0
  1380. package/dist/checks/ui/notification-feedback-check.js +564 -0
  1381. package/dist/checks/ui/notification-feedback-check.js.map +1 -0
  1382. package/dist/checks/ui/orphaned-page-content.d.ts +30 -0
  1383. package/dist/checks/ui/orphaned-page-content.d.ts.map +1 -0
  1384. package/dist/checks/ui/orphaned-page-content.js +261 -0
  1385. package/dist/checks/ui/orphaned-page-content.js.map +1 -0
  1386. package/dist/checks/ui/orphaned-table-filters.d.ts +35 -0
  1387. package/dist/checks/ui/orphaned-table-filters.d.ts.map +1 -0
  1388. package/dist/checks/ui/orphaned-table-filters.js +289 -0
  1389. package/dist/checks/ui/orphaned-table-filters.js.map +1 -0
  1390. package/dist/checks/ui/overflow-clipping-detection.d.ts +18 -0
  1391. package/dist/checks/ui/overflow-clipping-detection.d.ts.map +1 -0
  1392. package/dist/checks/ui/overflow-clipping-detection.js +201 -0
  1393. package/dist/checks/ui/overflow-clipping-detection.js.map +1 -0
  1394. package/dist/checks/ui/page-layout-spacing.d.ts +30 -0
  1395. package/dist/checks/ui/page-layout-spacing.d.ts.map +1 -0
  1396. package/dist/checks/ui/page-layout-spacing.js +609 -0
  1397. package/dist/checks/ui/page-layout-spacing.js.map +1 -0
  1398. package/dist/checks/ui/path-alias-check.d.ts +8 -0
  1399. package/dist/checks/ui/path-alias-check.d.ts.map +1 -0
  1400. package/dist/checks/ui/path-alias-check.js +101 -0
  1401. package/dist/checks/ui/path-alias-check.js.map +1 -0
  1402. package/dist/checks/ui/product-image-animations.d.ts +70 -0
  1403. package/dist/checks/ui/product-image-animations.d.ts.map +1 -0
  1404. package/dist/checks/ui/product-image-animations.js +326 -0
  1405. package/dist/checks/ui/product-image-animations.js.map +1 -0
  1406. package/dist/checks/ui/raw-enum-display-validation.d.ts +25 -0
  1407. package/dist/checks/ui/raw-enum-display-validation.d.ts.map +1 -0
  1408. package/dist/checks/ui/raw-enum-display-validation.js +186 -0
  1409. package/dist/checks/ui/raw-enum-display-validation.js.map +1 -0
  1410. package/dist/checks/ui/react-component-patterns.d.ts +19 -0
  1411. package/dist/checks/ui/react-component-patterns.d.ts.map +1 -0
  1412. package/dist/checks/ui/react-component-patterns.js +250 -0
  1413. package/dist/checks/ui/react-component-patterns.js.map +1 -0
  1414. package/dist/checks/ui/react-dom-prop-leaking.d.ts +22 -0
  1415. package/dist/checks/ui/react-dom-prop-leaking.d.ts.map +1 -0
  1416. package/dist/checks/ui/react-dom-prop-leaking.js +272 -0
  1417. package/dist/checks/ui/react-dom-prop-leaking.js.map +1 -0
  1418. package/dist/checks/ui/responsive-flex-width-validation.d.ts +64 -0
  1419. package/dist/checks/ui/responsive-flex-width-validation.d.ts.map +1 -0
  1420. package/dist/checks/ui/responsive-flex-width-validation.js +283 -0
  1421. package/dist/checks/ui/responsive-flex-width-validation.js.map +1 -0
  1422. package/dist/checks/ui/search-width-consistency.d.ts +53 -0
  1423. package/dist/checks/ui/search-width-consistency.d.ts.map +1 -0
  1424. package/dist/checks/ui/search-width-consistency.js +277 -0
  1425. package/dist/checks/ui/search-width-consistency.js.map +1 -0
  1426. package/dist/checks/ui/section-spacing-check.d.ts +31 -0
  1427. package/dist/checks/ui/section-spacing-check.d.ts.map +1 -0
  1428. package/dist/checks/ui/section-spacing-check.js +251 -0
  1429. package/dist/checks/ui/section-spacing-check.js.map +1 -0
  1430. package/dist/checks/ui/sibling-spacing-check.d.ts +26 -0
  1431. package/dist/checks/ui/sibling-spacing-check.d.ts.map +1 -0
  1432. package/dist/checks/ui/sibling-spacing-check.js +332 -0
  1433. package/dist/checks/ui/sibling-spacing-check.js.map +1 -0
  1434. package/dist/checks/ui/sidebar-layout-gap.d.ts +35 -0
  1435. package/dist/checks/ui/sidebar-layout-gap.d.ts.map +1 -0
  1436. package/dist/checks/ui/sidebar-layout-gap.js +206 -0
  1437. package/dist/checks/ui/sidebar-layout-gap.js.map +1 -0
  1438. package/dist/checks/ui/size-naming-consistency.d.ts +21 -0
  1439. package/dist/checks/ui/size-naming-consistency.d.ts.map +1 -0
  1440. package/dist/checks/ui/size-naming-consistency.js +220 -0
  1441. package/dist/checks/ui/size-naming-consistency.js.map +1 -0
  1442. package/dist/checks/ui/skeleton-empty-state-validation.d.ts +30 -0
  1443. package/dist/checks/ui/skeleton-empty-state-validation.d.ts.map +1 -0
  1444. package/dist/checks/ui/skeleton-empty-state-validation.js +268 -0
  1445. package/dist/checks/ui/skeleton-empty-state-validation.js.map +1 -0
  1446. package/dist/checks/ui/skeleton-size-consistency.d.ts +37 -0
  1447. package/dist/checks/ui/skeleton-size-consistency.d.ts.map +1 -0
  1448. package/dist/checks/ui/skeleton-size-consistency.js +1251 -0
  1449. package/dist/checks/ui/skeleton-size-consistency.js.map +1 -0
  1450. package/dist/checks/ui/spacing-check.d.ts +8 -0
  1451. package/dist/checks/ui/spacing-check.d.ts.map +1 -0
  1452. package/dist/checks/ui/spacing-check.js +106 -0
  1453. package/dist/checks/ui/spacing-check.js.map +1 -0
  1454. package/dist/checks/ui/spinner-vs-skeleton-validation.d.ts +46 -0
  1455. package/dist/checks/ui/spinner-vs-skeleton-validation.d.ts.map +1 -0
  1456. package/dist/checks/ui/spinner-vs-skeleton-validation.js +352 -0
  1457. package/dist/checks/ui/spinner-vs-skeleton-validation.js.map +1 -0
  1458. package/dist/checks/ui/stale-initial-state-detection.d.ts +30 -0
  1459. package/dist/checks/ui/stale-initial-state-detection.d.ts.map +1 -0
  1460. package/dist/checks/ui/stale-initial-state-detection.js +224 -0
  1461. package/dist/checks/ui/stale-initial-state-detection.js.map +1 -0
  1462. package/dist/checks/ui/styling-standards.d.ts +71 -0
  1463. package/dist/checks/ui/styling-standards.d.ts.map +1 -0
  1464. package/dist/checks/ui/styling-standards.js +568 -0
  1465. package/dist/checks/ui/styling-standards.js.map +1 -0
  1466. package/dist/checks/ui/table-form-control-spacing.d.ts +29 -0
  1467. package/dist/checks/ui/table-form-control-spacing.d.ts.map +1 -0
  1468. package/dist/checks/ui/table-form-control-spacing.js +260 -0
  1469. package/dist/checks/ui/table-form-control-spacing.js.map +1 -0
  1470. package/dist/checks/ui/table-structure-validation.d.ts +36 -0
  1471. package/dist/checks/ui/table-structure-validation.d.ts.map +1 -0
  1472. package/dist/checks/ui/table-structure-validation.js +308 -0
  1473. package/dist/checks/ui/table-structure-validation.js.map +1 -0
  1474. package/dist/checks/ui/tailwind-consistency.d.ts +28 -0
  1475. package/dist/checks/ui/tailwind-consistency.d.ts.map +1 -0
  1476. package/dist/checks/ui/tailwind-consistency.js +349 -0
  1477. package/dist/checks/ui/tailwind-consistency.js.map +1 -0
  1478. package/dist/checks/ui/tailwind-contrast-check.d.ts +46 -0
  1479. package/dist/checks/ui/tailwind-contrast-check.d.ts.map +1 -0
  1480. package/dist/checks/ui/tailwind-contrast-check.js +464 -0
  1481. package/dist/checks/ui/tailwind-contrast-check.js.map +1 -0
  1482. package/dist/checks/ui/text-button-group-gap.d.ts +30 -0
  1483. package/dist/checks/ui/text-button-group-gap.d.ts.map +1 -0
  1484. package/dist/checks/ui/text-button-group-gap.js +245 -0
  1485. package/dist/checks/ui/text-button-group-gap.js.map +1 -0
  1486. package/dist/checks/ui/typography-check.d.ts +8 -0
  1487. package/dist/checks/ui/typography-check.d.ts.map +1 -0
  1488. package/dist/checks/ui/typography-check.js +120 -0
  1489. package/dist/checks/ui/typography-check.js.map +1 -0
  1490. package/dist/checks/ui/ui-consistency-validation.d.ts +52 -0
  1491. package/dist/checks/ui/ui-consistency-validation.d.ts.map +1 -0
  1492. package/dist/checks/ui/ui-consistency-validation.js +235 -0
  1493. package/dist/checks/ui/ui-consistency-validation.js.map +1 -0
  1494. package/dist/checks/ui/z-index-check.d.ts +29 -0
  1495. package/dist/checks/ui/z-index-check.d.ts.map +1 -0
  1496. package/dist/checks/ui/z-index-check.js +669 -0
  1497. package/dist/checks/ui/z-index-check.js.map +1 -0
  1498. package/dist/checks/zod/zod4-compatibility.d.ts +32 -0
  1499. package/dist/checks/zod/zod4-compatibility.d.ts.map +1 -0
  1500. package/dist/checks/zod/zod4-compatibility.js +415 -0
  1501. package/dist/checks/zod/zod4-compatibility.js.map +1 -0
  1502. package/dist/core/categories.d.ts +40 -0
  1503. package/dist/core/categories.d.ts.map +1 -0
  1504. package/dist/core/categories.js +153 -0
  1505. package/dist/core/categories.js.map +1 -0
  1506. package/dist/core/config.d.ts +110 -0
  1507. package/dist/core/config.d.ts.map +1 -0
  1508. package/dist/core/config.js +178 -0
  1509. package/dist/core/config.js.map +1 -0
  1510. package/dist/core/types.d.ts +206 -0
  1511. package/dist/core/types.d.ts.map +1 -0
  1512. package/dist/core/types.js +24 -0
  1513. package/dist/core/types.js.map +1 -0
  1514. package/dist/index.d.ts +38 -0
  1515. package/dist/index.d.ts.map +1 -0
  1516. package/dist/index.js +215 -0
  1517. package/dist/index.js.map +1 -0
  1518. package/dist/runner.d.ts +37 -0
  1519. package/dist/runner.d.ts.map +1 -0
  1520. package/dist/runner.js +728 -0
  1521. package/dist/runner.js.map +1 -0
  1522. package/dist/shared/concurrency-config.d.ts +67 -0
  1523. package/dist/shared/concurrency-config.d.ts.map +1 -0
  1524. package/dist/shared/concurrency-config.js +140 -0
  1525. package/dist/shared/concurrency-config.js.map +1 -0
  1526. package/dist/shared/design-tokens-config.d.ts +140 -0
  1527. package/dist/shared/design-tokens-config.d.ts.map +1 -0
  1528. package/dist/shared/design-tokens-config.js +290 -0
  1529. package/dist/shared/design-tokens-config.js.map +1 -0
  1530. package/dist/shared/design-tokens.d.ts +771 -0
  1531. package/dist/shared/design-tokens.d.ts.map +1 -0
  1532. package/dist/shared/design-tokens.js +873 -0
  1533. package/dist/shared/design-tokens.js.map +1 -0
  1534. package/dist/shared/exclusions.d.ts +93 -0
  1535. package/dist/shared/exclusions.d.ts.map +1 -0
  1536. package/dist/shared/exclusions.js +182 -0
  1537. package/dist/shared/exclusions.js.map +1 -0
  1538. package/dist/shared/file-cache.d.ts +379 -0
  1539. package/dist/shared/file-cache.d.ts.map +1 -0
  1540. package/dist/shared/file-cache.js +744 -0
  1541. package/dist/shared/file-cache.js.map +1 -0
  1542. package/dist/shared/glob-patterns.d.ts +200 -0
  1543. package/dist/shared/glob-patterns.d.ts.map +1 -0
  1544. package/dist/shared/glob-patterns.js +291 -0
  1545. package/dist/shared/glob-patterns.js.map +1 -0
  1546. package/dist/shared/in-process-runner.d.ts +44 -0
  1547. package/dist/shared/in-process-runner.d.ts.map +1 -0
  1548. package/dist/shared/in-process-runner.js +266 -0
  1549. package/dist/shared/in-process-runner.js.map +1 -0
  1550. package/dist/shared/incremental-cache.d.ts +93 -0
  1551. package/dist/shared/incremental-cache.d.ts.map +1 -0
  1552. package/dist/shared/incremental-cache.js +349 -0
  1553. package/dist/shared/incremental-cache.js.map +1 -0
  1554. package/dist/shared/layout-constants.d.ts +101 -0
  1555. package/dist/shared/layout-constants.d.ts.map +1 -0
  1556. package/dist/shared/layout-constants.js +172 -0
  1557. package/dist/shared/layout-constants.js.map +1 -0
  1558. package/dist/utils/config-loader.d.ts +34 -0
  1559. package/dist/utils/config-loader.d.ts.map +1 -0
  1560. package/dist/utils/config-loader.js +169 -0
  1561. package/dist/utils/config-loader.js.map +1 -0
  1562. package/dist/utils/console-chars.d.ts +388 -0
  1563. package/dist/utils/console-chars.d.ts.map +1 -0
  1564. package/dist/utils/console-chars.js +378 -0
  1565. package/dist/utils/console-chars.js.map +1 -0
  1566. package/dist/utils/file-scanner.d.ts +73 -0
  1567. package/dist/utils/file-scanner.d.ts.map +1 -0
  1568. package/dist/utils/file-scanner.js +203 -0
  1569. package/dist/utils/file-scanner.js.map +1 -0
  1570. package/dist/utils/findings-writer.d.ts +32 -0
  1571. package/dist/utils/findings-writer.d.ts.map +1 -0
  1572. package/dist/utils/findings-writer.js +69 -0
  1573. package/dist/utils/findings-writer.js.map +1 -0
  1574. package/dist/utils/plugin-loader.d.ts +76 -0
  1575. package/dist/utils/plugin-loader.d.ts.map +1 -0
  1576. package/dist/utils/plugin-loader.js +259 -0
  1577. package/dist/utils/plugin-loader.js.map +1 -0
  1578. package/dist/utils/preflight-runner.d.ts +29 -0
  1579. package/dist/utils/preflight-runner.d.ts.map +1 -0
  1580. package/dist/utils/preflight-runner.js +131 -0
  1581. package/dist/utils/preflight-runner.js.map +1 -0
  1582. package/dist/utils/progress-reporter.d.ts +92 -0
  1583. package/dist/utils/progress-reporter.d.ts.map +1 -0
  1584. package/dist/utils/progress-reporter.js +272 -0
  1585. package/dist/utils/progress-reporter.js.map +1 -0
  1586. package/package.json +83 -0
  1587. package/templates/domain-specific/trading-card-system/tcg-seed-validation.ts +197 -0
  1588. package/templates/new-check.ts.template +205 -0
  1589. package/templates/preflight.config.ts.template +103 -0
@@ -0,0 +1,1757 @@
1
+ #!/usr/bin/env tsx
2
+ "use strict";
3
+ /**
4
+ * Dashboard Section Patterns Preflight - IRON-CLAD UI ENFORCEMENT
5
+ *
6
+ * Enforces consistent UI patterns across /store, /admin, and /account pages:
7
+ *
8
+ * GOLD STANDARD PATTERN (use CardSection component):
9
+ * ```tsx
10
+ * <CardSection
11
+ * title="Section Title"
12
+ * headerActions={<Button>Action</Button>}
13
+ * >
14
+ * // Content here
15
+ * </CardSection>
16
+ * ```
17
+ *
18
+ * Or manual pattern (for custom layouts):
19
+ * ```tsx
20
+ * <Card>
21
+ * <CardContent className="p-0">
22
+ * <Box className="px-4 pt-3 pb-0 min-h-[44px] flex items-center justify-between">
23
+ * <Typography variant="h6" fontWeight="bold">Section Title</Typography>
24
+ * </Box>
25
+ * <Divider />
26
+ * <Box className="p-4 pt-2">
27
+ * // Content here
28
+ * </Box>
29
+ * </CardContent>
30
+ * </Card>
31
+ * ```
32
+ *
33
+ * Rules enforced (19 total):
34
+ *
35
+ * STRUCTURE:
36
+ * 1. CARD PATTERN: Dashboard sections MUST use CardSection or Card > CardContent(p-0) > Box + Divider pattern
37
+ * 2. NO SECTIONCARD: SectionCard should be replaced with CardSection component
38
+ * 3. HEADER SPACING: Card headers MUST use min-h-[44px] for consistent height
39
+ * 4. CONTENT PADDING: Content after Divider MUST use p-4 pt-2
40
+ * 5. MIN-HEIGHT: Manual patterns MUST include min-h-[44px] for header consistency
41
+ *
42
+ * CARDS & GRIDS:
43
+ * 6. CARD GRIDS: Nested card grids MUST use SectionCardGrid with gap-4
44
+ * 7. NESTED CARDS: Cards inside SectionCardGrid MUST have elevation >= 2
45
+ * 8. CARD ELEVATION: Cards should have explicit elevation prop
46
+ * 9. GRID GAPS: Card grids MUST have gap-4 for proper spacing
47
+ *
48
+ * COMPONENTS:
49
+ * 10. INFO BOXES: Stat boxes with icon+label+value MUST use InfoBox (with shadow)
50
+ * 11. NESTED BOXES: Content boxes with bg-secondary/tertiary MUST have shadow-sm
51
+ * 12. EMPTY STATES: Empty content MUST use UnifiedEmptyState
52
+ * 13. STATUSCHIP COLOR: StatusChip MUST have explicit color prop
53
+ *
54
+ * TYPOGRAPHY:
55
+ * 14. BOLD HEADERS: Section headers (h6) MUST have fontWeight="bold"
56
+ * 15. TYPOGRAPHY VARIANTS: Use h6 for sections, h5 for card titles, body1/body2 for content
57
+ *
58
+ * IMPORTS & TOKENS:
59
+ * 16. DIVIDER IMPORT: Divider must be imported when used
60
+ * 17. HARDCODED SPACING: No p-[16px] - use Tailwind tokens (p-4)
61
+ *
62
+ * STYLING:
63
+ * 18. CARD BACKGROUNDS: Must use bg-[var(--bg-primary)] not bg-card
64
+ * 19. INLINE BORDERS: Cards must NOT use inline style={{ border: ... }}
65
+ *
66
+ * Usage:
67
+ * pnpm preflight:dashboard-sections # Check only (BLOCKING)
68
+ * pnpm preflight:dashboard-sections --verbose # Show detailed output
69
+ * pnpm preflight:dashboard-sections --warn # Warning mode (non-blocking)
70
+ * pnpm preflight:dashboard-sections --fix # Auto-fix violations where possible
71
+ * pnpm preflight:dashboard-sections --adoption # Show CardSection adoption stats
72
+ *
73
+ * Features:
74
+ * - Auto-fix: Adds missing min-h-[44px] flex items-center to header boxes
75
+ * - Adoption tracking: Reports files using CardSection correctly
76
+ * - Fixable indicators: Shows which violations can be auto-fixed
77
+ *
78
+ * Why: Prevents UI drift, ensures polished consistent appearance like /store/billing
79
+ */
80
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
81
+ if (k2 === undefined) k2 = k;
82
+ var desc = Object.getOwnPropertyDescriptor(m, k);
83
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
84
+ desc = { enumerable: true, get: function() { return m[k]; } };
85
+ }
86
+ Object.defineProperty(o, k2, desc);
87
+ }) : (function(o, m, k, k2) {
88
+ if (k2 === undefined) k2 = k;
89
+ o[k2] = m[k];
90
+ }));
91
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
92
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
93
+ }) : function(o, v) {
94
+ o["default"] = v;
95
+ });
96
+ var __importStar = (this && this.__importStar) || (function () {
97
+ var ownKeys = function(o) {
98
+ ownKeys = Object.getOwnPropertyNames || function (o) {
99
+ var ar = [];
100
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
101
+ return ar;
102
+ };
103
+ return ownKeys(o);
104
+ };
105
+ return function (mod) {
106
+ if (mod && mod.__esModule) return mod;
107
+ var result = {};
108
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
109
+ __setModuleDefault(result, mod);
110
+ return result;
111
+ };
112
+ })();
113
+ Object.defineProperty(exports, "__esModule", { value: true });
114
+ exports.tags = exports.description = exports.blocking = exports.category = exports.name = exports.id = void 0;
115
+ exports.run = run;
116
+ const fs = __importStar(require("fs"));
117
+ const console_chars_1 = require("../../utils/console-chars");
118
+ const glob_patterns_1 = require("../../shared/glob-patterns");
119
+ const universal_progress_reporter_1 = require("../system/universal-progress-reporter");
120
+ const glob_1 = require("glob");
121
+ // Check metadata
122
+ exports.id = "ui/dashboard-section-patterns";
123
+ exports.name = "Dashboard Section Patterns";
124
+ exports.category = "ui";
125
+ exports.blocking = true;
126
+ exports.description = "Dashboard Section Patterns Preflight - IRON-CLAD UI ENFORCEMENT";
127
+ exports.tags = ["ui"];
128
+ // CONFIGURATION
129
+ // Dashboard page patterns to check
130
+ const DASHBOARD_PATHS = ["app/store/**/*.tsx", "app/admin/**/*.tsx", "app/account/**/*.tsx"];
131
+ const EXCLUDED = [
132
+ ...glob_patterns_1.STANDARD_EXCLUDES,
133
+ "**/*.test.tsx",
134
+ "**/*.spec.tsx",
135
+ "**/components/**", // Don't check component definitions
136
+ "**/loading.tsx",
137
+ "**/error.tsx",
138
+ "**/layout.tsx",
139
+ ];
140
+ // HELPER FUNCTIONS
141
+ /**
142
+ * Check if preflight-ignore comment exists within the previous N lines
143
+ * This allows for comments on separate lines or inline with JSX comments
144
+ */
145
+ function hasPreflightIgnore(lines, lineIndex, lookback = 8) {
146
+ const startLine = Math.max(0, lineIndex - lookback);
147
+ for (let j = startLine; j <= lineIndex; j++) {
148
+ if (lines[j].includes("preflight-ignore")) {
149
+ return true;
150
+ }
151
+ }
152
+ return false;
153
+ }
154
+ // PATTERN DETECTORS
155
+ /**
156
+ * Detect inline section headers that should use CardSection
157
+ * Pattern: Card > CardContent > Typography h5/h6 as section header
158
+ */
159
+ function detectInlineSectionHeaders(content, lines, file) {
160
+ const violations = [];
161
+ // Skip if already using CardSection or CardSectionHeader
162
+ if (content.includes("CardSection") || content.includes("CardSectionHeader")) {
163
+ return violations;
164
+ }
165
+ // Look for Typography h5/h6 with fontWeight inside CardContent
166
+ const sectionHeaderPattern = /Typography[^>]*variant=["'](h5|h6)["'][^>]*(?:fontWeight|font-semibold|font-bold)/g;
167
+ let inCard = false;
168
+ let inCardContent = false;
169
+ let cardDepth = 0;
170
+ let hasCorrectCardPattern = false; // Track if current card uses correct pattern
171
+ for (let i = 0; i < lines.length; i++) {
172
+ const line = lines[i];
173
+ // Track Card boundaries
174
+ if (/<Card[^>]*>/.test(line) || /<Card\s/.test(line)) {
175
+ inCard = true;
176
+ cardDepth++;
177
+ hasCorrectCardPattern = false; // Reset for new card
178
+ }
179
+ if (/<\/Card>/.test(line)) {
180
+ cardDepth--;
181
+ if (cardDepth <= 0) {
182
+ inCard = false;
183
+ inCardContent = false;
184
+ hasCorrectCardPattern = false;
185
+ }
186
+ }
187
+ // Track CardContent with p-0 (correct pattern)
188
+ if (/<CardContent[^>]*className=["'][^"']*p-0/.test(line)) {
189
+ inCardContent = true;
190
+ hasCorrectCardPattern = true; // This card uses the correct pattern
191
+ }
192
+ else if (/<CardContent/.test(line)) {
193
+ inCardContent = true;
194
+ }
195
+ if (/<\/CardContent>/.test(line)) {
196
+ inCardContent = false;
197
+ }
198
+ // Skip if using SectionCard already
199
+ if (content.includes("SectionCard"))
200
+ continue;
201
+ // Check for section header pattern inside Card
202
+ if (inCard && inCardContent && sectionHeaderPattern.test(line)) {
203
+ // Skip if this card already uses the correct CardContent p-0 pattern
204
+ if (hasCorrectCardPattern) {
205
+ sectionHeaderPattern.lastIndex = 0;
206
+ continue;
207
+ }
208
+ // Skip if this is a data value display (preceded by caption label)
209
+ const prevLines = lines.slice(Math.max(0, i - 3), i).join("\n");
210
+ const isDataValue = /variant=["']caption["']/.test(prevLines);
211
+ if (isDataValue) {
212
+ sectionHeaderPattern.lastIndex = 0;
213
+ continue;
214
+ }
215
+ // Check if this looks like a section header (followed by content)
216
+ const nextLines = lines.slice(i + 1, i + 10).join("\n");
217
+ const looksLikeSectionHeader = /marginBottom|mb-\d|gap-\d/.test(line) || /<(Box|div|Grid|Stack)/.test(nextLines);
218
+ if (looksLikeSectionHeader) {
219
+ // Check for preflight-ignore within previous 3 lines
220
+ if (hasPreflightIgnore(lines, i))
221
+ continue;
222
+ violations.push({
223
+ file,
224
+ line: i + 1,
225
+ rule: "section-header",
226
+ message: "Section header inside Card should use CardSection component",
227
+ suggestion: 'Replace Card + Typography header with <CardSection title="..." headerActions={...}>',
228
+ code: line.trim().substring(0, 80),
229
+ });
230
+ }
231
+ }
232
+ // Reset pattern lastIndex
233
+ sectionHeaderPattern.lastIndex = 0;
234
+ }
235
+ return violations;
236
+ }
237
+ /**
238
+ * Detect inline info boxes that should use InfoBox component
239
+ * Pattern: Box with icon + Typography caption + Typography value
240
+ */
241
+ function detectInlineInfoBoxes(content, lines, file) {
242
+ const violations = [];
243
+ // Skip if already using InfoBox
244
+ if (content.includes("InfoBox"))
245
+ return violations;
246
+ // Look for the pattern: Box with textAlign center, icon, caption, value
247
+ const infoBoxPattern = /textAlign:\s*["']center["']/;
248
+ for (let i = 0; i < lines.length; i++) {
249
+ const line = lines[i];
250
+ if (infoBoxPattern.test(line) && /<Box/.test(line)) {
251
+ // Look ahead for icon + caption + value pattern
252
+ const nextLines = lines.slice(i, Math.min(i + 15, lines.length)).join("\n");
253
+ const hasIcon = /size=\{?\d+\}?/.test(nextLines) && /lucide-react|Icon/.test(content);
254
+ const hasCaption = /variant=["']caption["']/.test(nextLines);
255
+ const hasValue = /variant=["']body[12]?["'][^>]*fontWeight/.test(nextLines);
256
+ const hasBgTertiary = /bg-tertiary|bg-\[var\(--bg-tertiary\)\]/.test(nextLines);
257
+ if (hasIcon && hasCaption && hasValue && hasBgTertiary) {
258
+ // Check for preflight-ignore
259
+ const prevLine = i > 0 ? lines[i - 1] : "";
260
+ if (prevLine.includes("preflight-ignore"))
261
+ continue;
262
+ violations.push({
263
+ file,
264
+ line: i + 1,
265
+ rule: "info-box",
266
+ message: "Info box pattern (icon + label + value) should use InfoBox component",
267
+ suggestion: 'Replace with <InfoBox icon={...} label="..." value="..." />',
268
+ code: line.trim().substring(0, 60),
269
+ });
270
+ }
271
+ }
272
+ }
273
+ return violations;
274
+ }
275
+ /**
276
+ * Detect missing empty states
277
+ * Pattern: Conditional rendering with length === 0 without UnifiedEmptyState
278
+ */
279
+ function detectMissingEmptyStates(content, lines, file) {
280
+ const violations = [];
281
+ // Look for length === 0 checks
282
+ const emptyCheckPattern = /\.length\s*===?\s*0/;
283
+ for (let i = 0; i < lines.length; i++) {
284
+ const line = lines[i];
285
+ if (emptyCheckPattern.test(line)) {
286
+ // Look ahead for what's rendered in the empty case
287
+ const nextLines = lines.slice(i, Math.min(i + 20, lines.length)).join("\n");
288
+ // Check if UnifiedEmptyState is used
289
+ if (nextLines.includes("UnifiedEmptyState"))
290
+ continue;
291
+ // Check if it's a simple text message without proper empty state
292
+ const hasSimpleText = /<Typography[^>]*>[^<]*no\s|empty|yet|appear/i.test(nextLines);
293
+ const hasNoEmptyState = !nextLines.includes("EmptyState");
294
+ if (hasSimpleText && hasNoEmptyState) {
295
+ // Check for preflight-ignore in previous line or within the next few lines (for JSX comments)
296
+ const prevLine = i > 0 ? lines[i - 1] : "";
297
+ if (prevLine.includes("preflight-ignore"))
298
+ continue;
299
+ if (nextLines.includes("preflight-ignore"))
300
+ continue;
301
+ violations.push({
302
+ file,
303
+ line: i + 1,
304
+ rule: "empty-state",
305
+ message: "Empty state should use UnifiedEmptyState component",
306
+ suggestion: 'Replace with <UnifiedEmptyState variant="..." action={{...}} />',
307
+ code: line.trim().substring(0, 60),
308
+ });
309
+ }
310
+ }
311
+ }
312
+ return violations;
313
+ }
314
+ /**
315
+ * Detect ad-hoc card grids that should use SectionCardGrid
316
+ * Pattern: Grid with Cards inside SectionCard or similar context
317
+ */
318
+ function detectAdHocCardGrids(content, lines, file) {
319
+ const violations = [];
320
+ // Skip if already using SectionCardGrid
321
+ if (content.includes("SectionCardGrid"))
322
+ return violations;
323
+ // Look for grid patterns with nested Cards
324
+ const gridPattern = /gridTemplateColumns:\s*["']repeat\(auto-fit/;
325
+ for (let i = 0; i < lines.length; i++) {
326
+ const line = lines[i];
327
+ if (gridPattern.test(line)) {
328
+ // Look ahead for Card children
329
+ const nextLines = lines.slice(i, Math.min(i + 30, lines.length)).join("\n");
330
+ // Count Card occurrences
331
+ const cardMatches = nextLines.match(/<Card[^>]*>/g);
332
+ const hasMultipleCards = cardMatches && cardMatches.length >= 2;
333
+ if (hasMultipleCards) {
334
+ // Check for preflight-ignore
335
+ const prevLine = i > 0 ? lines[i - 1] : "";
336
+ if (prevLine.includes("preflight-ignore"))
337
+ continue;
338
+ violations.push({
339
+ file,
340
+ line: i + 1,
341
+ rule: "card-grid",
342
+ message: "Card grid should use SectionCardGrid for consistent spacing",
343
+ suggestion: "Replace inline grid with <SectionCardGrid columns={...}>",
344
+ code: line.trim().substring(0, 60),
345
+ });
346
+ }
347
+ }
348
+ }
349
+ return violations;
350
+ }
351
+ /**
352
+ * Detect incorrect background color usage in card-like components
353
+ * Pattern: bg-card instead of bg-[var(--bg-primary)]
354
+ *
355
+ * bg-card is a Tailwind default that may not resolve correctly with our CSS variables.
356
+ * All card backgrounds should use bg-[var(--bg-primary)] for consistent theming.
357
+ */
358
+ function detectIncorrectCardBackground(content, lines, file) {
359
+ const violations = [];
360
+ // Look for bg-card usage (incorrect)
361
+ const bgCardPattern = /\bbg-card\b/;
362
+ for (let i = 0; i < lines.length; i++) {
363
+ const line = lines[i];
364
+ if (bgCardPattern.test(line)) {
365
+ // Check for preflight-ignore
366
+ const prevLine = i > 0 ? lines[i - 1] : "";
367
+ if (prevLine.includes("preflight-ignore"))
368
+ continue;
369
+ violations.push({
370
+ file,
371
+ line: i + 1,
372
+ rule: "card-background",
373
+ message: "Use bg-[var(--bg-primary)] instead of bg-card for consistent theming",
374
+ suggestion: "Replace bg-card with bg-[var(--bg-primary)]",
375
+ code: line.trim().substring(0, 80),
376
+ });
377
+ }
378
+ }
379
+ return violations;
380
+ }
381
+ /**
382
+ * Detect inline border styles on Card components
383
+ * Pattern: <Card style={{ border: ... }}> or style={{ ...border... }}
384
+ *
385
+ * Inline border styles cause inconsistency across pages. Cards should use:
386
+ * - variant="outlined" for bordered cards (uses CSS variable --border-color)
387
+ * - variant="elevation" for shadow-only cards (no border)
388
+ * - Tailwind classes like border-2 border-[var(--color-primary)] for special cases
389
+ */
390
+ function detectInlineBorderStyles(content, lines, file) {
391
+ const violations = [];
392
+ // Look for Card components with inline border styles
393
+ let inCardTag = false;
394
+ let cardStartLine = 0;
395
+ let bracketDepth = 0;
396
+ for (let i = 0; i < lines.length; i++) {
397
+ const line = lines[i];
398
+ // Track Card tag opening
399
+ if (/<Card\b/.test(line)) {
400
+ inCardTag = true;
401
+ cardStartLine = i;
402
+ bracketDepth = 0;
403
+ }
404
+ // Track style prop with inline border
405
+ if (inCardTag) {
406
+ // Count brackets to track style object
407
+ bracketDepth += (line.match(/\{/g) || []).length;
408
+ bracketDepth -= (line.match(/\}/g) || []).length;
409
+ // Check for inline border in style prop
410
+ const hasInlineBorder = /style=\{?\{[^}]*\bborder\b[^}]*\}/.test(line) ||
411
+ /style=\{?\{[^}]*\bborderColor\b[^}]*\}/.test(line) ||
412
+ /style=\{?\{[^}]*\bborderWidth\b[^}]*\}/.test(line) ||
413
+ /style=\{?\{[^}]*\bborderStyle\b[^}]*\}/.test(line);
414
+ // Also check for border in multi-line style objects
415
+ const hasStyleProp = /style=\{/.test(lines.slice(cardStartLine, i + 1).join("\n"));
416
+ const hasBorderInStyle = hasStyleProp && /\bborder\s*:/.test(line);
417
+ if (hasInlineBorder || hasBorderInStyle) {
418
+ // Check for preflight-ignore
419
+ const prevLine = i > 0 ? lines[i - 1] : "";
420
+ if (prevLine.includes("preflight-ignore"))
421
+ continue;
422
+ violations.push({
423
+ file,
424
+ line: i + 1,
425
+ rule: "inline-border-style",
426
+ message: "Card components should not use inline border styles",
427
+ suggestion: 'Use variant="outlined" or Tailwind classes like border-2 border-[var(--color-primary)]',
428
+ code: line.trim().substring(0, 80),
429
+ });
430
+ }
431
+ // End of Card tag
432
+ if (/>/.test(line) && bracketDepth <= 0) {
433
+ inCardTag = false;
434
+ }
435
+ }
436
+ }
437
+ return violations;
438
+ }
439
+ /**
440
+ * Detect unwrapped section patterns (Typography h5/h6 header + card grid without wrapper)
441
+ * Pattern: Box/div containing Typography h5/h6 + grid with Cards, not wrapped in SectionCard/ContentSection
442
+ *
443
+ * Category sections like "Marketplace", "Shipping" etc. that have:
444
+ * - A Typography h5/h6 header
445
+ * - A description Typography
446
+ * - A grid of Cards
447
+ *
448
+ * These MUST be wrapped in either:
449
+ * - SectionCard (if you want the outer card wrapper)
450
+ * - ContentSection (if you just want the header pattern without outer card)
451
+ */
452
+ function detectUnwrappedSectionPatterns(content, lines, file) {
453
+ const violations = [];
454
+ // Skip if already using SectionCard or ContentSection
455
+ if (content.includes("SectionCard") || content.includes("ContentSection")) {
456
+ return violations;
457
+ }
458
+ // Look for Typography h5/h6 that's NOT inside a Card (standalone section headers)
459
+ for (let i = 0; i < lines.length; i++) {
460
+ const line = lines[i];
461
+ // Check for Typography opening tag
462
+ if (!/<Typography\b/.test(line))
463
+ continue;
464
+ // Get the full Typography element (may span multiple lines)
465
+ let typographyBlock = line;
466
+ let endLine = i;
467
+ if (!/>/.test(line)) {
468
+ // Multi-line Typography tag - collect until we find the closing >
469
+ for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
470
+ typographyBlock += "\n" + lines[j];
471
+ endLine = j;
472
+ if (/>/.test(lines[j]))
473
+ break;
474
+ }
475
+ }
476
+ // Check if this is an h5 or h6 variant
477
+ const isTypographyHeader = /variant=["'](h5|h6)["']/.test(typographyBlock);
478
+ if (!isTypographyHeader)
479
+ continue;
480
+ // Look backwards to see if we're inside a Card (if so, skip - different rule handles that)
481
+ let insideCard = false;
482
+ let cardDepth = 0;
483
+ for (let j = i - 1; j >= Math.max(0, i - 30); j--) {
484
+ if (/<\/Card>/.test(lines[j]))
485
+ cardDepth++;
486
+ if (/<Card\b/.test(lines[j])) {
487
+ if (cardDepth > 0) {
488
+ cardDepth--;
489
+ }
490
+ else {
491
+ insideCard = true;
492
+ break;
493
+ }
494
+ }
495
+ }
496
+ if (insideCard)
497
+ continue;
498
+ // Look ahead for a grid with Cards pattern (within 40 lines from end of Typography)
499
+ // Need larger window because Cards may be inside .map() calls
500
+ const searchStart = endLine + 1;
501
+ const nextLines = lines.slice(searchStart, Math.min(searchStart + 45, lines.length)).join("\n");
502
+ // Check for grid pattern
503
+ const hasGridPattern = /gridTemplateColumns|grid-cols-|className="[^"]*grid\s/.test(nextLines);
504
+ // Check for Cards - either direct <Card or inside .map() that renders Cards
505
+ const cardMatches = nextLines.match(/<Card\b/g);
506
+ const hasCards = cardMatches && cardMatches.length >= 1;
507
+ // Also detect .map() patterns that likely render Cards
508
+ const hasMapWithCards = /\.map\([^)]*\)\s*=>\s*\(?[\s\S]*<Card\b/.test(nextLines);
509
+ if (hasGridPattern && (hasCards || hasMapWithCards)) {
510
+ // Check for preflight-ignore
511
+ const prevLine = i > 0 ? lines[i - 1] : "";
512
+ if (prevLine.includes("preflight-ignore"))
513
+ continue;
514
+ // Check if parent is a Box or div (not SectionCard/ContentSection)
515
+ const parentContext = lines.slice(Math.max(0, i - 5), i).join("\n");
516
+ const isInPlainContainer = /<(Box|div)\b/.test(parentContext);
517
+ if (isInPlainContainer) {
518
+ violations.push({
519
+ file,
520
+ line: i + 1,
521
+ rule: "unwrapped-section",
522
+ message: "Section with header + card grid should use SectionCard or ContentSection",
523
+ suggestion: 'Wrap with <SectionCard title="..." subtitle="..."> or <ContentSection title="..." subtitle="...">',
524
+ code: line.trim().substring(0, 80),
525
+ });
526
+ }
527
+ }
528
+ }
529
+ return violations;
530
+ }
531
+ /**
532
+ * Detect default border classes on dashboard cards
533
+ * Pattern: border border-border or border-[var(--border-color)] without explicit variant="outlined"
534
+ *
535
+ * Dashboard cards should use shadow-only styling (like /store/listings) not borders.
536
+ * Borders should only be used for:
537
+ * - Highlighted/recommended items (e.g., border-2 border-[var(--color-primary)])
538
+ * - Explicit outlined variants
539
+ */
540
+ function detectDefaultBorderClasses(content, lines, file) {
541
+ const violations = [];
542
+ // Skip component definition files - they define the patterns
543
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
544
+ return violations;
545
+ }
546
+ // Look for Card with border border-border or similar default border patterns
547
+ for (let i = 0; i < lines.length; i++) {
548
+ const line = lines[i];
549
+ // Check for Card with default border classes (not highlighted borders)
550
+ if (/<Card\b/.test(line)) {
551
+ // Look at this line and next few lines for className with border
552
+ const cardContext = lines.slice(i, Math.min(i + 5, lines.length)).join(" ");
553
+ // Check for default border patterns (not highlighted/primary borders)
554
+ const hasDefaultBorder = /className=[^>]*\bborder\s+border-border\b/.test(cardContext) ||
555
+ /className=[^>]*\bborder\s+border-\[var\(--border-color\)\]/.test(cardContext);
556
+ // Skip if it's a highlighted border (primary color, etc.)
557
+ const isHighlightedBorder = /border-\[var\(--color-primary\)\]/.test(cardContext) || /border-primary/.test(cardContext);
558
+ if (hasDefaultBorder && !isHighlightedBorder) {
559
+ // Check for preflight-ignore
560
+ const prevLine = i > 0 ? lines[i - 1] : "";
561
+ if (prevLine.includes("preflight-ignore"))
562
+ continue;
563
+ violations.push({
564
+ file,
565
+ line: i + 1,
566
+ rule: "default-border-class",
567
+ message: "Dashboard cards should use shadow-only styling, not default borders",
568
+ suggestion: "Remove 'border border-border' class - use shadow for card separation",
569
+ code: line.trim().substring(0, 80),
570
+ });
571
+ }
572
+ }
573
+ }
574
+ return violations;
575
+ }
576
+ /**
577
+ * Detect SectionCard usage that should be migrated to Card pattern
578
+ *
579
+ * GOLD STANDARD (from /store/disputes, /store/billing):
580
+ * ```tsx
581
+ * <Card>
582
+ * <CardContent className="p-0">
583
+ * <Box className="px-4 py-3">
584
+ * <Typography variant="h6" fontWeight="bold">Section Title</Typography>
585
+ * </Box>
586
+ * <Divider />
587
+ * // Content here
588
+ * </CardContent>
589
+ * </Card>
590
+ * ```
591
+ *
592
+ * SectionCard was a convenience wrapper but creates inconsistency.
593
+ * All dashboard sections should use the explicit Card pattern for uniformity.
594
+ */
595
+ function detectSectionCardUsage(content, lines, file) {
596
+ const violations = [];
597
+ // Skip component definition files
598
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
599
+ return violations;
600
+ }
601
+ // Look for SectionCard usage
602
+ for (let i = 0; i < lines.length; i++) {
603
+ const line = lines[i];
604
+ if (/<SectionCard\b/.test(line)) {
605
+ // Check for preflight-ignore
606
+ const prevLine = i > 0 ? lines[i - 1] : "";
607
+ if (prevLine.includes("preflight-ignore"))
608
+ continue;
609
+ violations.push({
610
+ file,
611
+ line: i + 1,
612
+ rule: "sectioncard-usage",
613
+ message: "SectionCard should be replaced with Card > CardContent(p-0) > Box + Divider pattern",
614
+ suggestion: 'Use <Card><CardContent className="p-0"><Box className="px-4 py-3">...<Divider />',
615
+ code: line.trim().substring(0, 80),
616
+ });
617
+ }
618
+ }
619
+ return violations;
620
+ }
621
+ /**
622
+ * Detect missing Card pattern in dashboard pages
623
+ *
624
+ * GOLD STANDARD PATTERN (use CardSection component):
625
+ * ```tsx
626
+ * <CardSection
627
+ * title="Section Title"
628
+ * headerActions={<Button>Action</Button>}
629
+ * >
630
+ * {children}
631
+ * </CardSection>
632
+ * ```
633
+ *
634
+ * Or manual pattern:
635
+ * ```tsx
636
+ * <Card>
637
+ * <CardContent className="p-0">
638
+ * <Box className="px-4 pt-3 pb-0 min-h-[44px] flex items-center">
639
+ * <Typography variant="h6" fontWeight="bold">Section Title</Typography>
640
+ * </Box>
641
+ * <Divider />
642
+ * <Box className="p-4 pt-2">
643
+ * {children}
644
+ * </Box>
645
+ * </CardContent>
646
+ * </Card>
647
+ * ```
648
+ *
649
+ * Dashboard pages should use CardSection for consistent header heights.
650
+ * This checks for Typography h6 headers that are NOT inside the proper structure.
651
+ */
652
+ function detectMissingCardPattern(content, lines, file) {
653
+ const violations = [];
654
+ // Skip if file doesn't have Typography h6 headers
655
+ if (!content.includes('variant="h6"') && !content.includes("variant='h6'")) {
656
+ return violations;
657
+ }
658
+ // Skip component definition files
659
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
660
+ return violations;
661
+ }
662
+ // Skip if already using CardSection
663
+ if (content.includes("CardSection")) {
664
+ return violations;
665
+ }
666
+ // Look for Typography h6 that's not in the proper Card > CardContent(p-0) > Box > Divider structure
667
+ for (let i = 0; i < lines.length; i++) {
668
+ const line = lines[i];
669
+ // Check for Typography h6 with fontWeight bold (section header pattern)
670
+ if (/<Typography[^>]*variant=["']h6["'][^>]*fontWeight/.test(line) ||
671
+ /<Typography[^>]*fontWeight[^>]*variant=["']h6["']/.test(line)) {
672
+ // Skip if this is a data value display (preceded by caption label)
673
+ const prevLines = lines.slice(Math.max(0, i - 3), i).join("\n");
674
+ const isDataValue = /variant=["']caption["']/.test(prevLines);
675
+ if (isDataValue)
676
+ continue;
677
+ // Look backwards to check if we're in the correct structure
678
+ const contextLines = lines.slice(Math.max(0, i - 10), i + 1).join("\n");
679
+ // Look forward to check for Divider after the header Box
680
+ const forwardLines = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
681
+ // Check for the gold standard pattern: CardContent with p-0 and Divider after header
682
+ const hasCorrectPattern = /CardContent[^>]*className=["'][^"']*p-0/.test(contextLines) &&
683
+ /<Divider/.test(forwardLines);
684
+ // Also check if inside SectionCard (will be caught by other rule)
685
+ const insideSectionCard = /SectionCard/.test(contextLines);
686
+ // Check for min-h-[44px] for consistent header height
687
+ const hasConsistentHeight = /min-h-\[44px\]/.test(contextLines);
688
+ if (!hasCorrectPattern && !insideSectionCard) {
689
+ // Check for preflight-ignore within previous 3 lines
690
+ if (hasPreflightIgnore(lines, i))
691
+ continue;
692
+ violations.push({
693
+ file,
694
+ line: i + 1,
695
+ rule: "missing-card-pattern",
696
+ message: "Section header should use CardSection component for consistent header heights",
697
+ suggestion: 'Use <CardSection title="..." headerActions={...}> or <CardSectionHeader title="..." />',
698
+ code: line.trim().substring(0, 80),
699
+ });
700
+ }
701
+ }
702
+ }
703
+ return violations;
704
+ }
705
+ /**
706
+ * Detect incorrect card header spacing
707
+ *
708
+ * GOLD STANDARD: Use CardSection component for consistent header heights
709
+ *
710
+ * If using manual pattern, header box should use:
711
+ * - px-4 pt-3 pb-0 for padding
712
+ * - min-h-[44px] for consistent height regardless of buttons
713
+ * - flex items-center for vertical centering
714
+ *
715
+ * Common mistakes:
716
+ * - py-2, py-3 (equal top/bottom padding looks unbalanced)
717
+ * - Missing min-h-[44px] (headers with buttons are taller)
718
+ * - Missing flex items-center (text not vertically centered)
719
+ */
720
+ function detectIncorrectHeaderSpacing(content, lines, file) {
721
+ const violations = [];
722
+ // Skip component definition files
723
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
724
+ return violations;
725
+ }
726
+ // Skip if using CardSection (it handles this correctly)
727
+ if (content.includes("CardSection")) {
728
+ return violations;
729
+ }
730
+ // Look for Box elements that contain Typography h6 headers (section headers)
731
+ for (let i = 0; i < lines.length; i++) {
732
+ const line = lines[i];
733
+ // Check for Box with px-4 that's a header container
734
+ if (/<Box[^>]*className=["'][^"']*px-4/.test(line)) {
735
+ // Look ahead to see if this contains a Typography h6
736
+ const nextLines = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
737
+ const hasTypographyH6 = /<Typography[^>]*variant=["']h6["']/.test(nextLines);
738
+ if (hasTypographyH6) {
739
+ // Check if it has the correct spacing pattern
740
+ const hasCorrectSpacing = /pt-3\s+pb-0|pt-3[^p]*pb-0/.test(line);
741
+ const hasIncorrectPy = /\bpy-\d/.test(line); // py-X is incorrect for headers
742
+ const hasMinHeight = /min-h-\[44px\]/.test(line);
743
+ const hasFlexCenter = /flex[^"']*items-center/.test(line);
744
+ // Check if header has action buttons (needs consistent height)
745
+ const hasHeaderActions = /justify-between/.test(line) || /<Button/.test(nextLines);
746
+ if (!hasCorrectSpacing || hasIncorrectPy) {
747
+ // Check for preflight-ignore within previous 3 lines
748
+ if (hasPreflightIgnore(lines, i))
749
+ continue;
750
+ violations.push({
751
+ file,
752
+ line: i + 1,
753
+ rule: "header-spacing",
754
+ message: "Card header should use CardSection component for consistent heights",
755
+ suggestion: 'Use <CardSection title="..." headerActions={...}> or add min-h-[44px] flex items-center',
756
+ code: line.trim().substring(0, 80),
757
+ });
758
+ }
759
+ else if (hasHeaderActions && (!hasMinHeight || !hasFlexCenter)) {
760
+ // Header with actions but missing consistent height
761
+ if (hasPreflightIgnore(lines, i))
762
+ continue;
763
+ violations.push({
764
+ file,
765
+ line: i + 1,
766
+ rule: "header-height-inconsistent",
767
+ message: "Card header with actions needs min-h-[44px] for consistent height",
768
+ suggestion: 'Use <CardSection> or add className="px-4 pt-3 pb-0 min-h-[44px] flex items-center justify-between"',
769
+ code: line.trim().substring(0, 80),
770
+ });
771
+ }
772
+ }
773
+ }
774
+ }
775
+ return violations;
776
+ }
777
+ /**
778
+ * Detect nested boxes/cards missing shadow
779
+ *
780
+ * Nested content boxes (like "Listing Usage" stats box) should have shadow for depth.
781
+ * Pattern: Box with bg-[var(--bg-secondary)] or bg-[var(--bg-tertiary)] should have shadow-[var(--shadow-sm)]
782
+ */
783
+ function detectMissingShadowOnNestedBoxes(content, lines, file) {
784
+ const violations = [];
785
+ // Skip component definition files
786
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
787
+ return violations;
788
+ }
789
+ // Look for Box elements with secondary/tertiary background
790
+ for (let i = 0; i < lines.length; i++) {
791
+ const line = lines[i];
792
+ // Check for Box with bg-secondary or bg-tertiary
793
+ const hasBgSecondary = /bg-\[var\(--bg-secondary\)\]/.test(line);
794
+ const hasBgTertiary = /bg-\[var\(--bg-tertiary\)\]/.test(line);
795
+ if ((hasBgSecondary || hasBgTertiary) && /<Box/.test(line)) {
796
+ // Check if it has shadow
797
+ const hasShadow = /shadow-\[var\(--shadow/.test(line);
798
+ // Check if it's a small inline element (skip those)
799
+ const isSmallElement = /w-\d|h-\d|size-\d/.test(line) && !/rounded-\[var\(--radius-lg\)\]/.test(line);
800
+ if (!hasShadow && !isSmallElement) {
801
+ // Look at context - is this a content box (has rounded corners, padding)?
802
+ const isContentBox = /rounded-\[var\(--radius/.test(line) && /\bp-\d/.test(line);
803
+ if (isContentBox) {
804
+ // Check for preflight-ignore
805
+ const prevLine = i > 0 ? lines[i - 1] : "";
806
+ if (prevLine.includes("preflight-ignore"))
807
+ continue;
808
+ violations.push({
809
+ file,
810
+ line: i + 1,
811
+ rule: "missing-shadow",
812
+ message: "Nested content boxes should have shadow for visual depth",
813
+ suggestion: "Add shadow-[var(--shadow-sm)] to the className",
814
+ code: line.trim().substring(0, 80),
815
+ });
816
+ }
817
+ }
818
+ }
819
+ }
820
+ return violations;
821
+ }
822
+ /**
823
+ * Detect card grids without proper gap spacing
824
+ *
825
+ * Card grids should use gap-4 (16px) for proper visual separation between cards.
826
+ * SectionCardGrid provides this automatically, but inline grids may miss it.
827
+ */
828
+ function detectMissingGridGap(content, lines, file) {
829
+ const violations = [];
830
+ // Skip if using SectionCardGrid (it handles gaps correctly)
831
+ if (content.includes("SectionCardGrid"))
832
+ return violations;
833
+ // Skip component definition files
834
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
835
+ return violations;
836
+ }
837
+ // Look for grid patterns
838
+ for (let i = 0; i < lines.length; i++) {
839
+ const line = lines[i];
840
+ // Check for grid class
841
+ if (/className=["'][^"']*\bgrid\b/.test(line)) {
842
+ // Look ahead to see if this contains Cards
843
+ const nextLines = lines.slice(i, Math.min(i + 20, lines.length)).join("\n");
844
+ const hasCards = /<Card\b/.test(nextLines);
845
+ if (hasCards) {
846
+ // Check for proper gap
847
+ const hasGap4 = /\bgap-4\b/.test(line);
848
+ const hasGap3 = /\bgap-3\b/.test(line); // gap-3 is acceptable but gap-4 preferred
849
+ const hasNoGap = !/\bgap-\d/.test(line);
850
+ if (hasNoGap) {
851
+ // Check for preflight-ignore
852
+ const prevLine = i > 0 ? lines[i - 1] : "";
853
+ if (prevLine.includes("preflight-ignore"))
854
+ continue;
855
+ violations.push({
856
+ file,
857
+ line: i + 1,
858
+ rule: "missing-grid-gap",
859
+ message: "Card grids should have gap-4 for proper spacing between cards",
860
+ suggestion: "Add gap-4 to the grid className, or use SectionCardGrid component",
861
+ code: line.trim().substring(0, 80),
862
+ });
863
+ }
864
+ }
865
+ }
866
+ }
867
+ return violations;
868
+ }
869
+ /**
870
+ * Detect missing spacing between Box and SectionCardGrid siblings
871
+ *
872
+ * When a styled Box (like a stats/usage box) is followed by SectionCardGrid,
873
+ * there needs to be margin-top on the grid for visual separation.
874
+ * Additionally, mt and gap values should match for consistent spacing.
875
+ *
876
+ * Pattern: </Box> followed by <SectionCardGrid without mt-* class
877
+ * Pattern: SectionCardGrid with mt-4 but no gap-4 (inconsistent spacing)
878
+ */
879
+ function detectBoxToSectionCardGridGap(content, lines, file) {
880
+ const violations = [];
881
+ // Only check files that use SectionCardGrid
882
+ if (!content.includes("SectionCardGrid"))
883
+ return violations;
884
+ // Skip component definition files
885
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
886
+ return violations;
887
+ }
888
+ for (let i = 0; i < lines.length; i++) {
889
+ const line = lines[i];
890
+ // Look for SectionCardGrid
891
+ if (/<SectionCardGrid/.test(line)) {
892
+ // Check for preflight-ignore
893
+ const prevLine = i > 0 ? lines[i - 1] : "";
894
+ if (prevLine.includes("preflight-ignore"))
895
+ continue;
896
+ // Extract mt value if present
897
+ const mtMatch = line.match(/\bmt-(\d+)/);
898
+ const hasMarginTop = mtMatch !== null || /\bmy-\d/.test(line);
899
+ // Check if it has a gap override
900
+ const gapMatch = line.match(/\bgap-(\d+)/);
901
+ // Look back to see if preceded by a closing Box tag (within 3 lines)
902
+ let foundClosingBox = false;
903
+ for (let j = i - 1; j >= Math.max(0, i - 3); j--) {
904
+ const prevContent = lines[j].trim();
905
+ // Skip empty lines and comments
906
+ if (prevContent === "" || prevContent.startsWith("//") || prevContent.startsWith("{/*"))
907
+ continue;
908
+ // Check for closing Box
909
+ if (/<\/Box>/.test(prevContent)) {
910
+ foundClosingBox = true;
911
+ break;
912
+ }
913
+ // If we hit something else, stop looking
914
+ if (prevContent.length > 0)
915
+ break;
916
+ }
917
+ if (foundClosingBox) {
918
+ if (!hasMarginTop) {
919
+ violations.push({
920
+ file,
921
+ line: i + 1,
922
+ rule: "box-to-sectioncardgrid-gap",
923
+ message: "SectionCardGrid after Box sibling needs mt-4 for visual separation",
924
+ suggestion: 'Add className="mt-4 gap-4" to SectionCardGrid for consistent spacing',
925
+ code: line.trim().substring(0, 80),
926
+ });
927
+ }
928
+ else if (mtMatch && !gapMatch) {
929
+ // Has mt but no gap override - spacing will be inconsistent
930
+ const mtValue = mtMatch[1];
931
+ violations.push({
932
+ file,
933
+ line: i + 1,
934
+ rule: "sectioncardgrid-inconsistent-spacing",
935
+ message: `SectionCardGrid has mt-${mtValue} but no matching gap-${mtValue} - horizontal/vertical spacing will differ`,
936
+ suggestion: `Add gap-${mtValue} to match mt-${mtValue} for consistent spacing in all directions`,
937
+ code: line.trim().substring(0, 80),
938
+ });
939
+ }
940
+ }
941
+ }
942
+ }
943
+ return violations;
944
+ }
945
+ /**
946
+ * Detect SectionCardGrid with large cards that need wider gap
947
+ *
948
+ * When SectionCardGrid contains full Card components (not InfoBox), the default
949
+ * gap-3 is too tight. Cards with CardContent, pricing, or plan details need gap-6.
950
+ *
951
+ * Pattern: SectionCardGrid containing <Card> elements without gap-4/gap-6 override
952
+ */
953
+ function detectLargeCardGridTightGap(content, lines, file) {
954
+ const violations = [];
955
+ // Only check files that use SectionCardGrid
956
+ if (!content.includes("SectionCardGrid"))
957
+ return violations;
958
+ // Skip component definition files
959
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
960
+ return violations;
961
+ }
962
+ for (let i = 0; i < lines.length; i++) {
963
+ const line = lines[i];
964
+ // Look for SectionCardGrid
965
+ if (/<SectionCardGrid/.test(line)) {
966
+ // Check for preflight-ignore
967
+ const prevLine = i > 0 ? lines[i - 1] : "";
968
+ if (prevLine.includes("preflight-ignore"))
969
+ continue;
970
+ // Check if it already has a wider gap override
971
+ const hasWiderGap = /gap-[456789]|gap-1[0-9]/.test(line);
972
+ if (hasWiderGap)
973
+ continue;
974
+ // Look ahead to see if this contains full Card components (not just InfoBox)
975
+ const nextLines = lines.slice(i, Math.min(i + 30, lines.length)).join("\n");
976
+ const hasFullCards = /<Card\b/.test(nextLines) && /<CardContent/.test(nextLines);
977
+ const hasInfoBoxOnly = /<InfoBox/.test(nextLines) && !/<Card\b/.test(nextLines);
978
+ // If it has full Cards (not just InfoBox), it needs wider gap
979
+ if (hasFullCards && !hasInfoBoxOnly) {
980
+ violations.push({
981
+ file,
982
+ line: i + 1,
983
+ rule: "large-card-grid-tight-gap",
984
+ message: "SectionCardGrid with full Card components needs gap-6 for proper visual separation",
985
+ suggestion: 'Add className="gap-6" to SectionCardGrid when containing Card components with CardContent',
986
+ code: line.trim().substring(0, 80),
987
+ });
988
+ }
989
+ }
990
+ }
991
+ return violations;
992
+ }
993
+ /**
994
+ *
995
+ * Cards nested inside other cards (card-in-card pattern) need higher elevation
996
+ * for visual depth. Default elevation=1 is too subtle when nested.
997
+ *
998
+ * Pattern: Card inside SectionCardGrid or inside another Card should have elevation >= 2
999
+ */
1000
+ function detectNestedCardLowElevation(content, lines, file) {
1001
+ const violations = [];
1002
+ // Skip component definition files
1003
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1004
+ return violations;
1005
+ }
1006
+ // Skip if no SectionCardGrid (no nested card pattern)
1007
+ if (!content.includes("SectionCardGrid"))
1008
+ return violations;
1009
+ // Track if we're inside a SectionCardGrid
1010
+ let inSectionCardGrid = false;
1011
+ let gridDepth = 0;
1012
+ for (let i = 0; i < lines.length; i++) {
1013
+ const line = lines[i];
1014
+ // Track SectionCardGrid boundaries
1015
+ if (/<SectionCardGrid/.test(line)) {
1016
+ inSectionCardGrid = true;
1017
+ gridDepth++;
1018
+ }
1019
+ if (/<\/SectionCardGrid>/.test(line)) {
1020
+ gridDepth--;
1021
+ if (gridDepth <= 0) {
1022
+ inSectionCardGrid = false;
1023
+ }
1024
+ }
1025
+ // Check for Card inside SectionCardGrid
1026
+ if (inSectionCardGrid && /<Card\b/.test(line)) {
1027
+ // Get the full Card tag (may span multiple lines)
1028
+ let cardTag = line;
1029
+ let endLine = i;
1030
+ if (!/>/.test(line)) {
1031
+ for (let j = i + 1; j < Math.min(i + 5, lines.length); j++) {
1032
+ cardTag += " " + lines[j];
1033
+ endLine = j;
1034
+ if (/>/.test(lines[j]))
1035
+ break;
1036
+ }
1037
+ }
1038
+ // Check elevation - should be >= 2 for nested cards
1039
+ const elevationMatch = cardTag.match(/elevation=\{?(\d+)\}?/);
1040
+ const elevation = elevationMatch ? parseInt(elevationMatch[1], 10) : 1; // default is 1
1041
+ if (elevation < 2) {
1042
+ // Check for preflight-ignore
1043
+ const prevLine = i > 0 ? lines[i - 1] : "";
1044
+ if (prevLine.includes("preflight-ignore"))
1045
+ continue;
1046
+ violations.push({
1047
+ file,
1048
+ line: i + 1,
1049
+ rule: "nested-card-elevation",
1050
+ message: "Nested cards (card-in-card) should have elevation >= 2 for visual depth",
1051
+ suggestion: "Add elevation={2} or higher to the Card component",
1052
+ code: line.trim().substring(0, 80),
1053
+ });
1054
+ }
1055
+ }
1056
+ }
1057
+ return violations;
1058
+ }
1059
+ /**
1060
+ * Detect section headers without fontWeight="bold"
1061
+ *
1062
+ * Section headers (Typography h6 in card headers) should always be bold for consistency.
1063
+ */
1064
+ function detectUnboldSectionHeaders(content, lines, file) {
1065
+ const violations = [];
1066
+ // Skip component definition files
1067
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1068
+ return violations;
1069
+ }
1070
+ for (let i = 0; i < lines.length; i++) {
1071
+ const line = lines[i];
1072
+ // Check for Typography h6 that might be a section header
1073
+ if (/<Typography[^>]*variant=["']h6["']/.test(line)) {
1074
+ // Get the full Typography tag
1075
+ let typographyTag = line;
1076
+ if (!/>/.test(line)) {
1077
+ for (let j = i + 1; j < Math.min(i + 3, lines.length); j++) {
1078
+ typographyTag += " " + lines[j];
1079
+ if (/>/.test(lines[j]))
1080
+ break;
1081
+ }
1082
+ }
1083
+ // Check if it has fontWeight
1084
+ const hasFontWeight = /fontWeight/.test(typographyTag);
1085
+ const hasBoldClass = /font-bold|font-semibold/.test(typographyTag);
1086
+ if (!hasFontWeight && !hasBoldClass) {
1087
+ // Check context - is this inside a card header pattern?
1088
+ const contextLines = lines.slice(Math.max(0, i - 5), i).join("\n");
1089
+ const isInCardHeader = /CardContent[^>]*p-0|px-4\s+pt-3/.test(contextLines);
1090
+ if (isInCardHeader) {
1091
+ // Check for preflight-ignore
1092
+ const prevLine = i > 0 ? lines[i - 1] : "";
1093
+ if (prevLine.includes("preflight-ignore"))
1094
+ continue;
1095
+ violations.push({
1096
+ file,
1097
+ line: i + 1,
1098
+ rule: "unbold-section-header",
1099
+ message: 'Section headers (Typography h6) should have fontWeight="bold"',
1100
+ suggestion: 'Add fontWeight="bold" to the Typography component',
1101
+ code: line.trim().substring(0, 80),
1102
+ });
1103
+ }
1104
+ }
1105
+ }
1106
+ }
1107
+ return violations;
1108
+ }
1109
+ /**
1110
+ * Detect missing Divider import when Divider is used
1111
+ *
1112
+ * Prevents runtime errors from using <Divider /> without importing it.
1113
+ */
1114
+ function detectMissingDividerImport(content, lines, file) {
1115
+ const violations = [];
1116
+ // Check if Divider is used
1117
+ const usesDivider = /<Divider\s*\/?>/.test(content);
1118
+ if (!usesDivider)
1119
+ return violations;
1120
+ // Check if Divider is imported
1121
+ const hasDividerImport = /import\s*\{[^}]*Divider[^}]*\}\s*from/.test(content);
1122
+ if (!hasDividerImport) {
1123
+ // Find the first usage of Divider
1124
+ for (let i = 0; i < lines.length; i++) {
1125
+ if (/<Divider\s*\/?>/.test(lines[i])) {
1126
+ violations.push({
1127
+ file,
1128
+ line: i + 1,
1129
+ rule: "missing-divider-import",
1130
+ message: "Divider is used but not imported - will cause runtime error",
1131
+ suggestion: 'Add Divider to imports: import { Divider } from "@/components/ui"',
1132
+ code: lines[i].trim().substring(0, 80),
1133
+ });
1134
+ break; // Only report once per file
1135
+ }
1136
+ }
1137
+ }
1138
+ return violations;
1139
+ }
1140
+ /**
1141
+ * Detect hardcoded spacing values instead of Tailwind tokens
1142
+ *
1143
+ * Catches patterns like p-[16px], gap-[12px], m-[8px] that should use
1144
+ * standard Tailwind classes like p-4, gap-3, m-2.
1145
+ */
1146
+ function detectHardcodedSpacing(content, lines, file) {
1147
+ const violations = [];
1148
+ // Skip component definition files
1149
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1150
+ return violations;
1151
+ }
1152
+ // Pattern for hardcoded pixel values in spacing classes
1153
+ const hardcodedPattern = /\b(p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|gap)-\[\d+px\]/g;
1154
+ for (let i = 0; i < lines.length; i++) {
1155
+ const line = lines[i];
1156
+ const matches = line.match(hardcodedPattern);
1157
+ if (matches) {
1158
+ // Check for preflight-ignore
1159
+ const prevLine = i > 0 ? lines[i - 1] : "";
1160
+ if (prevLine.includes("preflight-ignore"))
1161
+ continue;
1162
+ violations.push({
1163
+ file,
1164
+ line: i + 1,
1165
+ rule: "hardcoded-spacing",
1166
+ message: `Hardcoded spacing (${matches.join(", ")}) - use Tailwind tokens instead`,
1167
+ suggestion: "Use standard classes: p-4 (16px), p-3 (12px), p-2 (8px), gap-4, gap-3, etc.",
1168
+ code: line.trim().substring(0, 80),
1169
+ });
1170
+ }
1171
+ }
1172
+ return violations;
1173
+ }
1174
+ /**
1175
+ * Detect inconsistent content padding after Divider
1176
+ *
1177
+ * Content after Divider in card pattern should use p-4 pt-2 for consistency.
1178
+ */
1179
+ function detectInconsistentContentPadding(content, lines, file) {
1180
+ const violations = [];
1181
+ // Skip component definition files
1182
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1183
+ return violations;
1184
+ }
1185
+ // Skip if no Divider usage
1186
+ if (!content.includes("<Divider"))
1187
+ return violations;
1188
+ for (let i = 0; i < lines.length; i++) {
1189
+ const line = lines[i];
1190
+ // Check for Divider
1191
+ if (/<Divider\s*\/?>/.test(line)) {
1192
+ // Look at the next Box after Divider
1193
+ for (let j = i + 1; j < Math.min(i + 5, lines.length); j++) {
1194
+ const nextLine = lines[j];
1195
+ if (/<Box[^>]*className=/.test(nextLine)) {
1196
+ // Check if it has the correct padding pattern
1197
+ const hasCorrectPadding = /p-4\s+pt-2|p-4\s+pt-3/.test(nextLine);
1198
+ const hasP4Only = /\bp-4\b/.test(nextLine) && !/pt-\d/.test(nextLine);
1199
+ const hasOtherPadding = /\bp-[^4]|\bpt-[^23]/.test(nextLine);
1200
+ // Skip if it's an empty state or special container
1201
+ if (/UnifiedEmptyState|TableContainer/.test(lines.slice(j, j + 3).join("\n"))) {
1202
+ break;
1203
+ }
1204
+ if (hasP4Only || hasOtherPadding) {
1205
+ // Check for preflight-ignore
1206
+ const prevLine = j > 0 ? lines[j - 1] : "";
1207
+ if (prevLine.includes("preflight-ignore"))
1208
+ break;
1209
+ violations.push({
1210
+ file,
1211
+ line: j + 1,
1212
+ rule: "content-padding",
1213
+ message: "Content after Divider should use 'p-4 pt-2' for consistent spacing",
1214
+ suggestion: 'Change to className="p-4 pt-2" for proper content padding',
1215
+ code: nextLine.trim().substring(0, 80),
1216
+ });
1217
+ }
1218
+ break;
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+ return violations;
1224
+ }
1225
+ /**
1226
+ * Detect StatusChip without proper color prop
1227
+ *
1228
+ * StatusChip should always have an explicit color prop for consistency.
1229
+ */
1230
+ function detectStatusChipWithoutColor(content, lines, file) {
1231
+ const violations = [];
1232
+ // Skip if no StatusChip usage
1233
+ if (!content.includes("StatusChip"))
1234
+ return violations;
1235
+ // Skip component definition files
1236
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1237
+ return violations;
1238
+ }
1239
+ for (let i = 0; i < lines.length; i++) {
1240
+ const line = lines[i];
1241
+ if (/<StatusChip\b/.test(line)) {
1242
+ // Get the full StatusChip tag - look up to 15 lines for multi-line props
1243
+ let chipTag = line;
1244
+ let depth = 0; // Track nested JSX depth
1245
+ let foundEnd = false;
1246
+ // Check if StatusChip closes on same line (simple case)
1247
+ if (/<StatusChip[^>]*\/>/.test(line) ||
1248
+ (/<StatusChip[^>]*>/.test(line) && /<\/StatusChip>/.test(line))) {
1249
+ foundEnd = true;
1250
+ }
1251
+ if (!foundEnd) {
1252
+ // Count opening < and closing /> or > to track nesting
1253
+ for (let j = i; j < Math.min(i + 15, lines.length); j++) {
1254
+ const currentLine = j === i ? line : lines[j];
1255
+ chipTag += j === i ? "" : " " + currentLine;
1256
+ // Check for StatusChip self-closing tag (handles multi-line)
1257
+ if (j > i && /^\s*\/>/.test(currentLine)) {
1258
+ // This line starts with /> - likely closing the StatusChip
1259
+ foundEnd = true;
1260
+ break;
1261
+ }
1262
+ // Check for explicit </StatusChip> closing tag
1263
+ if (/<\/StatusChip>/.test(currentLine)) {
1264
+ foundEnd = true;
1265
+ break;
1266
+ }
1267
+ // Check if we have a complete self-closing StatusChip tag
1268
+ // by looking for /> that's not inside a nested component
1269
+ const tagSoFar = chipTag;
1270
+ // Remove nested self-closing tags (like <Icon />) to check if StatusChip is closed
1271
+ const withoutNestedSelfClosing = tagSoFar.replace(/<[A-Z][a-zA-Z]*[^>]*\/>/g, "");
1272
+ if (/<StatusChip[^>]*\/>/.test(withoutNestedSelfClosing)) {
1273
+ foundEnd = true;
1274
+ break;
1275
+ }
1276
+ }
1277
+ }
1278
+ // Check if it has color prop
1279
+ const hasColor = /\bcolor=/.test(chipTag);
1280
+ if (!hasColor) {
1281
+ // Check for preflight-ignore
1282
+ if (hasPreflightIgnore(lines, i))
1283
+ continue;
1284
+ violations.push({
1285
+ file,
1286
+ line: i + 1,
1287
+ rule: "statuschip-color",
1288
+ message: "StatusChip should have explicit color prop for consistency",
1289
+ suggestion: 'Add color="success" | "warning" | "error" | "info" | "default"',
1290
+ code: line.trim().substring(0, 80),
1291
+ });
1292
+ }
1293
+ }
1294
+ }
1295
+ return violations;
1296
+ }
1297
+ /**
1298
+ * Detect Card without explicit elevation in dashboard pages
1299
+ *
1300
+ * Cards in dashboard pages should have explicit elevation for clarity.
1301
+ */
1302
+ function detectCardWithoutElevation(content, lines, file) {
1303
+ const violations = [];
1304
+ // Skip component definition files
1305
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1306
+ return violations;
1307
+ }
1308
+ // Only check dashboard pages
1309
+ if (!file.includes("/store/") && !file.includes("/admin/") && !file.includes("/account/")) {
1310
+ return violations;
1311
+ }
1312
+ for (let i = 0; i < lines.length; i++) {
1313
+ const line = lines[i];
1314
+ if (/<Card\b/.test(line) && !/<Card\s*>/.test(line)) {
1315
+ // Get the full Card tag
1316
+ let cardTag = line;
1317
+ if (!/>/.test(line)) {
1318
+ for (let j = i + 1; j < Math.min(i + 5, lines.length); j++) {
1319
+ cardTag += " " + lines[j];
1320
+ if (/>/.test(lines[j]))
1321
+ break;
1322
+ }
1323
+ }
1324
+ // Check if it has elevation prop
1325
+ const hasElevation = /\belevation=/.test(cardTag);
1326
+ // Skip if it's a simple <Card> (section wrapper - uses default)
1327
+ if (/<Card\s*>/.test(cardTag))
1328
+ continue;
1329
+ if (!hasElevation) {
1330
+ // Check for preflight-ignore
1331
+ const prevLine = i > 0 ? lines[i - 1] : "";
1332
+ if (prevLine.includes("preflight-ignore"))
1333
+ continue;
1334
+ violations.push({
1335
+ file,
1336
+ line: i + 1,
1337
+ rule: "card-elevation",
1338
+ message: "Card should have explicit elevation prop for clarity",
1339
+ suggestion: "Add elevation={1} for default, elevation={2} for nested cards",
1340
+ code: line.trim().substring(0, 80),
1341
+ });
1342
+ }
1343
+ }
1344
+ }
1345
+ return violations;
1346
+ }
1347
+ /**
1348
+ * Detect Typography variant misuse
1349
+ *
1350
+ * - h6 should be used for section headers
1351
+ * - body1/body2 for content
1352
+ * - h5 for card titles within nested cards
1353
+ */
1354
+ function detectTypographyVariantMisuse(content, lines, file) {
1355
+ const violations = [];
1356
+ // Skip component definition files
1357
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1358
+ return violations;
1359
+ }
1360
+ for (let i = 0; i < lines.length; i++) {
1361
+ const line = lines[i];
1362
+ // Check for h1-h4 in dashboard pages (should typically be h5 or h6)
1363
+ if (/<Typography[^>]*variant=["'](h1|h2|h3|h4)["']/.test(line)) {
1364
+ // Check context - is this in a dashboard page?
1365
+ if (file.includes("/store/") || file.includes("/admin/") || file.includes("/account/")) {
1366
+ // Skip if it's in UnifiedHeader or page title context
1367
+ const contextLines = lines.slice(Math.max(0, i - 3), i).join("\n");
1368
+ if (/UnifiedHeader|PageHeader|page.*title/i.test(contextLines))
1369
+ continue;
1370
+ // Check for preflight-ignore
1371
+ const prevLine = i > 0 ? lines[i - 1] : "";
1372
+ if (prevLine.includes("preflight-ignore"))
1373
+ continue;
1374
+ const match = line.match(/variant=["'](h[1-4])["']/);
1375
+ violations.push({
1376
+ file,
1377
+ line: i + 1,
1378
+ rule: "typography-variant",
1379
+ message: `Typography ${match?.[1]} is unusual in dashboard - use h5/h6 for sections, body1/body2 for content`,
1380
+ suggestion: "Use h6 for section headers, h5 for card titles, body1/body2 for content",
1381
+ code: line.trim().substring(0, 80),
1382
+ });
1383
+ }
1384
+ }
1385
+ }
1386
+ return violations;
1387
+ }
1388
+ // ADOPTION TRACKING
1389
+ /**
1390
+ * Track CardSection adoption across files
1391
+ * Reports files that ARE using CardSection correctly (positive detection)
1392
+ */
1393
+ function trackCardSectionAdoption(content, lines, file) {
1394
+ let cardSectionCount = 0;
1395
+ let cardSectionHeaderCount = 0;
1396
+ let manualPatternCount = 0;
1397
+ for (let i = 0; i < lines.length; i++) {
1398
+ const line = lines[i];
1399
+ // Count CardSection usage
1400
+ if (/<CardSection\b/.test(line)) {
1401
+ cardSectionCount++;
1402
+ }
1403
+ // Count CardSectionHeader usage
1404
+ if (/<CardSectionHeader\b/.test(line)) {
1405
+ cardSectionHeaderCount++;
1406
+ }
1407
+ // Count manual pattern usage (CardContent p-0 + min-h-[44px])
1408
+ if (/<CardContent[^>]*className=["'][^"']*p-0/.test(line)) {
1409
+ // Look ahead for min-h-[44px] pattern
1410
+ const nextLines = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
1411
+ if (/min-h-\[44px\]/.test(nextLines)) {
1412
+ manualPatternCount++;
1413
+ }
1414
+ }
1415
+ }
1416
+ if (cardSectionCount > 0 || cardSectionHeaderCount > 0 || manualPatternCount > 0) {
1417
+ return {
1418
+ file,
1419
+ cardSectionCount,
1420
+ cardSectionHeaderCount,
1421
+ manualPatternCount,
1422
+ };
1423
+ }
1424
+ return null;
1425
+ }
1426
+ // MISSING MIN-HEIGHT DETECTION
1427
+ /**
1428
+ * Detect manual card patterns missing min-h-[44px] for consistent header height
1429
+ *
1430
+ * Files using the manual pattern (CardContent p-0 + Divider) should still have
1431
+ * min-h-[44px] on the header Box for consistency with CardSection.
1432
+ */
1433
+ function detectMissingMinHeight(content, lines, file) {
1434
+ const violations = [];
1435
+ // Skip component definition files
1436
+ if (file.includes("/components/shared/") || file.includes("/components/ui/")) {
1437
+ return violations;
1438
+ }
1439
+ // Skip if using CardSection (it handles this correctly)
1440
+ if (content.includes("CardSection")) {
1441
+ return violations;
1442
+ }
1443
+ // Only check files using the manual pattern
1444
+ if (!content.includes('className="p-0"') && !content.includes("className='p-0'")) {
1445
+ return violations;
1446
+ }
1447
+ let inCardContentP0 = false;
1448
+ for (let i = 0; i < lines.length; i++) {
1449
+ const line = lines[i];
1450
+ // Track CardContent with p-0
1451
+ if (/<CardContent[^>]*className=["'][^"']*p-0/.test(line)) {
1452
+ inCardContentP0 = true;
1453
+ }
1454
+ if (/<\/CardContent>/.test(line)) {
1455
+ inCardContentP0 = false;
1456
+ }
1457
+ // Check for header Box inside CardContent p-0
1458
+ if (inCardContentP0 && /<Box[^>]*className=["'][^"']*px-4[^"']*pt-3/.test(line)) {
1459
+ const hasMinHeight = /min-h-\[44px\]/.test(line);
1460
+ const hasFlexCenter = /flex[^"']*items-center/.test(line);
1461
+ // Look ahead to see if this has action buttons
1462
+ const nextLines = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
1463
+ const hasHeaderActions = /justify-between/.test(line) || /<Button/.test(nextLines);
1464
+ if (!hasMinHeight) {
1465
+ // Check for preflight-ignore
1466
+ if (hasPreflightIgnore(lines, i))
1467
+ continue;
1468
+ violations.push({
1469
+ file,
1470
+ line: i + 1,
1471
+ rule: "missing-min-height",
1472
+ message: "Manual card header pattern should include min-h-[44px] for consistent height",
1473
+ suggestion: hasHeaderActions
1474
+ ? "Add min-h-[44px] flex items-center justify-between to the header Box className"
1475
+ : "Add min-h-[44px] flex items-center to the header Box className",
1476
+ code: line.trim().substring(0, 80),
1477
+ fixable: true,
1478
+ });
1479
+ }
1480
+ else if (hasHeaderActions && !hasFlexCenter) {
1481
+ // Has min-height but missing flex center
1482
+ if (hasPreflightIgnore(lines, i))
1483
+ continue;
1484
+ violations.push({
1485
+ file,
1486
+ line: i + 1,
1487
+ rule: "missing-flex-center",
1488
+ message: "Header with min-h-[44px] should also have flex items-center for vertical centering",
1489
+ suggestion: "Add flex items-center to the header Box className",
1490
+ code: line.trim().substring(0, 80),
1491
+ fixable: true,
1492
+ });
1493
+ }
1494
+ }
1495
+ }
1496
+ return violations;
1497
+ }
1498
+ // AUTO-FIX FUNCTIONS
1499
+ /**
1500
+ * Auto-fix simple Card patterns to use CardSection
1501
+ *
1502
+ * Converts:
1503
+ * ```tsx
1504
+ * <Card>
1505
+ * <CardContent className="p-0">
1506
+ * <Box className="px-4 pt-3 pb-0">
1507
+ * <Typography variant="h6" fontWeight="bold">Title</Typography>
1508
+ * </Box>
1509
+ * <Divider />
1510
+ * <Box className="p-4 pt-2">
1511
+ * {children}
1512
+ * </Box>
1513
+ * </CardContent>
1514
+ * </Card>
1515
+ * ```
1516
+ *
1517
+ * To:
1518
+ * ```tsx
1519
+ * <CardSection title="Title">
1520
+ * {children}
1521
+ * </CardSection>
1522
+ * ```
1523
+ */
1524
+ function autoFixCardPatterns(file, content, lines) {
1525
+ const results = [];
1526
+ let modified = content;
1527
+ let fixCount = 0;
1528
+ // Pattern 1: Add missing min-h-[44px] to header boxes
1529
+ const headerBoxPattern = /(<Box[^>]*className=["'])([^"']*px-4[^"']*pt-3[^"']*pb-0)([^"']*["'])/g;
1530
+ modified = modified.replace(headerBoxPattern, (match, prefix, classes, suffix) => {
1531
+ // Skip if already has min-h-[44px]
1532
+ if (classes.includes("min-h-[44px]")) {
1533
+ return match;
1534
+ }
1535
+ // Add min-h-[44px] and flex items-center if not present
1536
+ let newClasses = classes;
1537
+ if (!newClasses.includes("min-h-[44px]")) {
1538
+ newClasses = newClasses.replace(/px-4/, "px-4 min-h-[44px]");
1539
+ }
1540
+ if (!newClasses.includes("flex")) {
1541
+ newClasses = newClasses.replace(/min-h-\[44px\]/, "min-h-[44px] flex items-center");
1542
+ }
1543
+ fixCount++;
1544
+ return prefix + newClasses + suffix;
1545
+ });
1546
+ // Pattern 2: Add CardSection import if not present and we made fixes
1547
+ if (fixCount > 0 && !modified.includes("CardSection")) {
1548
+ // Check if there's a shared import we can add to
1549
+ const sharedImportMatch = modified.match(/(import\s*\{[^}]*\}\s*from\s*["']@\/components\/shared["'];?)/);
1550
+ if (sharedImportMatch) {
1551
+ const existingImport = sharedImportMatch[1];
1552
+ // Add CardSection to existing import
1553
+ const newImport = existingImport.replace(/\}/, ", CardSection }");
1554
+ modified = modified.replace(existingImport, newImport);
1555
+ }
1556
+ }
1557
+ if (modified !== content) {
1558
+ fs.writeFileSync(file, modified, "utf8");
1559
+ results.push({
1560
+ file,
1561
+ line: 0,
1562
+ rule: "auto-fix",
1563
+ fixed: true,
1564
+ message: `Fixed ${fixCount} header box pattern(s) - added min-h-[44px] flex items-center`,
1565
+ });
1566
+ }
1567
+ return results;
1568
+ }
1569
+ /**
1570
+ * Add missing min-h-[44px] to header boxes
1571
+ */
1572
+ function fixMissingMinHeight(file, content) {
1573
+ const results = [];
1574
+ let modified = content;
1575
+ let fixCount = 0;
1576
+ // Find header boxes with px-4 pt-3 pb-0 but missing min-h-[44px]
1577
+ const headerBoxPattern = /(<Box[^>]*className=["'])([^"']*px-4[^"']*pt-3[^"']*pb-0)([^"']*["'][^>]*>)/g;
1578
+ modified = modified.replace(headerBoxPattern, (match, prefix, classes, suffix) => {
1579
+ // Skip if already has min-h-[44px]
1580
+ if (classes.includes("min-h-[44px]")) {
1581
+ return match;
1582
+ }
1583
+ // Add min-h-[44px] flex items-center
1584
+ let newClasses = classes;
1585
+ // Insert after px-4
1586
+ if (!newClasses.includes("min-h-[44px]")) {
1587
+ newClasses = newClasses.replace(/px-4/, "px-4 min-h-[44px]");
1588
+ }
1589
+ // Add flex items-center if not present
1590
+ if (!newClasses.includes("flex")) {
1591
+ newClasses = newClasses.replace(/min-h-\[44px\]/, "min-h-[44px] flex items-center");
1592
+ }
1593
+ fixCount++;
1594
+ return prefix + newClasses + suffix;
1595
+ });
1596
+ if (modified !== content) {
1597
+ fs.writeFileSync(file, modified, "utf8");
1598
+ results.push({
1599
+ file,
1600
+ line: 0,
1601
+ rule: "missing-min-height",
1602
+ fixed: true,
1603
+ message: `Added min-h-[44px] flex items-center to ${fixCount} header box(es)`,
1604
+ });
1605
+ }
1606
+ return results;
1607
+ }
1608
+ // MAIN
1609
+ async function run() {
1610
+ const reporter = (0, universal_progress_reporter_1.createUniversalProgressReporter)(exports.name);
1611
+ const args = process.argv.slice(2);
1612
+ const verbose = args.includes("--verbose") || args.includes("-v");
1613
+ const warnOnly = args.includes("--warn");
1614
+ const showAdoption = args.includes("--adoption") || args.includes("-a");
1615
+ const autoFix = args.includes("--fix");
1616
+ console.log("\n[CHECK] DASHBOARD SECTION PATTERNS PREFLIGHT");
1617
+ console.log("=".repeat(70));
1618
+ console.log("Enforces consistent UI patterns across /store, /admin, /account pages");
1619
+ if (autoFix) {
1620
+ console.log("MODE: Auto-fix enabled - will attempt to fix violations");
1621
+ }
1622
+ console.log("=".repeat(70));
1623
+ const allViolations = [];
1624
+ const adoptionStats = [];
1625
+ const fixResults = [];
1626
+ // Get files from dashboard paths
1627
+ const files = [];
1628
+ for (const pattern of DASHBOARD_PATHS) {
1629
+ const matches = await (0, glob_1.glob)(pattern, { ignore: EXCLUDED });
1630
+ files.push(...matches);
1631
+ }
1632
+ console.log(`\nScanning ${files.length} dashboard page files...\n`);
1633
+ for (const file of files) {
1634
+ const content = fs.readFileSync(file, "utf8");
1635
+ const lines = content.split("\n");
1636
+ // Track adoption (positive detection)
1637
+ const adoption = trackCardSectionAdoption(content, lines, file);
1638
+ if (adoption) {
1639
+ adoptionStats.push(adoption);
1640
+ }
1641
+ // Run all pattern checks
1642
+ allViolations.push(...detectSectionCardUsage(content, lines, file));
1643
+ allViolations.push(...detectMissingCardPattern(content, lines, file));
1644
+ allViolations.push(...detectIncorrectHeaderSpacing(content, lines, file));
1645
+ allViolations.push(...detectMissingMinHeight(content, lines, file)); // NEW
1646
+ allViolations.push(...detectMissingShadowOnNestedBoxes(content, lines, file));
1647
+ allViolations.push(...detectMissingGridGap(content, lines, file));
1648
+ allViolations.push(...detectBoxToSectionCardGridGap(content, lines, file));
1649
+ allViolations.push(...detectLargeCardGridTightGap(content, lines, file));
1650
+ allViolations.push(...detectNestedCardLowElevation(content, lines, file));
1651
+ allViolations.push(...detectUnboldSectionHeaders(content, lines, file));
1652
+ allViolations.push(...detectMissingDividerImport(content, lines, file));
1653
+ allViolations.push(...detectHardcodedSpacing(content, lines, file));
1654
+ allViolations.push(...detectInconsistentContentPadding(content, lines, file));
1655
+ allViolations.push(...detectStatusChipWithoutColor(content, lines, file));
1656
+ allViolations.push(...detectCardWithoutElevation(content, lines, file));
1657
+ allViolations.push(...detectTypographyVariantMisuse(content, lines, file));
1658
+ allViolations.push(...detectInlineSectionHeaders(content, lines, file));
1659
+ allViolations.push(...detectInlineInfoBoxes(content, lines, file));
1660
+ allViolations.push(...detectMissingEmptyStates(content, lines, file));
1661
+ allViolations.push(...detectAdHocCardGrids(content, lines, file));
1662
+ allViolations.push(...detectIncorrectCardBackground(content, lines, file));
1663
+ allViolations.push(...detectInlineBorderStyles(content, lines, file));
1664
+ allViolations.push(...detectUnwrappedSectionPatterns(content, lines, file));
1665
+ // Auto-fix if enabled
1666
+ if (autoFix) {
1667
+ const freshContent = fs.readFileSync(file, "utf8");
1668
+ fixResults.push(...fixMissingMinHeight(file, freshContent));
1669
+ }
1670
+ }
1671
+ // Show adoption stats if requested
1672
+ if (showAdoption) {
1673
+ console.log("\n[ADOPTION] CardSection Usage Statistics");
1674
+ console.log("-".repeat(70));
1675
+ const totalCardSection = adoptionStats.reduce((sum, s) => sum + s.cardSectionCount, 0);
1676
+ const totalCardSectionHeader = adoptionStats.reduce((sum, s) => sum + s.cardSectionHeaderCount, 0);
1677
+ const totalManualPattern = adoptionStats.reduce((sum, s) => sum + s.manualPatternCount, 0);
1678
+ const filesUsingCardSection = adoptionStats.filter((s) => s.cardSectionCount > 0).length;
1679
+ const filesUsingManual = adoptionStats.filter((s) => s.manualPatternCount > 0 && s.cardSectionCount === 0).length;
1680
+ console.log(`\n CardSection component: ${totalCardSection} usages in ${filesUsingCardSection} files`);
1681
+ console.log(` CardSectionHeader: ${totalCardSectionHeader} usages`);
1682
+ console.log(` Manual pattern (p-0): ${totalManualPattern} usages in ${filesUsingManual} files`);
1683
+ console.log(` Total files with pattern: ${adoptionStats.length}`);
1684
+ if (verbose) {
1685
+ console.log("\n Files using CardSection:");
1686
+ for (const stat of adoptionStats.filter((s) => s.cardSectionCount > 0)) {
1687
+ console.log(` ${stat.file}: ${stat.cardSectionCount} CardSection, ${stat.cardSectionHeaderCount} CardSectionHeader`);
1688
+ }
1689
+ if (filesUsingManual > 0) {
1690
+ console.log("\n Files using manual pattern (candidates for migration):");
1691
+ for (const stat of adoptionStats.filter((s) => s.manualPatternCount > 0 && s.cardSectionCount === 0)) {
1692
+ console.log(` ${stat.file}: ${stat.manualPatternCount} manual pattern(s)`);
1693
+ }
1694
+ }
1695
+ }
1696
+ console.log("");
1697
+ }
1698
+ // Show fix results if auto-fix was enabled
1699
+ if (autoFix && fixResults.length > 0) {
1700
+ console.log("\n[FIX] Auto-fix Results");
1701
+ console.log("-".repeat(70));
1702
+ for (const result of fixResults) {
1703
+ console.log(` ${result.fixed ? `${console_chars_1.chars.check}` : `${console_chars_1.chars.cross}`} ${result.file}`);
1704
+ console.log(` ${result.message}`);
1705
+ }
1706
+ console.log("");
1707
+ }
1708
+ if (allViolations.length === 0) {
1709
+ console.log("[OK] All dashboard pages follow UI patterns correctly\n");
1710
+ process.exit(0);
1711
+ }
1712
+ // Group by rule
1713
+ const byRule = new Map();
1714
+ for (const v of allViolations) {
1715
+ const existing = byRule.get(v.rule) || [];
1716
+ existing.push(v);
1717
+ byRule.set(v.rule, existing);
1718
+ }
1719
+ // Count fixable violations
1720
+ const fixableCount = allViolations.filter((v) => v.fixable).length;
1721
+ console.log(`[${warnOnly ? "WARN" : "FAIL"}] Found ${allViolations.length} UI pattern violation(s)${fixableCount > 0 ? ` (${fixableCount} auto-fixable)` : ""}:\n`);
1722
+ for (const [rule, violations] of byRule) {
1723
+ const fixableInRule = violations.filter((v) => v.fixable).length;
1724
+ const fixableLabel = fixableInRule > 0 ? ` [${fixableInRule} fixable]` : "";
1725
+ console.log(`--- ${rule.toUpperCase()} (${violations.length})${fixableLabel} ---`);
1726
+ const toShow = verbose ? violations : violations.slice(0, 5);
1727
+ for (const v of toShow) {
1728
+ console.log(`\n ${v.file}:${v.line}`);
1729
+ console.log(` ${v.message}`);
1730
+ console.log(` -> ${v.suggestion}`);
1731
+ if (v.code && verbose) {
1732
+ console.log(` Code: ${v.code}`);
1733
+ }
1734
+ }
1735
+ if (!verbose && violations.length > 5) {
1736
+ console.log(`\n ... and ${violations.length - 5} more (use --verbose to see all)`);
1737
+ }
1738
+ console.log("");
1739
+ }
1740
+ console.log("=".repeat(70));
1741
+ console.log(`[${warnOnly ? "WARN" : "FAIL"}] ${allViolations.length} UI pattern violation(s)`);
1742
+ console.log("\nOptions:");
1743
+ console.log(" --fix Auto-fix violations where possible");
1744
+ console.log(" --adoption Show CardSection adoption statistics");
1745
+ console.log(" --verbose Show all violations with code snippets");
1746
+ console.log(" --warn Warning mode (non-blocking)");
1747
+ console.log("\nTo ignore specific cases, add '// preflight-ignore' above the line");
1748
+ console.log("=".repeat(70));
1749
+ if (!warnOnly) {
1750
+ process.exit(1);
1751
+ }
1752
+ }
1753
+ // Allow direct execution
1754
+ if (require.main === module) {
1755
+ run().catch(console.error);
1756
+ }
1757
+ //# sourceMappingURL=dashboard-section-patterns.js.map