@flanksource/clicky-ui 0.3.9 → 0.3.11

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 (1216) hide show
  1. package/NOTICE.md +89 -0
  2. package/README.md +33 -2
  3. package/dist/ai.cjs +71 -5
  4. package/dist/ai.cjs.map +1 -1
  5. package/dist/ai.js +71 -5
  6. package/dist/ai.js.map +1 -1
  7. package/dist/chat.cjs +17 -13
  8. package/dist/chat.cjs.map +1 -1
  9. package/dist/chat.js +8 -4
  10. package/dist/clicky.d.ts +1 -1
  11. package/dist/clicky.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.cjs +84 -38
  13. package/dist/comments/CommentCard.cjs.map +1 -1
  14. package/dist/comments/CommentCard.d.ts +1 -1
  15. package/dist/comments/CommentCard.d.ts.map +1 -1
  16. package/dist/comments/CommentCard.js +85 -39
  17. package/dist/comments/CommentCard.js.map +1 -1
  18. package/dist/comments/CommentComposer.cjs +21 -11
  19. package/dist/comments/CommentComposer.cjs.map +1 -1
  20. package/dist/comments/CommentComposer.d.ts.map +1 -1
  21. package/dist/comments/CommentComposer.js +21 -11
  22. package/dist/comments/CommentComposer.js.map +1 -1
  23. package/dist/comments/CommentProvider.cjs +84 -12
  24. package/dist/comments/CommentProvider.cjs.map +1 -1
  25. package/dist/comments/CommentProvider.d.ts +4 -2
  26. package/dist/comments/CommentProvider.d.ts.map +1 -1
  27. package/dist/comments/CommentProvider.js +86 -14
  28. package/dist/comments/CommentProvider.js.map +1 -1
  29. package/dist/comments/CommentSidePanel.cjs +116 -38
  30. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  31. package/dist/comments/CommentSidePanel.d.ts +2 -0
  32. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  33. package/dist/comments/CommentSidePanel.js +117 -39
  34. package/dist/comments/CommentSidePanel.js.map +1 -1
  35. package/dist/comments/CommentThread.cjs +4 -0
  36. package/dist/comments/CommentThread.cjs.map +1 -1
  37. package/dist/comments/CommentThread.d.ts +5 -1
  38. package/dist/comments/CommentThread.d.ts.map +1 -1
  39. package/dist/comments/CommentThread.js +4 -0
  40. package/dist/comments/CommentThread.js.map +1 -1
  41. package/dist/comments/CommentThreadList.cjs +17 -5
  42. package/dist/comments/CommentThreadList.cjs.map +1 -1
  43. package/dist/comments/CommentThreadList.d.ts +3 -1
  44. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  45. package/dist/comments/CommentThreadList.js +18 -6
  46. package/dist/comments/CommentThreadList.js.map +1 -1
  47. package/dist/comments/comment-context.cjs +88 -0
  48. package/dist/comments/comment-context.cjs.map +1 -1
  49. package/dist/comments/comment-context.d.ts +26 -0
  50. package/dist/comments/comment-context.d.ts.map +1 -1
  51. package/dist/comments/comment-context.js +89 -1
  52. package/dist/comments/comment-context.js.map +1 -1
  53. package/dist/comments.cjs +3 -0
  54. package/dist/comments.cjs.map +1 -1
  55. package/dist/comments.d.ts +1 -1
  56. package/dist/comments.d.ts.map +1 -1
  57. package/dist/comments.js +4 -1
  58. package/dist/components/Combobox.cjs +145 -34
  59. package/dist/components/Combobox.cjs.map +1 -1
  60. package/dist/components/Combobox.d.ts +24 -1
  61. package/dist/components/Combobox.d.ts.map +1 -1
  62. package/dist/components/Combobox.js +147 -36
  63. package/dist/components/Combobox.js.map +1 -1
  64. package/dist/components/DatePicker.cjs +1 -1
  65. package/dist/components/DatePicker.cjs.map +1 -1
  66. package/dist/components/DatePicker.js +1 -1
  67. package/dist/components/DatePicker.js.map +1 -1
  68. package/dist/components/DateTimePicker.cjs +1 -1
  69. package/dist/components/DateTimePicker.cjs.map +1 -1
  70. package/dist/components/DateTimePicker.js +1 -1
  71. package/dist/components/DateTimePicker.js.map +1 -1
  72. package/dist/components/FilterBar.cjs +41 -459
  73. package/dist/components/FilterBar.cjs.map +1 -1
  74. package/dist/components/FilterBar.d.ts +4 -62
  75. package/dist/components/FilterBar.d.ts.map +1 -1
  76. package/dist/components/FilterBar.js +13 -430
  77. package/dist/components/FilterBar.js.map +1 -1
  78. package/dist/components/InputField.cjs +97 -0
  79. package/dist/components/InputField.cjs.map +1 -0
  80. package/dist/components/InputField.d.ts +42 -0
  81. package/dist/components/InputField.d.ts.map +1 -0
  82. package/dist/components/InputField.js +97 -0
  83. package/dist/components/InputField.js.map +1 -0
  84. package/dist/components/JsonSchemaForm.cjs +90 -15
  85. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  86. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  87. package/dist/components/JsonSchemaForm.js +92 -17
  88. package/dist/components/JsonSchemaForm.js.map +1 -1
  89. package/dist/components/MdxEditorField.cjs.map +1 -1
  90. package/dist/components/MdxEditorField.d.ts +1 -1
  91. package/dist/components/MdxEditorField.d.ts.map +1 -1
  92. package/dist/components/MdxEditorField.js.map +1 -1
  93. package/dist/components/MdxEditorToolbar.cjs +6 -1
  94. package/dist/components/MdxEditorToolbar.cjs.map +1 -1
  95. package/dist/components/MdxEditorToolbar.d.ts.map +1 -1
  96. package/dist/components/MdxEditorToolbar.js +6 -1
  97. package/dist/components/MdxEditorToolbar.js.map +1 -1
  98. package/dist/components/MultiSelect.cjs +0 -1
  99. package/dist/components/MultiSelect.cjs.map +1 -1
  100. package/dist/components/MultiSelect.d.ts.map +1 -1
  101. package/dist/components/MultiSelect.js +0 -1
  102. package/dist/components/MultiSelect.js.map +1 -1
  103. package/dist/components/SearchInput.cjs +14 -43
  104. package/dist/components/SearchInput.cjs.map +1 -1
  105. package/dist/components/SearchInput.d.ts +6 -5
  106. package/dist/components/SearchInput.d.ts.map +1 -1
  107. package/dist/components/SearchInput.js +15 -44
  108. package/dist/components/SearchInput.js.map +1 -1
  109. package/dist/components/SecretKeySelector.cjs +155 -67
  110. package/dist/components/SecretKeySelector.cjs.map +1 -1
  111. package/dist/components/SecretKeySelector.d.ts +34 -16
  112. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  113. package/dist/components/SecretKeySelector.js +158 -70
  114. package/dist/components/SecretKeySelector.js.map +1 -1
  115. package/dist/components/SecretKeySelector.model.cjs +32 -0
  116. package/dist/components/SecretKeySelector.model.cjs.map +1 -0
  117. package/dist/components/SecretKeySelector.model.d.ts +4 -0
  118. package/dist/components/SecretKeySelector.model.d.ts.map +1 -0
  119. package/dist/components/SecretKeySelector.model.js +32 -0
  120. package/dist/components/SecretKeySelector.model.js.map +1 -0
  121. package/dist/components/SegmentedControl.cjs +41 -6
  122. package/dist/components/SegmentedControl.cjs.map +1 -1
  123. package/dist/components/SegmentedControl.d.ts +7 -3
  124. package/dist/components/SegmentedControl.d.ts.map +1 -1
  125. package/dist/components/SegmentedControl.js +41 -6
  126. package/dist/components/SegmentedControl.js.map +1 -1
  127. package/dist/components/filter-bar-context.cjs +10 -0
  128. package/dist/components/filter-bar-context.cjs.map +1 -0
  129. package/dist/components/filter-bar-context.d.ts +5 -0
  130. package/dist/components/filter-bar-context.d.ts.map +1 -0
  131. package/dist/components/filter-bar-context.js +10 -0
  132. package/dist/components/filter-bar-context.js.map +1 -0
  133. package/dist/components/filter-bar-field-utils.cjs +119 -0
  134. package/dist/components/filter-bar-field-utils.cjs.map +1 -0
  135. package/dist/components/filter-bar-field-utils.d.ts +21 -0
  136. package/dist/components/filter-bar-field-utils.d.ts.map +1 -0
  137. package/dist/components/filter-bar-field-utils.js +119 -0
  138. package/dist/components/filter-bar-field-utils.js.map +1 -0
  139. package/dist/components/filter-bar-multi.cjs +193 -0
  140. package/dist/components/filter-bar-multi.cjs.map +1 -0
  141. package/dist/components/filter-bar-multi.d.ts +74 -0
  142. package/dist/components/filter-bar-multi.d.ts.map +1 -0
  143. package/dist/components/filter-bar-multi.js +193 -0
  144. package/dist/components/filter-bar-multi.js.map +1 -0
  145. package/dist/components/json-schema-form-array.cjs +81 -10
  146. package/dist/components/json-schema-form-array.cjs.map +1 -1
  147. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  148. package/dist/components/json-schema-form-array.js +82 -11
  149. package/dist/components/json-schema-form-array.js.map +1 -1
  150. package/dist/components/json-schema-form-fields.cjs +156 -24
  151. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  152. package/dist/components/json-schema-form-fields.d.ts +9 -1
  153. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  154. package/dist/components/json-schema-form-fields.js +156 -24
  155. package/dist/components/json-schema-form-fields.js.map +1 -1
  156. package/dist/components/json-schema-form-object.cjs +35 -12
  157. package/dist/components/json-schema-form-object.cjs.map +1 -1
  158. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-object.js +37 -14
  160. package/dist/components/json-schema-form-object.js.map +1 -1
  161. package/dist/components/json-schema-form-render.cjs +21 -3
  162. package/dist/components/json-schema-form-render.cjs.map +1 -1
  163. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  164. package/dist/components/json-schema-form-render.js +22 -4
  165. package/dist/components/json-schema-form-render.js.map +1 -1
  166. package/dist/components/json-schema-form-resolve.cjs +123 -13
  167. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  168. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  169. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  170. package/dist/components/json-schema-form-resolve.js +123 -13
  171. package/dist/components/json-schema-form-resolve.js.map +1 -1
  172. package/dist/components/json-schema-form-types.d.ts +30 -1
  173. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-utils.cjs +19 -0
  175. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  176. package/dist/components/json-schema-form-utils.d.ts +3 -0
  177. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  178. package/dist/components/json-schema-form-utils.js +19 -0
  179. package/dist/components/json-schema-form-utils.js.map +1 -1
  180. package/dist/components/loading.cjs +17 -0
  181. package/dist/components/loading.cjs.map +1 -1
  182. package/dist/components/loading.d.ts +9 -0
  183. package/dist/components/loading.d.ts.map +1 -1
  184. package/dist/components/loading.js +17 -0
  185. package/dist/components/loading.js.map +1 -1
  186. package/dist/components/mdx-editor-field-plugins.cjs +28 -4
  187. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -1
  188. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -1
  189. package/dist/components/mdx-editor-field-plugins.js +28 -4
  190. package/dist/components/mdx-editor-field-plugins.js.map +1 -1
  191. package/dist/components/mdx-editor-options.d.ts +23 -1
  192. package/dist/components/mdx-editor-options.d.ts.map +1 -1
  193. package/dist/components.cjs +13 -1
  194. package/dist/components.cjs.map +1 -1
  195. package/dist/components.d.ts +20 -16
  196. package/dist/components.d.ts.map +1 -1
  197. package/dist/components.js +14 -2
  198. package/dist/components.js.map +1 -1
  199. package/dist/data/Clicky.cjs +301 -51
  200. package/dist/data/Clicky.cjs.map +1 -1
  201. package/dist/data/Clicky.d.ts +21 -3
  202. package/dist/data/Clicky.d.ts.map +1 -1
  203. package/dist/data/Clicky.js +301 -51
  204. package/dist/data/Clicky.js.map +1 -1
  205. package/dist/data/CodeBlock.cjs +100 -20
  206. package/dist/data/CodeBlock.cjs.map +1 -1
  207. package/dist/data/CodeBlock.d.ts +18 -1
  208. package/dist/data/CodeBlock.d.ts.map +1 -1
  209. package/dist/data/CodeBlock.js +101 -21
  210. package/dist/data/CodeBlock.js.map +1 -1
  211. package/dist/data/CodeDiff.cjs +221 -0
  212. package/dist/data/CodeDiff.cjs.map +1 -0
  213. package/dist/data/CodeDiff.d.ts +24 -0
  214. package/dist/data/CodeDiff.d.ts.map +1 -0
  215. package/dist/data/CodeDiff.js +221 -0
  216. package/dist/data/CodeDiff.js.map +1 -0
  217. package/dist/data/DataTable.cjs +359 -219
  218. package/dist/data/DataTable.cjs.map +1 -1
  219. package/dist/data/DataTable.d.ts +12 -0
  220. package/dist/data/DataTable.d.ts.map +1 -1
  221. package/dist/data/DataTable.js +353 -213
  222. package/dist/data/DataTable.js.map +1 -1
  223. package/dist/data/FilterPill.cjs +43 -35
  224. package/dist/data/FilterPill.cjs.map +1 -1
  225. package/dist/data/FilterPill.d.ts +9 -1
  226. package/dist/data/FilterPill.d.ts.map +1 -1
  227. package/dist/data/FilterPill.js +43 -35
  228. package/dist/data/FilterPill.js.map +1 -1
  229. package/dist/data/FixtureEditor/FenceForm.cjs +123 -0
  230. package/dist/data/FixtureEditor/FenceForm.cjs.map +1 -0
  231. package/dist/data/FixtureEditor/FenceForm.d.ts +14 -0
  232. package/dist/data/FixtureEditor/FenceForm.d.ts.map +1 -0
  233. package/dist/data/FixtureEditor/FenceForm.js +123 -0
  234. package/dist/data/FixtureEditor/FenceForm.js.map +1 -0
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +236 -0
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -0
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts +3 -0
  238. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -0
  239. package/dist/data/FixtureEditor/FixtureEditor.js +236 -0
  240. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -0
  241. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs +128 -0
  242. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs.map +1 -0
  243. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts +8 -0
  244. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts.map +1 -0
  245. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js +128 -0
  246. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js.map +1 -0
  247. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +148 -0
  248. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -0
  249. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts +11 -0
  250. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts.map +1 -0
  251. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +148 -0
  252. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -0
  253. package/dist/data/FixtureEditor/RawFenceEditor.cjs +35 -0
  254. package/dist/data/FixtureEditor/RawFenceEditor.cjs.map +1 -0
  255. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +11 -0
  256. package/dist/data/FixtureEditor/RawFenceEditor.d.ts.map +1 -0
  257. package/dist/data/FixtureEditor/RawFenceEditor.js +35 -0
  258. package/dist/data/FixtureEditor/RawFenceEditor.js.map +1 -0
  259. package/dist/data/FixtureEditor/fixture-blocks.cjs +130 -0
  260. package/dist/data/FixtureEditor/fixture-blocks.cjs.map +1 -0
  261. package/dist/data/FixtureEditor/fixture-blocks.d.ts +26 -0
  262. package/dist/data/FixtureEditor/fixture-blocks.d.ts.map +1 -0
  263. package/dist/data/FixtureEditor/fixture-blocks.js +130 -0
  264. package/dist/data/FixtureEditor/fixture-blocks.js.map +1 -0
  265. package/dist/data/FixtureEditor/fixture-code-block-model.cjs +17 -0
  266. package/dist/data/FixtureEditor/fixture-code-block-model.cjs.map +1 -0
  267. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts +3 -0
  268. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts.map +1 -0
  269. package/dist/data/FixtureEditor/fixture-code-block-model.js +17 -0
  270. package/dist/data/FixtureEditor/fixture-code-block-model.js.map +1 -0
  271. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +300 -0
  272. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -0
  273. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts +32 -0
  274. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -0
  275. package/dist/data/FixtureEditor/fixture-frontmatter.js +300 -0
  276. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -0
  277. package/dist/data/FixtureEditor/index.d.ts +5 -0
  278. package/dist/data/FixtureEditor/index.d.ts.map +1 -0
  279. package/dist/data/FixtureEditor/types.d.ts +44 -0
  280. package/dist/data/FixtureEditor/types.d.ts.map +1 -0
  281. package/dist/data/LogDetails.cjs +4 -4
  282. package/dist/data/LogDetails.cjs.map +1 -1
  283. package/dist/data/LogDetails.js +4 -4
  284. package/dist/data/LogDetails.js.map +1 -1
  285. package/dist/data/Markdown.cjs +29 -1
  286. package/dist/data/Markdown.cjs.map +1 -1
  287. package/dist/data/Markdown.d.ts +3 -2
  288. package/dist/data/Markdown.d.ts.map +1 -1
  289. package/dist/data/Markdown.js +30 -2
  290. package/dist/data/Markdown.js.map +1 -1
  291. package/dist/data/Properties.cjs +160 -40
  292. package/dist/data/Properties.cjs.map +1 -1
  293. package/dist/data/Properties.d.ts +8 -2
  294. package/dist/data/Properties.d.ts.map +1 -1
  295. package/dist/data/Properties.js +160 -40
  296. package/dist/data/Properties.js.map +1 -1
  297. package/dist/data/SchemaViewer.cjs +1 -1
  298. package/dist/data/SchemaViewer.cjs.map +1 -1
  299. package/dist/data/SchemaViewer.js +2 -2
  300. package/dist/data/SchemaViewer.js.map +1 -1
  301. package/dist/data/ai/ChatWindow.cjs +336 -18
  302. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  303. package/dist/data/ai/ChatWindow.d.ts +13 -4
  304. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  305. package/dist/data/ai/ChatWindow.js +336 -18
  306. package/dist/data/ai/ChatWindow.js.map +1 -1
  307. package/dist/data/ai/ChatWindow.test-utils.d.ts +12 -0
  308. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -0
  309. package/dist/data/ai/PolicyTree.cjs +265 -0
  310. package/dist/data/ai/PolicyTree.cjs.map +1 -0
  311. package/dist/data/ai/PolicyTree.d.ts +33 -0
  312. package/dist/data/ai/PolicyTree.d.ts.map +1 -0
  313. package/dist/data/ai/PolicyTree.js +265 -0
  314. package/dist/data/ai/PolicyTree.js.map +1 -0
  315. package/dist/data/ai/PromptPicker/PromptPicker.cjs +251 -0
  316. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -0
  317. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +31 -0
  318. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -0
  319. package/dist/data/ai/PromptPicker/PromptPicker.js +251 -0
  320. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -0
  321. package/dist/data/ai/PromptPicker/index.d.ts +4 -0
  322. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -0
  323. package/dist/data/ai/PromptPicker/prompt-runtime.cjs +39 -0
  324. package/dist/data/ai/PromptPicker/prompt-runtime.cjs.map +1 -0
  325. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts +9 -0
  326. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts.map +1 -0
  327. package/dist/data/ai/PromptPicker/prompt-runtime.js +39 -0
  328. package/dist/data/ai/PromptPicker/prompt-runtime.js.map +1 -0
  329. package/dist/data/ai/PromptPicker/types.d.ts +25 -0
  330. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -0
  331. package/dist/data/ai/PromptRunEditor/index.cjs +242 -0
  332. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -0
  333. package/dist/data/ai/PromptRunEditor/index.d.ts +42 -0
  334. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -0
  335. package/dist/data/ai/PromptRunEditor/index.js +242 -0
  336. package/dist/data/ai/PromptRunEditor/index.js.map +1 -0
  337. package/dist/data/ai/RuntimeModePicker.cjs +61 -0
  338. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -0
  339. package/dist/data/ai/RuntimeModePicker.d.ts +12 -0
  340. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -0
  341. package/dist/data/ai/RuntimeModePicker.js +61 -0
  342. package/dist/data/ai/RuntimeModePicker.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.cjs +432 -0
  344. package/dist/data/ai/SessionInspector.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.d.ts +11 -0
  346. package/dist/data/ai/SessionInspector.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.js +432 -0
  348. package/dist/data/ai/SessionInspector.js.map +1 -0
  349. package/dist/data/ai/SessionViewer.cjs +208 -196
  350. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  351. package/dist/data/ai/SessionViewer.d.ts +39 -3
  352. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  353. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  354. package/dist/data/ai/SessionViewer.grouping.cjs +44 -0
  355. package/dist/data/ai/SessionViewer.grouping.cjs.map +1 -0
  356. package/dist/data/ai/SessionViewer.grouping.d.ts +17 -0
  357. package/dist/data/ai/SessionViewer.grouping.d.ts.map +1 -0
  358. package/dist/data/ai/SessionViewer.grouping.js +44 -0
  359. package/dist/data/ai/SessionViewer.grouping.js.map +1 -0
  360. package/dist/data/ai/SessionViewer.input.cjs +219 -0
  361. package/dist/data/ai/SessionViewer.input.cjs.map +1 -0
  362. package/dist/data/ai/SessionViewer.input.d.ts +44 -0
  363. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -0
  364. package/dist/data/ai/SessionViewer.input.js +219 -0
  365. package/dist/data/ai/SessionViewer.input.js.map +1 -0
  366. package/dist/data/ai/SessionViewer.js +209 -197
  367. package/dist/data/ai/SessionViewer.js.map +1 -1
  368. package/dist/data/ai/SessionViewer.model.cjs +203 -105
  369. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  370. package/dist/data/ai/SessionViewer.model.d.ts +45 -7
  371. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  372. package/dist/data/ai/SessionViewer.model.js +203 -105
  373. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  374. package/dist/data/ai/SessionViewer.rows.cjs +751 -0
  375. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -0
  376. package/dist/data/ai/SessionViewer.rows.d.ts +20 -0
  377. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -0
  378. package/dist/data/ai/SessionViewer.rows.js +751 -0
  379. package/dist/data/ai/SessionViewer.rows.js.map +1 -0
  380. package/dist/data/ai/SessionViewer.unified.d.ts +193 -0
  381. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -0
  382. package/dist/data/ai/SessionViewerMenu.cjs +57 -68
  383. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  384. package/dist/data/ai/SessionViewerMenu.d.ts +3 -3
  385. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  386. package/dist/data/ai/SessionViewerMenu.js +58 -69
  387. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs +25 -0
  389. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs.map +1 -0
  390. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts +12 -0
  391. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts.map +1 -0
  392. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js +25 -0
  393. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js.map +1 -0
  394. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -0
  395. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -0
  396. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +6 -0
  397. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -0
  398. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +44 -0
  399. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -0
  400. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +137 -0
  401. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -0
  402. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts +12 -0
  403. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -0
  404. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +137 -0
  405. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -0
  406. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs +29 -0
  407. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs.map +1 -0
  408. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +8 -0
  409. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts.map +1 -0
  410. package/dist/data/ai/SpecRuntimeEditor/Footer.js +29 -0
  411. package/dist/data/ai/SpecRuntimeEditor/Footer.js.map +1 -0
  412. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +481 -0
  413. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -0
  414. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +16 -0
  415. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -0
  416. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +481 -0
  417. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -0
  418. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +421 -0
  419. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -0
  420. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +17 -0
  421. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -0
  422. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +421 -0
  423. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -0
  424. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts +8 -0
  425. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts.map +1 -0
  426. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +98 -0
  427. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -0
  428. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +10 -0
  429. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -0
  430. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +98 -0
  431. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -0
  432. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs +23 -0
  433. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs.map +1 -0
  434. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +7 -0
  435. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts.map +1 -0
  436. package/dist/data/ai/SpecRuntimeEditor/Rail.js +23 -0
  437. package/dist/data/ai/SpecRuntimeEditor/Rail.js.map +1 -0
  438. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +77 -0
  439. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -0
  440. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +14 -0
  441. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -0
  442. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +77 -0
  443. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -0
  444. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +65 -0
  445. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -0
  446. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +12 -0
  447. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -0
  448. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +65 -0
  449. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -0
  450. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +227 -0
  451. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -0
  452. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +8 -0
  453. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -0
  454. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +227 -0
  455. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -0
  456. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs +45 -0
  457. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -0
  458. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts +7 -0
  459. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -0
  460. package/dist/data/ai/SpecRuntimeEditor/env-model.js +45 -0
  461. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -0
  462. package/dist/data/ai/SpecRuntimeEditor/fields.cjs +287 -0
  463. package/dist/data/ai/SpecRuntimeEditor/fields.cjs.map +1 -0
  464. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +79 -0
  465. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts.map +1 -0
  466. package/dist/data/ai/SpecRuntimeEditor/fields.js +287 -0
  467. package/dist/data/ai/SpecRuntimeEditor/fields.js.map +1 -0
  468. package/dist/data/ai/SpecRuntimeEditor/index.cjs +213 -0
  469. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -0
  470. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +41 -0
  471. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -0
  472. package/dist/data/ai/SpecRuntimeEditor/index.js +213 -0
  473. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -0
  474. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs +252 -0
  475. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs.map +1 -0
  476. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts +36 -0
  477. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts.map +1 -0
  478. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js +252 -0
  479. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js.map +1 -0
  480. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +214 -0
  481. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -0
  482. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +35 -0
  483. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -0
  484. package/dist/data/ai/SpecRuntimeEditor/presets.js +214 -0
  485. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -0
  486. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs +15 -0
  487. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -0
  488. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +13 -0
  489. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -0
  490. package/dist/data/ai/SpecRuntimeEditor/summaries.js +15 -0
  491. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -0
  492. package/dist/data/ai/SpecRuntimeEditor/types.cjs +74 -0
  493. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -0
  494. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +19 -0
  495. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -0
  496. package/dist/data/ai/SpecRuntimeEditor/types.js +74 -0
  497. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -0
  498. package/dist/data/ai/SpecRuntimeEditor/update.cjs +144 -0
  499. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -0
  500. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +28 -0
  501. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -0
  502. package/dist/data/ai/SpecRuntimeEditor/update.js +144 -0
  503. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -0
  504. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs +55 -0
  505. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs.map +1 -0
  506. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts +9 -0
  507. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts.map +1 -0
  508. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js +55 -0
  509. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js.map +1 -0
  510. package/dist/data/ai/SpecRuntimeEditor.model.cjs +398 -0
  511. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -0
  512. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +169 -0
  513. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -0
  514. package/dist/data/ai/SpecRuntimeEditor.model.js +398 -0
  515. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -0
  516. package/dist/data/ai/ToolPreferences.cjs +705 -165
  517. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  518. package/dist/data/ai/ToolPreferences.d.ts +29 -5
  519. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  520. package/dist/data/ai/ToolPreferences.js +707 -167
  521. package/dist/data/ai/ToolPreferences.js.map +1 -1
  522. package/dist/data/ai/ToolSchemaBrowser.cjs +549 -0
  523. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -0
  524. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -0
  525. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -0
  526. package/dist/data/ai/ToolSchemaBrowser.js +549 -0
  527. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -0
  528. package/dist/data/ai/agent-action-icons.cjs +78 -0
  529. package/dist/data/ai/agent-action-icons.cjs.map +1 -0
  530. package/dist/data/ai/agent-action-icons.d.ts +22 -0
  531. package/dist/data/ai/agent-action-icons.d.ts.map +1 -0
  532. package/dist/data/ai/agent-action-icons.js +78 -0
  533. package/dist/data/ai/agent-action-icons.js.map +1 -0
  534. package/dist/data/ai/index.d.ts +21 -6
  535. package/dist/data/ai/index.d.ts.map +1 -1
  536. package/dist/data/ai/model-capabilities.cjs +23 -0
  537. package/dist/data/ai/model-capabilities.cjs.map +1 -0
  538. package/dist/data/ai/model-capabilities.d.ts +9 -0
  539. package/dist/data/ai/model-capabilities.d.ts.map +1 -0
  540. package/dist/data/ai/model-capabilities.js +23 -0
  541. package/dist/data/ai/model-capabilities.js.map +1 -0
  542. package/dist/data/ai/runtime-mode.cjs +133 -0
  543. package/dist/data/ai/runtime-mode.cjs.map +1 -0
  544. package/dist/data/ai/runtime-mode.d.ts +31 -0
  545. package/dist/data/ai/runtime-mode.d.ts.map +1 -0
  546. package/dist/data/ai/runtime-mode.js +133 -0
  547. package/dist/data/ai/runtime-mode.js.map +1 -0
  548. package/dist/data/ai/session-categories.cjs +34 -0
  549. package/dist/data/ai/session-categories.cjs.map +1 -1
  550. package/dist/data/ai/session-categories.d.ts +2 -0
  551. package/dist/data/ai/session-categories.d.ts.map +1 -1
  552. package/dist/data/ai/session-categories.js +34 -0
  553. package/dist/data/ai/session-categories.js.map +1 -1
  554. package/dist/data/ai/session-cost.cjs +13 -0
  555. package/dist/data/ai/session-cost.cjs.map +1 -0
  556. package/dist/data/ai/session-cost.d.ts +8 -0
  557. package/dist/data/ai/session-cost.d.ts.map +1 -0
  558. package/dist/data/ai/session-cost.js +13 -0
  559. package/dist/data/ai/session-cost.js.map +1 -0
  560. package/dist/data/ai/tool-name.d.ts +10 -0
  561. package/dist/data/ai/tool-name.d.ts.map +1 -0
  562. package/dist/data/ai/use-session-scroll.cjs +96 -0
  563. package/dist/data/ai/use-session-scroll.cjs.map +1 -0
  564. package/dist/data/ai/use-session-scroll.d.ts +43 -0
  565. package/dist/data/ai/use-session-scroll.d.ts.map +1 -0
  566. package/dist/data/ai/use-session-scroll.js +96 -0
  567. package/dist/data/ai/use-session-scroll.js.map +1 -0
  568. package/dist/data/cells/TagList.cjs +4 -2
  569. package/dist/data/cells/TagList.cjs.map +1 -1
  570. package/dist/data/cells/TagList.d.ts +2 -1
  571. package/dist/data/cells/TagList.d.ts.map +1 -1
  572. package/dist/data/cells/TagList.js +4 -2
  573. package/dist/data/cells/TagList.js.map +1 -1
  574. package/dist/data/chat/Chat.cjs +49 -15
  575. package/dist/data/chat/Chat.cjs.map +1 -1
  576. package/dist/data/chat/Chat.d.ts +16 -2
  577. package/dist/data/chat/Chat.d.ts.map +1 -1
  578. package/dist/data/chat/Chat.js +49 -15
  579. package/dist/data/chat/Chat.js.map +1 -1
  580. package/dist/data/chat/ContextMeter.cjs +164 -0
  581. package/dist/data/chat/ContextMeter.cjs.map +1 -0
  582. package/dist/data/chat/ContextMeter.d.ts +50 -0
  583. package/dist/data/chat/ContextMeter.d.ts.map +1 -0
  584. package/dist/data/chat/ContextMeter.js +164 -0
  585. package/dist/data/chat/ContextMeter.js.map +1 -0
  586. package/dist/data/chat/ModelSelector.cjs +139 -10
  587. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  588. package/dist/data/chat/ModelSelector.d.ts +44 -3
  589. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  590. package/dist/data/chat/ModelSelector.js +141 -12
  591. package/dist/data/chat/ModelSelector.js.map +1 -1
  592. package/dist/data/chat/clickyOperationsToTools.cjs +83 -69
  593. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  594. package/dist/data/chat/clickyOperationsToTools.d.ts +3 -3
  595. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  596. package/dist/data/chat/clickyOperationsToTools.js +83 -69
  597. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  598. package/dist/data/chat/effort-icons.cjs +43 -0
  599. package/dist/data/chat/effort-icons.cjs.map +1 -0
  600. package/dist/data/chat/effort-icons.d.ts +10 -0
  601. package/dist/data/chat/effort-icons.d.ts.map +1 -0
  602. package/dist/data/chat/effort-icons.js +43 -0
  603. package/dist/data/chat/effort-icons.js.map +1 -0
  604. package/dist/data/chat/index.d.ts +3 -3
  605. package/dist/data/chat/index.d.ts.map +1 -1
  606. package/dist/data/chat/provider-icons.cjs +25 -6
  607. package/dist/data/chat/provider-icons.cjs.map +1 -1
  608. package/dist/data/chat/provider-icons.d.ts +3 -5
  609. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  610. package/dist/data/chat/provider-icons.js +25 -6
  611. package/dist/data/chat/provider-icons.js.map +1 -1
  612. package/dist/data/chat/types.cjs +42 -0
  613. package/dist/data/chat/types.cjs.map +1 -1
  614. package/dist/data/chat/types.d.ts +83 -19
  615. package/dist/data/chat/types.d.ts.map +1 -1
  616. package/dist/data/chat/types.js +42 -0
  617. package/dist/data/chat/types.js.map +1 -1
  618. package/dist/data/code-block-actions.cjs +101 -0
  619. package/dist/data/code-block-actions.cjs.map +1 -0
  620. package/dist/data/code-block-actions.d.ts +20 -0
  621. package/dist/data/code-block-actions.d.ts.map +1 -0
  622. package/dist/data/code-block-actions.js +101 -0
  623. package/dist/data/code-block-actions.js.map +1 -0
  624. package/dist/data/code-diff.cjs +106 -0
  625. package/dist/data/code-diff.cjs.map +1 -0
  626. package/dist/data/code-diff.d.ts +20 -0
  627. package/dist/data/code-diff.d.ts.map +1 -0
  628. package/dist/data/code-diff.js +106 -0
  629. package/dist/data/code-diff.js.map +1 -0
  630. package/dist/data/code-highlight.cjs +30 -0
  631. package/dist/data/code-highlight.cjs.map +1 -1
  632. package/dist/data/code-highlight.d.ts +8 -0
  633. package/dist/data/code-highlight.d.ts.map +1 -1
  634. package/dist/data/code-highlight.js +30 -0
  635. package/dist/data/code-highlight.js.map +1 -1
  636. package/dist/data/git/GitChangeList.cjs +410 -0
  637. package/dist/data/git/GitChangeList.cjs.map +1 -0
  638. package/dist/data/git/GitChangeList.d.ts +69 -0
  639. package/dist/data/git/GitChangeList.d.ts.map +1 -0
  640. package/dist/data/git/GitChangeList.js +410 -0
  641. package/dist/data/git/GitChangeList.js.map +1 -0
  642. package/dist/data/git/git-dates.cjs +37 -0
  643. package/dist/data/git/git-dates.cjs.map +1 -0
  644. package/dist/data/git/git-dates.d.ts +4 -0
  645. package/dist/data/git/git-dates.d.ts.map +1 -0
  646. package/dist/data/git/git-dates.js +37 -0
  647. package/dist/data/git/git-dates.js.map +1 -0
  648. package/dist/data/git/index.d.ts +3 -0
  649. package/dist/data/git/index.d.ts.map +1 -0
  650. package/dist/data/query-browser/QueryBrowser.cjs +323 -0
  651. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -0
  652. package/dist/data/query-browser/QueryBrowser.completion.cjs +99 -0
  653. package/dist/data/query-browser/QueryBrowser.completion.cjs.map +1 -0
  654. package/dist/data/query-browser/QueryBrowser.completion.d.ts +34 -0
  655. package/dist/data/query-browser/QueryBrowser.completion.d.ts.map +1 -0
  656. package/dist/data/query-browser/QueryBrowser.completion.js +99 -0
  657. package/dist/data/query-browser/QueryBrowser.completion.js.map +1 -0
  658. package/dist/data/query-browser/QueryBrowser.d.ts +42 -0
  659. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -0
  660. package/dist/data/query-browser/QueryBrowser.js +323 -0
  661. package/dist/data/query-browser/QueryBrowser.js.map +1 -0
  662. package/dist/data/query-browser/index.d.ts +3 -0
  663. package/dist/data/query-browser/index.d.ts.map +1 -0
  664. package/dist/data/test-runner/TestFilterBar.cjs +14 -9
  665. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  666. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  667. package/dist/data/test-runner/TestFilterBar.js +15 -10
  668. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  669. package/dist/data/test-runner/TestRunSummary.cjs +1 -11
  670. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  671. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  672. package/dist/data/test-runner/TestRunSummary.js +2 -12
  673. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  674. package/dist/data/test-runner/TestRunner.cjs +3 -12
  675. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  676. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  677. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  678. package/dist/data/test-runner/TestRunner.js +4 -13
  679. package/dist/data/test-runner/TestRunner.js.map +1 -1
  680. package/dist/data/test-runner/filterState.cjs +8 -0
  681. package/dist/data/test-runner/filterState.cjs.map +1 -1
  682. package/dist/data/test-runner/filterState.d.ts +2 -0
  683. package/dist/data/test-runner/filterState.d.ts.map +1 -1
  684. package/dist/data/test-runner/filterState.js +9 -1
  685. package/dist/data/test-runner/filterState.js.map +1 -1
  686. package/dist/data/test-runner/index.d.ts +2 -2
  687. package/dist/data/test-runner/index.d.ts.map +1 -1
  688. package/dist/data/test-runner/status.cjs +16 -0
  689. package/dist/data/test-runner/status.cjs.map +1 -1
  690. package/dist/data/test-runner/status.d.ts +9 -0
  691. package/dist/data/test-runner/status.d.ts.map +1 -1
  692. package/dist/data/test-runner/status.js +16 -0
  693. package/dist/data/test-runner/status.js.map +1 -1
  694. package/dist/data/version-info.cjs +3 -3
  695. package/dist/data/version-info.cjs.map +1 -1
  696. package/dist/data/version-info.js +3 -3
  697. package/dist/data/version-info.js.map +1 -1
  698. package/dist/data.cjs +191 -15
  699. package/dist/data.cjs.map +1 -1
  700. package/dist/data.d.ts +7 -2
  701. package/dist/data.d.ts.map +1 -1
  702. package/dist/data.js +180 -4
  703. package/dist/data.js.map +1 -1
  704. package/dist/icons/components/UiArrowFatUp.cjs +15 -0
  705. package/dist/icons/components/UiArrowFatUp.cjs.map +1 -0
  706. package/dist/icons/components/UiArrowFatUp.d.ts +15 -0
  707. package/dist/icons/components/UiArrowFatUp.d.ts.map +1 -0
  708. package/dist/icons/components/UiArrowFatUp.js +15 -0
  709. package/dist/icons/components/UiArrowFatUp.js.map +1 -0
  710. package/dist/icons/components/UiAsterisk.cjs +15 -0
  711. package/dist/icons/components/UiAsterisk.cjs.map +1 -0
  712. package/dist/icons/components/UiAsterisk.d.ts +15 -0
  713. package/dist/icons/components/UiAsterisk.d.ts.map +1 -0
  714. package/dist/icons/components/UiAsterisk.js +15 -0
  715. package/dist/icons/components/UiAsterisk.js.map +1 -0
  716. package/dist/icons/components/UiAtom.cjs +15 -0
  717. package/dist/icons/components/UiAtom.cjs.map +1 -0
  718. package/dist/icons/components/UiAtom.d.ts +15 -0
  719. package/dist/icons/components/UiAtom.d.ts.map +1 -0
  720. package/dist/icons/components/UiAtom.js +15 -0
  721. package/dist/icons/components/UiAtom.js.map +1 -0
  722. package/dist/icons/components/UiBatteryChargingVertical.cjs +15 -0
  723. package/dist/icons/components/UiBatteryChargingVertical.cjs.map +1 -0
  724. package/dist/icons/components/UiBatteryChargingVertical.d.ts +15 -0
  725. package/dist/icons/components/UiBatteryChargingVertical.d.ts.map +1 -0
  726. package/dist/icons/components/UiBatteryChargingVertical.js +15 -0
  727. package/dist/icons/components/UiBatteryChargingVertical.js.map +1 -0
  728. package/dist/icons/components/UiBatteryVerticalEmpty.cjs +15 -0
  729. package/dist/icons/components/UiBatteryVerticalEmpty.cjs.map +1 -0
  730. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts +15 -0
  731. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts.map +1 -0
  732. package/dist/icons/components/UiBatteryVerticalEmpty.js +15 -0
  733. package/dist/icons/components/UiBatteryVerticalEmpty.js.map +1 -0
  734. package/dist/icons/components/UiBatteryVerticalFull.cjs +15 -0
  735. package/dist/icons/components/UiBatteryVerticalFull.cjs.map +1 -0
  736. package/dist/icons/components/UiBatteryVerticalFull.d.ts +15 -0
  737. package/dist/icons/components/UiBatteryVerticalFull.d.ts.map +1 -0
  738. package/dist/icons/components/UiBatteryVerticalFull.js +15 -0
  739. package/dist/icons/components/UiBatteryVerticalFull.js.map +1 -0
  740. package/dist/icons/components/UiBatteryVerticalHigh.cjs +15 -0
  741. package/dist/icons/components/UiBatteryVerticalHigh.cjs.map +1 -0
  742. package/dist/icons/components/UiBatteryVerticalHigh.d.ts +15 -0
  743. package/dist/icons/components/UiBatteryVerticalHigh.d.ts.map +1 -0
  744. package/dist/icons/components/UiBatteryVerticalHigh.js +15 -0
  745. package/dist/icons/components/UiBatteryVerticalHigh.js.map +1 -0
  746. package/dist/icons/components/UiBatteryVerticalLow.cjs +15 -0
  747. package/dist/icons/components/UiBatteryVerticalLow.cjs.map +1 -0
  748. package/dist/icons/components/UiBatteryVerticalLow.d.ts +15 -0
  749. package/dist/icons/components/UiBatteryVerticalLow.d.ts.map +1 -0
  750. package/dist/icons/components/UiBatteryVerticalLow.js +15 -0
  751. package/dist/icons/components/UiBatteryVerticalLow.js.map +1 -0
  752. package/dist/icons/components/UiBatteryVerticalMedium.cjs +15 -0
  753. package/dist/icons/components/UiBatteryVerticalMedium.cjs.map +1 -0
  754. package/dist/icons/components/UiBatteryVerticalMedium.d.ts +15 -0
  755. package/dist/icons/components/UiBatteryVerticalMedium.d.ts.map +1 -0
  756. package/dist/icons/components/UiBatteryVerticalMedium.js +15 -0
  757. package/dist/icons/components/UiBatteryVerticalMedium.js.map +1 -0
  758. package/dist/icons/components/UiChatDots.cjs +15 -0
  759. package/dist/icons/components/UiChatDots.cjs.map +1 -0
  760. package/dist/icons/components/UiChatDots.d.ts +15 -0
  761. package/dist/icons/components/UiChatDots.d.ts.map +1 -0
  762. package/dist/icons/components/UiChatDots.js +15 -0
  763. package/dist/icons/components/UiChatDots.js.map +1 -0
  764. package/dist/icons/components/UiCoins.cjs +15 -0
  765. package/dist/icons/components/UiCoins.cjs.map +1 -0
  766. package/dist/icons/components/UiCoins.d.ts +15 -0
  767. package/dist/icons/components/UiCoins.d.ts.map +1 -0
  768. package/dist/icons/components/UiCoins.js +15 -0
  769. package/dist/icons/components/UiCoins.js.map +1 -0
  770. package/dist/icons/components/UiCompass.cjs +15 -0
  771. package/dist/icons/components/UiCompass.cjs.map +1 -0
  772. package/dist/icons/components/UiCompass.d.ts +15 -0
  773. package/dist/icons/components/UiCompass.d.ts.map +1 -0
  774. package/dist/icons/components/UiCompass.js +15 -0
  775. package/dist/icons/components/UiCompass.js.map +1 -0
  776. package/dist/icons/components/UiCurrencyDollar.cjs +15 -0
  777. package/dist/icons/components/UiCurrencyDollar.cjs.map +1 -0
  778. package/dist/icons/components/UiCurrencyDollar.d.ts +15 -0
  779. package/dist/icons/components/UiCurrencyDollar.d.ts.map +1 -0
  780. package/dist/icons/components/UiCurrencyDollar.js +15 -0
  781. package/dist/icons/components/UiCurrencyDollar.js.map +1 -0
  782. package/dist/icons/components/UiCursorClick.cjs +15 -0
  783. package/dist/icons/components/UiCursorClick.cjs.map +1 -0
  784. package/dist/icons/components/UiCursorClick.d.ts +15 -0
  785. package/dist/icons/components/UiCursorClick.d.ts.map +1 -0
  786. package/dist/icons/components/UiCursorClick.js +15 -0
  787. package/dist/icons/components/UiCursorClick.js.map +1 -0
  788. package/dist/icons/components/UiCursorText.cjs +15 -0
  789. package/dist/icons/components/UiCursorText.cjs.map +1 -0
  790. package/dist/icons/components/UiCursorText.d.ts +15 -0
  791. package/dist/icons/components/UiCursorText.d.ts.map +1 -0
  792. package/dist/icons/components/UiCursorText.js +15 -0
  793. package/dist/icons/components/UiCursorText.js.map +1 -0
  794. package/dist/icons/components/UiDebugContinue.cjs +10 -0
  795. package/dist/icons/components/UiDebugContinue.cjs.map +1 -0
  796. package/dist/icons/components/UiDebugContinue.d.ts +9 -0
  797. package/dist/icons/components/UiDebugContinue.d.ts.map +1 -0
  798. package/dist/icons/components/UiDebugContinue.js +10 -0
  799. package/dist/icons/components/UiDebugContinue.js.map +1 -0
  800. package/dist/icons/components/UiDebugStepInto.cjs +10 -0
  801. package/dist/icons/components/UiDebugStepInto.cjs.map +1 -0
  802. package/dist/icons/components/UiDebugStepInto.d.ts +9 -0
  803. package/dist/icons/components/UiDebugStepInto.d.ts.map +1 -0
  804. package/dist/icons/components/UiDebugStepInto.js +10 -0
  805. package/dist/icons/components/UiDebugStepInto.js.map +1 -0
  806. package/dist/icons/components/UiDebugStepOut.cjs +10 -0
  807. package/dist/icons/components/UiDebugStepOut.cjs.map +1 -0
  808. package/dist/icons/components/UiDebugStepOut.d.ts +9 -0
  809. package/dist/icons/components/UiDebugStepOut.d.ts.map +1 -0
  810. package/dist/icons/components/UiDebugStepOut.js +10 -0
  811. package/dist/icons/components/UiDebugStepOut.js.map +1 -0
  812. package/dist/icons/components/UiDebugStop.cjs +10 -0
  813. package/dist/icons/components/UiDebugStop.cjs.map +1 -0
  814. package/dist/icons/components/UiDebugStop.d.ts +9 -0
  815. package/dist/icons/components/UiDebugStop.d.ts.map +1 -0
  816. package/dist/icons/components/UiDebugStop.js +10 -0
  817. package/dist/icons/components/UiDebugStop.js.map +1 -0
  818. package/dist/icons/components/UiEllipsisBold.cjs +10 -0
  819. package/dist/icons/components/UiEllipsisBold.cjs.map +1 -0
  820. package/dist/icons/components/UiEllipsisBold.d.ts +9 -0
  821. package/dist/icons/components/UiEllipsisBold.d.ts.map +1 -0
  822. package/dist/icons/components/UiEllipsisBold.js +10 -0
  823. package/dist/icons/components/UiEllipsisBold.js.map +1 -0
  824. package/dist/icons/components/UiFastForwardCircle.cjs +15 -0
  825. package/dist/icons/components/UiFastForwardCircle.cjs.map +1 -0
  826. package/dist/icons/components/UiFastForwardCircle.d.ts +15 -0
  827. package/dist/icons/components/UiFastForwardCircle.d.ts.map +1 -0
  828. package/dist/icons/components/UiFastForwardCircle.js +15 -0
  829. package/dist/icons/components/UiFastForwardCircle.js.map +1 -0
  830. package/dist/icons/components/UiFilePlus.cjs +15 -0
  831. package/dist/icons/components/UiFilePlus.cjs.map +1 -0
  832. package/dist/icons/components/UiFilePlus.d.ts +15 -0
  833. package/dist/icons/components/UiFilePlus.d.ts.map +1 -0
  834. package/dist/icons/components/UiFilePlus.js +15 -0
  835. package/dist/icons/components/UiFilePlus.js.map +1 -0
  836. package/dist/icons/components/UiGavel.cjs +15 -0
  837. package/dist/icons/components/UiGavel.cjs.map +1 -0
  838. package/dist/icons/components/UiGavel.d.ts +15 -0
  839. package/dist/icons/components/UiGavel.d.ts.map +1 -0
  840. package/dist/icons/components/UiGavel.js +15 -0
  841. package/dist/icons/components/UiGavel.js.map +1 -0
  842. package/dist/icons/components/UiGearSix.cjs +15 -0
  843. package/dist/icons/components/UiGearSix.cjs.map +1 -0
  844. package/dist/icons/components/UiGearSix.d.ts +15 -0
  845. package/dist/icons/components/UiGearSix.d.ts.map +1 -0
  846. package/dist/icons/components/UiGearSix.js +15 -0
  847. package/dist/icons/components/UiGearSix.js.map +1 -0
  848. package/dist/icons/components/UiGitCommit.cjs +15 -0
  849. package/dist/icons/components/UiGitCommit.cjs.map +1 -0
  850. package/dist/icons/components/UiGitCommit.d.ts +15 -0
  851. package/dist/icons/components/UiGitCommit.d.ts.map +1 -0
  852. package/dist/icons/components/UiGitCommit.js +15 -0
  853. package/dist/icons/components/UiGitCommit.js.map +1 -0
  854. package/dist/icons/components/UiHandPalm.cjs +15 -0
  855. package/dist/icons/components/UiHandPalm.cjs.map +1 -0
  856. package/dist/icons/components/UiHandPalm.d.ts +15 -0
  857. package/dist/icons/components/UiHandPalm.d.ts.map +1 -0
  858. package/dist/icons/components/UiHandPalm.js +15 -0
  859. package/dist/icons/components/UiHandPalm.js.map +1 -0
  860. package/dist/icons/components/UiKeyboard.cjs +15 -0
  861. package/dist/icons/components/UiKeyboard.cjs.map +1 -0
  862. package/dist/icons/components/UiKeyboard.d.ts +15 -0
  863. package/dist/icons/components/UiKeyboard.d.ts.map +1 -0
  864. package/dist/icons/components/UiKeyboard.js +15 -0
  865. package/dist/icons/components/UiKeyboard.js.map +1 -0
  866. package/dist/icons/components/UiListChecks.cjs +15 -0
  867. package/dist/icons/components/UiListChecks.cjs.map +1 -0
  868. package/dist/icons/components/UiListChecks.d.ts +15 -0
  869. package/dist/icons/components/UiListChecks.d.ts.map +1 -0
  870. package/dist/icons/components/UiListChecks.js +15 -0
  871. package/dist/icons/components/UiListChecks.js.map +1 -0
  872. package/dist/icons/components/UiLogoAnthropic.cjs +10 -0
  873. package/dist/icons/components/UiLogoAnthropic.cjs.map +1 -0
  874. package/dist/icons/components/UiLogoAnthropic.d.ts +9 -0
  875. package/dist/icons/components/UiLogoAnthropic.d.ts.map +1 -0
  876. package/dist/icons/components/UiLogoAnthropic.js +10 -0
  877. package/dist/icons/components/UiLogoAnthropic.js.map +1 -0
  878. package/dist/icons/components/UiLogoClaude.cjs +10 -0
  879. package/dist/icons/components/UiLogoClaude.cjs.map +1 -0
  880. package/dist/icons/components/UiLogoClaude.d.ts +9 -0
  881. package/dist/icons/components/UiLogoClaude.d.ts.map +1 -0
  882. package/dist/icons/components/UiLogoClaude.js +10 -0
  883. package/dist/icons/components/UiLogoClaude.js.map +1 -0
  884. package/dist/icons/components/UiLogoDeepseek.cjs +10 -0
  885. package/dist/icons/components/UiLogoDeepseek.cjs.map +1 -0
  886. package/dist/icons/components/UiLogoDeepseek.d.ts +9 -0
  887. package/dist/icons/components/UiLogoDeepseek.d.ts.map +1 -0
  888. package/dist/icons/components/UiLogoDeepseek.js +10 -0
  889. package/dist/icons/components/UiLogoDeepseek.js.map +1 -0
  890. package/dist/icons/components/UiLogoGemini.cjs +10 -0
  891. package/dist/icons/components/UiLogoGemini.cjs.map +1 -0
  892. package/dist/icons/components/UiLogoGemini.d.ts +9 -0
  893. package/dist/icons/components/UiLogoGemini.d.ts.map +1 -0
  894. package/dist/icons/components/UiLogoGemini.js +10 -0
  895. package/dist/icons/components/UiLogoGemini.js.map +1 -0
  896. package/dist/icons/components/UiLogoGoogle.cjs +10 -0
  897. package/dist/icons/components/UiLogoGoogle.cjs.map +1 -0
  898. package/dist/icons/components/UiLogoGoogle.d.ts +9 -0
  899. package/dist/icons/components/UiLogoGoogle.d.ts.map +1 -0
  900. package/dist/icons/components/UiLogoGoogle.js +10 -0
  901. package/dist/icons/components/UiLogoGoogle.js.map +1 -0
  902. package/dist/icons/components/UiLogoHuggingface.cjs +10 -0
  903. package/dist/icons/components/UiLogoHuggingface.cjs.map +1 -0
  904. package/dist/icons/components/UiLogoHuggingface.d.ts +9 -0
  905. package/dist/icons/components/UiLogoHuggingface.d.ts.map +1 -0
  906. package/dist/icons/components/UiLogoHuggingface.js +10 -0
  907. package/dist/icons/components/UiLogoHuggingface.js.map +1 -0
  908. package/dist/icons/components/UiLogoMeta.cjs +10 -0
  909. package/dist/icons/components/UiLogoMeta.cjs.map +1 -0
  910. package/dist/icons/components/UiLogoMeta.d.ts +9 -0
  911. package/dist/icons/components/UiLogoMeta.d.ts.map +1 -0
  912. package/dist/icons/components/UiLogoMeta.js +10 -0
  913. package/dist/icons/components/UiLogoMeta.js.map +1 -0
  914. package/dist/icons/components/UiLogoMistral.cjs +10 -0
  915. package/dist/icons/components/UiLogoMistral.cjs.map +1 -0
  916. package/dist/icons/components/UiLogoMistral.d.ts +9 -0
  917. package/dist/icons/components/UiLogoMistral.d.ts.map +1 -0
  918. package/dist/icons/components/UiLogoMistral.js +10 -0
  919. package/dist/icons/components/UiLogoMistral.js.map +1 -0
  920. package/dist/icons/components/UiLogoOllama.cjs +10 -0
  921. package/dist/icons/components/UiLogoOllama.cjs.map +1 -0
  922. package/dist/icons/components/UiLogoOllama.d.ts +9 -0
  923. package/dist/icons/components/UiLogoOllama.d.ts.map +1 -0
  924. package/dist/icons/components/UiLogoOllama.js +10 -0
  925. package/dist/icons/components/UiLogoOllama.js.map +1 -0
  926. package/dist/icons/components/UiLogoOpenai.cjs +10 -0
  927. package/dist/icons/components/UiLogoOpenai.cjs.map +1 -0
  928. package/dist/icons/components/UiLogoOpenai.d.ts +9 -0
  929. package/dist/icons/components/UiLogoOpenai.d.ts.map +1 -0
  930. package/dist/icons/components/UiLogoOpenai.js +10 -0
  931. package/dist/icons/components/UiLogoOpenai.js.map +1 -0
  932. package/dist/icons/components/UiLogoPerplexity.cjs +10 -0
  933. package/dist/icons/components/UiLogoPerplexity.cjs.map +1 -0
  934. package/dist/icons/components/UiLogoPerplexity.d.ts +9 -0
  935. package/dist/icons/components/UiLogoPerplexity.d.ts.map +1 -0
  936. package/dist/icons/components/UiLogoPerplexity.js +10 -0
  937. package/dist/icons/components/UiLogoPerplexity.js.map +1 -0
  938. package/dist/icons/components/UiPalette.cjs +15 -0
  939. package/dist/icons/components/UiPalette.cjs.map +1 -0
  940. package/dist/icons/components/UiPalette.d.ts +15 -0
  941. package/dist/icons/components/UiPalette.d.ts.map +1 -0
  942. package/dist/icons/components/UiPalette.js +15 -0
  943. package/dist/icons/components/UiPalette.js.map +1 -0
  944. package/dist/icons/components/UiPauseCircle.cjs +15 -0
  945. package/dist/icons/components/UiPauseCircle.cjs.map +1 -0
  946. package/dist/icons/components/UiPauseCircle.d.ts +15 -0
  947. package/dist/icons/components/UiPauseCircle.d.ts.map +1 -0
  948. package/dist/icons/components/UiPauseCircle.js +15 -0
  949. package/dist/icons/components/UiPauseCircle.js.map +1 -0
  950. package/dist/icons/components/UiPencilSimpleLine.cjs +15 -0
  951. package/dist/icons/components/UiPencilSimpleLine.cjs.map +1 -0
  952. package/dist/icons/components/UiPencilSimpleLine.d.ts +15 -0
  953. package/dist/icons/components/UiPencilSimpleLine.d.ts.map +1 -0
  954. package/dist/icons/components/UiPencilSimpleLine.js +15 -0
  955. package/dist/icons/components/UiPencilSimpleLine.js.map +1 -0
  956. package/dist/icons/components/UiPlugsConnected.cjs +15 -0
  957. package/dist/icons/components/UiPlugsConnected.cjs.map +1 -0
  958. package/dist/icons/components/UiPlugsConnected.d.ts +15 -0
  959. package/dist/icons/components/UiPlugsConnected.d.ts.map +1 -0
  960. package/dist/icons/components/UiPlugsConnected.js +15 -0
  961. package/dist/icons/components/UiPlugsConnected.js.map +1 -0
  962. package/dist/icons/components/UiProhibit.cjs +15 -0
  963. package/dist/icons/components/UiProhibit.cjs.map +1 -0
  964. package/dist/icons/components/UiProhibit.d.ts +15 -0
  965. package/dist/icons/components/UiProhibit.d.ts.map +1 -0
  966. package/dist/icons/components/UiProhibit.js +15 -0
  967. package/dist/icons/components/UiProhibit.js.map +1 -0
  968. package/dist/icons/components/UiRepeat.cjs +15 -0
  969. package/dist/icons/components/UiRepeat.cjs.map +1 -0
  970. package/dist/icons/components/UiRepeat.d.ts +15 -0
  971. package/dist/icons/components/UiRepeat.d.ts.map +1 -0
  972. package/dist/icons/components/UiRepeat.js +15 -0
  973. package/dist/icons/components/UiRepeat.js.map +1 -0
  974. package/dist/icons/components/UiScan.cjs +15 -0
  975. package/dist/icons/components/UiScan.cjs.map +1 -0
  976. package/dist/icons/components/UiScan.d.ts +15 -0
  977. package/dist/icons/components/UiScan.d.ts.map +1 -0
  978. package/dist/icons/components/UiScan.js +15 -0
  979. package/dist/icons/components/UiScan.js.map +1 -0
  980. package/dist/icons/components/UiScroll.cjs +15 -0
  981. package/dist/icons/components/UiScroll.cjs.map +1 -0
  982. package/dist/icons/components/UiScroll.d.ts +15 -0
  983. package/dist/icons/components/UiScroll.d.ts.map +1 -0
  984. package/dist/icons/components/UiScroll.js +15 -0
  985. package/dist/icons/components/UiScroll.js.map +1 -0
  986. package/dist/icons/components/UiShieldSlash.cjs +15 -0
  987. package/dist/icons/components/UiShieldSlash.cjs.map +1 -0
  988. package/dist/icons/components/UiShieldSlash.d.ts +15 -0
  989. package/dist/icons/components/UiShieldSlash.d.ts.map +1 -0
  990. package/dist/icons/components/UiShieldSlash.js +15 -0
  991. package/dist/icons/components/UiShieldSlash.js.map +1 -0
  992. package/dist/icons/components/UiStack.cjs +19 -0
  993. package/dist/icons/components/UiStack.cjs.map +1 -0
  994. package/dist/icons/components/UiStack.d.ts +15 -0
  995. package/dist/icons/components/UiStack.d.ts.map +1 -0
  996. package/dist/icons/components/UiStack.js +19 -0
  997. package/dist/icons/components/UiStack.js.map +1 -0
  998. package/dist/icons/components/UiStrategy.cjs +15 -0
  999. package/dist/icons/components/UiStrategy.cjs.map +1 -0
  1000. package/dist/icons/components/UiStrategy.d.ts +15 -0
  1001. package/dist/icons/components/UiStrategy.d.ts.map +1 -0
  1002. package/dist/icons/components/UiStrategy.js +15 -0
  1003. package/dist/icons/components/UiStrategy.js.map +1 -0
  1004. package/dist/icons/components/UiThermometer.cjs +15 -0
  1005. package/dist/icons/components/UiThermometer.cjs.map +1 -0
  1006. package/dist/icons/components/UiThermometer.d.ts +15 -0
  1007. package/dist/icons/components/UiThermometer.d.ts.map +1 -0
  1008. package/dist/icons/components/UiThermometer.js +15 -0
  1009. package/dist/icons/components/UiThermometer.js.map +1 -0
  1010. package/dist/icons/components/UiTimer.cjs +15 -0
  1011. package/dist/icons/components/UiTimer.cjs.map +1 -0
  1012. package/dist/icons/components/UiTimer.d.ts +15 -0
  1013. package/dist/icons/components/UiTimer.d.ts.map +1 -0
  1014. package/dist/icons/components/UiTimer.js +15 -0
  1015. package/dist/icons/components/UiTimer.js.map +1 -0
  1016. package/dist/icons/index.d.ts +88 -0
  1017. package/dist/icons/index.d.ts.map +1 -1
  1018. package/dist/icons.cjs +140 -0
  1019. package/dist/icons.cjs.map +1 -1
  1020. package/dist/icons.js +140 -0
  1021. package/dist/icons.js.map +1 -1
  1022. package/dist/index.cjs +213 -16
  1023. package/dist/index.cjs.map +1 -1
  1024. package/dist/index.js +204 -7
  1025. package/dist/index.js.map +1 -1
  1026. package/dist/layout/Workspace.cjs +191 -0
  1027. package/dist/layout/Workspace.cjs.map +1 -0
  1028. package/dist/layout/Workspace.d.ts +17 -0
  1029. package/dist/layout/Workspace.d.ts.map +1 -0
  1030. package/dist/layout/Workspace.js +191 -0
  1031. package/dist/layout/Workspace.js.map +1 -0
  1032. package/dist/layout/Workspace.model.cjs +142 -0
  1033. package/dist/layout/Workspace.model.cjs.map +1 -0
  1034. package/dist/layout/Workspace.model.d.ts +43 -0
  1035. package/dist/layout/Workspace.model.d.ts.map +1 -0
  1036. package/dist/layout/Workspace.model.js +142 -0
  1037. package/dist/layout/Workspace.model.js.map +1 -0
  1038. package/dist/layout/Workspace.regions.cjs +305 -0
  1039. package/dist/layout/Workspace.regions.cjs.map +1 -0
  1040. package/dist/layout/Workspace.regions.d.ts +17 -0
  1041. package/dist/layout/Workspace.regions.d.ts.map +1 -0
  1042. package/dist/layout/Workspace.regions.js +305 -0
  1043. package/dist/layout/Workspace.regions.js.map +1 -0
  1044. package/dist/lib/tokens.cjs +14 -0
  1045. package/dist/lib/tokens.cjs.map +1 -0
  1046. package/dist/lib/tokens.d.ts +5 -0
  1047. package/dist/lib/tokens.d.ts.map +1 -0
  1048. package/dist/lib/tokens.js +14 -0
  1049. package/dist/lib/tokens.js.map +1 -0
  1050. package/dist/monaco/MonacoEditor.cjs +69 -0
  1051. package/dist/monaco/MonacoEditor.cjs.map +1 -0
  1052. package/dist/monaco/MonacoEditor.d.ts +5 -0
  1053. package/dist/monaco/MonacoEditor.d.ts.map +1 -0
  1054. package/dist/monaco/MonacoEditor.js +52 -0
  1055. package/dist/monaco/MonacoEditor.js.map +1 -0
  1056. package/dist/monaco/MonacoProvider.cjs +22 -0
  1057. package/dist/monaco/MonacoProvider.cjs.map +1 -0
  1058. package/dist/monaco/MonacoProvider.d.ts +3 -0
  1059. package/dist/monaco/MonacoProvider.d.ts.map +1 -0
  1060. package/dist/monaco/MonacoProvider.js +22 -0
  1061. package/dist/monaco/MonacoProvider.js.map +1 -0
  1062. package/dist/monaco/MonacoSchemaEditor.cjs +108 -0
  1063. package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -0
  1064. package/dist/monaco/MonacoSchemaEditor.d.ts +4 -0
  1065. package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -0
  1066. package/dist/monaco/MonacoSchemaEditor.js +108 -0
  1067. package/dist/monaco/MonacoSchemaEditor.js.map +1 -0
  1068. package/dist/monaco/schema-normalizer.cjs +38 -0
  1069. package/dist/monaco/schema-normalizer.cjs.map +1 -0
  1070. package/dist/monaco/schema-normalizer.d.ts +7 -0
  1071. package/dist/monaco/schema-normalizer.d.ts.map +1 -0
  1072. package/dist/monaco/schema-normalizer.js +38 -0
  1073. package/dist/monaco/schema-normalizer.js.map +1 -0
  1074. package/dist/monaco/schema-registry.cjs +67 -0
  1075. package/dist/monaco/schema-registry.cjs.map +1 -0
  1076. package/dist/monaco/schema-registry.d.ts +3 -0
  1077. package/dist/monaco/schema-registry.d.ts.map +1 -0
  1078. package/dist/monaco/schema-registry.js +67 -0
  1079. package/dist/monaco/schema-registry.js.map +1 -0
  1080. package/dist/monaco/types.d.ts +31 -0
  1081. package/dist/monaco/types.d.ts.map +1 -0
  1082. package/dist/monaco/use-monaco-worker.cjs +10 -0
  1083. package/dist/monaco/use-monaco-worker.cjs.map +1 -0
  1084. package/dist/monaco/use-monaco-worker.d.ts +4 -0
  1085. package/dist/monaco/use-monaco-worker.d.ts.map +1 -0
  1086. package/dist/monaco/use-monaco-worker.js +10 -0
  1087. package/dist/monaco/use-monaco-worker.js.map +1 -0
  1088. package/dist/monaco-schema.cjs +5 -0
  1089. package/dist/monaco-schema.cjs.map +1 -0
  1090. package/dist/monaco-schema.d.ts +3 -0
  1091. package/dist/monaco-schema.d.ts.map +1 -0
  1092. package/dist/monaco-schema.js +5 -0
  1093. package/dist/monaco-schema.js.map +1 -0
  1094. package/dist/monaco.cjs +11 -0
  1095. package/dist/monaco.cjs.map +1 -0
  1096. package/dist/monaco.d.ts +6 -0
  1097. package/dist/monaco.d.ts.map +1 -0
  1098. package/dist/monaco.js +11 -0
  1099. package/dist/monaco.js.map +1 -0
  1100. package/dist/overlay/CellActions.cjs +183 -0
  1101. package/dist/overlay/CellActions.cjs.map +1 -0
  1102. package/dist/overlay/CellActions.d.ts +18 -0
  1103. package/dist/overlay/CellActions.d.ts.map +1 -0
  1104. package/dist/overlay/CellActions.js +183 -0
  1105. package/dist/overlay/CellActions.js.map +1 -0
  1106. package/dist/overlay/DropdownMenu.cjs +50 -59
  1107. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  1108. package/dist/overlay/DropdownMenu.d.ts +21 -2
  1109. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  1110. package/dist/overlay/DropdownMenu.js +38 -47
  1111. package/dist/overlay/DropdownMenu.js.map +1 -1
  1112. package/dist/overlay/DropdownMenuSubmenu.cjs +210 -0
  1113. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -0
  1114. package/dist/overlay/DropdownMenuSubmenu.d.ts +12 -0
  1115. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -0
  1116. package/dist/overlay/DropdownMenuSubmenu.js +210 -0
  1117. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -0
  1118. package/dist/overlay/Modal.cjs +14 -2
  1119. package/dist/overlay/Modal.cjs.map +1 -1
  1120. package/dist/overlay/Modal.d.ts +9 -2
  1121. package/dist/overlay/Modal.d.ts.map +1 -1
  1122. package/dist/overlay/Modal.js +14 -2
  1123. package/dist/overlay/Modal.js.map +1 -1
  1124. package/dist/overlay/dropdownMenuContext.cjs +16 -0
  1125. package/dist/overlay/dropdownMenuContext.cjs.map +1 -0
  1126. package/dist/overlay/dropdownMenuContext.d.ts +16 -0
  1127. package/dist/overlay/dropdownMenuContext.d.ts.map +1 -0
  1128. package/dist/overlay/dropdownMenuContext.js +16 -0
  1129. package/dist/overlay/dropdownMenuContext.js.map +1 -0
  1130. package/dist/rpc/CommandOutput.cjs +28 -9
  1131. package/dist/rpc/CommandOutput.cjs.map +1 -1
  1132. package/dist/rpc/CommandOutput.d.ts +4 -2
  1133. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  1134. package/dist/rpc/CommandOutput.js +28 -9
  1135. package/dist/rpc/CommandOutput.js.map +1 -1
  1136. package/dist/rpc/EntityExplorerApp.cjs +8 -1
  1137. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  1138. package/dist/rpc/EntityExplorerApp.d.ts +9 -1
  1139. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  1140. package/dist/rpc/EntityExplorerApp.js +8 -1
  1141. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  1142. package/dist/rpc/OperationActionBar.cjs +63 -41
  1143. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  1144. package/dist/rpc/OperationActionBar.d.ts +2 -1
  1145. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  1146. package/dist/rpc/OperationActionBar.js +63 -41
  1147. package/dist/rpc/OperationActionBar.js.map +1 -1
  1148. package/dist/rpc/OperationCatalog.cjs +111 -80
  1149. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  1150. package/dist/rpc/OperationCatalog.d.ts +2 -1
  1151. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  1152. package/dist/rpc/OperationCatalog.js +112 -81
  1153. package/dist/rpc/OperationCatalog.js.map +1 -1
  1154. package/dist/rpc/OperationCommandPage.cjs +2 -0
  1155. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  1156. package/dist/rpc/OperationCommandPage.d.ts +3 -2
  1157. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  1158. package/dist/rpc/OperationCommandPage.js +2 -0
  1159. package/dist/rpc/OperationCommandPage.js.map +1 -1
  1160. package/dist/rpc/OperationEntityContextPicker.cjs +448 -0
  1161. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -0
  1162. package/dist/rpc/OperationEntityContextPicker.d.ts +28 -0
  1163. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -0
  1164. package/dist/rpc/OperationEntityContextPicker.js +448 -0
  1165. package/dist/rpc/OperationEntityContextPicker.js.map +1 -0
  1166. package/dist/rpc/OperationEntityContextPicker.model.cjs +60 -0
  1167. package/dist/rpc/OperationEntityContextPicker.model.cjs.map +1 -0
  1168. package/dist/rpc/OperationEntityContextPicker.model.d.ts +7 -0
  1169. package/dist/rpc/OperationEntityContextPicker.model.d.ts.map +1 -0
  1170. package/dist/rpc/OperationEntityContextPicker.model.js +60 -0
  1171. package/dist/rpc/OperationEntityContextPicker.model.js.map +1 -0
  1172. package/dist/rpc/OperationEntityPage.cjs +47 -22
  1173. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  1174. package/dist/rpc/OperationEntityPage.d.ts +32 -2
  1175. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  1176. package/dist/rpc/OperationEntityPage.js +47 -22
  1177. package/dist/rpc/OperationEntityPage.js.map +1 -1
  1178. package/dist/rpc/OperationResultView.cjs +4 -2
  1179. package/dist/rpc/OperationResultView.cjs.map +1 -1
  1180. package/dist/rpc/OperationResultView.d.ts +3 -2
  1181. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  1182. package/dist/rpc/OperationResultView.js +4 -2
  1183. package/dist/rpc/OperationResultView.js.map +1 -1
  1184. package/dist/rpc/SchemaActionForm.cjs +151 -17
  1185. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  1186. package/dist/rpc/SchemaActionForm.d.ts +7 -1
  1187. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  1188. package/dist/rpc/SchemaActionForm.js +152 -18
  1189. package/dist/rpc/SchemaActionForm.js.map +1 -1
  1190. package/dist/rpc/types.cjs.map +1 -1
  1191. package/dist/rpc/types.d.ts +24 -0
  1192. package/dist/rpc/types.d.ts.map +1 -1
  1193. package/dist/rpc/types.js.map +1 -1
  1194. package/dist/rpc.cjs +6 -0
  1195. package/dist/rpc.cjs.map +1 -1
  1196. package/dist/rpc.d.ts +5 -3
  1197. package/dist/rpc.d.ts.map +1 -1
  1198. package/dist/rpc.js +6 -0
  1199. package/dist/rpc.js.map +1 -1
  1200. package/dist/styles.css +1 -1
  1201. package/dist/tailwind-preset.cjs +8 -0
  1202. package/dist/tailwind-preset.cjs.map +1 -1
  1203. package/dist/tailwind-preset.d.ts.map +1 -1
  1204. package/dist/tailwind-preset.js +8 -0
  1205. package/dist/tailwind-preset.js.map +1 -1
  1206. package/oxlint-plugins/README.md +82 -19
  1207. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +5 -50
  1208. package/oxlint-plugins/clicky-ui-no-direct-z-index.js +134 -0
  1209. package/oxlint-plugins/clicky-ui.js +3 -0
  1210. package/package.json +26 -3
  1211. package/dist/data/chat/ContextUsage.cjs +0 -99
  1212. package/dist/data/chat/ContextUsage.cjs.map +0 -1
  1213. package/dist/data/chat/ContextUsage.d.ts +0 -19
  1214. package/dist/data/chat/ContextUsage.d.ts.map +0 -1
  1215. package/dist/data/chat/ContextUsage.js +0 -99
  1216. package/dist/data/chat/ContextUsage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunSummary.cjs","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { ProgressBar, type ProgressSegment } from \"../ProgressBar\";\nimport { cn } from \"../../lib/utils\";\nimport { UiCheck, UiClock, UiLoader } from \"../../icons\";\nimport type { RunMeta, Test } from \"./types\";\nimport { sumNonTaskTests, type StatusCounts } from \"./status\";\n\nexport type TestRunSummaryProps = {\n tests: Test[];\n /** Run start, epoch ms (host-provided). */\n startTime?: number | null | undefined;\n /** Run end, epoch ms; falls back to `now` while running. */\n endTime?: number | null | undefined;\n done: boolean;\n /** Injected clock (epoch ms) so the component stays pure. */\n now?: number | undefined;\n runMeta?: RunMeta | undefined;\n /**\n * Single-line layout for embedding in a host header (e.g. a dialog header):\n * counts + a short inline progress bar on one row, instead of the default\n * two-line right-aligned column.\n */\n compact?: boolean | undefined;\n className?: string | undefined;\n};\n\nfunction totals(tests: Test[]): StatusCounts {\n return tests.reduce(\n (acc, t) => {\n const s = sumNonTaskTests(t);\n (Object.keys(acc) as (keyof StatusCounts)[]).forEach((k) => (acc[k] += s[k]));\n return acc;\n },\n { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 },\n );\n}\n\nfunction pct(part: number, total: number): number {\n return total > 0 ? Math.round((part / total) * 100) : 0;\n}\n\n/**\n * Header summary: per-status counts, elapsed time, a stacked progress bar, and\n * pass/fail/pending gauge cards. Pure — elapsed time comes from injected `now`.\n */\nexport function TestRunSummary({\n tests,\n startTime,\n endTime,\n done,\n now,\n runMeta,\n compact = false,\n className,\n}: TestRunSummaryProps) {\n const t = totals(tests);\n const clock = now ?? 0;\n const end = done && endTime ? endTime : clock;\n const elapsed = startTime && end >= startTime ? `${((end - startTime) / 1000).toFixed(1)}s` : \"\";\n\n const segments: ProgressSegment[] = [\n { count: t.passed, color: \"bg-green-500\", label: \"passed\" },\n { count: t.skipped, color: \"bg-yellow-400\", label: \"skipped\" },\n { count: t.failed, color: \"bg-red-500\", label: \"failed\" },\n { count: t.timedout, color: \"bg-amber-500\", label: \"timed out\" },\n { count: t.running, color: \"bg-blue-400\", label: \"running\" },\n { count: t.pending, color: \"bg-muted-foreground/40\", label: \"queued\" },\n ];\n\n // Each status appears once, as a coloured count chip — no separate gauge-card\n // row repeating the same numbers as percentages.\n const chips: { n: number; label: string; tone: string }[] = [\n { n: t.passed, label: \"passed\", tone: \"text-green-600 dark:text-green-400\" },\n { n: t.failed, label: \"failed\", tone: \"text-red-600 dark:text-red-400\" },\n { n: t.timedout, label: \"timed out\", tone: \"text-amber-600 dark:text-amber-400\" },\n { n: t.skipped, label: \"skipped\", tone: \"text-yellow-700 dark:text-yellow-500\" },\n { n: t.running, label: \"running\", tone: \"text-blue-600 dark:text-blue-400\" },\n { n: t.pending, label: \"queued\", tone: \"text-muted-foreground\" },\n ];\n\n if (compact) {\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-x-3 gap-y-0.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {t.total > 0 && (\n <span className=\"inline-flex items-center gap-1.5\">\n <ProgressBar className=\"w-24\" segments={segments} total={t.total} height=\"h-1.5\" />\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex min-w-[18rem] flex-col items-end gap-1.5\", className)}>\n <div className=\"flex flex-wrap items-center justify-end gap-x-3 gap-y-0.5 text-sm text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n\n {t.total > 0 && (\n <div className=\"flex w-72 items-center gap-2\">\n <ProgressBar className=\"flex-1\" segments={segments} total={t.total} height=\"h-2\" />\n <span className=\"shrink-0 text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":["sumNonTaskTests","jsxs","cn","jsx","Icon","UiClock","ProgressBar","UiCheck","UiLoader"],"mappings":";;;;;;;;;;AA0BA,SAAS,OAAO,OAA6B;AAC3C,SAAO,MAAM;AAAA,IACX,CAAC,KAAK,MAAM;AACV,YAAM,IAAIA,OAAAA,gBAAgB,CAAC;AAC1B,aAAO,KAAK,GAAG,EAA6B,QAAQ,CAAC,MAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAE;AAC5E,aAAO;AAAA,IACT;AAAA,IACA,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,EAAA;AAAA,EAAE;AAEjG;AAEA,SAAS,IAAI,MAAc,OAAuB;AAChD,SAAO,QAAQ,IAAI,KAAK,MAAO,OAAO,QAAS,GAAG,IAAI;AACxD;AAMO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAAwB;AACtB,QAAM,IAAI,OAAO,KAAK;AACtB,QAAM,QAAQ,OAAO;AACrB,QAAM,MAAM,QAAQ,UAAU,UAAU;AACxC,QAAM,UAAU,aAAa,OAAO,YAAY,KAAK,MAAM,aAAa,KAAM,QAAQ,CAAC,CAAC,MAAM;AAE9F,QAAM,WAA8B;AAAA,IAClC,EAAE,OAAO,EAAE,QAAQ,OAAO,gBAAgB,OAAO,SAAA;AAAA,IACjD,EAAE,OAAO,EAAE,SAAS,OAAO,iBAAiB,OAAO,UAAA;AAAA,IACnD,EAAE,OAAO,EAAE,QAAQ,OAAO,cAAc,OAAO,SAAA;AAAA,IAC/C,EAAE,OAAO,EAAE,UAAU,OAAO,gBAAgB,OAAO,YAAA;AAAA,IACnD,EAAE,OAAO,EAAE,SAAS,OAAO,eAAe,OAAO,UAAA;AAAA,IACjD,EAAE,OAAO,EAAE,SAAS,OAAO,0BAA0B,OAAO,SAAA;AAAA,EAAS;AAKvE,QAAM,QAAsD;AAAA,IAC1D,EAAE,GAAG,EAAE,QAAQ,OAAO,UAAU,MAAM,qCAAA;AAAA,IACtC,EAAE,GAAG,EAAE,QAAQ,OAAO,UAAU,MAAM,iCAAA;AAAA,IACtC,EAAE,GAAG,EAAE,UAAU,OAAO,aAAa,MAAM,qCAAA;AAAA,IAC3C,EAAE,GAAG,EAAE,SAAS,OAAO,WAAW,MAAM,uCAAA;AAAA,IACxC,EAAE,GAAG,EAAE,SAAS,OAAO,WAAW,MAAM,mCAAA;AAAA,IACxC,EAAE,GAAG,EAAE,SAAS,OAAO,UAAU,MAAM,wBAAA;AAAA,EAAwB;AAGjE,MAAI,SAAS;AACX,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,MAAAA;AAAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAGF,UAAA;AAAA,UAAAD,2BAAAA,KAAC,QAAA,EAAK,WAAU,+BACb,UAAA;AAAA,YAAA,EAAE;AAAA,YAAM;AAAA,aACR,mCAAS,UAAS,UAAU,aAAa,QAAQ,QAAQ,KAAK;AAAA,UAAA,GACjE;AAAA,UACC,MACE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EACrB,IAAI,CAAC,MACJA,2BAAAA,KAAC,QAAA,EAAmB,WAAW,EAAE,MAC9B,UAAA;AAAA,YAAA,EAAE;AAAA,YAAE;AAAA,YAAE,EAAE;AAAA,UAAA,KADA,EAAE,KAEb,CACD;AAAA,UACF,WACCA,2BAAAA,KAAC,QAAA,EAAK,WAAU,kCACd,UAAA;AAAA,YAAAE,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMC,QAAAA,SAAS,WAAU,WAAU;AAAA,YACxC;AAAA,UAAA,GACH;AAAA,UAED,EAAE,QAAQ,KACTJ,2BAAAA,KAAC,QAAA,EAAK,WAAU,oCACd,UAAA;AAAA,YAAAE,2BAAAA,IAACG,YAAAA,aAAA,EAAY,WAAU,QAAO,UAAoB,OAAO,EAAE,OAAO,QAAO,QAAA,CAAQ;AAAA,YACjFL,2BAAAA,KAAC,QAAA,EAAK,WAAU,0DACb,UAAA;AAAA,cAAA,IAAI,EAAE,QAAQ,EAAE,KAAK;AAAA,cAAE;AAAA,YAAA,EAAA,CAC1B;AAAA,UAAA,GACF;AAAA,UAED,OACCE,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMG,QAAAA,SAAS,WAAU,qCAAA,CAAqC,IAEpEJ,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMI,SAAAA,UAAU,WAAU,6BAAA,CAA6B;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIrE;AAEA,yCACG,OAAA,EAAI,WAAWN,MAAAA,GAAG,iDAAiD,SAAS,GAC3E,UAAA;AAAA,IAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,+BACb,UAAA;AAAA,QAAA,EAAE;AAAA,QAAM;AAAA,SACR,mCAAS,UAAS,UAAU,aAAa,QAAQ,QAAQ,KAAK;AAAA,MAAA,GACjE;AAAA,MACC,MACE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EACrB,IAAI,CAAC,MACJA,2BAAAA,KAAC,QAAA,EAAmB,WAAW,EAAE,MAC9B,UAAA;AAAA,QAAA,EAAE;AAAA,QAAE;AAAA,QAAE,EAAE;AAAA,MAAA,KADA,EAAE,KAEb,CACD;AAAA,MACF,WACCA,2BAAAA,KAAC,QAAA,EAAK,WAAU,kCACd,UAAA;AAAA,QAAAE,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMC,QAAAA,SAAS,WAAU,WAAU;AAAA,QACxC;AAAA,MAAA,GACH;AAAA,MAED,OACCF,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMG,QAAAA,SAAS,WAAU,qCAAA,CAAqC,IAEpEJ,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAMI,SAAAA,UAAU,WAAU,6BAAA,CAA6B;AAAA,IAAA,GAEjE;AAAA,IAEC,EAAE,QAAQ,KACTP,2BAAAA,KAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,MAAAE,2BAAAA,IAACG,YAAAA,aAAA,EAAY,WAAU,UAAS,UAAoB,OAAO,EAAE,OAAO,QAAO,MAAA,CAAM;AAAA,MACjFL,2BAAAA,KAAC,QAAA,EAAK,WAAU,mEACb,UAAA;AAAA,QAAA,IAAI,EAAE,QAAQ,EAAE,KAAK;AAAA,QAAE;AAAA,MAAA,EAAA,CAC1B;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;;"}
1
+ {"version":3,"file":"TestRunSummary.cjs","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { ProgressBar, type ProgressSegment } from \"../ProgressBar\";\nimport { cn } from \"../../lib/utils\";\nimport { UiCheck, UiClock, UiLoader } from \"../../icons\";\nimport type { RunMeta, Test } from \"./types\";\nimport { aggregateStatusCounts } from \"./status\";\n\nexport type TestRunSummaryProps = {\n tests: Test[];\n /** Run start, epoch ms (host-provided). */\n startTime?: number | null | undefined;\n /** Run end, epoch ms; falls back to `now` while running. */\n endTime?: number | null | undefined;\n done: boolean;\n /** Injected clock (epoch ms) so the component stays pure. */\n now?: number | undefined;\n runMeta?: RunMeta | undefined;\n /**\n * Single-line layout for embedding in a host header (e.g. a dialog header):\n * counts + a short inline progress bar on one row, instead of the default\n * two-line right-aligned column.\n */\n compact?: boolean | undefined;\n className?: string | undefined;\n};\n\nfunction pct(part: number, total: number): number {\n return total > 0 ? Math.round((part / total) * 100) : 0;\n}\n\n/**\n * Header summary: per-status counts, elapsed time, a stacked progress bar, and\n * pass/fail/pending gauge cards. Pure — elapsed time comes from injected `now`.\n */\nexport function TestRunSummary({\n tests,\n startTime,\n endTime,\n done,\n now,\n runMeta,\n compact = false,\n className,\n}: TestRunSummaryProps) {\n const t = aggregateStatusCounts(tests);\n const clock = now ?? 0;\n const end = done && endTime ? endTime : clock;\n const elapsed = startTime && end >= startTime ? `${((end - startTime) / 1000).toFixed(1)}s` : \"\";\n\n const segments: ProgressSegment[] = [\n { count: t.passed, color: \"bg-green-500\", label: \"passed\" },\n { count: t.skipped, color: \"bg-yellow-400\", label: \"skipped\" },\n { count: t.failed, color: \"bg-red-500\", label: \"failed\" },\n { count: t.timedout, color: \"bg-amber-500\", label: \"timed out\" },\n { count: t.running, color: \"bg-blue-400\", label: \"running\" },\n { count: t.pending, color: \"bg-muted-foreground/40\", label: \"queued\" },\n ];\n\n // Each status appears once, as a coloured count chip — no separate gauge-card\n // row repeating the same numbers as percentages.\n const chips: { n: number; label: string; tone: string }[] = [\n { n: t.passed, label: \"passed\", tone: \"text-green-600 dark:text-green-400\" },\n { n: t.failed, label: \"failed\", tone: \"text-red-600 dark:text-red-400\" },\n { n: t.timedout, label: \"timed out\", tone: \"text-amber-600 dark:text-amber-400\" },\n { n: t.skipped, label: \"skipped\", tone: \"text-yellow-700 dark:text-yellow-500\" },\n { n: t.running, label: \"running\", tone: \"text-blue-600 dark:text-blue-400\" },\n { n: t.pending, label: \"queued\", tone: \"text-muted-foreground\" },\n ];\n\n if (compact) {\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-x-3 gap-y-0.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {t.total > 0 && (\n <span className=\"inline-flex items-center gap-1.5\">\n <ProgressBar className=\"w-24\" segments={segments} total={t.total} height=\"h-1.5\" />\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex min-w-[18rem] flex-col items-end gap-1.5\", className)}>\n <div className=\"flex flex-wrap items-center justify-end gap-x-3 gap-y-0.5 text-sm text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n\n {t.total > 0 && (\n <div className=\"flex w-72 items-center gap-2\">\n <ProgressBar className=\"flex-1\" segments={segments} total={t.total} height=\"h-2\" />\n <span className=\"shrink-0 text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":["aggregateStatusCounts","jsxs","cn","jsx","Icon","UiClock","ProgressBar","UiCheck","UiLoader"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunSummary.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAiBF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,GAAG,EACH,OAAO,EACP,OAAe,EACf,SAAS,GACV,EAAE,mBAAmB,2CAyGrB"}
1
+ {"version":3,"file":"TestRunSummary.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAMF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,GAAG,EACH,OAAO,EACP,OAAe,EACf,SAAS,GACV,EAAE,mBAAmB,2CAyGrB"}
@@ -2,20 +2,10 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { Icon } from "../Icon.js";
3
3
  import { ProgressBar } from "../ProgressBar.js";
4
4
  import { cn } from "../../lib/utils.js";
5
- import { sumNonTaskTests } from "./status.js";
5
+ import { aggregateStatusCounts } from "./status.js";
6
6
  import { UiClock } from "../../icons/components/UiClock.js";
7
7
  import { UiCheck } from "../../icons/components/UiCheck.js";
8
8
  import { UiLoader } from "../../icons/components/UiLoader.js";
9
- function totals(tests) {
10
- return tests.reduce(
11
- (acc, t) => {
12
- const s = sumNonTaskTests(t);
13
- Object.keys(acc).forEach((k) => acc[k] += s[k]);
14
- return acc;
15
- },
16
- { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 }
17
- );
18
- }
19
9
  function pct(part, total) {
20
10
  return total > 0 ? Math.round(part / total * 100) : 0;
21
11
  }
@@ -29,7 +19,7 @@ function TestRunSummary({
29
19
  compact = false,
30
20
  className
31
21
  }) {
32
- const t = totals(tests);
22
+ const t = aggregateStatusCounts(tests);
33
23
  const clock = now ?? 0;
34
24
  const end = done && endTime ? endTime : clock;
35
25
  const elapsed = startTime && end >= startTime ? `${((end - startTime) / 1e3).toFixed(1)}s` : "";
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunSummary.js","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { ProgressBar, type ProgressSegment } from \"../ProgressBar\";\nimport { cn } from \"../../lib/utils\";\nimport { UiCheck, UiClock, UiLoader } from \"../../icons\";\nimport type { RunMeta, Test } from \"./types\";\nimport { sumNonTaskTests, type StatusCounts } from \"./status\";\n\nexport type TestRunSummaryProps = {\n tests: Test[];\n /** Run start, epoch ms (host-provided). */\n startTime?: number | null | undefined;\n /** Run end, epoch ms; falls back to `now` while running. */\n endTime?: number | null | undefined;\n done: boolean;\n /** Injected clock (epoch ms) so the component stays pure. */\n now?: number | undefined;\n runMeta?: RunMeta | undefined;\n /**\n * Single-line layout for embedding in a host header (e.g. a dialog header):\n * counts + a short inline progress bar on one row, instead of the default\n * two-line right-aligned column.\n */\n compact?: boolean | undefined;\n className?: string | undefined;\n};\n\nfunction totals(tests: Test[]): StatusCounts {\n return tests.reduce(\n (acc, t) => {\n const s = sumNonTaskTests(t);\n (Object.keys(acc) as (keyof StatusCounts)[]).forEach((k) => (acc[k] += s[k]));\n return acc;\n },\n { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 },\n );\n}\n\nfunction pct(part: number, total: number): number {\n return total > 0 ? Math.round((part / total) * 100) : 0;\n}\n\n/**\n * Header summary: per-status counts, elapsed time, a stacked progress bar, and\n * pass/fail/pending gauge cards. Pure — elapsed time comes from injected `now`.\n */\nexport function TestRunSummary({\n tests,\n startTime,\n endTime,\n done,\n now,\n runMeta,\n compact = false,\n className,\n}: TestRunSummaryProps) {\n const t = totals(tests);\n const clock = now ?? 0;\n const end = done && endTime ? endTime : clock;\n const elapsed = startTime && end >= startTime ? `${((end - startTime) / 1000).toFixed(1)}s` : \"\";\n\n const segments: ProgressSegment[] = [\n { count: t.passed, color: \"bg-green-500\", label: \"passed\" },\n { count: t.skipped, color: \"bg-yellow-400\", label: \"skipped\" },\n { count: t.failed, color: \"bg-red-500\", label: \"failed\" },\n { count: t.timedout, color: \"bg-amber-500\", label: \"timed out\" },\n { count: t.running, color: \"bg-blue-400\", label: \"running\" },\n { count: t.pending, color: \"bg-muted-foreground/40\", label: \"queued\" },\n ];\n\n // Each status appears once, as a coloured count chip — no separate gauge-card\n // row repeating the same numbers as percentages.\n const chips: { n: number; label: string; tone: string }[] = [\n { n: t.passed, label: \"passed\", tone: \"text-green-600 dark:text-green-400\" },\n { n: t.failed, label: \"failed\", tone: \"text-red-600 dark:text-red-400\" },\n { n: t.timedout, label: \"timed out\", tone: \"text-amber-600 dark:text-amber-400\" },\n { n: t.skipped, label: \"skipped\", tone: \"text-yellow-700 dark:text-yellow-500\" },\n { n: t.running, label: \"running\", tone: \"text-blue-600 dark:text-blue-400\" },\n { n: t.pending, label: \"queued\", tone: \"text-muted-foreground\" },\n ];\n\n if (compact) {\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-x-3 gap-y-0.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {t.total > 0 && (\n <span className=\"inline-flex items-center gap-1.5\">\n <ProgressBar className=\"w-24\" segments={segments} total={t.total} height=\"h-1.5\" />\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex min-w-[18rem] flex-col items-end gap-1.5\", className)}>\n <div className=\"flex flex-wrap items-center justify-end gap-x-3 gap-y-0.5 text-sm text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n\n {t.total > 0 && (\n <div className=\"flex w-72 items-center gap-2\">\n <ProgressBar className=\"flex-1\" segments={segments} total={t.total} height=\"h-2\" />\n <span className=\"shrink-0 text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TestRunSummary.js","sources":["../../../src/data/test-runner/TestRunSummary.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { ProgressBar, type ProgressSegment } from \"../ProgressBar\";\nimport { cn } from \"../../lib/utils\";\nimport { UiCheck, UiClock, UiLoader } from \"../../icons\";\nimport type { RunMeta, Test } from \"./types\";\nimport { aggregateStatusCounts } from \"./status\";\n\nexport type TestRunSummaryProps = {\n tests: Test[];\n /** Run start, epoch ms (host-provided). */\n startTime?: number | null | undefined;\n /** Run end, epoch ms; falls back to `now` while running. */\n endTime?: number | null | undefined;\n done: boolean;\n /** Injected clock (epoch ms) so the component stays pure. */\n now?: number | undefined;\n runMeta?: RunMeta | undefined;\n /**\n * Single-line layout for embedding in a host header (e.g. a dialog header):\n * counts + a short inline progress bar on one row, instead of the default\n * two-line right-aligned column.\n */\n compact?: boolean | undefined;\n className?: string | undefined;\n};\n\nfunction pct(part: number, total: number): number {\n return total > 0 ? Math.round((part / total) * 100) : 0;\n}\n\n/**\n * Header summary: per-status counts, elapsed time, a stacked progress bar, and\n * pass/fail/pending gauge cards. Pure — elapsed time comes from injected `now`.\n */\nexport function TestRunSummary({\n tests,\n startTime,\n endTime,\n done,\n now,\n runMeta,\n compact = false,\n className,\n}: TestRunSummaryProps) {\n const t = aggregateStatusCounts(tests);\n const clock = now ?? 0;\n const end = done && endTime ? endTime : clock;\n const elapsed = startTime && end >= startTime ? `${((end - startTime) / 1000).toFixed(1)}s` : \"\";\n\n const segments: ProgressSegment[] = [\n { count: t.passed, color: \"bg-green-500\", label: \"passed\" },\n { count: t.skipped, color: \"bg-yellow-400\", label: \"skipped\" },\n { count: t.failed, color: \"bg-red-500\", label: \"failed\" },\n { count: t.timedout, color: \"bg-amber-500\", label: \"timed out\" },\n { count: t.running, color: \"bg-blue-400\", label: \"running\" },\n { count: t.pending, color: \"bg-muted-foreground/40\", label: \"queued\" },\n ];\n\n // Each status appears once, as a coloured count chip — no separate gauge-card\n // row repeating the same numbers as percentages.\n const chips: { n: number; label: string; tone: string }[] = [\n { n: t.passed, label: \"passed\", tone: \"text-green-600 dark:text-green-400\" },\n { n: t.failed, label: \"failed\", tone: \"text-red-600 dark:text-red-400\" },\n { n: t.timedout, label: \"timed out\", tone: \"text-amber-600 dark:text-amber-400\" },\n { n: t.skipped, label: \"skipped\", tone: \"text-yellow-700 dark:text-yellow-500\" },\n { n: t.running, label: \"running\", tone: \"text-blue-600 dark:text-blue-400\" },\n { n: t.pending, label: \"queued\", tone: \"text-muted-foreground\" },\n ];\n\n if (compact) {\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-x-3 gap-y-0.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {t.total > 0 && (\n <span className=\"inline-flex items-center gap-1.5\">\n <ProgressBar className=\"w-24\" segments={segments} total={t.total} height=\"h-1.5\" />\n <span className=\"text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex min-w-[18rem] flex-col items-end gap-1.5\", className)}>\n <div className=\"flex flex-wrap items-center justify-end gap-x-3 gap-y-0.5 text-sm text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {t.total} tests\n {runMeta?.kind === \"rerun\" ? ` · rerun #${runMeta.sequence}` : \"\"}\n </span>\n {chips\n .filter((c) => c.n > 0)\n .map((c) => (\n <span key={c.label} className={c.tone}>\n {c.n} {c.label}\n </span>\n ))}\n {elapsed && (\n <span className=\"inline-flex items-center gap-1\">\n <Icon icon={UiClock} className=\"text-xs\" />\n {elapsed}\n </span>\n )}\n {done ? (\n <Icon icon={UiCheck} className=\"text-green-600 dark:text-green-400\" />\n ) : (\n <Icon icon={UiLoader} className=\"animate-spin text-blue-500\" />\n )}\n </div>\n\n {t.total > 0 && (\n <div className=\"flex w-72 items-center gap-2\">\n <ProgressBar className=\"flex-1\" segments={segments} total={t.total} height=\"h-2\" />\n <span className=\"shrink-0 text-xs font-medium text-green-600 dark:text-green-400\">\n {pct(t.passed, t.total)}%\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -13,16 +13,6 @@ const TestDetailPanel = require("./TestDetailPanel.cjs");
13
13
  const TestRunSummary = require("./TestRunSummary.cjs");
14
14
  const TestFilterBar = require("./TestFilterBar.cjs");
15
15
  const UiBeaker = require("../../icons/components/UiBeaker.cjs");
16
- function counts(tests) {
17
- return tests.reduce(
18
- (acc, t) => {
19
- const s = status.sumNonTaskTests(t);
20
- Object.keys(acc).forEach((k) => acc[k] += s[k]);
21
- return acc;
22
- },
23
- { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 }
24
- );
25
- }
26
16
  function toRegistry(adapters) {
27
17
  if (adapters instanceof adapter.TestNodeAdapterRegistry) return adapters;
28
18
  return adapter.createTestRunnerRegistry(adapters ?? []);
@@ -49,6 +39,7 @@ function TestRunner({
49
39
  title,
50
40
  showSummary = true,
51
41
  headerSlot,
42
+ hideHeader = false,
52
43
  defaultSplit = 45,
53
44
  startTime,
54
45
  endTime,
@@ -96,10 +87,10 @@ function TestRunner({
96
87
  ]
97
88
  );
98
89
  const frameworks = react.useMemo(() => status.collectFrameworks(tests), [tests]);
99
- const filterCounts = react.useMemo(() => counts(tests), [tests]);
90
+ const filterCounts = react.useMemo(() => status.aggregateStatusCounts(tests), [tests]);
100
91
  const hasContent = tests.length > 0;
101
92
  return /* @__PURE__ */ jsxRuntime.jsx(context.TestRunnerProvider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex h-full min-h-0 flex-col bg-background", className), children: [
102
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-card px-density-4 py-density-3", children: [
93
+ !hideHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-card px-density-4 py-density-3", children: [
103
94
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
104
95
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
105
96
  title === void 0 ? /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "inline-flex items-center gap-1.5 text-lg font-bold", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunner.cjs","sources":["../../../src/data/test-runner/TestRunner.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport { UiBeaker } from \"../../icons\";\nimport type { RunMeta, SnapshotStatus, Test } from \"./types\";\nimport { collectFrameworks, sumNonTaskTests, type StatusCounts } from \"./status\";\nimport { type TestFilters } from \"./filterState\";\nimport {\n createTestRunnerRegistry,\n type TestNodeAdapter,\n TestNodeAdapterRegistry,\n} from \"./adapter\";\nimport { TestRunnerProvider, type TestRunnerContext } from \"./context\";\nimport { TestTree } from \"./TestTree\";\nimport { TestDetailPanel } from \"./TestDetailPanel\";\nimport { TestRunSummary } from \"./TestRunSummary\";\nimport { TestFilterBar } from \"./TestFilterBar\";\n\nexport type TestRunnerProps = {\n tests: Test[];\n selected: Test | null;\n filters: TestFilters;\n expandAll: boolean | null;\n done: boolean;\n runMeta?: RunMeta;\n status?: SnapshotStatus;\n /** Free-form status line shown next to the title (e.g. \"Running tests...\"). */\n statusText?: string;\n now?: number;\n busy?: { rerun?: boolean; stop?: boolean };\n\n /** Controlled active detail-tab id; omit to let the detail pane own tab state. */\n activeTab?: string;\n /** Called with the picked tab id when `activeTab` is controlled. */\n onTabChange?: (tabId: string) => void;\n\n onSelect: (node: Test | null) => void;\n onFiltersChange: (next: TestFilters) => void;\n onExpandAllChange: (next: boolean | null) => void;\n onRerun?: (node: Test) => void;\n onStop?: (node: Test) => void;\n\n /** Domain node adapters, or a pre-built registry. Defaults to default-only. */\n adapters?: TestNodeAdapter[] | TestNodeAdapterRegistry;\n /**\n * Header title. Defaults (when omitted) to the \"Test Results\" beaker heading.\n * Pass `null` to render no title — e.g. a host that owns the title in its own\n * dialog/page header and embeds the runner below it.\n */\n title?: ReactNode;\n /**\n * Render the built-in run summary (counts + progress) in the header. Defaults\n * to true; pass false when the host shows the summary itself (e.g. in a dialog\n * header) to avoid duplicating it.\n */\n showSummary?: boolean;\n /** Extra header content (e.g. export/download controls owned by the host). */\n headerSlot?: ReactNode;\n /** Initial left-pane width percentage. */\n defaultSplit?: number;\n startTime?: number | null;\n endTime?: number | null;\n className?: string;\n};\n\nfunction counts(tests: Test[]): StatusCounts {\n return tests.reduce(\n (acc, t) => {\n const s = sumNonTaskTests(t);\n (Object.keys(acc) as (keyof StatusCounts)[]).forEach((k) => (acc[k] += s[k]));\n return acc;\n },\n { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 },\n );\n}\n\nfunction toRegistry(\n adapters: TestNodeAdapter[] | TestNodeAdapterRegistry | undefined,\n): TestNodeAdapterRegistry {\n if (adapters instanceof TestNodeAdapterRegistry) return adapters;\n return createTestRunnerRegistry(adapters ?? []);\n}\n\n/**\n * Top-level, pure-presentational test runner: a summary/filter header over a\n * resizable tree + detail split. All data and handlers flow in via props and\n * are exposed to sub-components through a single `TestRunnerContext`. Domain\n * rendering is pluggable via node adapters; no fetch/SSE/routing lives here.\n */\nexport function TestRunner({\n tests,\n selected,\n filters,\n expandAll,\n done,\n runMeta,\n status,\n statusText,\n now,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters,\n title,\n showSummary = true,\n headerSlot,\n defaultSplit = 45,\n startTime,\n endTime,\n className,\n}: TestRunnerProps) {\n const registry = useMemo(() => toRegistry(adapters), [adapters]);\n\n const ctx: TestRunnerContext = useMemo(\n () => ({\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy: busy ?? {},\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters: registry,\n }),\n [\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n registry,\n ],\n );\n\n const frameworks = useMemo(() => collectFrameworks(tests), [tests]);\n const filterCounts = useMemo(() => counts(tests), [tests]);\n const hasContent = tests.length > 0;\n\n return (\n <TestRunnerProvider value={ctx}>\n <div className={cn(\"flex h-full min-h-0 flex-col bg-background\", className)}>\n <div className=\"border-b border-border bg-card px-density-4 py-density-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {title === undefined ? (\n <h1 className=\"inline-flex items-center gap-1.5 text-lg font-bold\">\n <Icon icon={UiBeaker} className=\"text-primary\" />\n Test Results\n </h1>\n ) : (\n title\n )}\n {statusText && <span className=\"text-sm text-muted-foreground\">{statusText}</span>}\n </div>\n <div className=\"flex items-center gap-3\">\n {headerSlot}\n {showSummary && (\n <TestRunSummary\n tests={tests}\n startTime={startTime}\n endTime={endTime}\n done={done}\n now={now}\n runMeta={runMeta}\n />\n )}\n </div>\n </div>\n {hasContent && (\n <div className=\"mt-2\">\n <TestFilterBar\n filters={filters}\n onChange={onFiltersChange}\n counts={filterCounts}\n frameworks={frameworks}\n />\n </div>\n )}\n </div>\n\n <SplitPane\n className=\"min-h-0 flex-1\"\n defaultSplit={defaultSplit}\n minLeft={25}\n minRight={30}\n leftClass=\"border-r-2 border-border bg-muted/30\"\n left={<TestTree />}\n right={<TestDetailPanel />}\n />\n </div>\n </TestRunnerProvider>\n );\n}\n"],"names":["sumNonTaskTests","TestNodeAdapterRegistry","createTestRunnerRegistry","status","useMemo","collectFrameworks","jsx","TestRunnerProvider","jsxs","cn","Icon","UiBeaker","TestRunSummary","TestFilterBar","SplitPane","TestTree","TestDetailPanel"],"mappings":"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"}
1
+ {"version":3,"file":"TestRunner.cjs","sources":["../../../src/data/test-runner/TestRunner.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport { UiBeaker } from \"../../icons\";\nimport type { RunMeta, SnapshotStatus, Test } from \"./types\";\nimport { aggregateStatusCounts, collectFrameworks } from \"./status\";\nimport { type TestFilters } from \"./filterState\";\nimport {\n createTestRunnerRegistry,\n type TestNodeAdapter,\n TestNodeAdapterRegistry,\n} from \"./adapter\";\nimport { TestRunnerProvider, type TestRunnerContext } from \"./context\";\nimport { TestTree } from \"./TestTree\";\nimport { TestDetailPanel } from \"./TestDetailPanel\";\nimport { TestRunSummary } from \"./TestRunSummary\";\nimport { TestFilterBar } from \"./TestFilterBar\";\n\nexport type TestRunnerProps = {\n tests: Test[];\n selected: Test | null;\n filters: TestFilters;\n expandAll: boolean | null;\n done: boolean;\n runMeta?: RunMeta;\n status?: SnapshotStatus;\n /** Free-form status line shown next to the title (e.g. \"Running tests...\"). */\n statusText?: string;\n now?: number;\n busy?: { rerun?: boolean; stop?: boolean };\n\n /** Controlled active detail-tab id; omit to let the detail pane own tab state. */\n activeTab?: string;\n /** Called with the picked tab id when `activeTab` is controlled. */\n onTabChange?: (tabId: string) => void;\n\n onSelect: (node: Test | null) => void;\n onFiltersChange: (next: TestFilters) => void;\n onExpandAllChange: (next: boolean | null) => void;\n onRerun?: (node: Test) => void;\n onStop?: (node: Test) => void;\n\n /** Domain node adapters, or a pre-built registry. Defaults to default-only. */\n adapters?: TestNodeAdapter[] | TestNodeAdapterRegistry;\n /**\n * Header title. Defaults (when omitted) to the \"Test Results\" beaker heading.\n * Pass `null` to render no title — e.g. a host that owns the title in its own\n * dialog/page header and embeds the runner below it.\n */\n title?: ReactNode;\n /**\n * Render the built-in run summary (counts + progress) in the header. Defaults\n * to true; pass false when the host shows the summary itself (e.g. in a dialog\n * header) to avoid duplicating it.\n */\n showSummary?: boolean;\n /** Extra header content (e.g. export/download controls owned by the host). */\n headerSlot?: ReactNode;\n /**\n * Suppresses the entire built-in header bar (title, summary, filter row).\n * Defaults to false; pass true when a host renders its own combined header\n * (e.g. a dialog header that already embeds `TestRunSummary` and filters) so\n * the runner doesn't render a second bordered bar underneath it.\n */\n hideHeader?: boolean;\n /** Initial left-pane width percentage. */\n defaultSplit?: number;\n startTime?: number | null;\n endTime?: number | null;\n className?: string;\n};\n\nfunction toRegistry(\n adapters: TestNodeAdapter[] | TestNodeAdapterRegistry | undefined,\n): TestNodeAdapterRegistry {\n if (adapters instanceof TestNodeAdapterRegistry) return adapters;\n return createTestRunnerRegistry(adapters ?? []);\n}\n\n/**\n * Top-level, pure-presentational test runner: a summary/filter header over a\n * resizable tree + detail split. All data and handlers flow in via props and\n * are exposed to sub-components through a single `TestRunnerContext`. Domain\n * rendering is pluggable via node adapters; no fetch/SSE/routing lives here.\n */\nexport function TestRunner({\n tests,\n selected,\n filters,\n expandAll,\n done,\n runMeta,\n status,\n statusText,\n now,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters,\n title,\n showSummary = true,\n headerSlot,\n hideHeader = false,\n defaultSplit = 45,\n startTime,\n endTime,\n className,\n}: TestRunnerProps) {\n const registry = useMemo(() => toRegistry(adapters), [adapters]);\n\n const ctx: TestRunnerContext = useMemo(\n () => ({\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy: busy ?? {},\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters: registry,\n }),\n [\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n registry,\n ],\n );\n\n const frameworks = useMemo(() => collectFrameworks(tests), [tests]);\n const filterCounts = useMemo(() => aggregateStatusCounts(tests), [tests]);\n const hasContent = tests.length > 0;\n\n return (\n <TestRunnerProvider value={ctx}>\n <div className={cn(\"flex h-full min-h-0 flex-col bg-background\", className)}>\n {!hideHeader && (\n <div className=\"border-b border-border bg-card px-density-4 py-density-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {title === undefined ? (\n <h1 className=\"inline-flex items-center gap-1.5 text-lg font-bold\">\n <Icon icon={UiBeaker} className=\"text-primary\" />\n Test Results\n </h1>\n ) : (\n title\n )}\n {statusText && <span className=\"text-sm text-muted-foreground\">{statusText}</span>}\n </div>\n <div className=\"flex items-center gap-3\">\n {headerSlot}\n {showSummary && (\n <TestRunSummary\n tests={tests}\n startTime={startTime}\n endTime={endTime}\n done={done}\n now={now}\n runMeta={runMeta}\n />\n )}\n </div>\n </div>\n {hasContent && (\n <div className=\"mt-2\">\n <TestFilterBar\n filters={filters}\n onChange={onFiltersChange}\n counts={filterCounts}\n frameworks={frameworks}\n />\n </div>\n )}\n </div>\n )}\n\n <SplitPane\n className=\"min-h-0 flex-1\"\n defaultSplit={defaultSplit}\n minLeft={25}\n minRight={30}\n leftClass=\"border-r-2 border-border bg-muted/30\"\n left={<TestTree />}\n right={<TestDetailPanel />}\n />\n </div>\n </TestRunnerProvider>\n );\n}\n"],"names":["TestNodeAdapterRegistry","createTestRunnerRegistry","status","useMemo","collectFrameworks","aggregateStatusCounts","jsx","TestRunnerProvider","jsxs","cn","Icon","UiBeaker","TestRunSummary","TestFilterBar","SplitPane","TestTree","TestDetailPanel"],"mappings":"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"}
@@ -42,6 +42,13 @@ export type TestRunnerProps = {
42
42
  showSummary?: boolean;
43
43
  /** Extra header content (e.g. export/download controls owned by the host). */
44
44
  headerSlot?: ReactNode;
45
+ /**
46
+ * Suppresses the entire built-in header bar (title, summary, filter row).
47
+ * Defaults to false; pass true when a host renders its own combined header
48
+ * (e.g. a dialog header that already embeds `TestRunSummary` and filters) so
49
+ * the runner doesn't render a second bordered bar underneath it.
50
+ */
51
+ hideHeader?: boolean;
45
52
  /** Initial left-pane width percentage. */
46
53
  defaultSplit?: number;
47
54
  startTime?: number | null;
@@ -54,5 +61,5 @@ export type TestRunnerProps = {
54
61
  * are exposed to sub-components through a single `TestRunnerContext`. Domain
55
62
  * rendering is pluggable via node adapters; no fetch/SSE/routing lives here.
56
63
  */
57
- export declare function TestRunner({ tests, selected, filters, expandAll, done, runMeta, status, statusText, now, busy, activeTab, onTabChange, onSelect, onFiltersChange, onExpandAllChange, onRerun, onStop, adapters, title, showSummary, headerSlot, defaultSplit, startTime, endTime, className, }: TestRunnerProps): import("react/jsx-runtime").JSX.Element;
64
+ export declare function TestRunner({ tests, selected, filters, expandAll, done, runMeta, status, statusText, now, busy, activeTab, onTabChange, onSelect, onFiltersChange, onExpandAllChange, onRerun, onStop, adapters, title, showSummary, headerSlot, hideHeader, defaultSplit, startTime, endTime, className, }: TestRunnerProps): import("react/jsx-runtime").JSX.Element;
58
65
  //# sourceMappingURL=TestRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunner.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/TestRunner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKhD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAEL,KAAK,eAAe,EACpB,uBAAuB,EACxB,MAAM,WAAW,CAAC;AAOnB,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAE3C,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAE9B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,uBAAuB,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAoBF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,OAAO,EACP,MAAM,EACN,UAAU,EACV,GAAG,EACH,IAAI,EACJ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,EACL,WAAkB,EAClB,UAAU,EACV,YAAiB,EACjB,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE,eAAe,2CAsGjB"}
1
+ {"version":3,"file":"TestRunner.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/TestRunner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKhD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAEL,KAAK,eAAe,EACpB,uBAAuB,EACxB,MAAM,WAAW,CAAC;AAOnB,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAE3C,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAE9B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,uBAAuB,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,OAAO,EACP,MAAM,EACN,UAAU,EACV,GAAG,EACH,IAAI,EACJ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,EACL,WAAkB,EAClB,UAAU,EACV,UAAkB,EAClB,YAAiB,EACjB,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE,eAAe,2CAwGjB"}
@@ -3,7 +3,7 @@ import { useMemo } from "react";
3
3
  import { Icon } from "../Icon.js";
4
4
  import { SplitPane } from "../../layout/SplitPane.js";
5
5
  import { cn } from "../../lib/utils.js";
6
- import { collectFrameworks, sumNonTaskTests } from "./status.js";
6
+ import { collectFrameworks, aggregateStatusCounts } from "./status.js";
7
7
  import { TestNodeAdapterRegistry, createTestRunnerRegistry } from "./adapter.js";
8
8
  import { TestRunnerProvider } from "./context.js";
9
9
  import { TestTree } from "./TestTree.js";
@@ -11,16 +11,6 @@ import { TestDetailPanel } from "./TestDetailPanel.js";
11
11
  import { TestRunSummary } from "./TestRunSummary.js";
12
12
  import { TestFilterBar } from "./TestFilterBar.js";
13
13
  import { UiBeaker } from "../../icons/components/UiBeaker.js";
14
- function counts(tests) {
15
- return tests.reduce(
16
- (acc, t) => {
17
- const s = sumNonTaskTests(t);
18
- Object.keys(acc).forEach((k) => acc[k] += s[k]);
19
- return acc;
20
- },
21
- { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 }
22
- );
23
- }
24
14
  function toRegistry(adapters) {
25
15
  if (adapters instanceof TestNodeAdapterRegistry) return adapters;
26
16
  return createTestRunnerRegistry(adapters ?? []);
@@ -47,6 +37,7 @@ function TestRunner({
47
37
  title,
48
38
  showSummary = true,
49
39
  headerSlot,
40
+ hideHeader = false,
50
41
  defaultSplit = 45,
51
42
  startTime,
52
43
  endTime,
@@ -94,10 +85,10 @@ function TestRunner({
94
85
  ]
95
86
  );
96
87
  const frameworks = useMemo(() => collectFrameworks(tests), [tests]);
97
- const filterCounts = useMemo(() => counts(tests), [tests]);
88
+ const filterCounts = useMemo(() => aggregateStatusCounts(tests), [tests]);
98
89
  const hasContent = tests.length > 0;
99
90
  return /* @__PURE__ */ jsx(TestRunnerProvider, { value: ctx, children: /* @__PURE__ */ jsxs("div", { className: cn("flex h-full min-h-0 flex-col bg-background", className), children: [
100
- /* @__PURE__ */ jsxs("div", { className: "border-b border-border bg-card px-density-4 py-density-3", children: [
91
+ !hideHeader && /* @__PURE__ */ jsxs("div", { className: "border-b border-border bg-card px-density-4 py-density-3", children: [
101
92
  /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
102
93
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
103
94
  title === void 0 ? /* @__PURE__ */ jsxs("h1", { className: "inline-flex items-center gap-1.5 text-lg font-bold", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"TestRunner.js","sources":["../../../src/data/test-runner/TestRunner.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport { UiBeaker } from \"../../icons\";\nimport type { RunMeta, SnapshotStatus, Test } from \"./types\";\nimport { collectFrameworks, sumNonTaskTests, type StatusCounts } from \"./status\";\nimport { type TestFilters } from \"./filterState\";\nimport {\n createTestRunnerRegistry,\n type TestNodeAdapter,\n TestNodeAdapterRegistry,\n} from \"./adapter\";\nimport { TestRunnerProvider, type TestRunnerContext } from \"./context\";\nimport { TestTree } from \"./TestTree\";\nimport { TestDetailPanel } from \"./TestDetailPanel\";\nimport { TestRunSummary } from \"./TestRunSummary\";\nimport { TestFilterBar } from \"./TestFilterBar\";\n\nexport type TestRunnerProps = {\n tests: Test[];\n selected: Test | null;\n filters: TestFilters;\n expandAll: boolean | null;\n done: boolean;\n runMeta?: RunMeta;\n status?: SnapshotStatus;\n /** Free-form status line shown next to the title (e.g. \"Running tests...\"). */\n statusText?: string;\n now?: number;\n busy?: { rerun?: boolean; stop?: boolean };\n\n /** Controlled active detail-tab id; omit to let the detail pane own tab state. */\n activeTab?: string;\n /** Called with the picked tab id when `activeTab` is controlled. */\n onTabChange?: (tabId: string) => void;\n\n onSelect: (node: Test | null) => void;\n onFiltersChange: (next: TestFilters) => void;\n onExpandAllChange: (next: boolean | null) => void;\n onRerun?: (node: Test) => void;\n onStop?: (node: Test) => void;\n\n /** Domain node adapters, or a pre-built registry. Defaults to default-only. */\n adapters?: TestNodeAdapter[] | TestNodeAdapterRegistry;\n /**\n * Header title. Defaults (when omitted) to the \"Test Results\" beaker heading.\n * Pass `null` to render no title — e.g. a host that owns the title in its own\n * dialog/page header and embeds the runner below it.\n */\n title?: ReactNode;\n /**\n * Render the built-in run summary (counts + progress) in the header. Defaults\n * to true; pass false when the host shows the summary itself (e.g. in a dialog\n * header) to avoid duplicating it.\n */\n showSummary?: boolean;\n /** Extra header content (e.g. export/download controls owned by the host). */\n headerSlot?: ReactNode;\n /** Initial left-pane width percentage. */\n defaultSplit?: number;\n startTime?: number | null;\n endTime?: number | null;\n className?: string;\n};\n\nfunction counts(tests: Test[]): StatusCounts {\n return tests.reduce(\n (acc, t) => {\n const s = sumNonTaskTests(t);\n (Object.keys(acc) as (keyof StatusCounts)[]).forEach((k) => (acc[k] += s[k]));\n return acc;\n },\n { total: 0, passed: 0, failed: 0, warned: 0, skipped: 0, pending: 0, running: 0, timedout: 0 },\n );\n}\n\nfunction toRegistry(\n adapters: TestNodeAdapter[] | TestNodeAdapterRegistry | undefined,\n): TestNodeAdapterRegistry {\n if (adapters instanceof TestNodeAdapterRegistry) return adapters;\n return createTestRunnerRegistry(adapters ?? []);\n}\n\n/**\n * Top-level, pure-presentational test runner: a summary/filter header over a\n * resizable tree + detail split. All data and handlers flow in via props and\n * are exposed to sub-components through a single `TestRunnerContext`. Domain\n * rendering is pluggable via node adapters; no fetch/SSE/routing lives here.\n */\nexport function TestRunner({\n tests,\n selected,\n filters,\n expandAll,\n done,\n runMeta,\n status,\n statusText,\n now,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters,\n title,\n showSummary = true,\n headerSlot,\n defaultSplit = 45,\n startTime,\n endTime,\n className,\n}: TestRunnerProps) {\n const registry = useMemo(() => toRegistry(adapters), [adapters]);\n\n const ctx: TestRunnerContext = useMemo(\n () => ({\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy: busy ?? {},\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters: registry,\n }),\n [\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n registry,\n ],\n );\n\n const frameworks = useMemo(() => collectFrameworks(tests), [tests]);\n const filterCounts = useMemo(() => counts(tests), [tests]);\n const hasContent = tests.length > 0;\n\n return (\n <TestRunnerProvider value={ctx}>\n <div className={cn(\"flex h-full min-h-0 flex-col bg-background\", className)}>\n <div className=\"border-b border-border bg-card px-density-4 py-density-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {title === undefined ? (\n <h1 className=\"inline-flex items-center gap-1.5 text-lg font-bold\">\n <Icon icon={UiBeaker} className=\"text-primary\" />\n Test Results\n </h1>\n ) : (\n title\n )}\n {statusText && <span className=\"text-sm text-muted-foreground\">{statusText}</span>}\n </div>\n <div className=\"flex items-center gap-3\">\n {headerSlot}\n {showSummary && (\n <TestRunSummary\n tests={tests}\n startTime={startTime}\n endTime={endTime}\n done={done}\n now={now}\n runMeta={runMeta}\n />\n )}\n </div>\n </div>\n {hasContent && (\n <div className=\"mt-2\">\n <TestFilterBar\n filters={filters}\n onChange={onFiltersChange}\n counts={filterCounts}\n frameworks={frameworks}\n />\n </div>\n )}\n </div>\n\n <SplitPane\n className=\"min-h-0 flex-1\"\n defaultSplit={defaultSplit}\n minLeft={25}\n minRight={30}\n leftClass=\"border-r-2 border-border bg-muted/30\"\n left={<TestTree />}\n right={<TestDetailPanel />}\n />\n </div>\n </TestRunnerProvider>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TestRunner.js","sources":["../../../src/data/test-runner/TestRunner.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport { UiBeaker } from \"../../icons\";\nimport type { RunMeta, SnapshotStatus, Test } from \"./types\";\nimport { aggregateStatusCounts, collectFrameworks } from \"./status\";\nimport { type TestFilters } from \"./filterState\";\nimport {\n createTestRunnerRegistry,\n type TestNodeAdapter,\n TestNodeAdapterRegistry,\n} from \"./adapter\";\nimport { TestRunnerProvider, type TestRunnerContext } from \"./context\";\nimport { TestTree } from \"./TestTree\";\nimport { TestDetailPanel } from \"./TestDetailPanel\";\nimport { TestRunSummary } from \"./TestRunSummary\";\nimport { TestFilterBar } from \"./TestFilterBar\";\n\nexport type TestRunnerProps = {\n tests: Test[];\n selected: Test | null;\n filters: TestFilters;\n expandAll: boolean | null;\n done: boolean;\n runMeta?: RunMeta;\n status?: SnapshotStatus;\n /** Free-form status line shown next to the title (e.g. \"Running tests...\"). */\n statusText?: string;\n now?: number;\n busy?: { rerun?: boolean; stop?: boolean };\n\n /** Controlled active detail-tab id; omit to let the detail pane own tab state. */\n activeTab?: string;\n /** Called with the picked tab id when `activeTab` is controlled. */\n onTabChange?: (tabId: string) => void;\n\n onSelect: (node: Test | null) => void;\n onFiltersChange: (next: TestFilters) => void;\n onExpandAllChange: (next: boolean | null) => void;\n onRerun?: (node: Test) => void;\n onStop?: (node: Test) => void;\n\n /** Domain node adapters, or a pre-built registry. Defaults to default-only. */\n adapters?: TestNodeAdapter[] | TestNodeAdapterRegistry;\n /**\n * Header title. Defaults (when omitted) to the \"Test Results\" beaker heading.\n * Pass `null` to render no title — e.g. a host that owns the title in its own\n * dialog/page header and embeds the runner below it.\n */\n title?: ReactNode;\n /**\n * Render the built-in run summary (counts + progress) in the header. Defaults\n * to true; pass false when the host shows the summary itself (e.g. in a dialog\n * header) to avoid duplicating it.\n */\n showSummary?: boolean;\n /** Extra header content (e.g. export/download controls owned by the host). */\n headerSlot?: ReactNode;\n /**\n * Suppresses the entire built-in header bar (title, summary, filter row).\n * Defaults to false; pass true when a host renders its own combined header\n * (e.g. a dialog header that already embeds `TestRunSummary` and filters) so\n * the runner doesn't render a second bordered bar underneath it.\n */\n hideHeader?: boolean;\n /** Initial left-pane width percentage. */\n defaultSplit?: number;\n startTime?: number | null;\n endTime?: number | null;\n className?: string;\n};\n\nfunction toRegistry(\n adapters: TestNodeAdapter[] | TestNodeAdapterRegistry | undefined,\n): TestNodeAdapterRegistry {\n if (adapters instanceof TestNodeAdapterRegistry) return adapters;\n return createTestRunnerRegistry(adapters ?? []);\n}\n\n/**\n * Top-level, pure-presentational test runner: a summary/filter header over a\n * resizable tree + detail split. All data and handlers flow in via props and\n * are exposed to sub-components through a single `TestRunnerContext`. Domain\n * rendering is pluggable via node adapters; no fetch/SSE/routing lives here.\n */\nexport function TestRunner({\n tests,\n selected,\n filters,\n expandAll,\n done,\n runMeta,\n status,\n statusText,\n now,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters,\n title,\n showSummary = true,\n headerSlot,\n hideHeader = false,\n defaultSplit = 45,\n startTime,\n endTime,\n className,\n}: TestRunnerProps) {\n const registry = useMemo(() => toRegistry(adapters), [adapters]);\n\n const ctx: TestRunnerContext = useMemo(\n () => ({\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy: busy ?? {},\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n adapters: registry,\n }),\n [\n tests,\n selected,\n runMeta,\n status,\n done,\n now,\n filters,\n expandAll,\n busy,\n activeTab,\n onTabChange,\n onSelect,\n onFiltersChange,\n onExpandAllChange,\n onRerun,\n onStop,\n registry,\n ],\n );\n\n const frameworks = useMemo(() => collectFrameworks(tests), [tests]);\n const filterCounts = useMemo(() => aggregateStatusCounts(tests), [tests]);\n const hasContent = tests.length > 0;\n\n return (\n <TestRunnerProvider value={ctx}>\n <div className={cn(\"flex h-full min-h-0 flex-col bg-background\", className)}>\n {!hideHeader && (\n <div className=\"border-b border-border bg-card px-density-4 py-density-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {title === undefined ? (\n <h1 className=\"inline-flex items-center gap-1.5 text-lg font-bold\">\n <Icon icon={UiBeaker} className=\"text-primary\" />\n Test Results\n </h1>\n ) : (\n title\n )}\n {statusText && <span className=\"text-sm text-muted-foreground\">{statusText}</span>}\n </div>\n <div className=\"flex items-center gap-3\">\n {headerSlot}\n {showSummary && (\n <TestRunSummary\n tests={tests}\n startTime={startTime}\n endTime={endTime}\n done={done}\n now={now}\n runMeta={runMeta}\n />\n )}\n </div>\n </div>\n {hasContent && (\n <div className=\"mt-2\">\n <TestFilterBar\n filters={filters}\n onChange={onFiltersChange}\n counts={filterCounts}\n frameworks={frameworks}\n />\n </div>\n )}\n </div>\n )}\n\n <SplitPane\n className=\"min-h-0 flex-1\"\n defaultSplit={defaultSplit}\n minLeft={25}\n minRight={30}\n leftClass=\"border-r-2 border-border bg-muted/30\"\n left={<TestTree />}\n right={<TestDetailPanel />}\n />\n </div>\n </TestRunnerProvider>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@ function cycleFilterState(state, key) {
27
27
  }
28
28
  return next;
29
29
  }
30
+ function filterStateToRecord(state) {
31
+ return Object.fromEntries(state);
32
+ }
33
+ function recordToFilterState(record) {
34
+ return new Map(Object.entries(record));
35
+ }
30
36
  function matchesFilterState(value, state) {
31
37
  if (state.size === 0) return true;
32
38
  const include = /* @__PURE__ */ new Set();
@@ -43,5 +49,7 @@ exports.cycleFilterState = cycleFilterState;
43
49
  exports.decodeFilterState = decodeFilterState;
44
50
  exports.emptyTestFilters = emptyTestFilters;
45
51
  exports.encodeFilterState = encodeFilterState;
52
+ exports.filterStateToRecord = filterStateToRecord;
46
53
  exports.matchesFilterState = matchesFilterState;
54
+ exports.recordToFilterState = recordToFilterState;
47
55
  //# sourceMappingURL=filterState.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterState.cjs","sources":["../../../src/data/test-runner/filterState.ts"],"sourcesContent":["// Tri-state filter primitives — ported from the Gavel test runner. A key is\n// either absent (neutral), 'include' (only matching values pass), or 'exclude'\n// (matching values are removed). Ported verbatim so consumers rebase cleanly.\n\nexport type FilterMode = \"include\" | \"exclude\";\nexport type FilterState<T extends string = string> = Map<T, FilterMode>;\n\n/** Status + framework tri-state filters driving the test tree. */\nexport type TestFilters = {\n status: FilterState<string>;\n framework: FilterState<string>;\n};\n\nexport function emptyTestFilters(): TestFilters {\n return { status: new Map(), framework: new Map() };\n}\n\nexport function decodeFilterState<T extends string = string>(tokens: string[]): FilterState<T> {\n const state = new Map<T, FilterMode>();\n for (const token of tokens) {\n const value = token.startsWith(\"!\") ? token.slice(1) : token;\n if (!value) continue;\n state.set(value as T, token.startsWith(\"!\") ? \"exclude\" : \"include\");\n }\n return state;\n}\n\nexport function encodeFilterState<T extends string = string>(state: FilterState<T>): string[] {\n return Array.from(state.entries())\n .sort(([a], [b]) => String(a).localeCompare(String(b)))\n .map(([value, mode]) => (mode === \"exclude\" ? `!${value}` : String(value)));\n}\n\n/** Advance a key through neutral → include → exclude → neutral. */\nexport function cycleFilterState<T extends string = string>(\n state: FilterState<T>,\n key: T,\n): FilterState<T> {\n const next = new Map(state);\n const current = next.get(key);\n if (current === \"include\") {\n next.set(key, \"exclude\");\n } else if (current === \"exclude\") {\n next.delete(key);\n } else {\n next.set(key, \"include\");\n }\n return next;\n}\n\nexport function matchesFilterState<T extends string = string>(\n value: T | null | undefined,\n state: FilterState<T>,\n): boolean {\n if (state.size === 0) return true;\n\n const include = new Set<T>();\n const exclude = new Set<T>();\n for (const [key, mode] of state.entries()) {\n if (mode === \"include\") include.add(key);\n if (mode === \"exclude\") exclude.add(key);\n }\n\n if (value && exclude.has(value)) return false;\n if (include.size === 0) return true;\n return !!value && include.has(value);\n}\n"],"names":[],"mappings":";;AAaO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,QAAQ,oBAAI,IAAA,GAAO,WAAW,oBAAI,MAAI;AACjD;AAEO,SAAS,kBAA6C,QAAkC;AAC7F,QAAM,4BAAY,IAAA;AAClB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AACvD,QAAI,CAAC,MAAO;AACZ,UAAM,IAAI,OAAY,MAAM,WAAW,GAAG,IAAI,YAAY,SAAS;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,kBAA6C,OAAiC;AAC5F,SAAO,MAAM,KAAK,MAAM,QAAA,CAAS,EAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC,CAAC,EACrD,IAAI,CAAC,CAAC,OAAO,IAAI,MAAO,SAAS,YAAY,IAAI,KAAK,KAAK,OAAO,KAAK,CAAE;AAC9E;AAGO,SAAS,iBACd,OACA,KACgB;AAChB,QAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,QAAM,UAAU,KAAK,IAAI,GAAG;AAC5B,MAAI,YAAY,WAAW;AACzB,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB,WAAW,YAAY,WAAW;AAChC,SAAK,OAAO,GAAG;AAAA,EACjB,OAAO;AACL,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAAS,mBACd,OACA,OACS;AACT,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,QAAM,8BAAc,IAAA;AACpB,QAAM,8BAAc,IAAA;AACpB,aAAW,CAAC,KAAK,IAAI,KAAK,MAAM,WAAW;AACzC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AACvC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AAAA,EACzC;AAEA,MAAI,SAAS,QAAQ,IAAI,KAAK,EAAG,QAAO;AACxC,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,SAAO,CAAC,CAAC,SAAS,QAAQ,IAAI,KAAK;AACrC;;;;;;"}
1
+ {"version":3,"file":"filterState.cjs","sources":["../../../src/data/test-runner/filterState.ts"],"sourcesContent":["// Tri-state filter primitives — ported from the Gavel test runner. A key is\n// either absent (neutral), 'include' (only matching values pass), or 'exclude'\n// (matching values are removed). Ported verbatim so consumers rebase cleanly.\n\nexport type FilterMode = \"include\" | \"exclude\";\nexport type FilterState<T extends string = string> = Map<T, FilterMode>;\n\n/** Status + framework tri-state filters driving the test tree. */\nexport type TestFilters = {\n status: FilterState<string>;\n framework: FilterState<string>;\n};\n\nexport function emptyTestFilters(): TestFilters {\n return { status: new Map(), framework: new Map() };\n}\n\nexport function decodeFilterState<T extends string = string>(tokens: string[]): FilterState<T> {\n const state = new Map<T, FilterMode>();\n for (const token of tokens) {\n const value = token.startsWith(\"!\") ? token.slice(1) : token;\n if (!value) continue;\n state.set(value as T, token.startsWith(\"!\") ? \"exclude\" : \"include\");\n }\n return state;\n}\n\nexport function encodeFilterState<T extends string = string>(state: FilterState<T>): string[] {\n return Array.from(state.entries())\n .sort(([a], [b]) => String(a).localeCompare(String(b)))\n .map(([value, mode]) => (mode === \"exclude\" ? `!${value}` : String(value)));\n}\n\n/** Advance a key through neutral → include → exclude → neutral. */\nexport function cycleFilterState<T extends string = string>(\n state: FilterState<T>,\n key: T,\n): FilterState<T> {\n const next = new Map(state);\n const current = next.get(key);\n if (current === \"include\") {\n next.set(key, \"exclude\");\n } else if (current === \"exclude\") {\n next.delete(key);\n } else {\n next.set(key, \"include\");\n }\n return next;\n}\n\n// filterStateToRecord / recordToFilterState bridge this package's Map-based\n// FilterState to the Record<string, FilterBarMultiFilterMode> shape the\n// components/filter-bar-multi TriStateMultiSelect expects. FilterMode and\n// FilterBarMultiFilterMode are both independently-defined \"include\" | \"exclude\"\n// unions — structurally identical today, but a future addition to either would\n// silently type-check against the other since neither references the other.\nexport function filterStateToRecord<T extends string = string>(\n state: FilterState<T>,\n): Record<string, FilterMode> {\n return Object.fromEntries(state);\n}\n\nexport function recordToFilterState<T extends string = string>(\n record: Record<string, FilterMode>,\n): FilterState<T> {\n return new Map(Object.entries(record)) as FilterState<T>;\n}\n\nexport function matchesFilterState<T extends string = string>(\n value: T | null | undefined,\n state: FilterState<T>,\n): boolean {\n if (state.size === 0) return true;\n\n const include = new Set<T>();\n const exclude = new Set<T>();\n for (const [key, mode] of state.entries()) {\n if (mode === \"include\") include.add(key);\n if (mode === \"exclude\") exclude.add(key);\n }\n\n if (value && exclude.has(value)) return false;\n if (include.size === 0) return true;\n return !!value && include.has(value);\n}\n"],"names":[],"mappings":";;AAaO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,QAAQ,oBAAI,IAAA,GAAO,WAAW,oBAAI,MAAI;AACjD;AAEO,SAAS,kBAA6C,QAAkC;AAC7F,QAAM,4BAAY,IAAA;AAClB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AACvD,QAAI,CAAC,MAAO;AACZ,UAAM,IAAI,OAAY,MAAM,WAAW,GAAG,IAAI,YAAY,SAAS;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,kBAA6C,OAAiC;AAC5F,SAAO,MAAM,KAAK,MAAM,QAAA,CAAS,EAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC,CAAC,EACrD,IAAI,CAAC,CAAC,OAAO,IAAI,MAAO,SAAS,YAAY,IAAI,KAAK,KAAK,OAAO,KAAK,CAAE;AAC9E;AAGO,SAAS,iBACd,OACA,KACgB;AAChB,QAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,QAAM,UAAU,KAAK,IAAI,GAAG;AAC5B,MAAI,YAAY,WAAW;AACzB,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB,WAAW,YAAY,WAAW;AAChC,SAAK,OAAO,GAAG;AAAA,EACjB,OAAO;AACL,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB;AACA,SAAO;AACT;AAQO,SAAS,oBACd,OAC4B;AAC5B,SAAO,OAAO,YAAY,KAAK;AACjC;AAEO,SAAS,oBACd,QACgB;AAChB,SAAO,IAAI,IAAI,OAAO,QAAQ,MAAM,CAAC;AACvC;AAEO,SAAS,mBACd,OACA,OACS;AACT,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,QAAM,8BAAc,IAAA;AACpB,QAAM,8BAAc,IAAA;AACpB,aAAW,CAAC,KAAK,IAAI,KAAK,MAAM,WAAW;AACzC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AACvC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AAAA,EACzC;AAEA,MAAI,SAAS,QAAQ,IAAI,KAAK,EAAG,QAAO;AACxC,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,SAAO,CAAC,CAAC,SAAS,QAAQ,IAAI,KAAK;AACrC;;;;;;;;"}
@@ -10,5 +10,7 @@ export declare function decodeFilterState<T extends string = string>(tokens: str
10
10
  export declare function encodeFilterState<T extends string = string>(state: FilterState<T>): string[];
11
11
  /** Advance a key through neutral → include → exclude → neutral. */
12
12
  export declare function cycleFilterState<T extends string = string>(state: FilterState<T>, key: T): FilterState<T>;
13
+ export declare function filterStateToRecord<T extends string = string>(state: FilterState<T>): Record<string, FilterMode>;
14
+ export declare function recordToFilterState<T extends string = string>(record: Record<string, FilterMode>): FilterState<T>;
13
15
  export declare function matchesFilterState<T extends string = string>(value: T | null | undefined, state: FilterState<T>): boolean;
14
16
  //# sourceMappingURL=filterState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterState.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/filterState.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAExE,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAQ7F;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAI5F;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACxD,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,CAAC,GACL,WAAW,CAAC,CAAC,CAAC,CAWhB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC1D,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAaT"}
1
+ {"version":3,"file":"filterState.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/filterState.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAExE,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAQ7F;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAI5F;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACxD,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,CAAC,GACL,WAAW,CAAC,CAAC,CAAC,CAWhB;AAQD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC3D,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAE5B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACjC,WAAW,CAAC,CAAC,CAAC,CAEhB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC1D,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAaT"}
@@ -25,6 +25,12 @@ function cycleFilterState(state, key) {
25
25
  }
26
26
  return next;
27
27
  }
28
+ function filterStateToRecord(state) {
29
+ return Object.fromEntries(state);
30
+ }
31
+ function recordToFilterState(record) {
32
+ return new Map(Object.entries(record));
33
+ }
28
34
  function matchesFilterState(value, state) {
29
35
  if (state.size === 0) return true;
30
36
  const include = /* @__PURE__ */ new Set();
@@ -42,6 +48,8 @@ export {
42
48
  decodeFilterState,
43
49
  emptyTestFilters,
44
50
  encodeFilterState,
45
- matchesFilterState
51
+ filterStateToRecord,
52
+ matchesFilterState,
53
+ recordToFilterState
46
54
  };
47
55
  //# sourceMappingURL=filterState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterState.js","sources":["../../../src/data/test-runner/filterState.ts"],"sourcesContent":["// Tri-state filter primitives — ported from the Gavel test runner. A key is\n// either absent (neutral), 'include' (only matching values pass), or 'exclude'\n// (matching values are removed). Ported verbatim so consumers rebase cleanly.\n\nexport type FilterMode = \"include\" | \"exclude\";\nexport type FilterState<T extends string = string> = Map<T, FilterMode>;\n\n/** Status + framework tri-state filters driving the test tree. */\nexport type TestFilters = {\n status: FilterState<string>;\n framework: FilterState<string>;\n};\n\nexport function emptyTestFilters(): TestFilters {\n return { status: new Map(), framework: new Map() };\n}\n\nexport function decodeFilterState<T extends string = string>(tokens: string[]): FilterState<T> {\n const state = new Map<T, FilterMode>();\n for (const token of tokens) {\n const value = token.startsWith(\"!\") ? token.slice(1) : token;\n if (!value) continue;\n state.set(value as T, token.startsWith(\"!\") ? \"exclude\" : \"include\");\n }\n return state;\n}\n\nexport function encodeFilterState<T extends string = string>(state: FilterState<T>): string[] {\n return Array.from(state.entries())\n .sort(([a], [b]) => String(a).localeCompare(String(b)))\n .map(([value, mode]) => (mode === \"exclude\" ? `!${value}` : String(value)));\n}\n\n/** Advance a key through neutral → include → exclude → neutral. */\nexport function cycleFilterState<T extends string = string>(\n state: FilterState<T>,\n key: T,\n): FilterState<T> {\n const next = new Map(state);\n const current = next.get(key);\n if (current === \"include\") {\n next.set(key, \"exclude\");\n } else if (current === \"exclude\") {\n next.delete(key);\n } else {\n next.set(key, \"include\");\n }\n return next;\n}\n\nexport function matchesFilterState<T extends string = string>(\n value: T | null | undefined,\n state: FilterState<T>,\n): boolean {\n if (state.size === 0) return true;\n\n const include = new Set<T>();\n const exclude = new Set<T>();\n for (const [key, mode] of state.entries()) {\n if (mode === \"include\") include.add(key);\n if (mode === \"exclude\") exclude.add(key);\n }\n\n if (value && exclude.has(value)) return false;\n if (include.size === 0) return true;\n return !!value && include.has(value);\n}\n"],"names":[],"mappings":"AAaO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,QAAQ,oBAAI,IAAA,GAAO,WAAW,oBAAI,MAAI;AACjD;AAEO,SAAS,kBAA6C,QAAkC;AAC7F,QAAM,4BAAY,IAAA;AAClB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AACvD,QAAI,CAAC,MAAO;AACZ,UAAM,IAAI,OAAY,MAAM,WAAW,GAAG,IAAI,YAAY,SAAS;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,kBAA6C,OAAiC;AAC5F,SAAO,MAAM,KAAK,MAAM,QAAA,CAAS,EAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC,CAAC,EACrD,IAAI,CAAC,CAAC,OAAO,IAAI,MAAO,SAAS,YAAY,IAAI,KAAK,KAAK,OAAO,KAAK,CAAE;AAC9E;AAGO,SAAS,iBACd,OACA,KACgB;AAChB,QAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,QAAM,UAAU,KAAK,IAAI,GAAG;AAC5B,MAAI,YAAY,WAAW;AACzB,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB,WAAW,YAAY,WAAW;AAChC,SAAK,OAAO,GAAG;AAAA,EACjB,OAAO;AACL,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAAS,mBACd,OACA,OACS;AACT,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,QAAM,8BAAc,IAAA;AACpB,QAAM,8BAAc,IAAA;AACpB,aAAW,CAAC,KAAK,IAAI,KAAK,MAAM,WAAW;AACzC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AACvC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AAAA,EACzC;AAEA,MAAI,SAAS,QAAQ,IAAI,KAAK,EAAG,QAAO;AACxC,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,SAAO,CAAC,CAAC,SAAS,QAAQ,IAAI,KAAK;AACrC;"}
1
+ {"version":3,"file":"filterState.js","sources":["../../../src/data/test-runner/filterState.ts"],"sourcesContent":["// Tri-state filter primitives — ported from the Gavel test runner. A key is\n// either absent (neutral), 'include' (only matching values pass), or 'exclude'\n// (matching values are removed). Ported verbatim so consumers rebase cleanly.\n\nexport type FilterMode = \"include\" | \"exclude\";\nexport type FilterState<T extends string = string> = Map<T, FilterMode>;\n\n/** Status + framework tri-state filters driving the test tree. */\nexport type TestFilters = {\n status: FilterState<string>;\n framework: FilterState<string>;\n};\n\nexport function emptyTestFilters(): TestFilters {\n return { status: new Map(), framework: new Map() };\n}\n\nexport function decodeFilterState<T extends string = string>(tokens: string[]): FilterState<T> {\n const state = new Map<T, FilterMode>();\n for (const token of tokens) {\n const value = token.startsWith(\"!\") ? token.slice(1) : token;\n if (!value) continue;\n state.set(value as T, token.startsWith(\"!\") ? \"exclude\" : \"include\");\n }\n return state;\n}\n\nexport function encodeFilterState<T extends string = string>(state: FilterState<T>): string[] {\n return Array.from(state.entries())\n .sort(([a], [b]) => String(a).localeCompare(String(b)))\n .map(([value, mode]) => (mode === \"exclude\" ? `!${value}` : String(value)));\n}\n\n/** Advance a key through neutral → include → exclude → neutral. */\nexport function cycleFilterState<T extends string = string>(\n state: FilterState<T>,\n key: T,\n): FilterState<T> {\n const next = new Map(state);\n const current = next.get(key);\n if (current === \"include\") {\n next.set(key, \"exclude\");\n } else if (current === \"exclude\") {\n next.delete(key);\n } else {\n next.set(key, \"include\");\n }\n return next;\n}\n\n// filterStateToRecord / recordToFilterState bridge this package's Map-based\n// FilterState to the Record<string, FilterBarMultiFilterMode> shape the\n// components/filter-bar-multi TriStateMultiSelect expects. FilterMode and\n// FilterBarMultiFilterMode are both independently-defined \"include\" | \"exclude\"\n// unions — structurally identical today, but a future addition to either would\n// silently type-check against the other since neither references the other.\nexport function filterStateToRecord<T extends string = string>(\n state: FilterState<T>,\n): Record<string, FilterMode> {\n return Object.fromEntries(state);\n}\n\nexport function recordToFilterState<T extends string = string>(\n record: Record<string, FilterMode>,\n): FilterState<T> {\n return new Map(Object.entries(record)) as FilterState<T>;\n}\n\nexport function matchesFilterState<T extends string = string>(\n value: T | null | undefined,\n state: FilterState<T>,\n): boolean {\n if (state.size === 0) return true;\n\n const include = new Set<T>();\n const exclude = new Set<T>();\n for (const [key, mode] of state.entries()) {\n if (mode === \"include\") include.add(key);\n if (mode === \"exclude\") exclude.add(key);\n }\n\n if (value && exclude.has(value)) return false;\n if (include.size === 0) return true;\n return !!value && include.has(value);\n}\n"],"names":[],"mappings":"AAaO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,QAAQ,oBAAI,IAAA,GAAO,WAAW,oBAAI,MAAI;AACjD;AAEO,SAAS,kBAA6C,QAAkC;AAC7F,QAAM,4BAAY,IAAA;AAClB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AACvD,QAAI,CAAC,MAAO;AACZ,UAAM,IAAI,OAAY,MAAM,WAAW,GAAG,IAAI,YAAY,SAAS;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,kBAA6C,OAAiC;AAC5F,SAAO,MAAM,KAAK,MAAM,QAAA,CAAS,EAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC,CAAC,EACrD,IAAI,CAAC,CAAC,OAAO,IAAI,MAAO,SAAS,YAAY,IAAI,KAAK,KAAK,OAAO,KAAK,CAAE;AAC9E;AAGO,SAAS,iBACd,OACA,KACgB;AAChB,QAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,QAAM,UAAU,KAAK,IAAI,GAAG;AAC5B,MAAI,YAAY,WAAW;AACzB,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB,WAAW,YAAY,WAAW;AAChC,SAAK,OAAO,GAAG;AAAA,EACjB,OAAO;AACL,SAAK,IAAI,KAAK,SAAS;AAAA,EACzB;AACA,SAAO;AACT;AAQO,SAAS,oBACd,OAC4B;AAC5B,SAAO,OAAO,YAAY,KAAK;AACjC;AAEO,SAAS,oBACd,QACgB;AAChB,SAAO,IAAI,IAAI,OAAO,QAAQ,MAAM,CAAC;AACvC;AAEO,SAAS,mBACd,OACA,OACS;AACT,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,QAAM,8BAAc,IAAA;AACpB,QAAM,8BAAc,IAAA;AACpB,aAAW,CAAC,KAAK,IAAI,KAAK,MAAM,WAAW;AACzC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AACvC,QAAI,SAAS,UAAW,SAAQ,IAAI,GAAG;AAAA,EACzC;AAEA,MAAI,SAAS,QAAQ,IAAI,KAAK,EAAG,QAAO;AACxC,MAAI,QAAQ,SAAS,EAAG,QAAO;AAC/B,SAAO,CAAC,CAAC,SAAS,QAAQ,IAAI,KAAK;AACrC;"}
@@ -7,9 +7,9 @@ export { TestRunSummary, type TestRunSummaryProps } from './TestRunSummary';
7
7
  export { TestFilterBar, type TestFilterBarProps } from './TestFilterBar';
8
8
  export { TestRunnerProvider, useTestRunner, type TestRunnerContext, } from './context';
9
9
  export { TestNodeAdapterRegistry, createTestRunnerRegistry, type TestNodeAdapter, type AdapterContext, type DetailTab, } from './adapter';
10
- export { type StatusCounts, type TestStatus, sum, sumNonTaskTests, hasFailed, hasPending, testStatus, totalDuration, statusIconFor, statusToneFor, formatTestDuration, formatCount, humanizeName, collectFrameworks, collapseSingleChildChains, filterTests, } from './status';
10
+ export { type StatusCounts, type TestStatus, sum, sumNonTaskTests, aggregateStatusCounts, STATUS_LABELS, hasFailed, hasPending, testStatus, totalDuration, statusIconFor, statusToneFor, formatTestDuration, formatCount, humanizeName, collectFrameworks, collapseSingleChildChains, filterTests, } from './status';
11
11
  export { frameworkIcon } from './frameworkIcon';
12
12
  export { slugify, annotateRoutePaths, findNodeByRoutePath } from './routePath';
13
- export { type FilterMode, type FilterState, type TestFilters, emptyTestFilters, decodeFilterState, encodeFilterState, cycleFilterState, matchesFilterState, } from './filterState';
13
+ export { type FilterMode, type FilterState, type TestFilters, emptyTestFilters, decodeFilterState, encodeFilterState, cycleFilterState, matchesFilterState, filterStateToRecord, recordToFilterState, } from './filterState';
14
14
  export type { Test, TestSummary, TestAttempt, FailureDetail, FailureKind, GoTestContext, GinkgoContext, FixtureContext, TaskContext, RunMeta, Snapshot, SnapshotGit, SnapshotStatus, } from './types';
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,GAAG,EACH,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACZ,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,OAAO,EACP,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,GAAG,EACH,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACZ,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,OAAO,EACP,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,SAAS,CAAC"}
@@ -59,6 +59,20 @@ function sum(t) {
59
59
  for (const c of t.children) addCounts(r, sum(c));
60
60
  return r;
61
61
  }
62
+ function aggregateStatusCounts(tests) {
63
+ const r = emptyCounts();
64
+ for (const t of tests) addCounts(r, sumNonTaskTests(t));
65
+ return r;
66
+ }
67
+ const STATUS_LABELS = [
68
+ { key: "failed", label: "Failed" },
69
+ { key: "warned", label: "Warned" },
70
+ { key: "timedout", label: "Timed out" },
71
+ { key: "passed", label: "Passed" },
72
+ { key: "skipped", label: "Skipped" },
73
+ { key: "running", label: "Running" },
74
+ { key: "pending", label: "Queued" }
75
+ ];
62
76
  function sumNonTaskTests(t) {
63
77
  if (t.framework === "task") {
64
78
  const r2 = emptyCounts();
@@ -217,6 +231,8 @@ function filterTests(tests, statusFilter, frameworkFilter) {
217
231
  if (statusFilter.size === 0 && frameworkFilter.size === 0) return tests;
218
232
  return tests.map((t) => filterNode(t, statusFilter, frameworkFilter)).filter(Boolean);
219
233
  }
234
+ exports.STATUS_LABELS = STATUS_LABELS;
235
+ exports.aggregateStatusCounts = aggregateStatusCounts;
220
236
  exports.collapseSingleChildChains = collapseSingleChildChains;
221
237
  exports.collectFrameworks = collectFrameworks;
222
238
  exports.filterTests = filterTests;