@flanksource/clicky-ui 0.3.10 → 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 (1162) hide show
  1. package/NOTICE.md +85 -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/version-info.cjs +3 -3
  665. package/dist/data/version-info.cjs.map +1 -1
  666. package/dist/data/version-info.js +3 -3
  667. package/dist/data/version-info.js.map +1 -1
  668. package/dist/data.cjs +164 -0
  669. package/dist/data.cjs.map +1 -1
  670. package/dist/data.d.ts +7 -2
  671. package/dist/data.d.ts.map +1 -1
  672. package/dist/data.js +166 -2
  673. package/dist/data.js.map +1 -1
  674. package/dist/icons/components/UiArrowFatUp.cjs +15 -0
  675. package/dist/icons/components/UiArrowFatUp.cjs.map +1 -0
  676. package/dist/icons/components/UiArrowFatUp.d.ts +15 -0
  677. package/dist/icons/components/UiArrowFatUp.d.ts.map +1 -0
  678. package/dist/icons/components/UiArrowFatUp.js +15 -0
  679. package/dist/icons/components/UiArrowFatUp.js.map +1 -0
  680. package/dist/icons/components/UiAsterisk.cjs +15 -0
  681. package/dist/icons/components/UiAsterisk.cjs.map +1 -0
  682. package/dist/icons/components/UiAsterisk.d.ts +15 -0
  683. package/dist/icons/components/UiAsterisk.d.ts.map +1 -0
  684. package/dist/icons/components/UiAsterisk.js +15 -0
  685. package/dist/icons/components/UiAsterisk.js.map +1 -0
  686. package/dist/icons/components/UiAtom.cjs +15 -0
  687. package/dist/icons/components/UiAtom.cjs.map +1 -0
  688. package/dist/icons/components/UiAtom.d.ts +15 -0
  689. package/dist/icons/components/UiAtom.d.ts.map +1 -0
  690. package/dist/icons/components/UiAtom.js +15 -0
  691. package/dist/icons/components/UiAtom.js.map +1 -0
  692. package/dist/icons/components/UiBatteryChargingVertical.cjs +15 -0
  693. package/dist/icons/components/UiBatteryChargingVertical.cjs.map +1 -0
  694. package/dist/icons/components/UiBatteryChargingVertical.d.ts +15 -0
  695. package/dist/icons/components/UiBatteryChargingVertical.d.ts.map +1 -0
  696. package/dist/icons/components/UiBatteryChargingVertical.js +15 -0
  697. package/dist/icons/components/UiBatteryChargingVertical.js.map +1 -0
  698. package/dist/icons/components/UiBatteryVerticalEmpty.cjs +15 -0
  699. package/dist/icons/components/UiBatteryVerticalEmpty.cjs.map +1 -0
  700. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts +15 -0
  701. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts.map +1 -0
  702. package/dist/icons/components/UiBatteryVerticalEmpty.js +15 -0
  703. package/dist/icons/components/UiBatteryVerticalEmpty.js.map +1 -0
  704. package/dist/icons/components/UiBatteryVerticalFull.cjs +15 -0
  705. package/dist/icons/components/UiBatteryVerticalFull.cjs.map +1 -0
  706. package/dist/icons/components/UiBatteryVerticalFull.d.ts +15 -0
  707. package/dist/icons/components/UiBatteryVerticalFull.d.ts.map +1 -0
  708. package/dist/icons/components/UiBatteryVerticalFull.js +15 -0
  709. package/dist/icons/components/UiBatteryVerticalFull.js.map +1 -0
  710. package/dist/icons/components/UiBatteryVerticalHigh.cjs +15 -0
  711. package/dist/icons/components/UiBatteryVerticalHigh.cjs.map +1 -0
  712. package/dist/icons/components/UiBatteryVerticalHigh.d.ts +15 -0
  713. package/dist/icons/components/UiBatteryVerticalHigh.d.ts.map +1 -0
  714. package/dist/icons/components/UiBatteryVerticalHigh.js +15 -0
  715. package/dist/icons/components/UiBatteryVerticalHigh.js.map +1 -0
  716. package/dist/icons/components/UiBatteryVerticalLow.cjs +15 -0
  717. package/dist/icons/components/UiBatteryVerticalLow.cjs.map +1 -0
  718. package/dist/icons/components/UiBatteryVerticalLow.d.ts +15 -0
  719. package/dist/icons/components/UiBatteryVerticalLow.d.ts.map +1 -0
  720. package/dist/icons/components/UiBatteryVerticalLow.js +15 -0
  721. package/dist/icons/components/UiBatteryVerticalLow.js.map +1 -0
  722. package/dist/icons/components/UiBatteryVerticalMedium.cjs +15 -0
  723. package/dist/icons/components/UiBatteryVerticalMedium.cjs.map +1 -0
  724. package/dist/icons/components/UiBatteryVerticalMedium.d.ts +15 -0
  725. package/dist/icons/components/UiBatteryVerticalMedium.d.ts.map +1 -0
  726. package/dist/icons/components/UiBatteryVerticalMedium.js +15 -0
  727. package/dist/icons/components/UiBatteryVerticalMedium.js.map +1 -0
  728. package/dist/icons/components/UiChatDots.cjs +15 -0
  729. package/dist/icons/components/UiChatDots.cjs.map +1 -0
  730. package/dist/icons/components/UiChatDots.d.ts +15 -0
  731. package/dist/icons/components/UiChatDots.d.ts.map +1 -0
  732. package/dist/icons/components/UiChatDots.js +15 -0
  733. package/dist/icons/components/UiChatDots.js.map +1 -0
  734. package/dist/icons/components/UiCoins.cjs +15 -0
  735. package/dist/icons/components/UiCoins.cjs.map +1 -0
  736. package/dist/icons/components/UiCoins.d.ts +15 -0
  737. package/dist/icons/components/UiCoins.d.ts.map +1 -0
  738. package/dist/icons/components/UiCoins.js +15 -0
  739. package/dist/icons/components/UiCoins.js.map +1 -0
  740. package/dist/icons/components/UiCompass.cjs +15 -0
  741. package/dist/icons/components/UiCompass.cjs.map +1 -0
  742. package/dist/icons/components/UiCompass.d.ts +15 -0
  743. package/dist/icons/components/UiCompass.d.ts.map +1 -0
  744. package/dist/icons/components/UiCompass.js +15 -0
  745. package/dist/icons/components/UiCompass.js.map +1 -0
  746. package/dist/icons/components/UiCurrencyDollar.cjs +15 -0
  747. package/dist/icons/components/UiCurrencyDollar.cjs.map +1 -0
  748. package/dist/icons/components/UiCurrencyDollar.d.ts +15 -0
  749. package/dist/icons/components/UiCurrencyDollar.d.ts.map +1 -0
  750. package/dist/icons/components/UiCurrencyDollar.js +15 -0
  751. package/dist/icons/components/UiCurrencyDollar.js.map +1 -0
  752. package/dist/icons/components/UiCursorClick.cjs +15 -0
  753. package/dist/icons/components/UiCursorClick.cjs.map +1 -0
  754. package/dist/icons/components/UiCursorClick.d.ts +15 -0
  755. package/dist/icons/components/UiCursorClick.d.ts.map +1 -0
  756. package/dist/icons/components/UiCursorClick.js +15 -0
  757. package/dist/icons/components/UiCursorClick.js.map +1 -0
  758. package/dist/icons/components/UiCursorText.cjs +15 -0
  759. package/dist/icons/components/UiCursorText.cjs.map +1 -0
  760. package/dist/icons/components/UiCursorText.d.ts +15 -0
  761. package/dist/icons/components/UiCursorText.d.ts.map +1 -0
  762. package/dist/icons/components/UiCursorText.js +15 -0
  763. package/dist/icons/components/UiCursorText.js.map +1 -0
  764. package/dist/icons/components/UiEllipsisBold.cjs +10 -0
  765. package/dist/icons/components/UiEllipsisBold.cjs.map +1 -0
  766. package/dist/icons/components/UiEllipsisBold.d.ts +9 -0
  767. package/dist/icons/components/UiEllipsisBold.d.ts.map +1 -0
  768. package/dist/icons/components/UiEllipsisBold.js +10 -0
  769. package/dist/icons/components/UiEllipsisBold.js.map +1 -0
  770. package/dist/icons/components/UiFastForwardCircle.cjs +15 -0
  771. package/dist/icons/components/UiFastForwardCircle.cjs.map +1 -0
  772. package/dist/icons/components/UiFastForwardCircle.d.ts +15 -0
  773. package/dist/icons/components/UiFastForwardCircle.d.ts.map +1 -0
  774. package/dist/icons/components/UiFastForwardCircle.js +15 -0
  775. package/dist/icons/components/UiFastForwardCircle.js.map +1 -0
  776. package/dist/icons/components/UiFilePlus.cjs +15 -0
  777. package/dist/icons/components/UiFilePlus.cjs.map +1 -0
  778. package/dist/icons/components/UiFilePlus.d.ts +15 -0
  779. package/dist/icons/components/UiFilePlus.d.ts.map +1 -0
  780. package/dist/icons/components/UiFilePlus.js +15 -0
  781. package/dist/icons/components/UiFilePlus.js.map +1 -0
  782. package/dist/icons/components/UiGavel.cjs +15 -0
  783. package/dist/icons/components/UiGavel.cjs.map +1 -0
  784. package/dist/icons/components/UiGavel.d.ts +15 -0
  785. package/dist/icons/components/UiGavel.d.ts.map +1 -0
  786. package/dist/icons/components/UiGavel.js +15 -0
  787. package/dist/icons/components/UiGavel.js.map +1 -0
  788. package/dist/icons/components/UiGearSix.cjs +15 -0
  789. package/dist/icons/components/UiGearSix.cjs.map +1 -0
  790. package/dist/icons/components/UiGearSix.d.ts +15 -0
  791. package/dist/icons/components/UiGearSix.d.ts.map +1 -0
  792. package/dist/icons/components/UiGearSix.js +15 -0
  793. package/dist/icons/components/UiGearSix.js.map +1 -0
  794. package/dist/icons/components/UiGitCommit.cjs +15 -0
  795. package/dist/icons/components/UiGitCommit.cjs.map +1 -0
  796. package/dist/icons/components/UiGitCommit.d.ts +15 -0
  797. package/dist/icons/components/UiGitCommit.d.ts.map +1 -0
  798. package/dist/icons/components/UiGitCommit.js +15 -0
  799. package/dist/icons/components/UiGitCommit.js.map +1 -0
  800. package/dist/icons/components/UiHandPalm.cjs +15 -0
  801. package/dist/icons/components/UiHandPalm.cjs.map +1 -0
  802. package/dist/icons/components/UiHandPalm.d.ts +15 -0
  803. package/dist/icons/components/UiHandPalm.d.ts.map +1 -0
  804. package/dist/icons/components/UiHandPalm.js +15 -0
  805. package/dist/icons/components/UiHandPalm.js.map +1 -0
  806. package/dist/icons/components/UiKeyboard.cjs +15 -0
  807. package/dist/icons/components/UiKeyboard.cjs.map +1 -0
  808. package/dist/icons/components/UiKeyboard.d.ts +15 -0
  809. package/dist/icons/components/UiKeyboard.d.ts.map +1 -0
  810. package/dist/icons/components/UiKeyboard.js +15 -0
  811. package/dist/icons/components/UiKeyboard.js.map +1 -0
  812. package/dist/icons/components/UiListChecks.cjs +15 -0
  813. package/dist/icons/components/UiListChecks.cjs.map +1 -0
  814. package/dist/icons/components/UiListChecks.d.ts +15 -0
  815. package/dist/icons/components/UiListChecks.d.ts.map +1 -0
  816. package/dist/icons/components/UiListChecks.js +15 -0
  817. package/dist/icons/components/UiListChecks.js.map +1 -0
  818. package/dist/icons/components/UiLogoAnthropic.cjs +10 -0
  819. package/dist/icons/components/UiLogoAnthropic.cjs.map +1 -0
  820. package/dist/icons/components/UiLogoAnthropic.d.ts +9 -0
  821. package/dist/icons/components/UiLogoAnthropic.d.ts.map +1 -0
  822. package/dist/icons/components/UiLogoAnthropic.js +10 -0
  823. package/dist/icons/components/UiLogoAnthropic.js.map +1 -0
  824. package/dist/icons/components/UiLogoClaude.cjs +10 -0
  825. package/dist/icons/components/UiLogoClaude.cjs.map +1 -0
  826. package/dist/icons/components/UiLogoClaude.d.ts +9 -0
  827. package/dist/icons/components/UiLogoClaude.d.ts.map +1 -0
  828. package/dist/icons/components/UiLogoClaude.js +10 -0
  829. package/dist/icons/components/UiLogoClaude.js.map +1 -0
  830. package/dist/icons/components/UiLogoDeepseek.cjs +10 -0
  831. package/dist/icons/components/UiLogoDeepseek.cjs.map +1 -0
  832. package/dist/icons/components/UiLogoDeepseek.d.ts +9 -0
  833. package/dist/icons/components/UiLogoDeepseek.d.ts.map +1 -0
  834. package/dist/icons/components/UiLogoDeepseek.js +10 -0
  835. package/dist/icons/components/UiLogoDeepseek.js.map +1 -0
  836. package/dist/icons/components/UiLogoGemini.cjs +10 -0
  837. package/dist/icons/components/UiLogoGemini.cjs.map +1 -0
  838. package/dist/icons/components/UiLogoGemini.d.ts +9 -0
  839. package/dist/icons/components/UiLogoGemini.d.ts.map +1 -0
  840. package/dist/icons/components/UiLogoGemini.js +10 -0
  841. package/dist/icons/components/UiLogoGemini.js.map +1 -0
  842. package/dist/icons/components/UiLogoGoogle.cjs +10 -0
  843. package/dist/icons/components/UiLogoGoogle.cjs.map +1 -0
  844. package/dist/icons/components/UiLogoGoogle.d.ts +9 -0
  845. package/dist/icons/components/UiLogoGoogle.d.ts.map +1 -0
  846. package/dist/icons/components/UiLogoGoogle.js +10 -0
  847. package/dist/icons/components/UiLogoGoogle.js.map +1 -0
  848. package/dist/icons/components/UiLogoHuggingface.cjs +10 -0
  849. package/dist/icons/components/UiLogoHuggingface.cjs.map +1 -0
  850. package/dist/icons/components/UiLogoHuggingface.d.ts +9 -0
  851. package/dist/icons/components/UiLogoHuggingface.d.ts.map +1 -0
  852. package/dist/icons/components/UiLogoHuggingface.js +10 -0
  853. package/dist/icons/components/UiLogoHuggingface.js.map +1 -0
  854. package/dist/icons/components/UiLogoMeta.cjs +10 -0
  855. package/dist/icons/components/UiLogoMeta.cjs.map +1 -0
  856. package/dist/icons/components/UiLogoMeta.d.ts +9 -0
  857. package/dist/icons/components/UiLogoMeta.d.ts.map +1 -0
  858. package/dist/icons/components/UiLogoMeta.js +10 -0
  859. package/dist/icons/components/UiLogoMeta.js.map +1 -0
  860. package/dist/icons/components/UiLogoMistral.cjs +10 -0
  861. package/dist/icons/components/UiLogoMistral.cjs.map +1 -0
  862. package/dist/icons/components/UiLogoMistral.d.ts +9 -0
  863. package/dist/icons/components/UiLogoMistral.d.ts.map +1 -0
  864. package/dist/icons/components/UiLogoMistral.js +10 -0
  865. package/dist/icons/components/UiLogoMistral.js.map +1 -0
  866. package/dist/icons/components/UiLogoOllama.cjs +10 -0
  867. package/dist/icons/components/UiLogoOllama.cjs.map +1 -0
  868. package/dist/icons/components/UiLogoOllama.d.ts +9 -0
  869. package/dist/icons/components/UiLogoOllama.d.ts.map +1 -0
  870. package/dist/icons/components/UiLogoOllama.js +10 -0
  871. package/dist/icons/components/UiLogoOllama.js.map +1 -0
  872. package/dist/icons/components/UiLogoOpenai.cjs +10 -0
  873. package/dist/icons/components/UiLogoOpenai.cjs.map +1 -0
  874. package/dist/icons/components/UiLogoOpenai.d.ts +9 -0
  875. package/dist/icons/components/UiLogoOpenai.d.ts.map +1 -0
  876. package/dist/icons/components/UiLogoOpenai.js +10 -0
  877. package/dist/icons/components/UiLogoOpenai.js.map +1 -0
  878. package/dist/icons/components/UiLogoPerplexity.cjs +10 -0
  879. package/dist/icons/components/UiLogoPerplexity.cjs.map +1 -0
  880. package/dist/icons/components/UiLogoPerplexity.d.ts +9 -0
  881. package/dist/icons/components/UiLogoPerplexity.d.ts.map +1 -0
  882. package/dist/icons/components/UiLogoPerplexity.js +10 -0
  883. package/dist/icons/components/UiLogoPerplexity.js.map +1 -0
  884. package/dist/icons/components/UiPalette.cjs +15 -0
  885. package/dist/icons/components/UiPalette.cjs.map +1 -0
  886. package/dist/icons/components/UiPalette.d.ts +15 -0
  887. package/dist/icons/components/UiPalette.d.ts.map +1 -0
  888. package/dist/icons/components/UiPalette.js +15 -0
  889. package/dist/icons/components/UiPalette.js.map +1 -0
  890. package/dist/icons/components/UiPauseCircle.cjs +15 -0
  891. package/dist/icons/components/UiPauseCircle.cjs.map +1 -0
  892. package/dist/icons/components/UiPauseCircle.d.ts +15 -0
  893. package/dist/icons/components/UiPauseCircle.d.ts.map +1 -0
  894. package/dist/icons/components/UiPauseCircle.js +15 -0
  895. package/dist/icons/components/UiPauseCircle.js.map +1 -0
  896. package/dist/icons/components/UiPencilSimpleLine.cjs +15 -0
  897. package/dist/icons/components/UiPencilSimpleLine.cjs.map +1 -0
  898. package/dist/icons/components/UiPencilSimpleLine.d.ts +15 -0
  899. package/dist/icons/components/UiPencilSimpleLine.d.ts.map +1 -0
  900. package/dist/icons/components/UiPencilSimpleLine.js +15 -0
  901. package/dist/icons/components/UiPencilSimpleLine.js.map +1 -0
  902. package/dist/icons/components/UiPlugsConnected.cjs +15 -0
  903. package/dist/icons/components/UiPlugsConnected.cjs.map +1 -0
  904. package/dist/icons/components/UiPlugsConnected.d.ts +15 -0
  905. package/dist/icons/components/UiPlugsConnected.d.ts.map +1 -0
  906. package/dist/icons/components/UiPlugsConnected.js +15 -0
  907. package/dist/icons/components/UiPlugsConnected.js.map +1 -0
  908. package/dist/icons/components/UiProhibit.cjs +15 -0
  909. package/dist/icons/components/UiProhibit.cjs.map +1 -0
  910. package/dist/icons/components/UiProhibit.d.ts +15 -0
  911. package/dist/icons/components/UiProhibit.d.ts.map +1 -0
  912. package/dist/icons/components/UiProhibit.js +15 -0
  913. package/dist/icons/components/UiProhibit.js.map +1 -0
  914. package/dist/icons/components/UiRepeat.cjs +15 -0
  915. package/dist/icons/components/UiRepeat.cjs.map +1 -0
  916. package/dist/icons/components/UiRepeat.d.ts +15 -0
  917. package/dist/icons/components/UiRepeat.d.ts.map +1 -0
  918. package/dist/icons/components/UiRepeat.js +15 -0
  919. package/dist/icons/components/UiRepeat.js.map +1 -0
  920. package/dist/icons/components/UiScan.cjs +15 -0
  921. package/dist/icons/components/UiScan.cjs.map +1 -0
  922. package/dist/icons/components/UiScan.d.ts +15 -0
  923. package/dist/icons/components/UiScan.d.ts.map +1 -0
  924. package/dist/icons/components/UiScan.js +15 -0
  925. package/dist/icons/components/UiScan.js.map +1 -0
  926. package/dist/icons/components/UiScroll.cjs +15 -0
  927. package/dist/icons/components/UiScroll.cjs.map +1 -0
  928. package/dist/icons/components/UiScroll.d.ts +15 -0
  929. package/dist/icons/components/UiScroll.d.ts.map +1 -0
  930. package/dist/icons/components/UiScroll.js +15 -0
  931. package/dist/icons/components/UiScroll.js.map +1 -0
  932. package/dist/icons/components/UiShieldSlash.cjs +15 -0
  933. package/dist/icons/components/UiShieldSlash.cjs.map +1 -0
  934. package/dist/icons/components/UiShieldSlash.d.ts +15 -0
  935. package/dist/icons/components/UiShieldSlash.d.ts.map +1 -0
  936. package/dist/icons/components/UiShieldSlash.js +15 -0
  937. package/dist/icons/components/UiShieldSlash.js.map +1 -0
  938. package/dist/icons/components/UiStack.cjs +19 -0
  939. package/dist/icons/components/UiStack.cjs.map +1 -0
  940. package/dist/icons/components/UiStack.d.ts +15 -0
  941. package/dist/icons/components/UiStack.d.ts.map +1 -0
  942. package/dist/icons/components/UiStack.js +19 -0
  943. package/dist/icons/components/UiStack.js.map +1 -0
  944. package/dist/icons/components/UiStrategy.cjs +15 -0
  945. package/dist/icons/components/UiStrategy.cjs.map +1 -0
  946. package/dist/icons/components/UiStrategy.d.ts +15 -0
  947. package/dist/icons/components/UiStrategy.d.ts.map +1 -0
  948. package/dist/icons/components/UiStrategy.js +15 -0
  949. package/dist/icons/components/UiStrategy.js.map +1 -0
  950. package/dist/icons/components/UiThermometer.cjs +15 -0
  951. package/dist/icons/components/UiThermometer.cjs.map +1 -0
  952. package/dist/icons/components/UiThermometer.d.ts +15 -0
  953. package/dist/icons/components/UiThermometer.d.ts.map +1 -0
  954. package/dist/icons/components/UiThermometer.js +15 -0
  955. package/dist/icons/components/UiThermometer.js.map +1 -0
  956. package/dist/icons/components/UiTimer.cjs +15 -0
  957. package/dist/icons/components/UiTimer.cjs.map +1 -0
  958. package/dist/icons/components/UiTimer.d.ts +15 -0
  959. package/dist/icons/components/UiTimer.d.ts.map +1 -0
  960. package/dist/icons/components/UiTimer.js +15 -0
  961. package/dist/icons/components/UiTimer.js.map +1 -0
  962. package/dist/icons/index.d.ts +84 -0
  963. package/dist/icons/index.d.ts.map +1 -1
  964. package/dist/icons.cjs +132 -0
  965. package/dist/icons.cjs.map +1 -1
  966. package/dist/icons.js +132 -0
  967. package/dist/icons.js.map +1 -1
  968. package/dist/index.cjs +186 -1
  969. package/dist/index.cjs.map +1 -1
  970. package/dist/index.js +190 -5
  971. package/dist/index.js.map +1 -1
  972. package/dist/layout/Workspace.cjs +191 -0
  973. package/dist/layout/Workspace.cjs.map +1 -0
  974. package/dist/layout/Workspace.d.ts +17 -0
  975. package/dist/layout/Workspace.d.ts.map +1 -0
  976. package/dist/layout/Workspace.js +191 -0
  977. package/dist/layout/Workspace.js.map +1 -0
  978. package/dist/layout/Workspace.model.cjs +142 -0
  979. package/dist/layout/Workspace.model.cjs.map +1 -0
  980. package/dist/layout/Workspace.model.d.ts +43 -0
  981. package/dist/layout/Workspace.model.d.ts.map +1 -0
  982. package/dist/layout/Workspace.model.js +142 -0
  983. package/dist/layout/Workspace.model.js.map +1 -0
  984. package/dist/layout/Workspace.regions.cjs +305 -0
  985. package/dist/layout/Workspace.regions.cjs.map +1 -0
  986. package/dist/layout/Workspace.regions.d.ts +17 -0
  987. package/dist/layout/Workspace.regions.d.ts.map +1 -0
  988. package/dist/layout/Workspace.regions.js +305 -0
  989. package/dist/layout/Workspace.regions.js.map +1 -0
  990. package/dist/lib/tokens.cjs +14 -0
  991. package/dist/lib/tokens.cjs.map +1 -0
  992. package/dist/lib/tokens.d.ts +5 -0
  993. package/dist/lib/tokens.d.ts.map +1 -0
  994. package/dist/lib/tokens.js +14 -0
  995. package/dist/lib/tokens.js.map +1 -0
  996. package/dist/monaco/MonacoEditor.cjs +69 -0
  997. package/dist/monaco/MonacoEditor.cjs.map +1 -0
  998. package/dist/monaco/MonacoEditor.d.ts +5 -0
  999. package/dist/monaco/MonacoEditor.d.ts.map +1 -0
  1000. package/dist/monaco/MonacoEditor.js +52 -0
  1001. package/dist/monaco/MonacoEditor.js.map +1 -0
  1002. package/dist/monaco/MonacoProvider.cjs +22 -0
  1003. package/dist/monaco/MonacoProvider.cjs.map +1 -0
  1004. package/dist/monaco/MonacoProvider.d.ts +3 -0
  1005. package/dist/monaco/MonacoProvider.d.ts.map +1 -0
  1006. package/dist/monaco/MonacoProvider.js +22 -0
  1007. package/dist/monaco/MonacoProvider.js.map +1 -0
  1008. package/dist/monaco/MonacoSchemaEditor.cjs +108 -0
  1009. package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -0
  1010. package/dist/monaco/MonacoSchemaEditor.d.ts +4 -0
  1011. package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -0
  1012. package/dist/monaco/MonacoSchemaEditor.js +108 -0
  1013. package/dist/monaco/MonacoSchemaEditor.js.map +1 -0
  1014. package/dist/monaco/schema-normalizer.cjs +38 -0
  1015. package/dist/monaco/schema-normalizer.cjs.map +1 -0
  1016. package/dist/monaco/schema-normalizer.d.ts +7 -0
  1017. package/dist/monaco/schema-normalizer.d.ts.map +1 -0
  1018. package/dist/monaco/schema-normalizer.js +38 -0
  1019. package/dist/monaco/schema-normalizer.js.map +1 -0
  1020. package/dist/monaco/schema-registry.cjs +67 -0
  1021. package/dist/monaco/schema-registry.cjs.map +1 -0
  1022. package/dist/monaco/schema-registry.d.ts +3 -0
  1023. package/dist/monaco/schema-registry.d.ts.map +1 -0
  1024. package/dist/monaco/schema-registry.js +67 -0
  1025. package/dist/monaco/schema-registry.js.map +1 -0
  1026. package/dist/monaco/types.d.ts +31 -0
  1027. package/dist/monaco/types.d.ts.map +1 -0
  1028. package/dist/monaco/use-monaco-worker.cjs +10 -0
  1029. package/dist/monaco/use-monaco-worker.cjs.map +1 -0
  1030. package/dist/monaco/use-monaco-worker.d.ts +4 -0
  1031. package/dist/monaco/use-monaco-worker.d.ts.map +1 -0
  1032. package/dist/monaco/use-monaco-worker.js +10 -0
  1033. package/dist/monaco/use-monaco-worker.js.map +1 -0
  1034. package/dist/monaco-schema.cjs +5 -0
  1035. package/dist/monaco-schema.cjs.map +1 -0
  1036. package/dist/monaco-schema.d.ts +3 -0
  1037. package/dist/monaco-schema.d.ts.map +1 -0
  1038. package/dist/monaco-schema.js +5 -0
  1039. package/dist/monaco-schema.js.map +1 -0
  1040. package/dist/monaco.cjs +11 -0
  1041. package/dist/monaco.cjs.map +1 -0
  1042. package/dist/monaco.d.ts +6 -0
  1043. package/dist/monaco.d.ts.map +1 -0
  1044. package/dist/monaco.js +11 -0
  1045. package/dist/monaco.js.map +1 -0
  1046. package/dist/overlay/CellActions.cjs +183 -0
  1047. package/dist/overlay/CellActions.cjs.map +1 -0
  1048. package/dist/overlay/CellActions.d.ts +18 -0
  1049. package/dist/overlay/CellActions.d.ts.map +1 -0
  1050. package/dist/overlay/CellActions.js +183 -0
  1051. package/dist/overlay/CellActions.js.map +1 -0
  1052. package/dist/overlay/DropdownMenu.cjs +50 -59
  1053. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  1054. package/dist/overlay/DropdownMenu.d.ts +21 -2
  1055. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  1056. package/dist/overlay/DropdownMenu.js +38 -47
  1057. package/dist/overlay/DropdownMenu.js.map +1 -1
  1058. package/dist/overlay/DropdownMenuSubmenu.cjs +210 -0
  1059. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -0
  1060. package/dist/overlay/DropdownMenuSubmenu.d.ts +12 -0
  1061. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -0
  1062. package/dist/overlay/DropdownMenuSubmenu.js +210 -0
  1063. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -0
  1064. package/dist/overlay/Modal.cjs +14 -2
  1065. package/dist/overlay/Modal.cjs.map +1 -1
  1066. package/dist/overlay/Modal.d.ts +9 -2
  1067. package/dist/overlay/Modal.d.ts.map +1 -1
  1068. package/dist/overlay/Modal.js +14 -2
  1069. package/dist/overlay/Modal.js.map +1 -1
  1070. package/dist/overlay/dropdownMenuContext.cjs +16 -0
  1071. package/dist/overlay/dropdownMenuContext.cjs.map +1 -0
  1072. package/dist/overlay/dropdownMenuContext.d.ts +16 -0
  1073. package/dist/overlay/dropdownMenuContext.d.ts.map +1 -0
  1074. package/dist/overlay/dropdownMenuContext.js +16 -0
  1075. package/dist/overlay/dropdownMenuContext.js.map +1 -0
  1076. package/dist/rpc/CommandOutput.cjs +28 -9
  1077. package/dist/rpc/CommandOutput.cjs.map +1 -1
  1078. package/dist/rpc/CommandOutput.d.ts +4 -2
  1079. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  1080. package/dist/rpc/CommandOutput.js +28 -9
  1081. package/dist/rpc/CommandOutput.js.map +1 -1
  1082. package/dist/rpc/EntityExplorerApp.cjs +8 -1
  1083. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  1084. package/dist/rpc/EntityExplorerApp.d.ts +9 -1
  1085. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  1086. package/dist/rpc/EntityExplorerApp.js +8 -1
  1087. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  1088. package/dist/rpc/OperationActionBar.cjs +63 -41
  1089. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  1090. package/dist/rpc/OperationActionBar.d.ts +2 -1
  1091. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  1092. package/dist/rpc/OperationActionBar.js +63 -41
  1093. package/dist/rpc/OperationActionBar.js.map +1 -1
  1094. package/dist/rpc/OperationCatalog.cjs +111 -80
  1095. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  1096. package/dist/rpc/OperationCatalog.d.ts +2 -1
  1097. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  1098. package/dist/rpc/OperationCatalog.js +112 -81
  1099. package/dist/rpc/OperationCatalog.js.map +1 -1
  1100. package/dist/rpc/OperationCommandPage.cjs +2 -0
  1101. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  1102. package/dist/rpc/OperationCommandPage.d.ts +3 -2
  1103. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  1104. package/dist/rpc/OperationCommandPage.js +2 -0
  1105. package/dist/rpc/OperationCommandPage.js.map +1 -1
  1106. package/dist/rpc/OperationEntityContextPicker.cjs +448 -0
  1107. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -0
  1108. package/dist/rpc/OperationEntityContextPicker.d.ts +28 -0
  1109. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -0
  1110. package/dist/rpc/OperationEntityContextPicker.js +448 -0
  1111. package/dist/rpc/OperationEntityContextPicker.js.map +1 -0
  1112. package/dist/rpc/OperationEntityContextPicker.model.cjs +60 -0
  1113. package/dist/rpc/OperationEntityContextPicker.model.cjs.map +1 -0
  1114. package/dist/rpc/OperationEntityContextPicker.model.d.ts +7 -0
  1115. package/dist/rpc/OperationEntityContextPicker.model.d.ts.map +1 -0
  1116. package/dist/rpc/OperationEntityContextPicker.model.js +60 -0
  1117. package/dist/rpc/OperationEntityContextPicker.model.js.map +1 -0
  1118. package/dist/rpc/OperationEntityPage.cjs +47 -22
  1119. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  1120. package/dist/rpc/OperationEntityPage.d.ts +32 -2
  1121. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  1122. package/dist/rpc/OperationEntityPage.js +47 -22
  1123. package/dist/rpc/OperationEntityPage.js.map +1 -1
  1124. package/dist/rpc/OperationResultView.cjs +4 -2
  1125. package/dist/rpc/OperationResultView.cjs.map +1 -1
  1126. package/dist/rpc/OperationResultView.d.ts +3 -2
  1127. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  1128. package/dist/rpc/OperationResultView.js +4 -2
  1129. package/dist/rpc/OperationResultView.js.map +1 -1
  1130. package/dist/rpc/SchemaActionForm.cjs +151 -17
  1131. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  1132. package/dist/rpc/SchemaActionForm.d.ts +7 -1
  1133. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  1134. package/dist/rpc/SchemaActionForm.js +152 -18
  1135. package/dist/rpc/SchemaActionForm.js.map +1 -1
  1136. package/dist/rpc/types.cjs.map +1 -1
  1137. package/dist/rpc/types.d.ts +24 -0
  1138. package/dist/rpc/types.d.ts.map +1 -1
  1139. package/dist/rpc/types.js.map +1 -1
  1140. package/dist/rpc.cjs +6 -0
  1141. package/dist/rpc.cjs.map +1 -1
  1142. package/dist/rpc.d.ts +5 -3
  1143. package/dist/rpc.d.ts.map +1 -1
  1144. package/dist/rpc.js +6 -0
  1145. package/dist/rpc.js.map +1 -1
  1146. package/dist/styles.css +1 -1
  1147. package/dist/tailwind-preset.cjs +8 -0
  1148. package/dist/tailwind-preset.cjs.map +1 -1
  1149. package/dist/tailwind-preset.d.ts.map +1 -1
  1150. package/dist/tailwind-preset.js +8 -0
  1151. package/dist/tailwind-preset.js.map +1 -1
  1152. package/oxlint-plugins/README.md +82 -19
  1153. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +5 -50
  1154. package/oxlint-plugins/clicky-ui-no-direct-z-index.js +134 -0
  1155. package/oxlint-plugins/clicky-ui.js +3 -0
  1156. package/package.json +26 -3
  1157. package/dist/data/chat/ContextUsage.cjs +0 -99
  1158. package/dist/data/chat/ContextUsage.cjs.map +0 -1
  1159. package/dist/data/chat/ContextUsage.d.ts +0 -19
  1160. package/dist/data/chat/ContextUsage.d.ts.map +0 -1
  1161. package/dist/data/chat/ContextUsage.js +0 -99
  1162. package/dist/data/chat/ContextUsage.js.map +0 -1
@@ -0,0 +1,300 @@
1
+ import { stringify, parseDocument } from "yaml";
2
+ import { compactAISpecRuntime } from "../ai/SpecRuntimeEditor.model.js";
3
+ const AI_RUNTIME_KEYS = /* @__PURE__ */ new Set([
4
+ "backend",
5
+ "budget",
6
+ "effort",
7
+ "id",
8
+ "model",
9
+ "noCache",
10
+ "prompt",
11
+ "temperature"
12
+ ]);
13
+ const AI_MODEL_KEYS = /* @__PURE__ */ new Set([
14
+ "backend",
15
+ "budget",
16
+ "effort",
17
+ "id",
18
+ "model",
19
+ "noCache",
20
+ "temperature"
21
+ ]);
22
+ const AI_EXTRA_KEYS = /* @__PURE__ */ new Set(["maxConcurrent", "cacheTTL"]);
23
+ function parseFixtureFrontmatter(markdown) {
24
+ const split = splitMarkdownFrontmatter(markdown);
25
+ if (!split.hasFrontmatter) {
26
+ return {
27
+ ok: true,
28
+ hasFrontmatter: false,
29
+ frontmatter: {},
30
+ raw: "",
31
+ body: markdown
32
+ };
33
+ }
34
+ if (!split.closed) {
35
+ return {
36
+ ok: false,
37
+ hasFrontmatter: true,
38
+ error: "Frontmatter closing delimiter not found",
39
+ raw: split.raw,
40
+ body: split.body
41
+ };
42
+ }
43
+ const parsed = parseYamlRecord(split.raw);
44
+ if (!parsed.ok) {
45
+ return {
46
+ ok: false,
47
+ hasFrontmatter: true,
48
+ error: parsed.error,
49
+ raw: split.raw,
50
+ body: split.body
51
+ };
52
+ }
53
+ return {
54
+ ok: true,
55
+ hasFrontmatter: true,
56
+ frontmatter: parsed.value,
57
+ raw: split.raw,
58
+ body: split.body
59
+ };
60
+ }
61
+ function fixtureFrontmatterState(frontmatter) {
62
+ const ai = recordValue(frontmatter.ai);
63
+ const runtime = aiToRuntime(ai);
64
+ const envVars = envToRuntimeEnvVars(frontmatter.env);
65
+ if (envVars.length > 0) {
66
+ runtime.setup = { ...runtime.setup, envVars };
67
+ }
68
+ const aiExtras = aiToExtras(ai);
69
+ return { runtime, aiExtras };
70
+ }
71
+ function applyFixtureFrontmatterState(markdown, state, options = {}) {
72
+ const parsed = parseFixtureFrontmatter(markdown);
73
+ const body = parsed.body;
74
+ const existing = parsed.ok ? parsed.frontmatter : {};
75
+ const frontmatter = frontmatterFromState(existing, state, options);
76
+ return serializeFixtureFrontmatter(frontmatter, body);
77
+ }
78
+ function applyFixtureFrontmatterRaw(markdown, raw) {
79
+ const split = splitMarkdownFrontmatter(markdown);
80
+ const body = split.hasFrontmatter ? split.body : markdown;
81
+ if (raw.trim() === "") return body;
82
+ const normalizedRaw = raw.endsWith("\n") ? raw : `${raw}
83
+ `;
84
+ return `---
85
+ ${normalizedRaw}---
86
+ ${body}`;
87
+ }
88
+ function frontmatterFromState(existing, state, options = {}) {
89
+ var _a;
90
+ const next = omitKeys(existing, ["ai", "env"]);
91
+ const currentAI = recordValue(existing.ai);
92
+ const ai = {
93
+ ...omitControlledAIKeys(currentAI),
94
+ ...runtimeToAI(state.runtime, options),
95
+ ...compactAIExtras(state.aiExtras)
96
+ };
97
+ const env = runtimeEnvVarsToEnv((_a = state.runtime.setup) == null ? void 0 : _a.envVars);
98
+ if (hasKeys(ai)) next.ai = ai;
99
+ if (hasKeys(env)) next.env = env;
100
+ return next;
101
+ }
102
+ function aiToRuntime(ai) {
103
+ const runtime = {};
104
+ const model = stringValue(ai.model);
105
+ if (model) runtime.model = model;
106
+ const backend = stringValue(ai.backend);
107
+ if (backend) runtime.backend = backend;
108
+ const id = stringValue(ai.id);
109
+ if (id) runtime.id = id;
110
+ const effort = stringValue(ai.effort);
111
+ if (effort) runtime.effort = effort;
112
+ const temperature = numberValue(ai.temperature);
113
+ if (temperature != null) runtime.temperature = temperature;
114
+ if (ai.noCache === true) runtime.noCache = true;
115
+ const budget = recordValue(ai.budget);
116
+ const maxTokens = numberValue(ai.maxTokens) ?? numberValue(budget.maxTokens);
117
+ const cost = numberValue(budget.cost);
118
+ const maxTurns = numberValue(budget.maxTurns);
119
+ const timeout = stringValue(budget.timeout);
120
+ if (maxTokens != null || cost != null || maxTurns != null || timeout) {
121
+ runtime.budget = {
122
+ ...cost != null ? { cost } : {},
123
+ ...maxTokens != null ? { maxTokens } : {},
124
+ ...maxTurns != null ? { maxTurns } : {},
125
+ ...timeout ? { timeout } : {}
126
+ };
127
+ }
128
+ const prompt = promptToRuntimePrompt(ai.prompt);
129
+ if (prompt) runtime.prompt = prompt;
130
+ return runtime;
131
+ }
132
+ function runtimeToAI(runtime, options = {}) {
133
+ var _a;
134
+ const compact = compactAISpecRuntime(runtime);
135
+ const ai = {};
136
+ for (const key of AI_RUNTIME_KEYS) {
137
+ if (options.inheritModel && AI_MODEL_KEYS.has(key)) continue;
138
+ const value = compact[key];
139
+ if (value != null && (key !== "budget" || hasKeys(recordValue(value)))) {
140
+ ai[key] = value;
141
+ }
142
+ }
143
+ const maxTokens = (_a = compact.budget) == null ? void 0 : _a.maxTokens;
144
+ if (maxTokens != null && !options.inheritModel) {
145
+ delete ai.budget;
146
+ ai.maxTokens = maxTokens;
147
+ }
148
+ return ai;
149
+ }
150
+ function promptToRuntimePrompt(value) {
151
+ if (typeof value === "string") {
152
+ const user2 = stringValue(value);
153
+ return user2 ? { user: user2 } : void 0;
154
+ }
155
+ const prompt = recordValue(value);
156
+ const user = stringValue(prompt.user);
157
+ const system = stringValue(prompt.system);
158
+ const appendSystem = stringValue(prompt.appendSystem);
159
+ const source = stringValue(prompt.source);
160
+ const metadata = recordStringMap(prompt.metadata);
161
+ const out = {
162
+ ...user ? { user } : {},
163
+ ...system ? { system } : {},
164
+ ...appendSystem ? { appendSystem } : {},
165
+ ...source ? { source } : {},
166
+ ...metadata ? { metadata } : {}
167
+ };
168
+ return hasKeys(out) ? out : void 0;
169
+ }
170
+ function aiToExtras(ai) {
171
+ const maxConcurrent = numberValue(ai.maxConcurrent);
172
+ const cacheTTL = stringValue(ai.cacheTTL);
173
+ return {
174
+ ...maxConcurrent != null ? { maxConcurrent } : {},
175
+ ...cacheTTL ? { cacheTTL } : {}
176
+ };
177
+ }
178
+ function compactAIExtras(extras) {
179
+ return {
180
+ ...numberValue(extras.maxConcurrent) != null ? { maxConcurrent: numberValue(extras.maxConcurrent) } : {},
181
+ ...stringValue(extras.cacheTTL) ? { cacheTTL: stringValue(extras.cacheTTL) } : {}
182
+ };
183
+ }
184
+ function envToRuntimeEnvVars(value) {
185
+ if (!isRecord(value)) return [];
186
+ const envVars = [];
187
+ for (const [name, envValue] of Object.entries(value)) {
188
+ const key = name.trim();
189
+ if (!key || typeof envValue !== "string") continue;
190
+ envVars.push({ name: key, value: envValue });
191
+ }
192
+ return envVars;
193
+ }
194
+ function runtimeEnvVarsToEnv(value) {
195
+ const env = {};
196
+ for (const item of value ?? []) {
197
+ const name = stringValue(item.name);
198
+ if (!name) continue;
199
+ const literal = typeof item.value === "string" ? item.value : void 0;
200
+ const valueFrom = typeof item.valueFrom === "string" ? item.valueFrom : void 0;
201
+ if (literal != null) env[name] = literal;
202
+ else if (valueFrom) env[name] = valueFrom;
203
+ }
204
+ return env;
205
+ }
206
+ function serializeFixtureFrontmatter(frontmatter, body) {
207
+ if (!hasKeys(frontmatter)) return body;
208
+ const yaml = stringify(frontmatter, {
209
+ lineWidth: 0,
210
+ collectionStyle: "block"
211
+ });
212
+ const normalizedYaml = yaml.endsWith("\n") ? yaml : `${yaml}
213
+ `;
214
+ return `---
215
+ ${normalizedYaml}---
216
+ ${body}`;
217
+ }
218
+ function splitMarkdownFrontmatter(markdown) {
219
+ const lines = splitLinesWithEndings(markdown);
220
+ if (stripLineEnding(lines[0] ?? "") !== "---") return { hasFrontmatter: false };
221
+ for (let index = 1; index < lines.length; index += 1) {
222
+ const line = stripLineEnding(lines[index] ?? "");
223
+ if (line === "---" || line === "...") {
224
+ return {
225
+ hasFrontmatter: true,
226
+ closed: true,
227
+ raw: lines.slice(1, index).join(""),
228
+ body: lines.slice(index + 1).join("")
229
+ };
230
+ }
231
+ }
232
+ return {
233
+ hasFrontmatter: true,
234
+ closed: false,
235
+ raw: lines.slice(1).join(""),
236
+ body: ""
237
+ };
238
+ }
239
+ function splitLinesWithEndings(text) {
240
+ if (text === "") return [];
241
+ const lines = text.match(/[^\n]*(?:\n|$)/g) ?? [];
242
+ if (lines.at(-1) === "") lines.pop();
243
+ return lines;
244
+ }
245
+ function stripLineEnding(line) {
246
+ return line.replace(/\r?\n$/, "").trim();
247
+ }
248
+ function parseYamlRecord(yaml) {
249
+ if (yaml.trim() === "") return { ok: true, value: {} };
250
+ const doc = parseDocument(yaml, { prettyErrors: false });
251
+ const firstError = doc.errors[0];
252
+ if (firstError) return { ok: false, error: firstError.message };
253
+ const value = doc.toJSON();
254
+ if (value == null) return { ok: true, value: {} };
255
+ if (!isRecord(value)) return { ok: false, error: "Frontmatter root must be an object" };
256
+ return { ok: true, value };
257
+ }
258
+ function omitControlledAIKeys(ai) {
259
+ const omitted = /* @__PURE__ */ new Set([...AI_RUNTIME_KEYS, ...AI_EXTRA_KEYS, "maxTokens"]);
260
+ return omitKeys(ai, [...omitted]);
261
+ }
262
+ function omitKeys(value, keys) {
263
+ const omitted = new Set(keys);
264
+ return Object.fromEntries(
265
+ Object.entries(value).filter(([key]) => !omitted.has(key))
266
+ );
267
+ }
268
+ function recordValue(value) {
269
+ return isRecord(value) ? value : {};
270
+ }
271
+ function recordStringMap(value) {
272
+ if (!isRecord(value)) return void 0;
273
+ const out = {};
274
+ for (const [rawKey, rawValue] of Object.entries(value)) {
275
+ const key = rawKey.trim();
276
+ if (!key || typeof rawValue !== "string") continue;
277
+ out[key] = rawValue;
278
+ }
279
+ return hasKeys(out) ? out : void 0;
280
+ }
281
+ function stringValue(value) {
282
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
283
+ }
284
+ function numberValue(value) {
285
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
286
+ }
287
+ function hasKeys(value) {
288
+ return Object.keys(value).length > 0;
289
+ }
290
+ function isRecord(value) {
291
+ return typeof value === "object" && value != null && !Array.isArray(value);
292
+ }
293
+ export {
294
+ applyFixtureFrontmatterRaw,
295
+ applyFixtureFrontmatterState,
296
+ fixtureFrontmatterState,
297
+ frontmatterFromState,
298
+ parseFixtureFrontmatter
299
+ };
300
+ //# sourceMappingURL=fixture-frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-frontmatter.js","sources":["../../../src/data/FixtureEditor/fixture-frontmatter.ts"],"sourcesContent":["import { parseDocument, stringify } from \"yaml\";\nimport {\n compactAISpecRuntime,\n type AISpecRuntimeEnvVar,\n type AISpecRuntimeValue,\n} from \"../ai/SpecRuntimeEditor.model\";\n\nexport type FixtureAIExtras = {\n maxConcurrent?: number;\n cacheTTL?: string;\n};\n\nexport type FixtureFrontmatterState = {\n runtime: AISpecRuntimeValue;\n aiExtras: FixtureAIExtras;\n};\n\nexport type FixtureFrontmatterApplyOptions = {\n /** Omit model/runtime knobs so a verification fixture inherits its parent runtime. */\n inheritModel?: boolean | undefined;\n};\n\nexport type FixtureFrontmatterParseResult =\n | {\n ok: true;\n hasFrontmatter: boolean;\n frontmatter: Record<string, unknown>;\n raw: string;\n body: string;\n }\n | {\n ok: false;\n hasFrontmatter: true;\n error: string;\n raw: string;\n body: string;\n };\n\nconst AI_RUNTIME_KEYS = new Set([\n \"backend\",\n \"budget\",\n \"effort\",\n \"id\",\n \"model\",\n \"noCache\",\n \"prompt\",\n \"temperature\",\n]);\n\nconst AI_MODEL_KEYS = new Set([\n \"backend\",\n \"budget\",\n \"effort\",\n \"id\",\n \"model\",\n \"noCache\",\n \"temperature\",\n]);\n\nconst AI_EXTRA_KEYS = new Set([\"maxConcurrent\", \"cacheTTL\"]);\n\nexport function parseFixtureFrontmatter(\n markdown: string,\n): FixtureFrontmatterParseResult {\n const split = splitMarkdownFrontmatter(markdown);\n if (!split.hasFrontmatter) {\n return {\n ok: true,\n hasFrontmatter: false,\n frontmatter: {},\n raw: \"\",\n body: markdown,\n };\n }\n if (!split.closed) {\n return {\n ok: false,\n hasFrontmatter: true,\n error: \"Frontmatter closing delimiter not found\",\n raw: split.raw,\n body: split.body,\n };\n }\n\n const parsed = parseYamlRecord(split.raw);\n if (!parsed.ok) {\n return {\n ok: false,\n hasFrontmatter: true,\n error: parsed.error,\n raw: split.raw,\n body: split.body,\n };\n }\n\n return {\n ok: true,\n hasFrontmatter: true,\n frontmatter: parsed.value,\n raw: split.raw,\n body: split.body,\n };\n}\n\nexport function fixtureFrontmatterState(\n frontmatter: Record<string, unknown>,\n): FixtureFrontmatterState {\n const ai = recordValue(frontmatter.ai);\n const runtime = aiToRuntime(ai);\n const envVars = envToRuntimeEnvVars(frontmatter.env);\n if (envVars.length > 0) {\n runtime.setup = { ...runtime.setup, envVars };\n }\n const aiExtras = aiToExtras(ai);\n return { runtime, aiExtras };\n}\n\nexport function applyFixtureFrontmatterState(\n markdown: string,\n state: FixtureFrontmatterState,\n options: FixtureFrontmatterApplyOptions = {},\n): string {\n const parsed = parseFixtureFrontmatter(markdown);\n const body = parsed.body;\n const existing = parsed.ok ? parsed.frontmatter : {};\n const frontmatter = frontmatterFromState(existing, state, options);\n return serializeFixtureFrontmatter(frontmatter, body);\n}\n\nexport function applyFixtureFrontmatterRaw(\n markdown: string,\n raw: string,\n): string {\n const split = splitMarkdownFrontmatter(markdown);\n const body = split.hasFrontmatter ? split.body : markdown;\n if (raw.trim() === \"\") return body;\n const normalizedRaw = raw.endsWith(\"\\n\") ? raw : `${raw}\\n`;\n return `---\\n${normalizedRaw}---\\n${body}`;\n}\n\nexport function frontmatterFromState(\n existing: Record<string, unknown>,\n state: FixtureFrontmatterState,\n options: FixtureFrontmatterApplyOptions = {},\n): Record<string, unknown> {\n const next = omitKeys(existing, [\"ai\", \"env\"]);\n const currentAI = recordValue(existing.ai);\n const ai = {\n ...omitControlledAIKeys(currentAI),\n ...runtimeToAI(state.runtime, options),\n ...compactAIExtras(state.aiExtras),\n };\n const env = runtimeEnvVarsToEnv(state.runtime.setup?.envVars);\n\n if (hasKeys(ai)) next.ai = ai;\n if (hasKeys(env)) next.env = env;\n return next;\n}\n\nfunction aiToRuntime(ai: Record<string, unknown>): AISpecRuntimeValue {\n const runtime: AISpecRuntimeValue = {};\n const model = stringValue(ai.model);\n if (model) runtime.model = model;\n const backend = stringValue(ai.backend);\n if (backend) runtime.backend = backend;\n const id = stringValue(ai.id);\n if (id) runtime.id = id;\n const effort = stringValue(ai.effort);\n if (effort) runtime.effort = effort;\n const temperature = numberValue(ai.temperature);\n if (temperature != null) runtime.temperature = temperature;\n if (ai.noCache === true) runtime.noCache = true;\n\n const budget = recordValue(ai.budget);\n const maxTokens = numberValue(ai.maxTokens) ?? numberValue(budget.maxTokens);\n const cost = numberValue(budget.cost);\n const maxTurns = numberValue(budget.maxTurns);\n const timeout = stringValue(budget.timeout);\n if (maxTokens != null || cost != null || maxTurns != null || timeout) {\n runtime.budget = {\n ...(cost != null ? { cost } : {}),\n ...(maxTokens != null ? { maxTokens } : {}),\n ...(maxTurns != null ? { maxTurns } : {}),\n ...(timeout ? { timeout } : {}),\n };\n }\n\n const prompt = promptToRuntimePrompt(ai.prompt);\n if (prompt) runtime.prompt = prompt;\n\n return runtime;\n}\n\nfunction runtimeToAI(\n runtime: AISpecRuntimeValue,\n options: FixtureFrontmatterApplyOptions = {},\n): Record<string, unknown> {\n const compact = compactAISpecRuntime(runtime);\n const ai: Record<string, unknown> = {};\n for (const key of AI_RUNTIME_KEYS) {\n if (options.inheritModel && AI_MODEL_KEYS.has(key)) continue;\n const value = (compact as Record<string, unknown>)[key];\n if (value != null && (key !== \"budget\" || hasKeys(recordValue(value)))) {\n ai[key] = value;\n }\n }\n const maxTokens = compact.budget?.maxTokens;\n if (maxTokens != null && !options.inheritModel) {\n delete ai.budget;\n ai.maxTokens = maxTokens;\n }\n return ai;\n}\n\nfunction promptToRuntimePrompt(\n value: unknown,\n): AISpecRuntimeValue[\"prompt\"] | undefined {\n if (typeof value === \"string\") {\n const user = stringValue(value);\n return user ? { user } : undefined;\n }\n const prompt = recordValue(value);\n const user = stringValue(prompt.user);\n const system = stringValue(prompt.system);\n const appendSystem = stringValue(prompt.appendSystem);\n const source = stringValue(prompt.source);\n const metadata = recordStringMap(prompt.metadata);\n const out = {\n ...(user ? { user } : {}),\n ...(system ? { system } : {}),\n ...(appendSystem ? { appendSystem } : {}),\n ...(source ? { source } : {}),\n ...(metadata ? { metadata } : {}),\n };\n return hasKeys(out) ? out : undefined;\n}\n\nfunction aiToExtras(ai: Record<string, unknown>): FixtureAIExtras {\n const maxConcurrent = numberValue(ai.maxConcurrent);\n const cacheTTL = stringValue(ai.cacheTTL);\n return {\n ...(maxConcurrent != null ? { maxConcurrent } : {}),\n ...(cacheTTL ? { cacheTTL } : {}),\n };\n}\n\nfunction compactAIExtras(extras: FixtureAIExtras): Record<string, unknown> {\n return {\n ...(numberValue(extras.maxConcurrent) != null\n ? { maxConcurrent: numberValue(extras.maxConcurrent) }\n : {}),\n ...(stringValue(extras.cacheTTL) ? { cacheTTL: stringValue(extras.cacheTTL) } : {}),\n };\n}\n\nfunction envToRuntimeEnvVars(value: unknown): AISpecRuntimeEnvVar[] {\n if (!isRecord(value)) return [];\n const envVars: AISpecRuntimeEnvVar[] = [];\n for (const [name, envValue] of Object.entries(value)) {\n const key = name.trim();\n if (!key || typeof envValue !== \"string\") continue;\n envVars.push({ name: key, value: envValue });\n }\n return envVars;\n}\n\nfunction runtimeEnvVarsToEnv(\n value: AISpecRuntimeEnvVar[] | undefined,\n): Record<string, unknown> {\n const env: Record<string, unknown> = {};\n for (const item of value ?? []) {\n const name = stringValue(item.name);\n if (!name) continue;\n const literal = typeof item.value === \"string\" ? item.value : undefined;\n const valueFrom =\n typeof item.valueFrom === \"string\" ? item.valueFrom : undefined;\n if (literal != null) env[name] = literal;\n else if (valueFrom) env[name] = valueFrom;\n }\n return env;\n}\n\nfunction serializeFixtureFrontmatter(\n frontmatter: Record<string, unknown>,\n body: string,\n): string {\n if (!hasKeys(frontmatter)) return body;\n const yaml = stringify(frontmatter, {\n lineWidth: 0,\n collectionStyle: \"block\",\n });\n const normalizedYaml = yaml.endsWith(\"\\n\") ? yaml : `${yaml}\\n`;\n return `---\\n${normalizedYaml}---\\n${body}`;\n}\n\nfunction splitMarkdownFrontmatter(markdown: string):\n | { hasFrontmatter: false }\n | { hasFrontmatter: true; closed: boolean; raw: string; body: string } {\n const lines = splitLinesWithEndings(markdown);\n if (stripLineEnding(lines[0] ?? \"\") !== \"---\") return { hasFrontmatter: false };\n\n for (let index = 1; index < lines.length; index += 1) {\n const line = stripLineEnding(lines[index] ?? \"\");\n if (line === \"---\" || line === \"...\") {\n return {\n hasFrontmatter: true,\n closed: true,\n raw: lines.slice(1, index).join(\"\"),\n body: lines.slice(index + 1).join(\"\"),\n };\n }\n }\n\n return {\n hasFrontmatter: true,\n closed: false,\n raw: lines.slice(1).join(\"\"),\n body: \"\",\n };\n}\n\nfunction splitLinesWithEndings(text: string): string[] {\n if (text === \"\") return [];\n const lines = text.match(/[^\\n]*(?:\\n|$)/g) ?? [];\n if (lines.at(-1) === \"\") lines.pop();\n return lines;\n}\n\nfunction stripLineEnding(line: string): string {\n return line.replace(/\\r?\\n$/, \"\").trim();\n}\n\nfunction parseYamlRecord(\n yaml: string,\n): { ok: true; value: Record<string, unknown> } | { ok: false; error: string } {\n if (yaml.trim() === \"\") return { ok: true, value: {} };\n const doc = parseDocument(yaml, { prettyErrors: false });\n const firstError = doc.errors[0];\n if (firstError) return { ok: false, error: firstError.message };\n const value = doc.toJSON();\n if (value == null) return { ok: true, value: {} };\n if (!isRecord(value)) return { ok: false, error: \"Frontmatter root must be an object\" };\n return { ok: true, value };\n}\n\nfunction omitControlledAIKeys(ai: Record<string, unknown>): Record<string, unknown> {\n const omitted = new Set([...AI_RUNTIME_KEYS, ...AI_EXTRA_KEYS, \"maxTokens\"]);\n return omitKeys(ai, [...omitted]);\n}\n\nfunction omitKeys(\n value: Record<string, unknown>,\n keys: readonly string[],\n): Record<string, unknown> {\n const omitted = new Set(keys);\n return Object.fromEntries(\n Object.entries(value).filter(([key]) => !omitted.has(key)),\n );\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction recordStringMap(value: unknown): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const out: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(value)) {\n const key = rawKey.trim();\n if (!key || typeof rawValue !== \"string\") continue;\n out[key] = rawValue;\n }\n return hasKeys(out) ? out : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction hasKeys(value: Record<string, unknown>): boolean {\n return Object.keys(value).length > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value);\n}\n"],"names":["user"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { FixtureEditor } from './FixtureEditor';
2
+ export type { FixtureEditorProps, FixtureEditorSize, FixtureFenceOption, FixtureFenceSchemas, FixtureFrontmatterEditorOptions, FixtureFrontmatterMode, } from './types';
3
+ export { createChecklistMarkdown, createFenceMarkdown, fixtureFenceKind, fixtureFenceSchemaAliases, fixtureFenceSnippetInfo, parseFixtureYaml, resolveFixtureFenceSchema, schemaKeys, stringifyFixtureYaml, type FixtureFenceKind, type ParsedFixtureYaml, } from './fixture-blocks';
4
+ export { applyFixtureFrontmatterRaw, applyFixtureFrontmatterState, fixtureFrontmatterState, parseFixtureFrontmatter, type FixtureFrontmatterState, } from './fixture-frontmatter';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/FixtureEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { ReactNode } from 'react';
2
+ import { FormSize } from '../../components/json-schema-form-size';
3
+ import { JsonSchemaObject } from '../../components/json-schema-form-types';
4
+ import { SpecRuntimeEditorProps } from '../ai/SpecRuntimeEditor';
5
+ export type FixtureEditorSize = FormSize;
6
+ export type FixtureFenceSchemas = Record<string, JsonSchemaObject>;
7
+ export type FixtureFrontmatterMode = "default" | "verification";
8
+ export type FixtureFrontmatterEditorOptions = Pick<SpecRuntimeEditorProps, "models" | "families" | "tools" | "permissionCatalog" | "secretSelector" | "cliOptions"> & {
9
+ /** Verification fixtures inherit their parent runtime/workspace and cannot configure nested scoring. */
10
+ mode?: FixtureFrontmatterMode | undefined;
11
+ };
12
+ export type FixtureFenceOption = string | {
13
+ info: string;
14
+ label?: ReactNode;
15
+ description?: ReactNode;
16
+ };
17
+ export type FixtureEditorProps = {
18
+ /** Controlled fixture markdown source. */
19
+ value: string;
20
+ /** Called with the serialized fixture markdown after an edit. */
21
+ onChange: (markdown: string) => void;
22
+ /**
23
+ * Host-provided runner schemas keyed by logical fixture kind ("test", "lint")
24
+ * or full fence info string ("yaml test", "yaml lint").
25
+ * AI/reviewer instructions are markdown/source content, not fence schemas.
26
+ */
27
+ schemas?: FixtureFenceSchemas;
28
+ /** Optional allow-list/order for the add-fence menu. Defaults to schema keys. */
29
+ allowedFences?: readonly FixtureFenceOption[];
30
+ /**
31
+ * Enables a dialog for top-level fixture frontmatter. The dialog edits Gavel
32
+ * `ai:` runtime options and fixture `env:` while preserving unrelated keys.
33
+ */
34
+ frontmatterEditor?: boolean | FixtureFrontmatterEditorOptions;
35
+ /** Disables all editing controls while preserving the markdown rendering. */
36
+ readOnly?: boolean;
37
+ /** Form/input density forwarded to nested editors. */
38
+ size?: FixtureEditorSize;
39
+ /** Text shown in the empty markdown editor. */
40
+ placeholder?: string;
41
+ /** Classes applied to the component root. */
42
+ className?: string;
43
+ };
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/FixtureEditor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,cAAc,CAAC;AAEhE,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAChD,sBAAsB,EACpB,QAAQ,GACR,UAAU,GACV,OAAO,GACP,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,CACf,GAAG;IACF,wGAAwG;IACxG,IAAI,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG;IAC/B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,GAAG,+BAA+B,CAAC;IAC9D,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -14,7 +14,7 @@ const UiChevronDown = require("../icons/components/UiChevronDown.cjs");
14
14
  const UiZoomIn = require("../icons/components/UiZoomIn.cjs");
15
15
  const UiZoomOut = require("../icons/components/UiZoomOut.cjs");
16
16
  const TAGS_PATH = "details.tags";
17
- const DETAIL_ROW_CLASS = "grid-cols-[fit-content(30ch)_minmax(0,1fr)]";
17
+ const DETAIL_GRID_TEMPLATE = "fit-content(30ch) minmax(0, 1fr)";
18
18
  function fieldColumnKey(path) {
19
19
  if (!path.startsWith("details.") || path === TAGS_PATH) return void 0;
20
20
  const rest = path.slice("details.".length);
@@ -124,7 +124,7 @@ function LogDetails({
124
124
  TagList.TagPropertiesList,
125
125
  {
126
126
  tags: tagUtils.normalizeTags(entryValue),
127
- rowClassName: DETAIL_ROW_CLASS
127
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE
128
128
  }
129
129
  ) : /* @__PURE__ */ jsxRuntime.jsx(
130
130
  Properties.Properties,
@@ -135,7 +135,7 @@ function LogDetails({
135
135
  renderValue,
136
136
  prefixActions,
137
137
  suffixActions,
138
- rowClassName: DETAIL_ROW_CLASS,
138
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE,
139
139
  className: "mt-density-1"
140
140
  }
141
141
  )
@@ -150,7 +150,7 @@ function LogDetails({
150
150
  renderValue,
151
151
  prefixActions,
152
152
  suffixActions,
153
- rowClassName: DETAIL_ROW_CLASS
153
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE
154
154
  }
155
155
  );
156
156
  const tagActions = filterActions["tags"];
@@ -1 +1 @@
1
- {"version":3,"file":"LogDetails.cjs","sources":["../../src/data/LogDetails.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport type { DataTableColumn } from \"./DataTable\";\nimport { getFilterTokens } from \"./data-table-utils\";\nimport { Properties, type PropertiesAction, type PropertiesItem } from \"./Properties\";\nimport { TagActionsProvider, TagPropertiesList } from \"./cells/TagList\";\nimport { normalizeTags, type TagActionsContextValue } from \"./cells/tag-utils\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport type { LogsTableRow } from \"./logs-normalize\";\nimport { asRecord } from \"./log-utils\";\nimport { UiChevronDown, UiChevronRight, UiCopy, UiZoomIn, UiZoomOut } from \"../icons\";\n\nconst TAGS_PATH = \"details.tags\";\n\n// Key column shrinks to its content (no min/fixed width), never wider than 30ch.\nconst DETAIL_ROW_CLASS = \"grid-cols-[fit-content(30ch)_minmax(0,1fr)]\";\n\n/**\n * Maps a top-level detail field path (`details.<columnKey>`) to its column key.\n * Returns undefined for nested paths and the tags array, which have their own\n * filter affordances.\n */\nfunction fieldColumnKey(path: string): string | undefined {\n if (!path.startsWith(\"details.\") || path === TAGS_PATH) return undefined;\n const rest = path.slice(\"details.\".length);\n return rest && !rest.includes(\".\") ? rest : undefined;\n}\n\nexport function LogDetails({\n row,\n filterActions,\n columns,\n}: {\n row: LogsTableRow;\n filterActions: Record<string, TagActionsContextValue>;\n columns: DataTableColumn<LogsTableRow>[];\n}) {\n const [openPaths, setOpenPaths] = useState<Record<string, boolean>>({});\n const setPathOpen = (path: string, open: boolean) => {\n setOpenPaths((current) => ({ ...current, [path]: open }));\n };\n const details = useMemo(() => buildProcessedLogDetails(row), [row]);\n\n const labelForPath = (path: string) => formatPropertyLabel(path.split(\".\").pop() ?? path);\n\n const columnByKey = useMemo(\n () => new Map(columns.map((column) => [column.key, column])),\n [columns],\n );\n\n // Include/exclude is wired only for fields whose column is a multi/nested-multi\n // (tristate) filter; other columns (high-cardinality text, number, timestamp)\n // don't honor multiFilters, so they get no filter actions. The toggle token\n // must match the column's filter token (e.g. a status column maps \"INFO\" to a\n // normalized status), so it is derived via getFilterTokens rather than the\n // displayed value.\n const fieldFilter = (\n path: string,\n ): { actions: TagActionsContextValue; token: string } | undefined => {\n const key = fieldColumnKey(path);\n if (!key) return undefined;\n const actions = filterActions[key];\n const column = columnByKey.get(key);\n if (!actions || !column) return undefined;\n const token = getFilterTokens(row, column)[0];\n return token ? { actions, token } : undefined;\n };\n\n const prefixActions: PropertiesAction<unknown>[] = [\n {\n id: \"expand\",\n icon: UiChevronRight,\n label: (key) => `Expand ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !!item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(true),\n },\n {\n id: \"collapse\",\n icon: UiChevronDown,\n label: (key) => `Collapse ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(false),\n },\n {\n id: \"include\",\n icon: UiZoomIn,\n label: (key) => `Include ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleInclude(filter.token);\n },\n },\n {\n id: \"exclude\",\n icon: UiZoomOut,\n label: (key) => `Exclude ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleExclude(filter.token);\n },\n },\n ];\n\n // Copy sits immediately after the value (suffix), separate from the leading\n // expand/collapse/include/exclude controls.\n const suffixActions: PropertiesAction<unknown>[] = [\n {\n id: \"copy\",\n icon: UiCopy,\n label: (key) => `Copy ${labelForPath(key)}`,\n visible: (key) => key !== TAGS_PATH,\n onClick: (_k, value) => copyLogDetailsValue(value),\n },\n ];\n\n const renderLabel = (key: string) => labelForPath(key);\n const renderValue = (key: string, value: unknown, item: PropertiesItem<unknown>) => {\n if (key === TAGS_PATH) {\n const count = Array.isArray(value) ? value.length : 0;\n return <span className=\"font-mono text-muted-foreground\">[{count} tags]</span>;\n }\n return item.expandable ? <LogValueSummary value={value} /> : <LogScalarValue value={value} />;\n };\n\n const toItems = (value: unknown, path: string, depth: number): PropertiesItem<unknown>[] =>\n getValueEntries(value).map(([key, entryValue]) => {\n const entryPath = `${path}.${String(key)}`;\n const isTags = entryPath === TAGS_PATH;\n const expandable = isTags || isExpandableValue(entryValue);\n const open = openPaths[entryPath] ?? depth < 1;\n return {\n key: entryPath,\n value: entryValue,\n expandable,\n expanded: open,\n onToggle: (next) => setPathOpen(entryPath, next),\n renderChildren: () =>\n isTags ? (\n <TagPropertiesList\n tags={normalizeTags(entryValue as string[])}\n rowClassName={DETAIL_ROW_CLASS}\n />\n ) : (\n <Properties\n density=\"compact\"\n items={toItems(entryValue, entryPath, depth + 1)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n rowClassName={DETAIL_ROW_CLASS}\n className=\"mt-density-1\"\n />\n ),\n };\n });\n\n const properties = (\n <Properties\n density=\"compact\"\n items={toItems(details, \"details\", 0)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n rowClassName={DETAIL_ROW_CLASS}\n />\n );\n\n const tagActions = filterActions[\"tags\"];\n return (\n <div className=\"space-y-density-3 text-xs\">\n {tagActions ? (\n <TagActionsProvider value={tagActions}>{properties}</TagActionsProvider>\n ) : (\n properties\n )}\n </div>\n );\n}\n\nfunction LogValueSummary({ value }: { value: unknown }) {\n if (Array.isArray(value)) {\n return <span className=\"font-mono text-muted-foreground\">[{value.length} items]</span>;\n }\n const record = asRecord(value);\n if (record) {\n const count = Object.keys(record).length;\n return (\n <span className=\"font-mono text-muted-foreground\">\n {\"{ \"}\n {count} properties{\" }\"}\n </span>\n );\n }\n return <LogScalarValue value={value} />;\n}\n\nfunction LogScalarValue({ value }: { value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n\n if (typeof value === \"string\") {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {value}\n </pre>\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono text-blue-700 dark:text-blue-400\">{String(value)}</span>;\n }\n\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {stablePrettyString(value)}\n </pre>\n );\n}\n\nfunction getValueEntries(value: unknown): Array<[string | number, unknown]> {\n if (Array.isArray(value)) {\n return value.map((entry, index) => [index, entry]);\n }\n return Object.entries(asRecord(value) ?? {});\n}\n\nfunction isExpandableValue(value: unknown) {\n return getValueEntries(value).length > 0;\n}\n\nfunction stablePrettyString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction copyLogDetailsValue(value: unknown) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(\n () => undefined,\n );\n }\n}\n\nfunction buildProcessedLogDetails(row: LogsTableRow): Record<string, unknown> {\n const attributes = buildProcessedLogAttributes(row);\n return stripEmptyProperties({\n timestamp: row.timestamp,\n level: row.level,\n pod: row.pod,\n logger: row.logger,\n thread: row.thread,\n message: row.message,\n tags: row.tags,\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n });\n}\n\nfunction buildProcessedLogAttributes(row: LogsTableRow): Record<string, unknown> {\n const attributes = {\n ...asRecord(row.raw),\n ...asRecord(row.parsedLine),\n };\n const hiddenKeys = new Set([\n \"@timestamp\",\n \"container\",\n \"event.dataset\",\n \"labels\",\n \"level\",\n \"line\",\n \"log.level\",\n \"log.logger\",\n \"logger\",\n \"message\",\n \"msg\",\n \"pod\",\n \"process.thread.name\",\n \"service\",\n \"service.name\",\n \"severity\",\n \"thread\",\n \"time\",\n \"timestamp\",\n ]);\n\n return stripEmptyProperties(\n Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key))),\n );\n}\n\nfunction stripEmptyProperties(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }),\n );\n}\n"],"names":["useState","useMemo","formatPropertyLabel","getFilterTokens","UiChevronRight","UiChevronDown","UiZoomIn","UiZoomOut","UiCopy","jsxs","jsx","TagPropertiesList","normalizeTags","Properties","TagActionsProvider","asRecord"],"mappings":"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"}
1
+ {"version":3,"file":"LogDetails.cjs","sources":["../../src/data/LogDetails.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport type { DataTableColumn } from \"./DataTable\";\nimport { getFilterTokens } from \"./data-table-utils\";\nimport { Properties, type PropertiesAction, type PropertiesItem } from \"./Properties\";\nimport { TagActionsProvider, TagPropertiesList } from \"./cells/TagList\";\nimport { normalizeTags, type TagActionsContextValue } from \"./cells/tag-utils\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport type { LogsTableRow } from \"./logs-normalize\";\nimport { asRecord } from \"./log-utils\";\nimport { UiChevronDown, UiChevronRight, UiCopy, UiZoomIn, UiZoomOut } from \"../icons\";\n\nconst TAGS_PATH = \"details.tags\";\n\n// Key column shrinks to its content (no min/fixed width), never wider than 30ch.\nconst DETAIL_GRID_TEMPLATE = \"fit-content(30ch) minmax(0, 1fr)\";\n\n/**\n * Maps a top-level detail field path (`details.<columnKey>`) to its column key.\n * Returns undefined for nested paths and the tags array, which have their own\n * filter affordances.\n */\nfunction fieldColumnKey(path: string): string | undefined {\n if (!path.startsWith(\"details.\") || path === TAGS_PATH) return undefined;\n const rest = path.slice(\"details.\".length);\n return rest && !rest.includes(\".\") ? rest : undefined;\n}\n\nexport function LogDetails({\n row,\n filterActions,\n columns,\n}: {\n row: LogsTableRow;\n filterActions: Record<string, TagActionsContextValue>;\n columns: DataTableColumn<LogsTableRow>[];\n}) {\n const [openPaths, setOpenPaths] = useState<Record<string, boolean>>({});\n const setPathOpen = (path: string, open: boolean) => {\n setOpenPaths((current) => ({ ...current, [path]: open }));\n };\n const details = useMemo(() => buildProcessedLogDetails(row), [row]);\n\n const labelForPath = (path: string) => formatPropertyLabel(path.split(\".\").pop() ?? path);\n\n const columnByKey = useMemo(\n () => new Map(columns.map((column) => [column.key, column])),\n [columns],\n );\n\n // Include/exclude is wired only for fields whose column is a multi/nested-multi\n // (tristate) filter; other columns (high-cardinality text, number, timestamp)\n // don't honor multiFilters, so they get no filter actions. The toggle token\n // must match the column's filter token (e.g. a status column maps \"INFO\" to a\n // normalized status), so it is derived via getFilterTokens rather than the\n // displayed value.\n const fieldFilter = (\n path: string,\n ): { actions: TagActionsContextValue; token: string } | undefined => {\n const key = fieldColumnKey(path);\n if (!key) return undefined;\n const actions = filterActions[key];\n const column = columnByKey.get(key);\n if (!actions || !column) return undefined;\n const token = getFilterTokens(row, column)[0];\n return token ? { actions, token } : undefined;\n };\n\n const prefixActions: PropertiesAction<unknown>[] = [\n {\n id: \"expand\",\n icon: UiChevronRight,\n label: (key) => `Expand ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !!item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(true),\n },\n {\n id: \"collapse\",\n icon: UiChevronDown,\n label: (key) => `Collapse ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(false),\n },\n {\n id: \"include\",\n icon: UiZoomIn,\n label: (key) => `Include ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleInclude(filter.token);\n },\n },\n {\n id: \"exclude\",\n icon: UiZoomOut,\n label: (key) => `Exclude ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleExclude(filter.token);\n },\n },\n ];\n\n // Copy sits immediately after the value (suffix), separate from the leading\n // expand/collapse/include/exclude controls.\n const suffixActions: PropertiesAction<unknown>[] = [\n {\n id: \"copy\",\n icon: UiCopy,\n label: (key) => `Copy ${labelForPath(key)}`,\n visible: (key) => key !== TAGS_PATH,\n onClick: (_k, value) => copyLogDetailsValue(value),\n },\n ];\n\n const renderLabel = (key: string) => labelForPath(key);\n const renderValue = (key: string, value: unknown, item: PropertiesItem<unknown>) => {\n if (key === TAGS_PATH) {\n const count = Array.isArray(value) ? value.length : 0;\n return <span className=\"font-mono text-muted-foreground\">[{count} tags]</span>;\n }\n return item.expandable ? <LogValueSummary value={value} /> : <LogScalarValue value={value} />;\n };\n\n const toItems = (value: unknown, path: string, depth: number): PropertiesItem<unknown>[] =>\n getValueEntries(value).map(([key, entryValue]) => {\n const entryPath = `${path}.${String(key)}`;\n const isTags = entryPath === TAGS_PATH;\n const expandable = isTags || isExpandableValue(entryValue);\n const open = openPaths[entryPath] ?? depth < 1;\n return {\n key: entryPath,\n value: entryValue,\n expandable,\n expanded: open,\n onToggle: (next) => setPathOpen(entryPath, next),\n renderChildren: () =>\n isTags ? (\n <TagPropertiesList\n tags={normalizeTags(entryValue as string[])}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n />\n ) : (\n <Properties\n density=\"compact\"\n items={toItems(entryValue, entryPath, depth + 1)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n className=\"mt-density-1\"\n />\n ),\n };\n });\n\n const properties = (\n <Properties\n density=\"compact\"\n items={toItems(details, \"details\", 0)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n />\n );\n\n const tagActions = filterActions[\"tags\"];\n return (\n <div className=\"space-y-density-3 text-xs\">\n {tagActions ? (\n <TagActionsProvider value={tagActions}>{properties}</TagActionsProvider>\n ) : (\n properties\n )}\n </div>\n );\n}\n\nfunction LogValueSummary({ value }: { value: unknown }) {\n if (Array.isArray(value)) {\n return <span className=\"font-mono text-muted-foreground\">[{value.length} items]</span>;\n }\n const record = asRecord(value);\n if (record) {\n const count = Object.keys(record).length;\n return (\n <span className=\"font-mono text-muted-foreground\">\n {\"{ \"}\n {count} properties{\" }\"}\n </span>\n );\n }\n return <LogScalarValue value={value} />;\n}\n\nfunction LogScalarValue({ value }: { value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n\n if (typeof value === \"string\") {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {value}\n </pre>\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono text-blue-700 dark:text-blue-400\">{String(value)}</span>;\n }\n\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {stablePrettyString(value)}\n </pre>\n );\n}\n\nfunction getValueEntries(value: unknown): Array<[string | number, unknown]> {\n if (Array.isArray(value)) {\n return value.map((entry, index) => [index, entry]);\n }\n return Object.entries(asRecord(value) ?? {});\n}\n\nfunction isExpandableValue(value: unknown) {\n return getValueEntries(value).length > 0;\n}\n\nfunction stablePrettyString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction copyLogDetailsValue(value: unknown) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(\n () => undefined,\n );\n }\n}\n\nfunction buildProcessedLogDetails(row: LogsTableRow): Record<string, unknown> {\n const attributes = buildProcessedLogAttributes(row);\n return stripEmptyProperties({\n timestamp: row.timestamp,\n level: row.level,\n pod: row.pod,\n logger: row.logger,\n thread: row.thread,\n message: row.message,\n tags: row.tags,\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n });\n}\n\nfunction buildProcessedLogAttributes(row: LogsTableRow): Record<string, unknown> {\n const attributes = {\n ...asRecord(row.raw),\n ...asRecord(row.parsedLine),\n };\n const hiddenKeys = new Set([\n \"@timestamp\",\n \"container\",\n \"event.dataset\",\n \"labels\",\n \"level\",\n \"line\",\n \"log.level\",\n \"log.logger\",\n \"logger\",\n \"message\",\n \"msg\",\n \"pod\",\n \"process.thread.name\",\n \"service\",\n \"service.name\",\n \"severity\",\n \"thread\",\n \"time\",\n \"timestamp\",\n ]);\n\n return stripEmptyProperties(\n Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key))),\n );\n}\n\nfunction stripEmptyProperties(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }),\n );\n}\n"],"names":["useState","useMemo","formatPropertyLabel","getFilterTokens","UiChevronRight","UiChevronDown","UiZoomIn","UiZoomOut","UiCopy","jsxs","jsx","TagPropertiesList","normalizeTags","Properties","TagActionsProvider","asRecord"],"mappings":"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"}
@@ -12,7 +12,7 @@ import { UiChevronDown } from "../icons/components/UiChevronDown.js";
12
12
  import { UiZoomIn } from "../icons/components/UiZoomIn.js";
13
13
  import { UiZoomOut } from "../icons/components/UiZoomOut.js";
14
14
  const TAGS_PATH = "details.tags";
15
- const DETAIL_ROW_CLASS = "grid-cols-[fit-content(30ch)_minmax(0,1fr)]";
15
+ const DETAIL_GRID_TEMPLATE = "fit-content(30ch) minmax(0, 1fr)";
16
16
  function fieldColumnKey(path) {
17
17
  if (!path.startsWith("details.") || path === TAGS_PATH) return void 0;
18
18
  const rest = path.slice("details.".length);
@@ -122,7 +122,7 @@ function LogDetails({
122
122
  TagPropertiesList,
123
123
  {
124
124
  tags: normalizeTags(entryValue),
125
- rowClassName: DETAIL_ROW_CLASS
125
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE
126
126
  }
127
127
  ) : /* @__PURE__ */ jsx(
128
128
  Properties,
@@ -133,7 +133,7 @@ function LogDetails({
133
133
  renderValue,
134
134
  prefixActions,
135
135
  suffixActions,
136
- rowClassName: DETAIL_ROW_CLASS,
136
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE,
137
137
  className: "mt-density-1"
138
138
  }
139
139
  )
@@ -148,7 +148,7 @@ function LogDetails({
148
148
  renderValue,
149
149
  prefixActions,
150
150
  suffixActions,
151
- rowClassName: DETAIL_ROW_CLASS
151
+ gridTemplateColumns: DETAIL_GRID_TEMPLATE
152
152
  }
153
153
  );
154
154
  const tagActions = filterActions["tags"];
@@ -1 +1 @@
1
- {"version":3,"file":"LogDetails.js","sources":["../../src/data/LogDetails.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport type { DataTableColumn } from \"./DataTable\";\nimport { getFilterTokens } from \"./data-table-utils\";\nimport { Properties, type PropertiesAction, type PropertiesItem } from \"./Properties\";\nimport { TagActionsProvider, TagPropertiesList } from \"./cells/TagList\";\nimport { normalizeTags, type TagActionsContextValue } from \"./cells/tag-utils\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport type { LogsTableRow } from \"./logs-normalize\";\nimport { asRecord } from \"./log-utils\";\nimport { UiChevronDown, UiChevronRight, UiCopy, UiZoomIn, UiZoomOut } from \"../icons\";\n\nconst TAGS_PATH = \"details.tags\";\n\n// Key column shrinks to its content (no min/fixed width), never wider than 30ch.\nconst DETAIL_ROW_CLASS = \"grid-cols-[fit-content(30ch)_minmax(0,1fr)]\";\n\n/**\n * Maps a top-level detail field path (`details.<columnKey>`) to its column key.\n * Returns undefined for nested paths and the tags array, which have their own\n * filter affordances.\n */\nfunction fieldColumnKey(path: string): string | undefined {\n if (!path.startsWith(\"details.\") || path === TAGS_PATH) return undefined;\n const rest = path.slice(\"details.\".length);\n return rest && !rest.includes(\".\") ? rest : undefined;\n}\n\nexport function LogDetails({\n row,\n filterActions,\n columns,\n}: {\n row: LogsTableRow;\n filterActions: Record<string, TagActionsContextValue>;\n columns: DataTableColumn<LogsTableRow>[];\n}) {\n const [openPaths, setOpenPaths] = useState<Record<string, boolean>>({});\n const setPathOpen = (path: string, open: boolean) => {\n setOpenPaths((current) => ({ ...current, [path]: open }));\n };\n const details = useMemo(() => buildProcessedLogDetails(row), [row]);\n\n const labelForPath = (path: string) => formatPropertyLabel(path.split(\".\").pop() ?? path);\n\n const columnByKey = useMemo(\n () => new Map(columns.map((column) => [column.key, column])),\n [columns],\n );\n\n // Include/exclude is wired only for fields whose column is a multi/nested-multi\n // (tristate) filter; other columns (high-cardinality text, number, timestamp)\n // don't honor multiFilters, so they get no filter actions. The toggle token\n // must match the column's filter token (e.g. a status column maps \"INFO\" to a\n // normalized status), so it is derived via getFilterTokens rather than the\n // displayed value.\n const fieldFilter = (\n path: string,\n ): { actions: TagActionsContextValue; token: string } | undefined => {\n const key = fieldColumnKey(path);\n if (!key) return undefined;\n const actions = filterActions[key];\n const column = columnByKey.get(key);\n if (!actions || !column) return undefined;\n const token = getFilterTokens(row, column)[0];\n return token ? { actions, token } : undefined;\n };\n\n const prefixActions: PropertiesAction<unknown>[] = [\n {\n id: \"expand\",\n icon: UiChevronRight,\n label: (key) => `Expand ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !!item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(true),\n },\n {\n id: \"collapse\",\n icon: UiChevronDown,\n label: (key) => `Collapse ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(false),\n },\n {\n id: \"include\",\n icon: UiZoomIn,\n label: (key) => `Include ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleInclude(filter.token);\n },\n },\n {\n id: \"exclude\",\n icon: UiZoomOut,\n label: (key) => `Exclude ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleExclude(filter.token);\n },\n },\n ];\n\n // Copy sits immediately after the value (suffix), separate from the leading\n // expand/collapse/include/exclude controls.\n const suffixActions: PropertiesAction<unknown>[] = [\n {\n id: \"copy\",\n icon: UiCopy,\n label: (key) => `Copy ${labelForPath(key)}`,\n visible: (key) => key !== TAGS_PATH,\n onClick: (_k, value) => copyLogDetailsValue(value),\n },\n ];\n\n const renderLabel = (key: string) => labelForPath(key);\n const renderValue = (key: string, value: unknown, item: PropertiesItem<unknown>) => {\n if (key === TAGS_PATH) {\n const count = Array.isArray(value) ? value.length : 0;\n return <span className=\"font-mono text-muted-foreground\">[{count} tags]</span>;\n }\n return item.expandable ? <LogValueSummary value={value} /> : <LogScalarValue value={value} />;\n };\n\n const toItems = (value: unknown, path: string, depth: number): PropertiesItem<unknown>[] =>\n getValueEntries(value).map(([key, entryValue]) => {\n const entryPath = `${path}.${String(key)}`;\n const isTags = entryPath === TAGS_PATH;\n const expandable = isTags || isExpandableValue(entryValue);\n const open = openPaths[entryPath] ?? depth < 1;\n return {\n key: entryPath,\n value: entryValue,\n expandable,\n expanded: open,\n onToggle: (next) => setPathOpen(entryPath, next),\n renderChildren: () =>\n isTags ? (\n <TagPropertiesList\n tags={normalizeTags(entryValue as string[])}\n rowClassName={DETAIL_ROW_CLASS}\n />\n ) : (\n <Properties\n density=\"compact\"\n items={toItems(entryValue, entryPath, depth + 1)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n rowClassName={DETAIL_ROW_CLASS}\n className=\"mt-density-1\"\n />\n ),\n };\n });\n\n const properties = (\n <Properties\n density=\"compact\"\n items={toItems(details, \"details\", 0)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n rowClassName={DETAIL_ROW_CLASS}\n />\n );\n\n const tagActions = filterActions[\"tags\"];\n return (\n <div className=\"space-y-density-3 text-xs\">\n {tagActions ? (\n <TagActionsProvider value={tagActions}>{properties}</TagActionsProvider>\n ) : (\n properties\n )}\n </div>\n );\n}\n\nfunction LogValueSummary({ value }: { value: unknown }) {\n if (Array.isArray(value)) {\n return <span className=\"font-mono text-muted-foreground\">[{value.length} items]</span>;\n }\n const record = asRecord(value);\n if (record) {\n const count = Object.keys(record).length;\n return (\n <span className=\"font-mono text-muted-foreground\">\n {\"{ \"}\n {count} properties{\" }\"}\n </span>\n );\n }\n return <LogScalarValue value={value} />;\n}\n\nfunction LogScalarValue({ value }: { value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n\n if (typeof value === \"string\") {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {value}\n </pre>\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono text-blue-700 dark:text-blue-400\">{String(value)}</span>;\n }\n\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {stablePrettyString(value)}\n </pre>\n );\n}\n\nfunction getValueEntries(value: unknown): Array<[string | number, unknown]> {\n if (Array.isArray(value)) {\n return value.map((entry, index) => [index, entry]);\n }\n return Object.entries(asRecord(value) ?? {});\n}\n\nfunction isExpandableValue(value: unknown) {\n return getValueEntries(value).length > 0;\n}\n\nfunction stablePrettyString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction copyLogDetailsValue(value: unknown) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(\n () => undefined,\n );\n }\n}\n\nfunction buildProcessedLogDetails(row: LogsTableRow): Record<string, unknown> {\n const attributes = buildProcessedLogAttributes(row);\n return stripEmptyProperties({\n timestamp: row.timestamp,\n level: row.level,\n pod: row.pod,\n logger: row.logger,\n thread: row.thread,\n message: row.message,\n tags: row.tags,\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n });\n}\n\nfunction buildProcessedLogAttributes(row: LogsTableRow): Record<string, unknown> {\n const attributes = {\n ...asRecord(row.raw),\n ...asRecord(row.parsedLine),\n };\n const hiddenKeys = new Set([\n \"@timestamp\",\n \"container\",\n \"event.dataset\",\n \"labels\",\n \"level\",\n \"line\",\n \"log.level\",\n \"log.logger\",\n \"logger\",\n \"message\",\n \"msg\",\n \"pod\",\n \"process.thread.name\",\n \"service\",\n \"service.name\",\n \"severity\",\n \"thread\",\n \"time\",\n \"timestamp\",\n ]);\n\n return stripEmptyProperties(\n Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key))),\n );\n}\n\nfunction stripEmptyProperties(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }),\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LogDetails.js","sources":["../../src/data/LogDetails.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport type { DataTableColumn } from \"./DataTable\";\nimport { getFilterTokens } from \"./data-table-utils\";\nimport { Properties, type PropertiesAction, type PropertiesItem } from \"./Properties\";\nimport { TagActionsProvider, TagPropertiesList } from \"./cells/TagList\";\nimport { normalizeTags, type TagActionsContextValue } from \"./cells/tag-utils\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport type { LogsTableRow } from \"./logs-normalize\";\nimport { asRecord } from \"./log-utils\";\nimport { UiChevronDown, UiChevronRight, UiCopy, UiZoomIn, UiZoomOut } from \"../icons\";\n\nconst TAGS_PATH = \"details.tags\";\n\n// Key column shrinks to its content (no min/fixed width), never wider than 30ch.\nconst DETAIL_GRID_TEMPLATE = \"fit-content(30ch) minmax(0, 1fr)\";\n\n/**\n * Maps a top-level detail field path (`details.<columnKey>`) to its column key.\n * Returns undefined for nested paths and the tags array, which have their own\n * filter affordances.\n */\nfunction fieldColumnKey(path: string): string | undefined {\n if (!path.startsWith(\"details.\") || path === TAGS_PATH) return undefined;\n const rest = path.slice(\"details.\".length);\n return rest && !rest.includes(\".\") ? rest : undefined;\n}\n\nexport function LogDetails({\n row,\n filterActions,\n columns,\n}: {\n row: LogsTableRow;\n filterActions: Record<string, TagActionsContextValue>;\n columns: DataTableColumn<LogsTableRow>[];\n}) {\n const [openPaths, setOpenPaths] = useState<Record<string, boolean>>({});\n const setPathOpen = (path: string, open: boolean) => {\n setOpenPaths((current) => ({ ...current, [path]: open }));\n };\n const details = useMemo(() => buildProcessedLogDetails(row), [row]);\n\n const labelForPath = (path: string) => formatPropertyLabel(path.split(\".\").pop() ?? path);\n\n const columnByKey = useMemo(\n () => new Map(columns.map((column) => [column.key, column])),\n [columns],\n );\n\n // Include/exclude is wired only for fields whose column is a multi/nested-multi\n // (tristate) filter; other columns (high-cardinality text, number, timestamp)\n // don't honor multiFilters, so they get no filter actions. The toggle token\n // must match the column's filter token (e.g. a status column maps \"INFO\" to a\n // normalized status), so it is derived via getFilterTokens rather than the\n // displayed value.\n const fieldFilter = (\n path: string,\n ): { actions: TagActionsContextValue; token: string } | undefined => {\n const key = fieldColumnKey(path);\n if (!key) return undefined;\n const actions = filterActions[key];\n const column = columnByKey.get(key);\n if (!actions || !column) return undefined;\n const token = getFilterTokens(row, column)[0];\n return token ? { actions, token } : undefined;\n };\n\n const prefixActions: PropertiesAction<unknown>[] = [\n {\n id: \"expand\",\n icon: UiChevronRight,\n label: (key) => `Expand ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !!item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(true),\n },\n {\n id: \"collapse\",\n icon: UiChevronDown,\n label: (key) => `Collapse ${labelForPath(key)}`,\n visible: (_k, _v, item) => !!item.expandable,\n disabled: (_k, _v, item) => !item.expanded,\n onClick: (_k, _v, item) => item.onToggle?.(false),\n },\n {\n id: \"include\",\n icon: UiZoomIn,\n label: (key) => `Include ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleInclude(filter.token);\n },\n },\n {\n id: \"exclude\",\n icon: UiZoomOut,\n label: (key) => `Exclude ${labelForPath(key)}`,\n visible: (key) => !!fieldFilter(key),\n onClick: (key) => {\n const filter = fieldFilter(key);\n filter?.actions.toggleExclude(filter.token);\n },\n },\n ];\n\n // Copy sits immediately after the value (suffix), separate from the leading\n // expand/collapse/include/exclude controls.\n const suffixActions: PropertiesAction<unknown>[] = [\n {\n id: \"copy\",\n icon: UiCopy,\n label: (key) => `Copy ${labelForPath(key)}`,\n visible: (key) => key !== TAGS_PATH,\n onClick: (_k, value) => copyLogDetailsValue(value),\n },\n ];\n\n const renderLabel = (key: string) => labelForPath(key);\n const renderValue = (key: string, value: unknown, item: PropertiesItem<unknown>) => {\n if (key === TAGS_PATH) {\n const count = Array.isArray(value) ? value.length : 0;\n return <span className=\"font-mono text-muted-foreground\">[{count} tags]</span>;\n }\n return item.expandable ? <LogValueSummary value={value} /> : <LogScalarValue value={value} />;\n };\n\n const toItems = (value: unknown, path: string, depth: number): PropertiesItem<unknown>[] =>\n getValueEntries(value).map(([key, entryValue]) => {\n const entryPath = `${path}.${String(key)}`;\n const isTags = entryPath === TAGS_PATH;\n const expandable = isTags || isExpandableValue(entryValue);\n const open = openPaths[entryPath] ?? depth < 1;\n return {\n key: entryPath,\n value: entryValue,\n expandable,\n expanded: open,\n onToggle: (next) => setPathOpen(entryPath, next),\n renderChildren: () =>\n isTags ? (\n <TagPropertiesList\n tags={normalizeTags(entryValue as string[])}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n />\n ) : (\n <Properties\n density=\"compact\"\n items={toItems(entryValue, entryPath, depth + 1)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n className=\"mt-density-1\"\n />\n ),\n };\n });\n\n const properties = (\n <Properties\n density=\"compact\"\n items={toItems(details, \"details\", 0)}\n renderLabel={renderLabel}\n renderValue={renderValue}\n prefixActions={prefixActions}\n suffixActions={suffixActions}\n gridTemplateColumns={DETAIL_GRID_TEMPLATE}\n />\n );\n\n const tagActions = filterActions[\"tags\"];\n return (\n <div className=\"space-y-density-3 text-xs\">\n {tagActions ? (\n <TagActionsProvider value={tagActions}>{properties}</TagActionsProvider>\n ) : (\n properties\n )}\n </div>\n );\n}\n\nfunction LogValueSummary({ value }: { value: unknown }) {\n if (Array.isArray(value)) {\n return <span className=\"font-mono text-muted-foreground\">[{value.length} items]</span>;\n }\n const record = asRecord(value);\n if (record) {\n const count = Object.keys(record).length;\n return (\n <span className=\"font-mono text-muted-foreground\">\n {\"{ \"}\n {count} properties{\" }\"}\n </span>\n );\n }\n return <LogScalarValue value={value} />;\n}\n\nfunction LogScalarValue({ value }: { value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n\n if (typeof value === \"string\") {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {value}\n </pre>\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono text-blue-700 dark:text-blue-400\">{String(value)}</span>;\n }\n\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-foreground\">\n {stablePrettyString(value)}\n </pre>\n );\n}\n\nfunction getValueEntries(value: unknown): Array<[string | number, unknown]> {\n if (Array.isArray(value)) {\n return value.map((entry, index) => [index, entry]);\n }\n return Object.entries(asRecord(value) ?? {});\n}\n\nfunction isExpandableValue(value: unknown) {\n return getValueEntries(value).length > 0;\n}\n\nfunction stablePrettyString(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction copyLogDetailsValue(value: unknown) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n Promise.resolve(navigator.clipboard.writeText(stablePrettyString(value))).catch(\n () => undefined,\n );\n }\n}\n\nfunction buildProcessedLogDetails(row: LogsTableRow): Record<string, unknown> {\n const attributes = buildProcessedLogAttributes(row);\n return stripEmptyProperties({\n timestamp: row.timestamp,\n level: row.level,\n pod: row.pod,\n logger: row.logger,\n thread: row.thread,\n message: row.message,\n tags: row.tags,\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n });\n}\n\nfunction buildProcessedLogAttributes(row: LogsTableRow): Record<string, unknown> {\n const attributes = {\n ...asRecord(row.raw),\n ...asRecord(row.parsedLine),\n };\n const hiddenKeys = new Set([\n \"@timestamp\",\n \"container\",\n \"event.dataset\",\n \"labels\",\n \"level\",\n \"line\",\n \"log.level\",\n \"log.logger\",\n \"logger\",\n \"message\",\n \"msg\",\n \"pod\",\n \"process.thread.name\",\n \"service\",\n \"service.name\",\n \"severity\",\n \"thread\",\n \"time\",\n \"timestamp\",\n ]);\n\n return stripEmptyProperties(\n Object.fromEntries(Object.entries(attributes).filter(([key]) => !hiddenKeys.has(key))),\n );\n}\n\nfunction stripEmptyProperties(record: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }),\n );\n}\n"],"names":[],"mappings":"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"}