mcp-react-toolkit 1.3.1 → 1.4.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 (268) hide show
  1. package/README.md +24 -24
  2. package/node_modules/@mcp-showcase/shared/build/McpServerBase.d.ts +13 -0
  3. package/node_modules/@mcp-showcase/shared/build/McpServerBase.d.ts.map +1 -1
  4. package/node_modules/@mcp-showcase/shared/build/McpServerBase.js +40 -0
  5. package/node_modules/@mcp-showcase/shared/build/McpServerBase.js.map +1 -1
  6. package/node_modules/@mcp-showcase/shared/build/types.d.ts +11 -0
  7. package/node_modules/@mcp-showcase/shared/build/types.d.ts.map +1 -1
  8. package/node_modules/@mcp-showcase/shared/src/McpServerBase.ts +45 -0
  9. package/node_modules/@mcp-showcase/shared/src/types.ts +12 -0
  10. package/node_modules/@mcp-showcase/ui-kit/README.md +30 -0
  11. package/node_modules/@mcp-showcase/ui-kit/build/components.d.ts +10 -0
  12. package/node_modules/@mcp-showcase/ui-kit/build/components.d.ts.map +1 -0
  13. package/node_modules/@mcp-showcase/ui-kit/build/components.js +177 -0
  14. package/node_modules/@mcp-showcase/ui-kit/build/components.js.map +1 -0
  15. package/node_modules/@mcp-showcase/ui-kit/build/escape.d.ts +3 -0
  16. package/node_modules/@mcp-showcase/ui-kit/build/escape.d.ts.map +1 -0
  17. package/node_modules/@mcp-showcase/ui-kit/build/escape.js +10 -0
  18. package/node_modules/@mcp-showcase/ui-kit/build/escape.js.map +1 -0
  19. package/node_modules/@mcp-showcase/ui-kit/build/fixture.d.ts +4 -0
  20. package/node_modules/@mcp-showcase/ui-kit/build/fixture.d.ts.map +1 -0
  21. package/node_modules/@mcp-showcase/ui-kit/build/fixture.js +52 -0
  22. package/node_modules/@mcp-showcase/ui-kit/build/fixture.js.map +1 -0
  23. package/node_modules/@mcp-showcase/ui-kit/build/generate-template.d.ts +2 -0
  24. package/node_modules/@mcp-showcase/ui-kit/build/generate-template.d.ts.map +1 -0
  25. package/node_modules/@mcp-showcase/ui-kit/build/generate-template.js +19 -0
  26. package/node_modules/@mcp-showcase/ui-kit/build/generate-template.js.map +1 -0
  27. package/node_modules/@mcp-showcase/ui-kit/build/index.d.ts +6 -0
  28. package/node_modules/@mcp-showcase/ui-kit/build/index.d.ts.map +1 -0
  29. package/node_modules/@mcp-showcase/ui-kit/build/index.js +7 -0
  30. package/node_modules/@mcp-showcase/ui-kit/build/index.js.map +1 -0
  31. package/node_modules/@mcp-showcase/ui-kit/build/render.d.ts +3 -0
  32. package/node_modules/@mcp-showcase/ui-kit/build/render.d.ts.map +1 -0
  33. package/node_modules/@mcp-showcase/ui-kit/build/render.js +38 -0
  34. package/node_modules/@mcp-showcase/ui-kit/build/render.js.map +1 -0
  35. package/node_modules/@mcp-showcase/ui-kit/build/result-components.d.ts +9 -0
  36. package/node_modules/@mcp-showcase/ui-kit/build/result-components.d.ts.map +1 -0
  37. package/node_modules/@mcp-showcase/ui-kit/build/result-components.js +105 -0
  38. package/node_modules/@mcp-showcase/ui-kit/build/result-components.js.map +1 -0
  39. package/node_modules/@mcp-showcase/ui-kit/build/result-fixture.d.ts +4 -0
  40. package/node_modules/@mcp-showcase/ui-kit/build/result-fixture.d.ts.map +1 -0
  41. package/node_modules/@mcp-showcase/ui-kit/build/result-fixture.js +39 -0
  42. package/node_modules/@mcp-showcase/ui-kit/build/result-fixture.js.map +1 -0
  43. package/node_modules/@mcp-showcase/ui-kit/build/result-render.d.ts +3 -0
  44. package/node_modules/@mcp-showcase/ui-kit/build/result-render.d.ts.map +1 -0
  45. package/node_modules/@mcp-showcase/ui-kit/build/result-render.js +37 -0
  46. package/node_modules/@mcp-showcase/ui-kit/build/result-render.js.map +1 -0
  47. package/node_modules/@mcp-showcase/ui-kit/build/result-runtime.d.ts +2 -0
  48. package/node_modules/@mcp-showcase/ui-kit/build/result-runtime.d.ts.map +1 -0
  49. package/node_modules/@mcp-showcase/ui-kit/build/result-runtime.js +72 -0
  50. package/node_modules/@mcp-showcase/ui-kit/build/result-runtime.js.map +1 -0
  51. package/node_modules/@mcp-showcase/ui-kit/build/runtime.d.ts +2 -0
  52. package/node_modules/@mcp-showcase/ui-kit/build/runtime.d.ts.map +1 -0
  53. package/node_modules/@mcp-showcase/ui-kit/build/runtime.js +221 -0
  54. package/node_modules/@mcp-showcase/ui-kit/build/runtime.js.map +1 -0
  55. package/node_modules/@mcp-showcase/ui-kit/build/theme.d.ts +2 -0
  56. package/node_modules/@mcp-showcase/ui-kit/build/theme.d.ts.map +1 -0
  57. package/node_modules/@mcp-showcase/ui-kit/build/theme.js +278 -0
  58. package/node_modules/@mcp-showcase/ui-kit/build/theme.js.map +1 -0
  59. package/node_modules/@mcp-showcase/ui-kit/build/types.d.ts +113 -0
  60. package/node_modules/@mcp-showcase/ui-kit/build/types.d.ts.map +1 -0
  61. package/node_modules/@mcp-showcase/ui-kit/build/types.js +35 -0
  62. package/node_modules/@mcp-showcase/ui-kit/build/types.js.map +1 -0
  63. package/node_modules/@mcp-showcase/ui-kit/demo/index.html +653 -0
  64. package/node_modules/@mcp-showcase/ui-kit/demo/result.html +445 -0
  65. package/node_modules/@mcp-showcase/ui-kit/package.json +19 -0
  66. package/node_modules/@mcp-showcase/ui-kit/src/components.ts +191 -0
  67. package/node_modules/@mcp-showcase/ui-kit/src/escape.ts +9 -0
  68. package/node_modules/@mcp-showcase/ui-kit/src/fixture.ts +53 -0
  69. package/node_modules/@mcp-showcase/ui-kit/src/generate-template.ts +21 -0
  70. package/node_modules/@mcp-showcase/ui-kit/src/index.test.ts +72 -0
  71. package/node_modules/@mcp-showcase/ui-kit/src/index.ts +6 -0
  72. package/node_modules/@mcp-showcase/ui-kit/src/render.ts +48 -0
  73. package/node_modules/@mcp-showcase/ui-kit/src/result-components.ts +112 -0
  74. package/node_modules/@mcp-showcase/ui-kit/src/result-fixture.ts +40 -0
  75. package/node_modules/@mcp-showcase/ui-kit/src/result-render.test.ts +47 -0
  76. package/node_modules/@mcp-showcase/ui-kit/src/result-render.ts +47 -0
  77. package/node_modules/@mcp-showcase/ui-kit/src/result-runtime.ts +72 -0
  78. package/node_modules/@mcp-showcase/ui-kit/src/runtime.smoke.test.ts +103 -0
  79. package/node_modules/@mcp-showcase/ui-kit/src/runtime.ts +221 -0
  80. package/node_modules/@mcp-showcase/ui-kit/src/theme.ts +278 -0
  81. package/node_modules/@mcp-showcase/ui-kit/src/types.ts +140 -0
  82. package/node_modules/@mcp-showcase/ui-kit/tsconfig.json +9 -0
  83. package/package.json +6 -4
  84. package/tools/accessibility-checker/build/health-report.d.ts +27 -0
  85. package/tools/accessibility-checker/build/health-report.d.ts.map +1 -0
  86. package/tools/accessibility-checker/build/health-report.js +140 -0
  87. package/tools/accessibility-checker/build/health-report.js.map +1 -0
  88. package/tools/accessibility-checker/build/index.js +7 -1
  89. package/tools/accessibility-checker/build/index.js.map +1 -1
  90. package/tools/accessibility-checker/package.json +1 -0
  91. package/tools/code-modernizer/build/index.js +60 -44
  92. package/tools/code-modernizer/build/index.js.map +1 -1
  93. package/tools/code-modernizer/build/result-report.d.ts +24 -0
  94. package/tools/code-modernizer/build/result-report.d.ts.map +1 -0
  95. package/tools/code-modernizer/build/result-report.js +101 -0
  96. package/tools/code-modernizer/build/result-report.js.map +1 -0
  97. package/tools/code-modernizer/package.json +2 -0
  98. package/tools/component-factory/build/index.js +7 -1
  99. package/tools/component-factory/build/index.js.map +1 -1
  100. package/tools/component-factory/build/result-report.d.ts +11 -0
  101. package/tools/component-factory/build/result-report.d.ts.map +1 -0
  102. package/tools/component-factory/build/result-report.js +104 -0
  103. package/tools/component-factory/build/result-report.js.map +1 -0
  104. package/tools/component-factory/package.json +1 -0
  105. package/tools/component-fixer/build/index.js +6 -6
  106. package/tools/component-fixer/build/index.js.map +1 -1
  107. package/tools/component-fixer/build/result-report.d.ts +37 -0
  108. package/tools/component-fixer/build/result-report.d.ts.map +1 -0
  109. package/tools/component-fixer/build/result-report.js +106 -0
  110. package/tools/component-fixer/build/result-report.js.map +1 -0
  111. package/tools/component-fixer/package.json +1 -0
  112. package/tools/component-reviewer/build/health-report.d.ts +37 -0
  113. package/tools/component-reviewer/build/health-report.d.ts.map +1 -0
  114. package/tools/component-reviewer/build/health-report.js +116 -0
  115. package/tools/component-reviewer/build/health-report.js.map +1 -0
  116. package/tools/component-reviewer/build/index.d.ts.map +1 -1
  117. package/tools/component-reviewer/build/index.js +7 -6
  118. package/tools/component-reviewer/build/index.js.map +1 -1
  119. package/tools/component-reviewer/package.json +1 -0
  120. package/tools/dep-auditor/build/health-report.d.ts +16 -0
  121. package/tools/dep-auditor/build/health-report.d.ts.map +1 -0
  122. package/tools/dep-auditor/build/health-report.js +187 -0
  123. package/tools/dep-auditor/build/health-report.js.map +1 -0
  124. package/tools/dep-auditor/build/index.d.ts.map +1 -1
  125. package/tools/dep-auditor/build/index.js +7 -1
  126. package/tools/dep-auditor/build/index.js.map +1 -1
  127. package/tools/dep-auditor/package.json +1 -0
  128. package/tools/generate-tests/build/index.js +8 -1
  129. package/tools/generate-tests/build/index.js.map +1 -1
  130. package/tools/generate-tests/build/result-report.d.ts +14 -0
  131. package/tools/generate-tests/build/result-report.d.ts.map +1 -0
  132. package/tools/generate-tests/build/result-report.js +124 -0
  133. package/tools/generate-tests/build/result-report.js.map +1 -0
  134. package/tools/generate-tests/package.json +1 -0
  135. package/tools/legacy-analyzer/build/health-report.d.ts +4 -0
  136. package/tools/legacy-analyzer/build/health-report.d.ts.map +1 -0
  137. package/tools/legacy-analyzer/build/health-report.js +164 -0
  138. package/tools/legacy-analyzer/build/health-report.js.map +1 -0
  139. package/tools/legacy-analyzer/build/index.js +15 -1
  140. package/tools/legacy-analyzer/build/index.js.map +1 -1
  141. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts.map +1 -1
  142. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js +3 -8
  143. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js.map +1 -1
  144. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts.map +1 -1
  145. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js +25 -3
  146. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js.map +1 -1
  147. package/tools/legacy-analyzer/package.json +1 -0
  148. package/tools/lighthouse-runner/build/health-report.d.ts +14 -0
  149. package/tools/lighthouse-runner/build/health-report.d.ts.map +1 -0
  150. package/tools/lighthouse-runner/build/health-report.js +138 -0
  151. package/tools/lighthouse-runner/build/health-report.js.map +1 -0
  152. package/tools/lighthouse-runner/build/index.d.ts.map +1 -1
  153. package/tools/lighthouse-runner/build/index.js +7 -1
  154. package/tools/lighthouse-runner/build/index.js.map +1 -1
  155. package/tools/lighthouse-runner/package.json +1 -0
  156. package/tools/monorepo-manager/build/index.js +9 -1
  157. package/tools/monorepo-manager/build/index.js.map +1 -1
  158. package/tools/monorepo-manager/build/result-report.d.ts +20 -0
  159. package/tools/monorepo-manager/build/result-report.d.ts.map +1 -0
  160. package/tools/monorepo-manager/build/result-report.js +84 -0
  161. package/tools/monorepo-manager/build/result-report.js.map +1 -0
  162. package/tools/monorepo-manager/package.json +1 -0
  163. package/tools/performance-audit/build/health-report.d.ts +30 -0
  164. package/tools/performance-audit/build/health-report.d.ts.map +1 -0
  165. package/tools/performance-audit/build/health-report.js +152 -0
  166. package/tools/performance-audit/build/health-report.js.map +1 -0
  167. package/tools/performance-audit/build/index.d.ts.map +1 -1
  168. package/tools/performance-audit/build/index.js +7 -1
  169. package/tools/performance-audit/build/index.js.map +1 -1
  170. package/tools/performance-audit/package.json +1 -0
  171. package/tools/quality-pipeline/build/health-report.d.ts +11 -0
  172. package/tools/quality-pipeline/build/health-report.d.ts.map +1 -0
  173. package/tools/quality-pipeline/build/health-report.js +137 -0
  174. package/tools/quality-pipeline/build/health-report.js.map +1 -0
  175. package/tools/quality-pipeline/build/index.js +7 -1
  176. package/tools/quality-pipeline/build/index.js.map +1 -1
  177. package/tools/quality-pipeline/package.json +1 -0
  178. package/tools/render-analyzer/build/health-report.d.ts +33 -0
  179. package/tools/render-analyzer/build/health-report.d.ts.map +1 -0
  180. package/tools/render-analyzer/build/health-report.js +142 -0
  181. package/tools/render-analyzer/build/health-report.js.map +1 -0
  182. package/tools/render-analyzer/build/index.d.ts.map +1 -1
  183. package/tools/render-analyzer/build/index.js +7 -1
  184. package/tools/render-analyzer/build/index.js.map +1 -1
  185. package/tools/render-analyzer/package.json +1 -0
  186. package/tools/shared/build/McpServerBase.d.ts +13 -0
  187. package/tools/shared/build/McpServerBase.d.ts.map +1 -1
  188. package/tools/shared/build/McpServerBase.js +40 -0
  189. package/tools/shared/build/McpServerBase.js.map +1 -1
  190. package/tools/shared/build/types.d.ts +11 -0
  191. package/tools/shared/build/types.d.ts.map +1 -1
  192. package/tools/storybook-generator/build/index.d.ts.map +1 -1
  193. package/tools/storybook-generator/build/index.js +9 -1
  194. package/tools/storybook-generator/build/index.js.map +1 -1
  195. package/tools/storybook-generator/build/result-report.d.ts +22 -0
  196. package/tools/storybook-generator/build/result-report.d.ts.map +1 -0
  197. package/tools/storybook-generator/build/result-report.js +77 -0
  198. package/tools/storybook-generator/build/result-report.js.map +1 -0
  199. package/tools/storybook-generator/package.json +1 -0
  200. package/tools/test-gap-analyzer/build/health-report.d.ts +34 -0
  201. package/tools/test-gap-analyzer/build/health-report.d.ts.map +1 -0
  202. package/tools/test-gap-analyzer/build/health-report.js +190 -0
  203. package/tools/test-gap-analyzer/build/health-report.js.map +1 -0
  204. package/tools/test-gap-analyzer/build/index.d.ts.map +1 -1
  205. package/tools/test-gap-analyzer/build/index.js +7 -1
  206. package/tools/test-gap-analyzer/build/index.js.map +1 -1
  207. package/tools/test-gap-analyzer/package.json +1 -0
  208. package/tools/typescript-enforcer/build/health-report.d.ts +33 -0
  209. package/tools/typescript-enforcer/build/health-report.d.ts.map +1 -0
  210. package/tools/typescript-enforcer/build/health-report.js +143 -0
  211. package/tools/typescript-enforcer/build/health-report.js.map +1 -0
  212. package/tools/typescript-enforcer/build/index.js +6 -1
  213. package/tools/typescript-enforcer/build/index.js.map +1 -1
  214. package/tools/typescript-enforcer/package.json +1 -0
  215. package/tools/ui-kit/README.md +30 -0
  216. package/tools/ui-kit/build/components.d.ts +10 -0
  217. package/tools/ui-kit/build/components.d.ts.map +1 -0
  218. package/tools/ui-kit/build/components.js +177 -0
  219. package/tools/ui-kit/build/components.js.map +1 -0
  220. package/tools/ui-kit/build/escape.d.ts +3 -0
  221. package/tools/ui-kit/build/escape.d.ts.map +1 -0
  222. package/tools/ui-kit/build/escape.js +10 -0
  223. package/tools/ui-kit/build/escape.js.map +1 -0
  224. package/tools/ui-kit/build/fixture.d.ts +4 -0
  225. package/tools/ui-kit/build/fixture.d.ts.map +1 -0
  226. package/tools/ui-kit/build/fixture.js +52 -0
  227. package/tools/ui-kit/build/fixture.js.map +1 -0
  228. package/tools/ui-kit/build/generate-template.d.ts +2 -0
  229. package/tools/ui-kit/build/generate-template.d.ts.map +1 -0
  230. package/tools/ui-kit/build/generate-template.js +19 -0
  231. package/tools/ui-kit/build/generate-template.js.map +1 -0
  232. package/tools/ui-kit/build/index.d.ts +6 -0
  233. package/tools/ui-kit/build/index.d.ts.map +1 -0
  234. package/tools/ui-kit/build/index.js +7 -0
  235. package/tools/ui-kit/build/index.js.map +1 -0
  236. package/tools/ui-kit/build/render.d.ts +3 -0
  237. package/tools/ui-kit/build/render.d.ts.map +1 -0
  238. package/tools/ui-kit/build/render.js +38 -0
  239. package/tools/ui-kit/build/render.js.map +1 -0
  240. package/tools/ui-kit/build/result-components.d.ts +9 -0
  241. package/tools/ui-kit/build/result-components.d.ts.map +1 -0
  242. package/tools/ui-kit/build/result-components.js +105 -0
  243. package/tools/ui-kit/build/result-components.js.map +1 -0
  244. package/tools/ui-kit/build/result-fixture.d.ts +4 -0
  245. package/tools/ui-kit/build/result-fixture.d.ts.map +1 -0
  246. package/tools/ui-kit/build/result-fixture.js +39 -0
  247. package/tools/ui-kit/build/result-fixture.js.map +1 -0
  248. package/tools/ui-kit/build/result-render.d.ts +3 -0
  249. package/tools/ui-kit/build/result-render.d.ts.map +1 -0
  250. package/tools/ui-kit/build/result-render.js +37 -0
  251. package/tools/ui-kit/build/result-render.js.map +1 -0
  252. package/tools/ui-kit/build/result-runtime.d.ts +2 -0
  253. package/tools/ui-kit/build/result-runtime.d.ts.map +1 -0
  254. package/tools/ui-kit/build/result-runtime.js +72 -0
  255. package/tools/ui-kit/build/result-runtime.js.map +1 -0
  256. package/tools/ui-kit/build/runtime.d.ts +2 -0
  257. package/tools/ui-kit/build/runtime.d.ts.map +1 -0
  258. package/tools/ui-kit/build/runtime.js +221 -0
  259. package/tools/ui-kit/build/runtime.js.map +1 -0
  260. package/tools/ui-kit/build/theme.d.ts +2 -0
  261. package/tools/ui-kit/build/theme.d.ts.map +1 -0
  262. package/tools/ui-kit/build/theme.js +278 -0
  263. package/tools/ui-kit/build/theme.js.map +1 -0
  264. package/tools/ui-kit/build/types.d.ts +113 -0
  265. package/tools/ui-kit/build/types.d.ts.map +1 -0
  266. package/tools/ui-kit/build/types.js +35 -0
  267. package/tools/ui-kit/build/types.js.map +1 -0
  268. package/tools/ui-kit/package.json +19 -0
@@ -0,0 +1,39 @@
1
+ /** Sample action report — drives the result-view demo and tests. */
2
+ export const SAMPLE_RESULT = {
3
+ meta: {
4
+ title: "Component Factory",
5
+ subtitle: "shadcn/ui · Button",
6
+ target: "@repo/ui",
7
+ generatedAt: "2026-06-27",
8
+ tool: "component-factory",
9
+ },
10
+ headline: "Created 3 files for Button",
11
+ status: "success",
12
+ stats: [
13
+ { label: "Created", value: "3" },
14
+ { label: "Template", value: "shadcn/ui" },
15
+ { label: "Variants", value: "6" },
16
+ ],
17
+ changes: [
18
+ { path: "src/components/Button/Button.tsx", kind: "created", summary: "Component with 6 variants + 4 sizes", additions: 84, language: "tsx", diff: "+ import { cva } from 'class-variance-authority';\n+ export const Button = ({ variant, size, ...props }) => {\n+ return <button className={cn(buttonVariants({ variant, size }))} {...props} />;\n+ };" },
19
+ { path: "src/components/Button/Button.test.tsx", kind: "created", summary: "Vitest + RTL suite, 8 cases", additions: 52, language: "tsx" },
20
+ { path: "src/components/Button/Button.stories.tsx", kind: "created", summary: "Storybook stories: Default, variants, sizes", additions: 39, language: "tsx" },
21
+ ],
22
+ sections: [
23
+ {
24
+ title: "Steps",
25
+ items: [
26
+ { title: "Resolved shadcn/ui Button template", status: "ok" },
27
+ { title: "Generated variants with CVA", status: "ok" },
28
+ { title: "Wrote tests + stories", status: "ok" },
29
+ { title: "Skipped: index barrel not updated", detail: "Add `export * from './Button'` to src/components/index.ts", status: "warn" },
30
+ ],
31
+ },
32
+ ],
33
+ nextActions: [
34
+ { id: "review", label: "Review the component", kind: "tool", tool: "component-reviewer", params: { path: "src/components/Button/Button.tsx" }, fallback: "Review src/components/Button/Button.tsx." },
35
+ { id: "story", label: "Generate more stories", kind: "tool", tool: "storybook-generator", params: { path: "src/components/Button/Button.tsx" }, fallback: "Generate Storybook stories for Button." },
36
+ { id: "barrel", label: "Update barrel export", kind: "prompt", prompt: "Add `export * from './Button'` to src/components/index.ts" },
37
+ ],
38
+ };
39
+ //# sourceMappingURL=result-fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-fixture.js","sourceRoot":"","sources":["../src/result-fixture.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE;QACJ,KAAK,EAAE,mBAAmB;QAC1B,QAAQ,EAAE,oBAAoB;QAC9B,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,mBAAmB;KAC1B;IACD,QAAQ,EAAE,4BAA4B;IACtC,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE;QACL,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;QAChC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;QACzC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;KAClC;IACD,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,qCAAqC,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,0MAA0M,EAAE;QAC/V,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC1I,EAAE,IAAI,EAAE,0CAA0C,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,6CAA6C,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC9J;IACD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,OAAO;YACd,KAAK,EAAE;gBACL,EAAE,KAAK,EAAE,oCAAoC,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC7D,EAAE,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,IAAI,EAAE;gBACtD,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE;gBAChD,EAAE,KAAK,EAAE,mCAAmC,EAAE,MAAM,EAAE,2DAA2D,EAAE,MAAM,EAAE,MAAM,EAAE;aACpI;SACF;KACF;IACD,WAAW,EAAE;QACX,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,QAAQ,EAAE,0CAA0C,EAAE;QACrM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,QAAQ,EAAE,wCAAwC,EAAE;QACpM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,2DAA2D,EAAE;KACrI;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ResultReport } from "./types.js";
2
+ export declare function renderResultHTML(report: ResultReport): string;
3
+ //# sourceMappingURL=result-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-render.d.ts","sourceRoot":"","sources":["../src/result-render.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAuB7D"}
@@ -0,0 +1,37 @@
1
+ // ============================================================================
2
+ // renderResultHTML — one self-contained HTML document for an action/result
3
+ // report (scaffold, fix, convert, generate). Shares styles + chrome with the
4
+ // health report; uses the result-specific runtime.
5
+ // ============================================================================
6
+ import { STYLES } from "./theme.js";
7
+ import { RESULT_RUNTIME } from "./result-runtime.js";
8
+ import { esc } from "./escape.js";
9
+ import { buildResultHeader, buildResultHero, buildChanges, buildSections, buildNextSteps, buildChrome, } from "./result-components.js";
10
+ function embedJson(data) {
11
+ return JSON.stringify(data).replace(/</g, "\\u003c");
12
+ }
13
+ export function renderResultHTML(report) {
14
+ return `<!doctype html>
15
+ <html lang="en" data-theme="light">
16
+ <head>
17
+ <meta charset="utf-8"/>
18
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
19
+ <title>${esc(report.meta.title)} — ${esc(report.meta.target)}</title>
20
+ <style>${STYLES}</style>
21
+ </head>
22
+ <body>
23
+ <div class="wrap">
24
+ ${buildResultHeader(report)}
25
+ ${buildResultHero(report)}
26
+ ${buildNextSteps(report)}
27
+ ${buildChanges(report)}
28
+ ${buildSections(report)}
29
+ <div class="foot-note">${esc(report.meta.tool)} · generated ${esc(report.meta.generatedAt)} · mcp-react-toolkit</div>
30
+ </div>
31
+ ${buildChrome()}
32
+ <script id="report-data" type="application/json">${embedJson(report)}</script>
33
+ <script>${RESULT_RUNTIME}</script>
34
+ </body>
35
+ </html>`;
36
+ }
37
+ //# sourceMappingURL=result-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-render.js","sourceRoot":"","sources":["../src/result-render.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,mDAAmD;AACnD,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAGhC,SAAS,SAAS,CAAC,IAAa;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO;;;;;SAKA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACnD,MAAM;;;;EAIb,iBAAiB,CAAC,MAAM,CAAC;EACzB,eAAe,CAAC,MAAM,CAAC;EACvB,cAAc,CAAC,MAAM,CAAC;EACtB,YAAY,CAAC,MAAM,CAAC;EACpB,aAAa,CAAC,MAAM,CAAC;yBACE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;;EAExF,WAAW,EAAE;mDACoC,SAAS,CAAC,MAAM,CAAC;UAC1D,cAAc;;QAEhB,CAAC;AACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const RESULT_RUNTIME: string;
2
+ //# sourceMappingURL=result-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-runtime.d.ts","sourceRoot":"","sources":["../src/result-runtime.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,cAAc,QAgErB,CAAC"}
@@ -0,0 +1,72 @@
1
+ // ============================================================================
2
+ // CLIENT RUNTIME for the RESULT view. Dependency-free browser JS.
3
+ // Theme toggle, change-diff drawer, next-step actions (host postMessage /
4
+ // browser clipboard fallback), markdown export. Mirrors the health runtime's
5
+ // DataAdapter behaviour.
6
+ // ============================================================================
7
+ export const RESULT_RUNTIME = String.raw `(function(){
8
+ "use strict";
9
+ function readEmbedded(){ var el=document.getElementById('report-data'); if(!el) return null;
10
+ try{ return JSON.parse(el.textContent||'null'); }catch(e){ return null; } }
11
+ function readUrl(){ try{ var p=new URLSearchParams(location.search).get('data'); if(!p) return null;
12
+ var bytes=Uint8Array.from(atob(p), function(c){ return c.charCodeAt(0); });
13
+ return JSON.parse(new TextDecoder().decode(bytes)); }catch(e){ return null; } }
14
+ var DATA = window.__REPORT__ || readEmbedded() || readUrl();
15
+ if(!DATA){ return; }
16
+ var EMBEDDED=false; try{ EMBEDDED = window.self !== window.top; }catch(e){ EMBEDDED=true; }
17
+ var HOST_ORIGIN = window.__MCP_HOST_ORIGIN__ || '*';
18
+ var root=document.documentElement, lastFocus=null;
19
+ function E(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;'); }
20
+ function $(id){ return document.getElementById(id); }
21
+
22
+ // theme
23
+ function store(k,v){ try{ if(v==null) return localStorage.getItem(k); localStorage.setItem(k,v); }catch(e){ return null; } }
24
+ function applyTheme(t){ root.setAttribute('data-theme',t);
25
+ var sun=document.querySelector('.theme-sun'), moon=document.querySelector('.theme-moon');
26
+ if(sun&&moon){ sun.hidden=t!=='dark'; moon.hidden=t==='dark'; } }
27
+ var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
28
+ applyTheme(store('mcp-ui-theme') || (prefersDark?'dark':'light'));
29
+ var tt=$('theme-toggle'); if(tt) tt.addEventListener('click', function(){
30
+ var n=root.getAttribute('data-theme')==='dark'?'light':'dark'; applyTheme(n); store('mcp-ui-theme',n); });
31
+
32
+ root.setAttribute('data-band', DATA.status==='partial'?'warn':'good');
33
+
34
+ // actions
35
+ var actionsById={}; (DATA.nextActions||[]).forEach(function(a){ actionsById[a.id]=a; });
36
+ function copy(text){ try{ if(navigator.clipboard&&navigator.clipboard.writeText) return navigator.clipboard.writeText(text); }catch(e){}
37
+ try{ var t=document.createElement('textarea'); t.value=text; document.body.appendChild(t); t.select(); document.execCommand('copy'); document.body.removeChild(t); }catch(e){} }
38
+ var toastTimer; function toast(msg){ var el=$('toast'); if(!el) return; el.textContent=msg; el.classList.add('show');
39
+ clearTimeout(toastTimer); toastTimer=setTimeout(function(){ el.classList.remove('show'); },2600); }
40
+ function runAction(id){ var a=actionsById[id]; if(!a) return;
41
+ if(a.kind==='link'){ if(!/^https?:\/\//i.test(a.href||'')){ toast('Unsafe link blocked'); return; } window.open(a.href,'_blank','noopener'); return; }
42
+ if(EMBEDDED){ var msg = a.kind==='tool' ? { type:'tool', messageId:'mcp-ui-'+Date.now(), payload:{ toolName:a.tool, params:a.params||{} } } : { type:'prompt', messageId:'mcp-ui-'+Date.now(), payload:{ prompt:a.prompt } };
43
+ try{ window.parent.postMessage(msg,HOST_ORIGIN); toast(a.kind==='tool'?('Running '+a.tool+' …'):'Sent to agent ✓'); return; }catch(e){} }
44
+ var text = a.kind==='tool' ? (a.fallback||('Run '+a.tool)) : (a.prompt||a.fallback||a.label); copy(text); toast('Copied — paste into your agent'); }
45
+ document.addEventListener('click', function(e){ var el=e.target.closest && e.target.closest('[data-action]');
46
+ if(el){ e.preventDefault(); runAction(el.getAttribute('data-action')); } });
47
+
48
+ // change diff drawer
49
+ var drawer=$('drawer'), scrim=$('scrim');
50
+ function renderDiff(diff){ return diff.split('\n').map(function(l){
51
+ var c = l.charAt(0)==='+' ? 'dl-add' : l.charAt(0)==='-' ? 'dl-del' : 'dl-ctx'; return '<span class="'+c+'">'+E(l)+'</span>'; }).join('\n'); }
52
+ function openChange(i){ var c=(DATA.changes||[])[i]; if(!c||!c.diff) return; lastFocus=document.activeElement;
53
+ $('d-title').textContent=c.path;
54
+ $('d-body').innerHTML='<div class="kv" style="margin-bottom:14px"><span class="pair"><b>'+E(c.kind)+'</b></span>'+(c.language?'<span class="pair">'+E(c.language)+'</span>':'')+'</div><div class="diff">'+renderDiff(c.diff)+'</div>';
55
+ $('d-acts').innerHTML='';
56
+ drawer.classList.add('open'); scrim.classList.add('open'); var dc=$('d-close'); if(dc) dc.focus(); }
57
+ function closeDrawer(){ drawer.classList.remove('open'); scrim.classList.remove('open'); if(lastFocus&&lastFocus.focus){ lastFocus.focus(); lastFocus=null; } }
58
+ document.addEventListener('click', function(e){ var r=e.target.closest && e.target.closest('.change-row[data-change]'); if(r) openChange(parseInt(r.getAttribute('data-change'),10)); });
59
+ document.addEventListener('keydown', function(e){ if((e.key==='Enter'||e.key===' ')){ var r=e.target.closest && e.target.closest('.change-row[data-change]'); if(r){ e.preventDefault(); openChange(parseInt(r.getAttribute('data-change'),10)); } } });
60
+ if(scrim) scrim.addEventListener('click', closeDrawer);
61
+ var dcl=$('d-close'); if(dcl) dcl.addEventListener('click', closeDrawer);
62
+ document.addEventListener('keydown', function(e){ if(e.key==='Escape') closeDrawer(); });
63
+
64
+ // export
65
+ var ex=$('export-btn'); function md(s){ return String(s==null?'':s).replace(/[\r\n]+/g,' '); }
66
+ if(ex) ex.addEventListener('click', function(){ var L=[]; L.push('# '+md(DATA.meta.title)); L.push('');
67
+ L.push('**'+md(DATA.headline)+'** ('+DATA.status+') '); L.push('**Target:** '+md(DATA.meta.target)); L.push('');
68
+ if((DATA.changes||[]).length){ L.push('## Changes'); (DATA.changes||[]).forEach(function(c){ L.push('- ['+c.kind.toUpperCase()+'] '+md(c.path)+(c.summary?(' — '+md(c.summary)):'')); }); L.push(''); }
69
+ (DATA.sections||[]).forEach(function(s){ L.push('## '+md(s.title)); s.items.forEach(function(it){ L.push('- '+md(it.title)+(it.detail?(' — '+md(it.detail)):'')); }); L.push(''); });
70
+ copy(L.join('\n')); toast('Summary copied as Markdown ✓'); });
71
+ })();`;
72
+ //# sourceMappingURL=result-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-runtime.js","sourceRoot":"","sources":["../src/result-runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kEAAkE;AAClE,0EAA0E;AAC1E,6EAA6E;AAC7E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgElC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const RUNTIME: string;
2
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,OAAO,QAkNd,CAAC"}
@@ -0,0 +1,221 @@
1
+ // ============================================================================
2
+ // CLIENT RUNTIME — plain browser JS emitted as a string into the single-file
3
+ // HTML. No build step, no framework. Handles: theme, gauge/counter animation,
4
+ // triage table (sort/filter/search), drawer, agentic actions and export.
5
+ //
6
+ // DataAdapter: detects surface at runtime.
7
+ // • Embedded in an iframe (MCP host) -> postMessage MCP-UI actions to parent.
8
+ // • Standalone browser tab -> graceful fallback (copy prompt).
9
+ // ============================================================================
10
+ export const RUNTIME = String.raw `(function(){
11
+ "use strict";
12
+ function readEmbedded(){
13
+ var el=document.getElementById('report-data');
14
+ if(!el) return null; try{ return JSON.parse(el.textContent||'null'); }catch(e){ return null; }
15
+ }
16
+ function readUrl(){
17
+ try{ var p=new URLSearchParams(location.search).get('data'); if(!p) return null;
18
+ var bytes=Uint8Array.from(atob(p), function(c){ return c.charCodeAt(0); });
19
+ return JSON.parse(new TextDecoder().decode(bytes)); }catch(e){ return null; }
20
+ }
21
+ var DATA = window.__REPORT__ || readEmbedded() || readUrl();
22
+ if(!DATA){ return; }
23
+ var EMBEDDED = false; try{ EMBEDDED = window.self !== window.top; }catch(e){ EMBEDDED = true; }
24
+ var HOST_ORIGIN = window.__MCP_HOST_ORIGIN__ || '*'; // host may inject its origin to harden postMessage
25
+ var lastFocus = null;
26
+ var root = document.documentElement;
27
+ var SEV_RANK = { critical:4, high:3, medium:2, low:1 };
28
+
29
+ function E(s){ return String(s==null?'':s)
30
+ .replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
31
+ .replace(/"/g,'&quot;').replace(/'/g,'&#39;'); }
32
+ function $(id){ return document.getElementById(id); }
33
+
34
+ // ---------- theme ----------
35
+ function store(k,v){ try{ if(v==null) return localStorage.getItem(k); localStorage.setItem(k,v); }catch(e){ return null; } }
36
+ function applyTheme(t){
37
+ root.setAttribute('data-theme', t);
38
+ var sun=document.querySelector('.theme-sun'), moon=document.querySelector('.theme-moon');
39
+ if(sun&&moon){ sun.hidden = t!=='dark'; moon.hidden = t==='dark'; }
40
+ }
41
+ var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
42
+ applyTheme(store('mcp-ui-theme') || (prefersDark?'dark':'light'));
43
+ var tt=$('theme-toggle');
44
+ if(tt) tt.addEventListener('click', function(){
45
+ var next = root.getAttribute('data-theme')==='dark'?'light':'dark';
46
+ applyTheme(next); store('mcp-ui-theme', next);
47
+ });
48
+
49
+ // ---------- band + intro animation ----------
50
+ root.setAttribute('data-band', DATA.score>=70?'good':(DATA.score>=45?'warn':'bad'));
51
+ var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
52
+ requestAnimationFrame(function(){
53
+ var arc=document.querySelector('.gauge .arc');
54
+ if(arc) arc.style.strokeDashoffset = arc.getAttribute('data-target');
55
+ Array.prototype.forEach.call(document.querySelectorAll('.bar > i'), function(i){ i.style.width=i.getAttribute('data-w')+'%'; });
56
+ var el=document.querySelector('.score'); if(!el) return;
57
+ var target=parseInt(el.getAttribute('data-count'),10)||0;
58
+ if(reduce){ el.textContent=target; return; }
59
+ var start=null;
60
+ requestAnimationFrame(function step(ts){ if(!start)start=ts; var p=Math.min(1,(ts-start)/1000);
61
+ el.textContent=Math.round((1-Math.pow(1-p,3))*target); if(p<1) requestAnimationFrame(step); });
62
+ });
63
+
64
+ // ---------- actions (DataAdapter) ----------
65
+ var actionsById={};
66
+ (DATA.topActions||[]).forEach(function(a){ actionsById[a.id]=a; });
67
+ (DATA.issues||[]).forEach(function(it){ (it.actions||[]).forEach(function(a){ actionsById[a.id]=a; }); });
68
+ function copy(text){
69
+ try{ if(navigator.clipboard&&navigator.clipboard.writeText) return navigator.clipboard.writeText(text); }catch(e){}
70
+ try{ var t=document.createElement('textarea'); t.value=text; document.body.appendChild(t); t.select();
71
+ document.execCommand('copy'); document.body.removeChild(t); }catch(e){}
72
+ }
73
+ var toastTimer;
74
+ function toast(msg){
75
+ var el=$('toast'); if(!el) return; el.textContent=msg; el.classList.add('show');
76
+ clearTimeout(toastTimer); toastTimer=setTimeout(function(){ el.classList.remove('show'); }, 2600);
77
+ }
78
+ function runAction(id){
79
+ var a=actionsById[id]; if(!a) return;
80
+ if(a.kind==='link'){
81
+ if(!/^https?:\/\//i.test(a.href||'')){ toast('Unsafe link blocked'); return; }
82
+ window.open(a.href,'_blank','noopener'); return;
83
+ }
84
+ if(EMBEDDED){
85
+ var msg = a.kind==='tool'
86
+ ? { type:'tool', messageId:'mcp-ui-'+Date.now(), payload:{ toolName:a.tool, params:a.params||{} } }
87
+ : { type:'prompt', messageId:'mcp-ui-'+Date.now(), payload:{ prompt:a.prompt } };
88
+ try{ window.parent.postMessage(msg,HOST_ORIGIN); toast(a.kind==='tool'?('Running '+a.tool+' …'):'Sent to agent ✓'); return; }catch(e){}
89
+ }
90
+ var text = a.kind==='tool' ? (a.fallback||('Run '+a.tool)) : (a.prompt||a.fallback||a.label);
91
+ copy(text); toast('Copied — paste into your agent');
92
+ }
93
+ document.addEventListener('click', function(e){
94
+ var el=e.target.closest && e.target.closest('[data-action]');
95
+ if(el){ e.preventDefault(); runAction(el.getAttribute('data-action')); }
96
+ });
97
+ document.addEventListener('keydown', function(e){
98
+ if((e.key==='Enter'||e.key===' ')){ var el=e.target.closest && e.target.closest('.qitem[data-action]');
99
+ if(el){ e.preventDefault(); runAction(el.getAttribute('data-action')); } }
100
+ });
101
+
102
+ // ---------- triage table ----------
103
+ var state={ sev:'all', q:'', cat:null, key:'severity', dir:'desc' };
104
+ var rowsEl=$('rows'), emptyEl=$('empty'), countEl=$('issue-count');
105
+ function passes(it){
106
+ if(state.sev!=='all' && it.severity!==state.sev) return false;
107
+ if(state.cat && it.category!==state.cat) return false;
108
+ if(state.q){ var q=state.q.toLowerCase();
109
+ var hay=(it.title+' '+(it.file||'')+' '+(it.category||'')+' '+(it.description||'')).toLowerCase();
110
+ if(hay.indexOf(q)<0) return false; }
111
+ return true;
112
+ }
113
+ function cmp(a,b){
114
+ var k=state.key, av, bv;
115
+ if(k==='severity'){ av=SEV_RANK[a.severity]||0; bv=SEV_RANK[b.severity]||0; }
116
+ else { av=(a[k]||'').toString().toLowerCase(); bv=(b[k]||'').toString().toLowerCase(); }
117
+ if(av<bv) return state.dir==='asc'?-1:1;
118
+ if(av>bv) return state.dir==='asc'?1:-1;
119
+ return 0;
120
+ }
121
+ function catName(id){ var c=(DATA.categories||[]).filter(function(x){return x.id===id;})[0]; return c?c.name:id; }
122
+ function render(){
123
+ var list=(DATA.issues||[]).filter(passes).slice().sort(cmp);
124
+ rowsEl.innerHTML = list.map(function(it){
125
+ return '<tr data-id="'+E(it.id)+'" tabindex="0" role="button" aria-label="Open issue: '+E(it.title)+'">'+
126
+ '<td><span class="sev '+E(it.severity)+'"><span class="pip"></span>'+E(it.severity)+'</span></td>'+
127
+ '<td class="cell-title">'+E(it.title)+'</td>'+
128
+ '<td><span class="tag">'+E(catName(it.category))+'</span></td>'+
129
+ '<td class="cell-file">'+E(it.file||'—')+'</td></tr>';
130
+ }).join('');
131
+ emptyEl.hidden = list.length>0;
132
+ if(countEl) countEl.textContent = list.length+(state.cat?(' in '+catName(state.cat)):(' of '+(DATA.issues||[]).length));
133
+ }
134
+ if(rowsEl){
135
+ rowsEl.addEventListener('click', function(e){
136
+ var tr=e.target.closest('tr[data-id]'); if(tr) openDrawer(tr.getAttribute('data-id'));
137
+ });
138
+ rowsEl.addEventListener('keydown', function(e){
139
+ if(e.key==='Enter'||e.key===' '){ var tr=e.target.closest('tr[data-id]');
140
+ if(tr){ e.preventDefault(); openDrawer(tr.getAttribute('data-id')); } }
141
+ });
142
+ Array.prototype.forEach.call(document.querySelectorAll('.filter button'), function(b){
143
+ b.addEventListener('click', function(){
144
+ state.sev=b.getAttribute('data-sev');
145
+ Array.prototype.forEach.call(document.querySelectorAll('.filter button'), function(x){
146
+ x.setAttribute('aria-pressed', x===b?'true':'false'); });
147
+ render();
148
+ });
149
+ });
150
+ var search=$('search');
151
+ if(search) search.addEventListener('input', function(){ state.q=search.value; render(); });
152
+ Array.prototype.forEach.call(document.querySelectorAll('thead th[data-sort]'), function(th){
153
+ th.addEventListener('click', function(){
154
+ var k=th.getAttribute('data-sort');
155
+ if(state.key===k){ state.dir=state.dir==='asc'?'desc':'asc'; } else { state.key=k; state.dir=k==='severity'?'desc':'asc'; }
156
+ Array.prototype.forEach.call(document.querySelectorAll('thead th[data-sort]'), function(x){ x.removeAttribute('aria-sort'); });
157
+ th.setAttribute('aria-sort', state.dir==='asc'?'ascending':'descending');
158
+ render();
159
+ });
160
+ });
161
+ Array.prototype.forEach.call(document.querySelectorAll('.card[data-category]'), function(card){
162
+ function trigger(){
163
+ var id=card.getAttribute('data-category');
164
+ state.cat = state.cat===id ? null : id;
165
+ Array.prototype.forEach.call(document.querySelectorAll('.card[data-category]'), function(c){
166
+ c.style.borderColor = (c===card && state.cat) ? 'var(--accent)' : ''; });
167
+ render();
168
+ var sec=document.querySelector('.table-card'); if(sec&&state.cat) sec.scrollIntoView({behavior:reduce?'auto':'smooth', block:'start'});
169
+ }
170
+ card.addEventListener('click', trigger);
171
+ card.addEventListener('keydown', function(e){ if(e.key==='Enter'||e.key===' '){ e.preventDefault(); trigger(); } });
172
+ });
173
+ render();
174
+ }
175
+
176
+ // ---------- drawer ----------
177
+ var drawer=$('drawer'), scrim=$('scrim');
178
+ function field(k,v,mono){ return '<div class="field"><div class="k">'+E(k)+'</div><div class="v'+(mono?' mono':'')+'">'+E(v)+'</div></div>'; }
179
+ function openDrawer(id){
180
+ var it=(DATA.issues||[]).filter(function(x){return x.id===id;})[0]; if(!it) return;
181
+ lastFocus=document.activeElement;
182
+ $('d-title').textContent=it.title;
183
+ var body='';
184
+ body+='<div class="kv" style="margin-bottom:16px">'+
185
+ '<span class="pair"><b style="color:var(--sev-'+E(it.severity)+')">'+E(it.severity)+'</b></span>'+
186
+ '<span class="pair">'+E(catName(it.category))+'</span></div>';
187
+ if(it.description) body+=field('What it means', it.description);
188
+ if(it.file) body+=field('File', it.file, true);
189
+ (it.meta||[]).forEach(function(m){ body+=field(m.label, m.value); });
190
+ $('d-body').innerHTML=body;
191
+ $('d-acts').innerHTML=(it.actions||[]).map(function(a,i){
192
+ return '<button class="btn'+(i===0?' primary':'')+'" type="button" data-action="'+E(a.id)+'">'+E(a.label)+'</button>';
193
+ }).join('') || '<span style="color:var(--faint);font-size:12px">No automated fix available</span>';
194
+ drawer.classList.add('open'); scrim.classList.add('open');
195
+ var dcEl=$('d-close'); if(dcEl) dcEl.focus();
196
+ }
197
+ function closeDrawer(){
198
+ drawer.classList.remove('open'); scrim.classList.remove('open');
199
+ if(lastFocus&&lastFocus.focus){ lastFocus.focus(); lastFocus=null; }
200
+ }
201
+ if(scrim) scrim.addEventListener('click', closeDrawer);
202
+ var dc=$('d-close'); if(dc) dc.addEventListener('click', closeDrawer);
203
+ document.addEventListener('keydown', function(e){ if(e.key==='Escape') closeDrawer(); });
204
+
205
+ // ---------- export ----------
206
+ var ex=$('export-btn');
207
+ function md(s){ return String(s==null?'':s).replace(/[\r\n]+/g,' '); }
208
+ if(ex) ex.addEventListener('click', function(){
209
+ var L=[]; L.push('# '+md(DATA.meta.title)); L.push('');
210
+ L.push('**Target:** '+md(DATA.meta.target)+' ');
211
+ L.push('**Health score:** '+DATA.score+'/100 ');
212
+ L.push('**Issues:** '+DATA.totalIssues); L.push('');
213
+ L.push('## Areas');
214
+ (DATA.categories||[]).forEach(function(c){ L.push('- **'+md(c.name)+'** ('+c.status+(typeof c.score==='number'?', '+c.score:'')+') — '+md(c.summary)); });
215
+ L.push(''); L.push('## Issues');
216
+ (DATA.issues||[]).slice().sort(function(a,b){return (SEV_RANK[b.severity]||0)-(SEV_RANK[a.severity]||0);}).forEach(function(it){
217
+ L.push('- ['+it.severity.toUpperCase()+'] '+md(it.title)+(it.file?(' — '+md(it.file)):'')); });
218
+ copy(L.join('\n')); toast('Report copied as Markdown ✓');
219
+ });
220
+ })();`;
221
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,EAAE;AACF,2CAA2C;AAC3C,iFAAiF;AACjF,4EAA4E;AAC5E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkN3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const STYLES = "\n*,*::before,*::after{box-sizing:border-box}\nhtml{-webkit-text-size-adjust:100%}\nbody{margin:0}\n\n:root{\n --font:Inter,ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n --mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;\n\n /* light (default) */\n --bg:#f7f7f6;\n --surface:#ffffff;\n --surface-2:#fbfbfa;\n --text:#16161a;\n --muted:#6b7280;\n --faint:#9aa0aa;\n --border:#ebe9e4;\n --border-strong:#dedcd5;\n --shadow:0 1px 2px rgba(16,16,20,.04),0 8px 24px -12px rgba(16,16,20,.10);\n --ring:rgba(99,102,241,.45);\n\n --good:#059669; --good-soft:#ecfdf5;\n --warn:#d97706; --warn-soft:#fffbeb;\n --bad:#e11d48; --bad-soft:#fff1f2;\n\n --sev-critical:#e11d48; --sev-high:#ea580c; --sev-medium:#d97706; --sev-low:#64748b;\n --sev-critical-soft:#fff1f2; --sev-high-soft:#fff7ed; --sev-medium-soft:#fffbeb; --sev-low-soft:#f1f5f9;\n\n --accent:var(--good);\n --accent-soft:var(--good-soft);\n --radius:14px;\n --radius-sm:10px;\n}\n\n[data-theme=\"dark\"]{\n --bg:#0a0b0d;\n --surface:#141519;\n --surface-2:#0f1013;\n --text:#f3f4f6;\n --muted:#9aa1ad;\n --faint:#6b7280;\n --border:rgba(255,255,255,.07);\n --border-strong:rgba(255,255,255,.12);\n --shadow:0 1px 2px rgba(0,0,0,.4),0 16px 40px -20px rgba(0,0,0,.7);\n --ring:rgba(129,140,248,.55);\n\n --good:#34d399; --good-soft:rgba(52,211,153,.12);\n --warn:#fbbf24; --warn-soft:rgba(251,191,36,.12);\n --bad:#fb7185; --bad-soft:rgba(251,113,133,.12);\n\n --sev-critical:#fb7185; --sev-high:#fb923c; --sev-medium:#fbbf24; --sev-low:#94a3b8;\n --sev-critical-soft:rgba(251,113,133,.12); --sev-high-soft:rgba(251,146,60,.12);\n --sev-medium-soft:rgba(251,191,36,.12); --sev-low-soft:rgba(148,163,184,.12);\n}\n\n[data-band=\"good\"]{--accent:var(--good);--accent-soft:var(--good-soft)}\n[data-band=\"warn\"]{--accent:var(--warn);--accent-soft:var(--warn-soft)}\n[data-band=\"bad\"]{--accent:var(--bad);--accent-soft:var(--bad-soft)}\n\nbody{\n font-family:var(--font);\n background:var(--bg);\n color:var(--text);\n font-size:14px;\n line-height:1.5;\n -webkit-font-smoothing:antialiased;\n font-variant-numeric:tabular-nums;\n}\n.num{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}\n\n.wrap{max-width:1040px;margin:0 auto;padding:28px 24px 64px}\n\n/* header */\n.hdr{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}\n.brand{display:flex;align-items:center;gap:11px;min-width:0}\n.brand .dot{width:30px;height:30px;border-radius:9px;background:var(--accent-soft);color:var(--accent);\n display:grid;place-items:center;flex:none;border:1px solid var(--border)}\n.brand h1{font-size:15px;font-weight:650;margin:0;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.brand .sub{font-size:12px;color:var(--muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.hdr-actions{display:flex;align-items:center;gap:8px;flex:none}\n\n.btn{appearance:none;font-family:inherit;font-size:12.5px;font-weight:550;color:var(--text);\n background:var(--surface);border:1px solid var(--border-strong);border-radius:9px;padding:7px 11px;\n cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.16s ease;line-height:1}\n.btn:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}\n.btn:active{transform:translateY(0)}\n.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring)}\n.btn.icon{padding:7px;width:32px;height:32px;justify-content:center}\n.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}\n[data-theme=\"dark\"] .btn.primary{color:#0a0b0d}\n.btn.primary:hover{filter:brightness(1.05);color:#fff}\n[data-theme=\"dark\"] .btn.primary:hover{color:#0a0b0d}\n\n/* hero */\n.hero{display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center;\n background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);\n padding:26px 28px;box-shadow:var(--shadow);margin-bottom:18px}\n.gauge{position:relative;width:148px;height:148px;flex:none}\n.gauge svg{transform:rotate(-90deg)}\n.gauge .track{stroke:var(--border-strong);fill:none}\n.gauge .arc{stroke:var(--accent);fill:none;stroke-linecap:round;transition:stroke-dashoffset 1.1s cubic-bezier(.22,1,.36,1)}\n.gauge .center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;line-height:1}\n.gauge .score{font-size:42px;font-weight:680;letter-spacing:-.03em;line-height:1}\n.gauge .of{font-size:11px;color:var(--faint);margin-top:3px}\n.hero-meta{min-width:0}\n.grade-row{display:flex;align-items:baseline;gap:10px;margin-bottom:6px}\n.grade{font-size:13px;font-weight:650;color:var(--accent);background:var(--accent-soft);\n border:1px solid var(--border);border-radius:7px;padding:3px 9px}\n.verdict{font-size:18px;font-weight:620;letter-spacing:-.01em}\n.hero p{color:var(--muted);margin:2px 0 14px;font-size:13px}\n.chips{display:flex;flex-wrap:wrap;gap:7px}\n.chip{font-size:12px;color:var(--muted);background:var(--surface-2);border:1px solid var(--border);\n border-radius:999px;padding:4px 10px;display:inline-flex;gap:5px}\n.chip b{color:var(--text);font-weight:600}\n\n/* section heading */\n.sec{margin:26px 0 12px;display:flex;align-items:center;justify-content:space-between;gap:12px}\n.sec h2{font-size:13px;font-weight:620;letter-spacing:.02em;text-transform:uppercase;color:var(--muted);margin:0}\n.sec .count{font-size:12px;color:var(--faint)}\n\n/* category cards */\n.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:12px}\n.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:15px 16px;\n box-shadow:var(--shadow);transition:.16s ease;display:flex;flex-direction:column}\n.card:hover{border-color:var(--border-strong);transform:translateY(-2px)}\n.card .top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}\n.card .name{font-weight:600;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.card .badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;flex:none}\n.badge.good{color:var(--good);background:var(--good-soft)}\n.badge.warn{color:var(--warn);background:var(--warn-soft)}\n.badge.bad{color:var(--bad);background:var(--bad-soft)}\n.card .sum{color:var(--muted);font-size:12.5px;line-height:1.45;min-height:3.9em;\n display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}\n.bar{height:5px;border-radius:999px;background:var(--border-strong);overflow:hidden;margin-top:11px}\n.bar > i{display:block;height:100%;border-radius:999px;transition:width 1s cubic-bezier(.22,1,.36,1)}\n.bar > i.good{background:var(--good)} .bar > i.warn{background:var(--warn)} .bar > i.bad{background:var(--bad)}\n.card .foot{display:flex;justify-content:space-between;align-items:center;margin-top:9px;font-size:11.5px;color:var(--faint)}\n\n/* toolbar */\n.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}\n.search{flex:1;min-width:180px;position:relative}\n.search input{width:100%;font-family:inherit;font-size:13px;color:var(--text);background:var(--surface);\n border:1px solid var(--border-strong);border-radius:9px;padding:8px 11px 8px 32px}\n.search input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--ring)}\n.search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--faint)}\n.filter{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:9px;padding:3px}\n.filter button{appearance:none;font-family:inherit;font-size:12px;font-weight:550;color:var(--muted);\n background:transparent;border:0;border-radius:6px;padding:5px 10px;cursor:pointer;transition:.14s}\n.filter button[aria-pressed=\"true\"]{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}\n.filter button:hover{color:var(--text)}\n\n/* table */\n.table-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);\n box-shadow:var(--shadow);overflow:hidden}\ntable{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}\nthead th:nth-child(1),tbody td:nth-child(1){width:96px}\nthead th:nth-child(3),tbody td:nth-child(3){width:120px}\nthead th:nth-child(4),tbody td:nth-child(4){width:160px}\nthead th{text-align:left;font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;\n color:var(--faint);padding:11px 16px;border-bottom:1px solid var(--border);cursor:pointer;user-select:none;white-space:nowrap}\nthead th .arr{opacity:.4;font-size:9px;margin-left:3px}\nthead th[aria-sort] .arr{opacity:1;color:var(--accent)}\ntbody tr{border-bottom:1px solid var(--border);cursor:pointer;transition:background .12s}\ntbody tr:last-child{border-bottom:0}\ntbody tr:hover{background:var(--surface-2)}\ntbody td{padding:11px 16px;vertical-align:top}\n.sev{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:12px;white-space:nowrap}\n.sev .pip{width:7px;height:7px;border-radius:999px;flex:none}\n.sev.critical{color:var(--sev-critical)} .sev.critical .pip{background:var(--sev-critical)}\n.sev.high{color:var(--sev-high)} .sev.high .pip{background:var(--sev-high)}\n.sev.medium{color:var(--sev-medium)} .sev.medium .pip{background:var(--sev-medium)}\n.sev.low{color:var(--sev-low)} .sev.low .pip{background:var(--sev-low)}\n.cell-title{font-weight:550;color:var(--text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}\n.cell-file{font-family:var(--mono);font-size:11.5px;color:var(--muted);overflow-wrap:anywhere;word-break:normal;max-width:200px}\n.tag{font-size:11px;color:var(--muted);background:var(--surface-2);border:1px solid var(--border);\n border-radius:6px;padding:2px 7px;white-space:nowrap}\n.empty{padding:40px 16px;text-align:center;color:var(--muted)}\n.empty .big{font-size:15px;color:var(--text);font-weight:600;margin-bottom:4px}\n\n/* drawer */\n.scrim{position:fixed;inset:0;background:rgba(10,11,13,.42);opacity:0;pointer-events:none;transition:.2s;z-index:40}\n.scrim.open{opacity:1;pointer-events:auto}\n.drawer{position:fixed;top:0;right:0;height:100%;width:min(440px,92vw);background:var(--surface);\n border-left:1px solid var(--border);box-shadow:-24px 0 60px -30px rgba(0,0,0,.5);\n transform:translateX(100%);transition:transform .26s cubic-bezier(.22,1,.36,1);z-index:50;\n display:flex;flex-direction:column}\n.drawer.open{transform:translateX(0)}\n.drawer header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;\n padding:20px 22px 16px;border-bottom:1px solid var(--border)}\n.drawer header h3{margin:0;font-size:16px;font-weight:640;letter-spacing:-.01em;line-height:1.35}\n.drawer .body{padding:18px 22px;overflow-y:auto;flex:1}\n.drawer .field{margin-bottom:16px}\n.drawer .field .k{font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;color:var(--faint);margin-bottom:5px}\n.drawer .field .v{font-size:13.5px;color:var(--text)}\n.drawer .field .v.mono{font-family:var(--mono);font-size:12px;color:var(--muted);word-break:break-all}\n.drawer .acts{padding:16px 22px;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;gap:8px}\n.kv{display:flex;gap:8px;flex-wrap:wrap}\n.kv .pair{font-size:12px;color:var(--muted);background:var(--surface-2);border:1px solid var(--border);border-radius:7px;padding:4px 9px}\n.kv .pair b{color:var(--text);font-weight:600}\n\n/* fix-first */\n.queue{display:flex;flex-direction:column;gap:8px}\n.qitem{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border);\n border-radius:var(--radius-sm);padding:11px 14px;box-shadow:var(--shadow);cursor:pointer;transition:.14s}\n.qitem:hover{border-color:var(--accent);transform:translateX(2px)}\n.qitem .rank{width:22px;height:22px;border-radius:7px;background:var(--accent-soft);color:var(--accent);\n font-size:12px;font-weight:680;display:grid;place-items:center;flex:none}\n.qitem .qt{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}\n.qitem .qt .t{display:block;font-weight:550;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.qitem .qt .s{display:block;font-size:11.5px;color:var(--faint)}\n\n/* toast */\n.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(20px);opacity:0;\n background:var(--text);color:var(--bg);font-size:13px;font-weight:550;padding:10px 16px;border-radius:10px;\n box-shadow:var(--shadow);transition:.22s;z-index:60;pointer-events:none;max-width:90vw}\n.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}\n\n.foot-note{margin-top:34px;text-align:center;font-size:11.5px;color:var(--faint)}\n.foot-note a{color:var(--muted)}\n\n@media (max-width:560px){\n .hero{grid-template-columns:1fr;justify-items:center;text-align:center}\n .hero-meta{text-align:center}.chips{justify-content:center}.grade-row{justify-content:center}\n}\n/* result view */\n.result-hero{display:flex;align-items:center;gap:18px;flex-wrap:wrap;\n background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);\n padding:22px 26px;box-shadow:var(--shadow);margin-bottom:18px}\n.result-hero .glyph{width:52px;height:52px;border-radius:14px;background:var(--accent-soft);color:var(--accent);\n display:grid;place-items:center;flex:none;border:1px solid var(--border)}\n.result-hero .rh-main{min-width:0;flex:1}\n.result-hero .rh-title{font-size:20px;font-weight:660;letter-spacing:-.02em;line-height:1.2}\n.result-hero .rh-sub{color:var(--muted);font-size:13px;margin-top:3px}\n.status-pill{font-size:12px;font-weight:650;padding:4px 10px;border-radius:999px;white-space:nowrap}\n.status-pill.good{color:var(--good);background:var(--good-soft)}\n.status-pill.warn{color:var(--warn);background:var(--warn-soft)}\n.status-pill.bad{color:var(--bad);background:var(--bad-soft)}\n.result-hero .chips{margin-top:0}\n\n.changes{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}\n.change-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);transition:background .12s}\n.change-row:last-child{border-bottom:0}\n.change-row.clickable{cursor:pointer}\n.change-row.clickable:hover{background:var(--surface-2)}\n.kind{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:3px 8px;border-radius:6px;flex:none;width:74px;text-align:center}\n.kind.created{color:var(--good);background:var(--good-soft)}\n.kind.modified{color:var(--warn);background:var(--warn-soft)}\n.kind.deleted{color:var(--bad);background:var(--bad-soft)}\n.kind.renamed{color:var(--sev-low);background:var(--sev-low-soft)}\n.change-main{flex:1;min-width:0}\n.change-path{font-family:var(--mono);font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.change-sum{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.change-delta{font-family:var(--mono);font-size:11.5px;flex:none;white-space:nowrap}\n.change-delta .add{color:var(--good)} .change-delta .del{color:var(--bad)}\n\n.section{margin-top:10px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}\n.section-item{display:flex;align-items:flex-start;gap:10px;padding:11px 16px;border-bottom:1px solid var(--border)}\n.section-item:last-child{border-bottom:0}\n.section-item .ip{width:7px;height:7px;border-radius:999px;margin-top:6px;flex:none;background:var(--faint)}\n.section-item .ip.ok{background:var(--good)} .section-item .ip.warn{background:var(--warn)} .section-item .ip.error{background:var(--bad)}\n.section-item .it{font-size:13px;font-weight:550}\n.section-item .id{font-size:12px;color:var(--muted)}\n.next-steps{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}\n.diff{font-family:var(--mono);font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;\n background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px}\n.diff .dl-add{color:var(--good)} .diff .dl-del{color:var(--bad)} .diff .dl-ctx{color:var(--muted)}\n\n@media (prefers-reduced-motion:reduce){\n *{transition:none!important;animation:none!important}\n}\n";
2
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,MAAM,0pgBA8QlB,CAAC"}