@tai42/studio-sdk 16.0.0 → 16.0.1

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 (317) hide show
  1. package/dist/components/explorer-body.d.ts +49 -0
  2. package/dist/components/explorer-body.d.ts.map +1 -0
  3. package/dist/components/explorer-body.js +67 -0
  4. package/dist/components/explorer-body.js.map +1 -0
  5. package/dist/components/explorer-page-size.d.ts +4 -0
  6. package/dist/components/explorer-page-size.d.ts.map +1 -0
  7. package/dist/components/explorer-page-size.js +36 -0
  8. package/dist/components/explorer-page-size.js.map +1 -0
  9. package/dist/components/explorer-tag-filter.d.ts +17 -0
  10. package/dist/components/explorer-tag-filter.d.ts.map +1 -0
  11. package/dist/components/explorer-tag-filter.js +29 -0
  12. package/dist/components/explorer-tag-filter.js.map +1 -0
  13. package/dist/components/explorer-tags.d.ts +22 -0
  14. package/dist/components/explorer-tags.d.ts.map +1 -0
  15. package/dist/components/explorer-tags.js +51 -0
  16. package/dist/components/explorer-tags.js.map +1 -0
  17. package/dist/components/explorer-view.d.ts +3 -17
  18. package/dist/components/explorer-view.d.ts.map +1 -1
  19. package/dist/components/explorer-view.js +53 -170
  20. package/dist/components/explorer-view.js.map +1 -1
  21. package/dist/components/extension-combo-builder.d.ts +0 -5
  22. package/dist/components/extension-combo-builder.d.ts.map +1 -1
  23. package/dist/components/extension-combo-builder.js +4 -42
  24. package/dist/components/extension-combo-builder.js.map +1 -1
  25. package/dist/components/extension-combo-parts.d.ts +44 -0
  26. package/dist/components/extension-combo-parts.d.ts.map +1 -0
  27. package/dist/components/extension-combo-parts.js +57 -0
  28. package/dist/components/extension-combo-parts.js.map +1 -0
  29. package/dist/components/fleet-report.d.ts.map +1 -1
  30. package/dist/components/fleet-report.js +51 -37
  31. package/dist/components/fleet-report.js.map +1 -1
  32. package/dist/components/icons/chrome-marks.d.ts +50 -0
  33. package/dist/components/icons/chrome-marks.d.ts.map +1 -0
  34. package/dist/components/icons/chrome-marks.js +51 -0
  35. package/dist/components/icons/chrome-marks.js.map +1 -0
  36. package/dist/components/icons/icon-frame.d.ts +29 -0
  37. package/dist/components/icons/icon-frame.d.ts.map +1 -0
  38. package/dist/components/icons/icon-frame.js +19 -0
  39. package/dist/components/icons/icon-frame.js.map +1 -0
  40. package/dist/components/icons/index.d.ts +40 -0
  41. package/dist/components/icons/index.d.ts.map +1 -0
  42. package/dist/components/icons/index.js +6 -0
  43. package/dist/components/icons/index.js.map +1 -0
  44. package/dist/components/icons/nav-map.d.ts +14 -0
  45. package/dist/components/icons/nav-map.d.ts.map +1 -0
  46. package/dist/components/icons/nav-map.js +28 -0
  47. package/dist/components/icons/nav-map.js.map +1 -0
  48. package/dist/components/icons/nav-marks.d.ts +44 -0
  49. package/dist/components/icons/nav-marks.d.ts.map +1 -0
  50. package/dist/components/icons/nav-marks.js +45 -0
  51. package/dist/components/icons/nav-marks.js.map +1 -0
  52. package/dist/components/icons/status-marks.d.ts +21 -0
  53. package/dist/components/icons/status-marks.d.ts.map +1 -0
  54. package/dist/components/icons/status-marks.js +22 -0
  55. package/dist/components/icons/status-marks.js.map +1 -0
  56. package/dist/components/icons/theme-marks.d.ts +9 -0
  57. package/dist/components/icons/theme-marks.d.ts.map +1 -0
  58. package/dist/components/icons/theme-marks.js +10 -0
  59. package/dist/components/icons/theme-marks.js.map +1 -0
  60. package/dist/components/json-diff.d.ts.map +1 -1
  61. package/dist/components/json-diff.js +1 -3
  62. package/dist/components/json-diff.js.map +1 -1
  63. package/dist/components/json-tree-context.d.ts +13 -0
  64. package/dist/components/json-tree-context.d.ts.map +1 -0
  65. package/dist/components/json-tree-context.js +15 -0
  66. package/dist/components/json-tree-context.js.map +1 -0
  67. package/dist/components/json-tree-model.d.ts +56 -0
  68. package/dist/components/json-tree-model.d.ts.map +1 -0
  69. package/dist/components/json-tree-model.js +125 -0
  70. package/dist/components/json-tree-model.js.map +1 -0
  71. package/dist/components/json-tree-nodes.d.ts +30 -0
  72. package/dist/components/json-tree-nodes.d.ts.map +1 -0
  73. package/dist/components/json-tree-nodes.js +118 -0
  74. package/dist/components/json-tree-nodes.js.map +1 -0
  75. package/dist/components/json-tree.d.ts.map +1 -1
  76. package/dist/components/json-tree.js +7 -295
  77. package/dist/components/json-tree.js.map +1 -1
  78. package/dist/components/json-value-format.d.ts +20 -0
  79. package/dist/components/json-value-format.d.ts.map +1 -0
  80. package/dist/components/json-value-format.js +63 -0
  81. package/dist/components/json-value-format.js.map +1 -0
  82. package/dist/components/markdown-blocks.d.ts +38 -0
  83. package/dist/components/markdown-blocks.d.ts.map +1 -0
  84. package/dist/components/markdown-blocks.js +168 -0
  85. package/dist/components/markdown-blocks.js.map +1 -0
  86. package/dist/components/markdown-inline.d.ts +24 -0
  87. package/dist/components/markdown-inline.d.ts.map +1 -0
  88. package/dist/components/markdown-inline.js +257 -0
  89. package/dist/components/markdown-inline.js.map +1 -0
  90. package/dist/components/markdown.d.ts +3 -52
  91. package/dist/components/markdown.d.ts.map +1 -1
  92. package/dist/components/markdown.js +4 -376
  93. package/dist/components/markdown.js.map +1 -1
  94. package/dist/components/observer-registry.d.ts +38 -0
  95. package/dist/components/observer-registry.d.ts.map +1 -0
  96. package/dist/components/observer-registry.js +131 -0
  97. package/dist/components/observer-registry.js.map +1 -0
  98. package/dist/components/overflow-measure.d.ts +38 -0
  99. package/dist/components/overflow-measure.d.ts.map +1 -0
  100. package/dist/components/overflow-measure.js +54 -0
  101. package/dist/components/overflow-measure.js.map +1 -0
  102. package/dist/components/prose-regions.d.ts +81 -0
  103. package/dist/components/prose-regions.d.ts.map +1 -0
  104. package/dist/components/prose-regions.js +128 -0
  105. package/dist/components/prose-regions.js.map +1 -0
  106. package/dist/components/scroll-region.d.ts.map +1 -1
  107. package/dist/components/scroll-region.js +3 -298
  108. package/dist/components/scroll-region.js.map +1 -1
  109. package/dist/components/tab-stop-parse.d.ts +53 -0
  110. package/dist/components/tab-stop-parse.d.ts.map +1 -0
  111. package/dist/components/tab-stop-parse.js +202 -0
  112. package/dist/components/tab-stop-parse.js.map +1 -0
  113. package/dist/components/templated-text-field.d.ts.map +1 -1
  114. package/dist/components/templated-text-field.js +10 -148
  115. package/dist/components/templated-text-field.js.map +1 -1
  116. package/dist/components/templated-text-kwargs-editor.d.ts +24 -0
  117. package/dist/components/templated-text-kwargs-editor.d.ts.map +1 -0
  118. package/dist/components/templated-text-kwargs-editor.js +48 -0
  119. package/dist/components/templated-text-kwargs-editor.js.map +1 -0
  120. package/dist/components/templated-text-kwargs.d.ts +37 -0
  121. package/dist/components/templated-text-kwargs.d.ts.map +1 -0
  122. package/dist/components/templated-text-kwargs.js +66 -0
  123. package/dist/components/templated-text-kwargs.js.map +1 -0
  124. package/dist/components/templated-text-source.d.ts +33 -0
  125. package/dist/components/templated-text-source.d.ts.map +1 -0
  126. package/dist/components/templated-text-source.js +53 -0
  127. package/dist/components/templated-text-source.js.map +1 -0
  128. package/dist/components/tool-picker-parts.d.ts +39 -0
  129. package/dist/components/tool-picker-parts.d.ts.map +1 -0
  130. package/dist/components/tool-picker-parts.js +87 -0
  131. package/dist/components/tool-picker-parts.js.map +1 -0
  132. package/dist/components/tool-picker.d.ts +1 -2
  133. package/dist/components/tool-picker.d.ts.map +1 -1
  134. package/dist/components/tool-picker.js +4 -66
  135. package/dist/components/tool-picker.js.map +1 -1
  136. package/dist/components/version-history-panel.d.ts.map +1 -1
  137. package/dist/components/version-history-panel.js +7 -34
  138. package/dist/components/version-history-panel.js.map +1 -1
  139. package/dist/components/version-history-rows.d.ts +48 -0
  140. package/dist/components/version-history-rows.d.ts.map +1 -0
  141. package/dist/components/version-history-rows.js +51 -0
  142. package/dist/components/version-history-rows.js.map +1 -0
  143. package/dist/guards.d.ts +6 -0
  144. package/dist/guards.d.ts.map +1 -0
  145. package/dist/guards.js +8 -0
  146. package/dist/guards.js.map +1 -0
  147. package/dist/hooks/interactions-connection.d.ts +43 -0
  148. package/dist/hooks/interactions-connection.d.ts.map +1 -0
  149. package/dist/hooks/interactions-connection.js +171 -0
  150. package/dist/hooks/interactions-connection.js.map +1 -0
  151. package/dist/hooks/interactions-stream.d.ts +80 -0
  152. package/dist/hooks/interactions-stream.d.ts.map +1 -0
  153. package/dist/hooks/interactions-stream.js +233 -0
  154. package/dist/hooks/interactions-stream.js.map +1 -0
  155. package/dist/hooks/useApi.d.ts +2192 -2192
  156. package/dist/hooks/useApi.d.ts.map +1 -1
  157. package/dist/hooks/useSse.d.ts +3 -6
  158. package/dist/hooks/useSse.d.ts.map +1 -1
  159. package/dist/hooks/useSse.js +38 -451
  160. package/dist/hooks/useSse.js.map +1 -1
  161. package/dist/navigation/app-link.d.ts +25 -0
  162. package/dist/navigation/app-link.d.ts.map +1 -0
  163. package/dist/navigation/app-link.js +33 -0
  164. package/dist/navigation/app-link.js.map +1 -0
  165. package/dist/navigation/context.d.ts +3 -20
  166. package/dist/navigation/context.d.ts.map +1 -1
  167. package/dist/navigation/context.js +7 -267
  168. package/dist/navigation/context.js.map +1 -1
  169. package/dist/navigation/entry-state.d.ts +23 -0
  170. package/dist/navigation/entry-state.d.ts.map +1 -0
  171. package/dist/navigation/entry-state.js +39 -0
  172. package/dist/navigation/entry-state.js.map +1 -0
  173. package/dist/navigation/guard-registry.d.ts +30 -0
  174. package/dist/navigation/guard-registry.d.ts.map +1 -0
  175. package/dist/navigation/guard-registry.js +46 -0
  176. package/dist/navigation/guard-registry.js.map +1 -0
  177. package/dist/navigation/guarded-navigation.d.ts +24 -0
  178. package/dist/navigation/guarded-navigation.d.ts.map +1 -0
  179. package/dist/navigation/guarded-navigation.js +102 -0
  180. package/dist/navigation/guarded-navigation.js.map +1 -0
  181. package/dist/navigation/index.d.ts +3 -2
  182. package/dist/navigation/index.d.ts.map +1 -1
  183. package/dist/navigation/index.js +2 -1
  184. package/dist/navigation/index.js.map +1 -1
  185. package/dist/navigation/types.d.ts +8 -11
  186. package/dist/navigation/types.d.ts.map +1 -1
  187. package/dist/navigation/use-back-forward-guard.d.ts +5 -0
  188. package/dist/navigation/use-back-forward-guard.d.ts.map +1 -0
  189. package/dist/navigation/use-back-forward-guard.js +82 -0
  190. package/dist/navigation/use-back-forward-guard.js.map +1 -0
  191. package/dist/plugin/registry.d.ts +6 -15
  192. package/dist/plugin/registry.d.ts.map +1 -1
  193. package/dist/plugin/registry.js +83 -75
  194. package/dist/plugin/registry.js.map +1 -1
  195. package/dist/schema-form/SecretRefField.d.ts +2 -3
  196. package/dist/schema-form/SecretRefField.d.ts.map +1 -1
  197. package/dist/schema-form/SecretRefField.js +23 -12
  198. package/dist/schema-form/SecretRefField.js.map +1 -1
  199. package/dist/schema-form/classify.d.ts +1 -122
  200. package/dist/schema-form/classify.d.ts.map +1 -1
  201. package/dist/schema-form/classify.js +174 -237
  202. package/dist/schema-form/classify.js.map +1 -1
  203. package/dist/schema-form/default-value.d.ts.map +1 -1
  204. package/dist/schema-form/default-value.js +42 -19
  205. package/dist/schema-form/default-value.js.map +1 -1
  206. package/dist/schema-form/enum-field.d.ts +1 -1
  207. package/dist/schema-form/enum-field.d.ts.map +1 -1
  208. package/dist/schema-form/field-model.d.ts +121 -0
  209. package/dist/schema-form/field-model.d.ts.map +1 -0
  210. package/dist/schema-form/field-model.js +2 -0
  211. package/dist/schema-form/field-model.js.map +1 -0
  212. package/dist/schema-form/field-node.d.ts.map +1 -1
  213. package/dist/schema-form/field-node.js +25 -14
  214. package/dist/schema-form/field-node.js.map +1 -1
  215. package/dist/schema-form/media-field.d.ts +1 -1
  216. package/dist/schema-form/media-field.d.ts.map +1 -1
  217. package/dist/schema-form/media-field.js +47 -28
  218. package/dist/schema-form/media-field.js.map +1 -1
  219. package/dist/schema-form/string-annotations.d.ts +20 -0
  220. package/dist/schema-form/string-annotations.d.ts.map +1 -0
  221. package/dist/schema-form/string-annotations.js +105 -0
  222. package/dist/schema-form/string-annotations.js.map +1 -0
  223. package/dist/schema-form/string-field.d.ts +1 -1
  224. package/dist/schema-form/string-field.d.ts.map +1 -1
  225. package/dist/schema-form/union-field.d.ts +1 -1
  226. package/dist/schema-form/union-field.d.ts.map +1 -1
  227. package/dist/schema-form/union-field.js.map +1 -1
  228. package/dist/schema-form/union.d.ts +1 -1
  229. package/dist/schema-form/union.d.ts.map +1 -1
  230. package/dist/schema-form/validate.d.ts.map +1 -1
  231. package/dist/schema-form/validate.js +126 -105
  232. package/dist/schema-form/validate.js.map +1 -1
  233. package/dist/state-binding/AdapterMapping.d.ts.map +1 -1
  234. package/dist/state-binding/AdapterMapping.js +0 -0
  235. package/dist/state-binding/AdapterMapping.js.map +1 -1
  236. package/dist/state-binding/StateAttachRow.d.ts.map +1 -1
  237. package/dist/state-binding/StateAttachRow.js +52 -36
  238. package/dist/state-binding/StateAttachRow.js.map +1 -1
  239. package/dist/state-binding/adapter-mapping-row.d.ts +17 -0
  240. package/dist/state-binding/adapter-mapping-row.d.ts.map +1 -0
  241. package/dist/state-binding/adapter-mapping-row.js +87 -0
  242. package/dist/state-binding/adapter-mapping-row.js.map +1 -0
  243. package/dist/structured-output/StructuredOutput.d.ts.map +1 -1
  244. package/dist/structured-output/StructuredOutput.js +1 -3
  245. package/dist/structured-output/StructuredOutput.js.map +1 -1
  246. package/package.json +2 -2
  247. package/src/components/explorer-body.tsx +239 -0
  248. package/src/components/explorer-page-size.ts +39 -0
  249. package/src/components/explorer-tag-filter.tsx +80 -0
  250. package/src/components/explorer-tags.ts +64 -0
  251. package/src/components/explorer-view.tsx +114 -366
  252. package/src/components/extension-combo-builder.tsx +35 -152
  253. package/src/components/extension-combo-parts.tsx +237 -0
  254. package/src/components/fleet-report.tsx +97 -54
  255. package/src/components/icons/chrome-marks.tsx +195 -0
  256. package/src/components/icons/icon-frame.tsx +50 -0
  257. package/src/components/icons/index.ts +84 -0
  258. package/src/components/icons/nav-map.ts +55 -0
  259. package/src/components/icons/nav-marks.tsx +205 -0
  260. package/src/components/icons/status-marks.tsx +46 -0
  261. package/src/components/icons/theme-marks.tsx +33 -0
  262. package/src/components/json-diff.tsx +1 -4
  263. package/src/components/json-tree-context.ts +26 -0
  264. package/src/components/json-tree-model.ts +139 -0
  265. package/src/components/json-tree-nodes.tsx +224 -0
  266. package/src/components/json-tree.tsx +15 -434
  267. package/src/components/json-value-format.ts +64 -0
  268. package/src/components/markdown-blocks.ts +198 -0
  269. package/src/components/markdown-inline.tsx +365 -0
  270. package/src/components/markdown.tsx +5 -471
  271. package/src/components/observer-registry.ts +139 -0
  272. package/src/components/overflow-measure.ts +69 -0
  273. package/src/components/prose-regions.ts +153 -0
  274. package/src/components/scroll-region.tsx +20 -360
  275. package/src/components/tab-stop-parse.ts +217 -0
  276. package/src/components/templated-text-field.tsx +38 -330
  277. package/src/components/templated-text-kwargs-editor.tsx +147 -0
  278. package/src/components/templated-text-kwargs.ts +92 -0
  279. package/src/components/templated-text-source.tsx +226 -0
  280. package/src/components/tool-picker-parts.tsx +184 -0
  281. package/src/components/tool-picker.tsx +22 -114
  282. package/src/components/version-history-panel.tsx +38 -142
  283. package/src/components/version-history-rows.tsx +220 -0
  284. package/src/guards.ts +7 -0
  285. package/src/hooks/interactions-connection.ts +227 -0
  286. package/src/hooks/interactions-stream.ts +274 -0
  287. package/src/hooks/useSse.ts +50 -477
  288. package/src/navigation/app-link.tsx +70 -0
  289. package/src/navigation/context.tsx +11 -330
  290. package/src/navigation/entry-state.ts +42 -0
  291. package/src/navigation/guard-registry.ts +65 -0
  292. package/src/navigation/guarded-navigation.ts +147 -0
  293. package/src/navigation/index.ts +2 -2
  294. package/src/navigation/types.ts +8 -11
  295. package/src/navigation/use-back-forward-guard.ts +90 -0
  296. package/src/plugin/registry.ts +111 -90
  297. package/src/schema-form/SecretRefField.tsx +121 -71
  298. package/src/schema-form/classify.ts +244 -395
  299. package/src/schema-form/default-value.ts +48 -17
  300. package/src/schema-form/enum-field.tsx +1 -1
  301. package/src/schema-form/field-model.ts +133 -0
  302. package/src/schema-form/field-node.tsx +94 -38
  303. package/src/schema-form/media-field.tsx +134 -65
  304. package/src/schema-form/string-annotations.ts +111 -0
  305. package/src/schema-form/string-field.tsx +1 -1
  306. package/src/schema-form/union-field.tsx +2 -1
  307. package/src/schema-form/union.ts +1 -1
  308. package/src/schema-form/validate.ts +184 -103
  309. package/src/state-binding/AdapterMapping.tsx +0 -0
  310. package/src/state-binding/StateAttachRow.tsx +222 -147
  311. package/src/state-binding/adapter-mapping-row.tsx +232 -0
  312. package/src/structured-output/StructuredOutput.tsx +1 -4
  313. package/dist/components/icons.d.ts +0 -160
  314. package/dist/components/icons.d.ts.map +0 -1
  315. package/dist/components/icons.js +0 -160
  316. package/dist/components/icons.js.map +0 -1
  317. package/src/components/icons.tsx +0 -586
@@ -1 +1 @@
1
- {"version":3,"file":"version-history-panel.js","sourceRoot":"","sources":["../../src/components/version-history-panel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AA6C7C,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,QAAwC;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,OAAO,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,WAAW,EACX,MAAM,EACN,OAAO,GAMR;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CACxB,GAAG,EAAE;YACH,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,CAAC,MAAe,EAAE,EAAE;YAClB,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,MAAM,IACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,OAAO,CAAC,EAAE,EAC/C,WAAW,EAAC,6EAA6E,EACzF,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;QACnC,CAAC,aAED,eAAK,SAAS,EAAC,WAAW,aAGxB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,EAAC,WAAW,EAAC,0CAA0C,YACxE,KAAC,SAAS,IAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAI,GAC1D,EACP,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI,IACxD,EACN,eAAK,SAAS,EAAC,oBAAoB,aACjC,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE;4BACZ,OAAO,EAAE,CAAC;wBACZ,CAAC,EACD,QAAQ,EAAE,OAAO,uBAGV,EACT,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,aACzD,OAAO,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,KAAK,EAAC,aAAa,GAAG,CAAC,CAAC,CAAC,IAAI,iBAE1C,IACL,IACC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,UAAU,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACb,QAAQ,GAAG,KAAK,EAChB,0BAA0B,EAC1B,UAAU,GACe;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAClE,oFAAoF;IACpF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAsC,IAAI,CAAC,CAAC;IAC1F,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpE,6EAA6E;IAC7E,gFAAgF;IAChF,mFAAmF;IACnF,kFAAkF;IAClF,iFAAiF;IACjF,4DAA4D;IAC5D,MAAM,kBAAkB,GAAG,MAAM,CAAsB,eAAe,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,KAAK,IAAI,IAAI,eAAe,KAAK,IAAI,CAAC;QAC3F,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;QAC7C,IAAI,kBAAkB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACtD,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;IAC3E,MAAM,QAAQ,GACZ,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,OAAe,EAAQ,EAAE;QACxC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YACnC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IACrF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;IAEjF,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,IAAI,cAGH,KAAC,YAAY,IAAC,KAAK,EAAC,iBAAiB,YACnC,MAAC,KAAK,eACJ,KAAC,KAAK,cACJ,MAAC,EAAE,eACD,KAAC,EAAE,IAAC,OAAO,8BAAa,EACxB,KAAC,EAAE,0BAAa,EAChB,KAAC,EAAE,yBAAY,EACd,QAAQ,CAAC,CAAC,CAAC,KAAC,EAAE,uBAAU,CAAC,CAAC,CAAC,IAAI,EAChC,KAAC,EAAE,0BAAa,IACb,GACC,EACR,KAAC,KAAK,cACH,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACvB,MAAC,EAAE,mBAAkC,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,aACzE,KAAC,EAAE,IAAC,SAAS,EAAC,cAAc,EAAC,OAAO,kBACjC,KAAK,CAAC,OAAO,GACX,EACL,KAAC,EAAE,IAAC,SAAS,EAAC,UAAU,YAAE,KAAK,CAAC,UAAU,GAAM,EAChD,KAAC,EAAE,cACA,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,gBAAM,SAAS,EAAC,0BAA0B,aACxC,KAAC,eAAe,KAAG,eAEd,CACR,CAAC,CAAC,CAAC,CACF,gBAAM,SAAS,EAAC,+BAA+B,aAC7C,KAAC,WAAW,KAAG,kBAEV,CACR,GACE,EACJ,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,EAAE,cACA,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/B,KAAC,QAAQ,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,GAAI,CACrC,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,WAAW,uBAAS,CACrC,GACE,CACN,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,EAAE,cACD,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,MAAM,kBACO,gBAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EACnD,OAAO,EAAE,GAAG,EAAE;4DACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wDACtB,CAAC,qBAGM,EACR,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,MAAM;oDACL,uDAAuD;oDACvD,4DAA4D;oDAC5D,wDAAwD;oDACxD,6DAA6D;oDAC7D,0DAA0D;oDAC1D,4DAA4D;oDAC5D,gDAAgD;sEACpC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EACzG,OAAO,EAAE,GAAG,EAAE;4DACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wDACzB,CAAC,YAEA,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GAClD,CACV,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACvC,KAAC,MAAM,kBACO,yBAAyB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAC5D,OAAO,EAAE,GAAG,EAAE;4DACZ,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wDAChC,CAAC,0BAGM,CACV,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjB,KAAC,MAAM,IACL,OAAO,EAAC,WAAW,gBACP,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAC3D,QAAQ,EAAE,KAAK,CAAC,UAAU,EAC1B,OAAO,EAAE,GAAG,EAAE;4DACZ,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wDAC/B,CAAC,0BAGM,CACV,IACG,GACH,KA7EE,KAAK,CAAC,OAAO,CA8EjB,CACN,CAAC,GACI,IACF,GACK,GACV,EAEN,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAC9C,aAAG,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,WAAW,wCACZ,WAAW,iEACjC,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAC7B,mBAAS,SAAS,EAAC,uBAAuB,aACxC,cAAI,SAAS,EAAC,mBAAmB,yBAAU,aAAa,CAAC,OAAO,aAAW,EAC3E,KAAC,IAAI,cACH,KAAC,QAAQ,IACP,IAAI,EAAE,aAAa,CAAC,IAAI,EACxB,KAAK,EAAE,WAAW,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,GACtD,GACG,IACC,CACX,CAAC,CAAC,CAAC,IAAI,EAEP,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CACtB,MAAC,MAAM,IACL,KAAK,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAC9E,WAAW,EAAC,oEAAoE,EAChF,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;oBACrB,IAAI,CAAC,IAAI;wBAAE,YAAY,EAAE,CAAC;gBAC5B,CAAC,aAGD,KAAC,YAAY,IAAC,KAAK,EAAC,cAAc,YAChC,KAAC,QAAQ,IAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,GAChC,EACf,cAAK,SAAS,EAAC,oBAAoB,YACjC,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,sBAAgB,GACzC,IACC,CACV,CAAC,CAAC,CAAC,IAAI,EAEP,YAAY,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CACxD,KAAC,cAAc,IACb,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,WAAW,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE,EACpC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,GAAG,EAAE;oBACZ,cAAc,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC,GACD,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CACrB,MAAC,MAAM,IACL,KAAK,EAAC,mBAAmB,EACzB,WAAW,EACT,gBAAgB,MAAM,CAAC,UAAU,CAAC,wDAAwD;oBAC1F,CAAC,0BAA0B,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAEpF,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;oBACrB,IAAI,CAAC,IAAI;wBAAE,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,aAEA,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,OAAO,EAAE,aAAa,GAAI,CAAC,CAAC,CAAC,IAAI,EAC5E,eAAK,SAAS,EAAC,oBAAoB,aACjC,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE;oCACZ,aAAa,CAAC,IAAI,CAAC,CAAC;gCACtB,CAAC,uBAGM,EACT,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,GAAG,EAAE;oCACZ,UAAU,CAAC,UAAU,CAAC,CAAC;gCACzB,CAAC,aAEA,eAAe,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,KAAK,EAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,iBAEnD,IACL,IACC,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"version-history-panel.js","sourceRoot":"","sources":["../../src/components/version-history-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The row and dialog pieces of `VersionHistoryPanel`: one version's table row and
3
+ * action cluster (`VersionRow`), the selected version's body (`SelectedVersionBody`),
4
+ * the two-version compare dialog (`CompareDialog`), and the rollback confirm
5
+ * dialog (`RollbackConfirmDialog`). All generic and kind-agnostic.
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { VersionHistoryEntry } from './version-history-panel';
9
+ interface VersionRowProps {
10
+ readonly entry: VersionHistoryEntry;
11
+ readonly showTags: boolean;
12
+ readonly canCompare: boolean;
13
+ /** This row is the armed Compare source. */
14
+ readonly compareArmed: boolean;
15
+ readonly readOnly: boolean;
16
+ /** An edit-tags affordance is available (the consumer supplied `onEditTags`). */
17
+ readonly canEditTags: boolean;
18
+ readonly onView: (version: number) => void;
19
+ readonly onCompare: (version: number) => void;
20
+ readonly onEditTags: (version: number) => void;
21
+ readonly onRollback: (version: number) => void;
22
+ }
23
+ /** One version's row: its number, timestamp, status mark, optional tags, and the
24
+ * View / Compare / Edit tags / Roll back action cluster. */
25
+ export declare function VersionRow({ entry, showTags, canCompare, compareArmed, readOnly, canEditTags, onView, onCompare, onEditTags, onRollback, }: VersionRowProps): ReactNode;
26
+ /** The selected version's opaque body, rendered through `JsonTree`. */
27
+ export declare function SelectedVersionBody({ entry }: {
28
+ readonly entry: VersionHistoryEntry;
29
+ }): ReactNode;
30
+ /** A structural diff of two version bodies, in a dialog. */
31
+ export declare function CompareDialog({ from, to, fromBody, toBody, onClose, }: {
32
+ readonly from: number;
33
+ readonly to: number;
34
+ readonly fromBody: unknown;
35
+ readonly toBody: unknown;
36
+ readonly onClose: () => void;
37
+ }): ReactNode;
38
+ /** The rollback confirmation, surfacing any rollback failure verbatim. */
39
+ export declare function RollbackConfirmDialog({ version, rollbackPending, rollbackError, extraDescription, onCancel, onConfirm, }: {
40
+ readonly version: number;
41
+ readonly rollbackPending: boolean | undefined;
42
+ readonly rollbackError: string | undefined;
43
+ readonly extraDescription: string | undefined;
44
+ readonly onCancel: () => void;
45
+ readonly onConfirm: (version: number) => void;
46
+ }): ReactNode;
47
+ export {};
48
+ //# sourceMappingURL=version-history-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-history-rows.d.ts","sourceRoot":"","sources":["../../src/components/version-history-rows.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,UAAU,eAAe;IACvB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED;6DAC6D;AAC7D,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,MAAM,EACN,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,eAAe,GAAG,SAAS,CAiF7B;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,GAAG,SAAS,CASjG;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,GAAG,SAAS,CAmBZ;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,GAAG,SAAS,CA6BZ"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Dialog } from './dialog';
3
+ import { CheckCircleIcon, PendingIcon } from './icons';
4
+ import { JsonDiff } from './json-diff';
5
+ import { JsonTree } from './json-tree';
6
+ import { Button, Card, ErrorState, Spinner } from './primitives';
7
+ import { ScrollRegion } from './scroll-region';
8
+ import { TD, TR } from './table';
9
+ import { TagChips } from './tags';
10
+ /** One version's row: its number, timestamp, status mark, optional tags, and the
11
+ * View / Compare / Edit tags / Roll back action cluster. */
12
+ export function VersionRow({ entry, showTags, canCompare, compareArmed, readOnly, canEditTags, onView, onCompare, onEditTags, onRollback, }) {
13
+ return (_jsxs(TR, { "data-testid": `version-row-${String(entry.version)}`, children: [_jsx(TD, { className: "tai-table-id", numeric: true, children: entry.version }), _jsx(TD, { className: "tai-mono", children: entry.created_at }), _jsx(TD, { children: entry.is_current ? (_jsxs("span", { className: "tai-status tai-status-ok", children: [_jsx(CheckCircleIcon, {}), "Current"] })) : (_jsxs("span", { className: "tai-status tai-status-pending", children: [_jsx(PendingIcon, {}), "Historical"] })) }), showTags ? (_jsx(TD, { children: (entry.tags ?? []).length > 0 ? (_jsx(TagChips, { tags: entry.tags ?? [] })) : (_jsx("span", { className: "tai-muted", children: "\u2014" })) })) : null, _jsx(TD, { children: _jsxs("div", { className: "tai-row", children: [_jsx(Button, { "aria-label": `View version ${String(entry.version)}`, onClick: () => {
14
+ onView(entry.version);
15
+ }, children: "View" }), canCompare ? (_jsx(Button
16
+ // The name starts with the word the button is SHOWING, which is what
17
+ // WCAG 2.5.3 (Label in Name) asks: a constant "Compare …" would leave a
18
+ // button reading "Comparing…" named "Compare", and a voice-control user
19
+ // naming a control they cannot see. The button stays ENABLED while armed
20
+ // — unlike an Edit action, a second click on the armed row is the disarm,
21
+ // so there is nothing to take away.
22
+ , { "aria-label": `${compareArmed ? 'Comparing' : 'Compare'} version ${String(entry.version)}`, onClick: () => {
23
+ onCompare(entry.version);
24
+ }, children: compareArmed ? 'Comparing…' : 'Compare' })) : null, canEditTags && !readOnly ? (_jsx(Button, { "aria-label": `Edit tags for version ${String(entry.version)}`, onClick: () => {
25
+ onEditTags(entry.version);
26
+ }, children: "Edit tags" })) : null, readOnly ? null : (_jsx(Button, { variant: "secondary", "aria-label": `Roll back to version ${String(entry.version)}`, disabled: entry.is_current, onClick: () => {
27
+ onRollback(entry.version);
28
+ }, children: "Roll back" }))] }) })] }));
29
+ }
30
+ /** The selected version's opaque body, rendered through `JsonTree`. */
31
+ export function SelectedVersionBody({ entry }) {
32
+ return (_jsxs("section", { className: "tai-stack tai-stack-2", children: [_jsxs("h3", { className: "tai-section-title", children: ["Version ", entry.version, " body"] }), _jsx(Card, { children: _jsx(JsonTree, { data: entry.body, label: `Version ${String(entry.version)} body` }) })] }));
33
+ }
34
+ /** A structural diff of two version bodies, in a dialog. */
35
+ export function CompareDialog({ from, to, fromBody, toBody, onClose, }) {
36
+ return (_jsxs(Dialog, { title: `v${String(from)} compared with v${String(to)}`, description: "A structural diff of the two version bodies. Arrays compare whole.", open: true, onOpenChange: (next) => {
37
+ if (!next)
38
+ onClose();
39
+ }, children: [_jsx(ScrollRegion, { label: "Version diff", children: _jsx(JsonDiff, { before: fromBody, after: toBody }) }), _jsx("div", { className: "tai-dialog-actions", children: _jsx(Button, { onClick: onClose, children: "Close" }) })] }));
40
+ }
41
+ /** The rollback confirmation, surfacing any rollback failure verbatim. */
42
+ export function RollbackConfirmDialog({ version, rollbackPending, rollbackError, extraDescription, onCancel, onConfirm, }) {
43
+ return (_jsxs(Dialog, { title: "Roll back version", description: `Make version ${String(version)} the active version? The version history is preserved.` +
44
+ (extraDescription !== undefined ? ` ${extraDescription}` : ''), open: true, onOpenChange: (next) => {
45
+ if (!next)
46
+ onCancel();
47
+ }, children: [rollbackError !== undefined ? _jsx(ErrorState, { message: rollbackError }) : null, _jsxs("div", { className: "tai-dialog-actions", children: [_jsx(Button, { onClick: onCancel, children: "Cancel" }), _jsxs(Button, { variant: "primary", disabled: rollbackPending, onClick: () => {
48
+ onConfirm(version);
49
+ }, children: [rollbackPending ? _jsx(Spinner, { label: "Rolling back" }) : null, "Roll back"] })] })] }));
50
+ }
51
+ //# sourceMappingURL=version-history-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-history-rows.js","sourceRoot":"","sources":["../../src/components/version-history-rows.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shared runtime type guards. Internal to studio-sdk — never re-exported from
3
+ * `index.ts` or any subpath, so it stays off the public plugin surface.
4
+ */
5
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
6
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
package/dist/guards.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared runtime type guards. Internal to studio-sdk — never re-exported from
3
+ * `index.ts` or any subpath, so it stays off the public plugin surface.
4
+ */
5
+ export function isRecord(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The SSE reconnect driver behind `useInteractionsStream`: it owns the fetch +
3
+ * ReadableStream tail (via the api-client's `streamInteractions`, never
4
+ * EventSource), the capped-exponential-with-jitter reconnect backoff, the
5
+ * on-(re)connect resync, and the wiring that folds each frame through the pure
6
+ * overlay reducer and republishes the merged list. React state flows in as the
7
+ * dispatchers the hook passes; this file holds no React.
8
+ */
9
+ import type { Dispatch, RefObject, SetStateAction } from 'react';
10
+ import type { ApiClient, Interaction } from '@tai42/api-client';
11
+ import { type LiveOverlay, type StreamInteraction } from './interactions-stream';
12
+ /** The live connection status the hook renders from. */
13
+ export interface ConnectionState {
14
+ readonly connected: boolean;
15
+ readonly error: Error | null;
16
+ /**
17
+ * The interactions store is not configured on this deployment: the stream
18
+ * answered with a terminal 501 `interactions-not-configured`. Reconnection is
19
+ * abandoned (retrying would replay the same refusal forever) and the consumer
20
+ * renders the muted OFF state instead of a red error or a floating badge.
21
+ */
22
+ readonly disabled: boolean;
23
+ }
24
+ /** Everything the driver reads or writes, supplied by the hook's render. */
25
+ export interface InteractionsStreamDeps {
26
+ readonly api: ApiClient;
27
+ readonly overlayRef: RefObject<LiveOverlay>;
28
+ readonly epochRef: RefObject<number>;
29
+ readonly seedRef: RefObject<readonly Interaction[]>;
30
+ readonly onResyncRef: RefObject<() => boolean | Promise<boolean>>;
31
+ readonly onUnauthorized: () => void;
32
+ readonly setConnectionState: Dispatch<SetStateAction<ConnectionState>>;
33
+ readonly setInteractions: Dispatch<SetStateAction<StreamInteraction[]>>;
34
+ readonly setCountEpoch: Dispatch<SetStateAction<number>>;
35
+ }
36
+ /**
37
+ * Start the tail-only interactions stream and return the effect cleanup. The
38
+ * abort signal is the single cancellation source of truth: cleanup aborts it, every
39
+ * loop guard reads it fresh, and a fresh mount starts from an empty overlay at epoch
40
+ * 0 so a re-run never inherits the prior run's tail or its epoch stamps.
41
+ */
42
+ export declare function startInteractionsStream(deps: InteractionsStreamDeps): () => void;
43
+ //# sourceMappingURL=interactions-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions-connection.d.ts","sourceRoot":"","sources":["../../src/hooks/interactions-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EASL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAW/B,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;CAC1D;AAwJD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAUhF"}
@@ -0,0 +1,171 @@
1
+ import { isFeatureDisabled } from '../feature-disabled';
2
+ import { emptyOverlay, merge, overlayApplyAdd, overlayApplyAnswered, overlayApplyRemoved, parseAddFrame, parseId, sweepAnswered, } from './interactions-stream';
3
+ // Reconnect backoff: capped exponential with full jitter. The delay for attempt
4
+ // n is a random value in [0, min(CAP, BASE * 2**n)); the attempt counter resets
5
+ // only when a connection PROVES HEALTHY — it stayed open at least
6
+ // `HEALTHY_CONNECTION_MS` — not merely when it opens, so a server that accepts the
7
+ // request then drops the body still backs off instead of tight-looping.
8
+ const RECONNECT_BASE_MS = 1500;
9
+ const RECONNECT_CAP_MS = 30000;
10
+ const HEALTHY_CONNECTION_MS = RECONNECT_BASE_MS;
11
+ function aborted(ctx) {
12
+ return ctx.controller.signal.aborted;
13
+ }
14
+ function surfaceMalformed(ctx, event) {
15
+ ctx.setConnectionState((prev) => ({
16
+ ...prev,
17
+ error: new Error(`malformed interaction frame: ${event}`),
18
+ }));
19
+ }
20
+ /**
21
+ * A successful data frame sweeps aged answered cards, republishes the merged list,
22
+ * and clears any transient frame-parse error — one bad frame on a healthy stream
23
+ * must not stick. It does NOT refetch: the overlay already updated the list and the
24
+ * derived count, and the resync fires on (re)connect only.
25
+ */
26
+ function commit(ctx) {
27
+ if (aborted(ctx))
28
+ return;
29
+ sweepAnswered(ctx.overlay);
30
+ ctx.setConnectionState((prev) => (prev.error === null ? prev : { ...prev, error: null }));
31
+ ctx.setInteractions(merge(ctx.seedRef.current, ctx.overlay));
32
+ }
33
+ function applyFrame(ctx, event, data) {
34
+ if (event === 'interaction.removed') {
35
+ const id = parseId(data);
36
+ if (id === null) {
37
+ surfaceMalformed(ctx, event);
38
+ return;
39
+ }
40
+ overlayApplyRemoved(ctx.overlay, id, ctx.epochRef.current);
41
+ commit(ctx);
42
+ return;
43
+ }
44
+ if (event === 'interaction.answered') {
45
+ const id = parseId(data);
46
+ if (id === null) {
47
+ surfaceMalformed(ctx, event);
48
+ return;
49
+ }
50
+ overlayApplyAnswered(ctx.overlay, id, ctx.epochRef.current, ctx.seedRef.current);
51
+ commit(ctx);
52
+ return;
53
+ }
54
+ // interaction.add — the full question.
55
+ const interaction = parseAddFrame(data);
56
+ if (interaction === null) {
57
+ surfaceMalformed(ctx, event);
58
+ return;
59
+ }
60
+ overlayApplyAdd(ctx.overlay, interaction, ctx.epochRef.current);
61
+ commit(ctx);
62
+ }
63
+ /**
64
+ * Open one connection and consume its frames until the tail ends. Refetches the
65
+ * paged base on connect under a fresh epoch (tail-only carries no backlog) and
66
+ * records that epoch as `countEpoch` only once the refetch LANDED, so the count
67
+ * applies only deltas not yet folded into the fresh `total`.
68
+ */
69
+ async function connectAndConsume(ctx, cursor) {
70
+ const frames = await ctx.api.streamInteractions(ctx.controller.signal, cursor.lastEventId);
71
+ if (aborted(ctx))
72
+ return;
73
+ ctx.setConnectionState((prev) => ({ ...prev, connected: true, error: null, disabled: false }));
74
+ const epoch = (ctx.epochRef.current += 1);
75
+ const landed = await ctx.onResyncRef.current();
76
+ if (aborted(ctx))
77
+ return;
78
+ if (landed)
79
+ ctx.setCountEpoch(epoch);
80
+ for await (const frame of frames) {
81
+ if (aborted(ctx))
82
+ return;
83
+ applyFrame(ctx, frame.event, frame.data);
84
+ // Advance the resume cursor to every id-bearing frame (even a malformed one)
85
+ // so a reconnect never re-requests a frame already delivered.
86
+ if (frame.id !== undefined)
87
+ cursor.lastEventId = frame.id;
88
+ }
89
+ }
90
+ /** Classify a connection error into whether the driver should stop or reconnect. */
91
+ function handleConnectionError(ctx, err) {
92
+ const error = err instanceof Error ? err : new Error(String(err));
93
+ ctx.setConnectionState((prev) => ({ ...prev, connected: false, error }));
94
+ if (error.name === 'ApiUnauthorizedError') {
95
+ // A dead credential — reconnecting would replay the same bad key forever. Hand
96
+ // off to the app's 401→login handler, the same path every other call takes.
97
+ ctx.onUnauthorized();
98
+ return 'stop';
99
+ }
100
+ if (isFeatureDisabled(error)) {
101
+ // A terminal 501 `interactions-not-configured`: reconnecting would replay the
102
+ // same refusal on every backoff forever. Flag the OFF state and stop.
103
+ ctx.setConnectionState((prev) => ({ ...prev, connected: false, disabled: true }));
104
+ return 'stop';
105
+ }
106
+ return 'retry';
107
+ }
108
+ /** Wait out the backoff for `attempt`, resolving early if the signal aborts. */
109
+ function waitBackoff(signal, attempt) {
110
+ const ceiling = Math.min(RECONNECT_CAP_MS, RECONNECT_BASE_MS * 2 ** attempt);
111
+ const delay = Math.random() * ceiling;
112
+ return new Promise((resolve) => {
113
+ const onAbort = () => {
114
+ clearTimeout(timer);
115
+ resolve();
116
+ };
117
+ const timer = setTimeout(() => {
118
+ // Normal wake: drop the abort listener so it does not accumulate across
119
+ // reconnects ({ once: true } only self-removes on firing).
120
+ signal.removeEventListener('abort', onAbort);
121
+ resolve();
122
+ }, delay);
123
+ signal.addEventListener('abort', onAbort, { once: true });
124
+ });
125
+ }
126
+ /** The reconnect loop: connect, consume, back off, repeat until aborted or terminal. */
127
+ async function runConnectionLoop(ctx) {
128
+ const cursor = { lastEventId: undefined };
129
+ let reconnectAttempt = 0;
130
+ while (!aborted(ctx)) {
131
+ const openedAt = Date.now();
132
+ try {
133
+ await connectAndConsume(ctx, cursor);
134
+ if (aborted(ctx))
135
+ return;
136
+ }
137
+ catch (err) {
138
+ if (aborted(ctx))
139
+ return;
140
+ if (handleConnectionError(ctx, err) === 'stop')
141
+ return;
142
+ }
143
+ // A connection open at least HEALTHY_CONNECTION_MS proved healthy — clear the
144
+ // backoff so the next drop reconnects promptly; an accept-then-drop flap does not.
145
+ if (Date.now() - openedAt >= HEALTHY_CONNECTION_MS)
146
+ reconnectAttempt = 0;
147
+ if (aborted(ctx))
148
+ return;
149
+ ctx.setConnectionState((prev) => ({ ...prev, connected: false }));
150
+ await waitBackoff(ctx.controller.signal, reconnectAttempt);
151
+ reconnectAttempt += 1;
152
+ }
153
+ }
154
+ /**
155
+ * Start the tail-only interactions stream and return the effect cleanup. The
156
+ * abort signal is the single cancellation source of truth: cleanup aborts it, every
157
+ * loop guard reads it fresh, and a fresh mount starts from an empty overlay at epoch
158
+ * 0 so a re-run never inherits the prior run's tail or its epoch stamps.
159
+ */
160
+ export function startInteractionsStream(deps) {
161
+ const controller = new AbortController();
162
+ const ctx = { ...deps, controller, overlay: deps.overlayRef.current };
163
+ void runConnectionLoop(ctx);
164
+ return () => {
165
+ controller.abort();
166
+ deps.overlayRef.current = emptyOverlay();
167
+ deps.epochRef.current = 0;
168
+ deps.setCountEpoch(0);
169
+ };
170
+ }
171
+ //# sourceMappingURL=interactions-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions-connection.js","sourceRoot":"","sources":["../../src/hooks/interactions-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The pure reducer behind the live interactions inbox: frame parsing, the live
3
+ * overlay accumulated over the paged base, and the two derived projections
4
+ * (`merge` → the published list, `pendingCount` → the live badge tally). No React,
5
+ * no I/O — the connection driver owns the SSE loop and feeds frames through here.
6
+ */
7
+ import type { Interaction } from '@tai42/api-client';
8
+ /** A live interaction plus the client-maintained `answered` flag. */
9
+ export type StreamInteraction = Interaction & {
10
+ readonly answered: boolean;
11
+ };
12
+ /**
13
+ * Validate an `interaction.add` frame into an `Interaction`, or null when it is
14
+ * malformed. This mirrors the api-client `interaction` zod schema exactly — it
15
+ * accepts what that schema accepts, no more, no less — so the caller surfaces a
16
+ * malformed frame as an error rather than rendering a blank card, and never
17
+ * silently coerces one.
18
+ */
19
+ export declare function parseAddFrame(data: string): Interaction | null;
20
+ /** The interaction id from an `answered` / `removed` frame, or null. */
21
+ export declare function parseId(data: string): string | null;
22
+ /**
23
+ * The live overlay a connection accumulates over the paged base: the tail's own
24
+ * adds (kept whether or not the base already lists them, so a fresher add wins),
25
+ * the answered stamps (wall-clock ms, for the aging sweep), and the tombstones for
26
+ * ids removed on the tail OR aged out of the answered window (a tombstone stops a
27
+ * still-stale seed from re-showing a gone card; ids are never reused). `addEpoch`
28
+ * and `goneEpoch` carry the resync epoch current when an add / a first terminal frame
29
+ * arrived, so the count applies an add (or subtracts a terminal) only while it is not
30
+ * yet folded into the refetched `total`; the merge and the aging sweep ignore them.
31
+ */
32
+ export interface LiveOverlay {
33
+ readonly adds: Map<string, Interaction>;
34
+ readonly addEpoch: Map<string, number>;
35
+ readonly answeredAt: Map<string, number>;
36
+ readonly removed: Set<string>;
37
+ readonly goneEpoch: Map<string, number>;
38
+ }
39
+ export declare function emptyOverlay(): LiveOverlay;
40
+ /** Record an `interaction.add`: a live add overwrites any prior copy in place. */
41
+ export declare function overlayApplyAdd(overlay: LiveOverlay, interaction: Interaction, epoch: number): void;
42
+ /**
43
+ * Record an `interaction.answered`. The answered time and terminal epoch are
44
+ * stamped on the FIRST answered frame only (a redelivery keeps the original stamp,
45
+ * so the retention window is not extended and a later terminal never re-dates it
46
+ * into a fresher resync). A seed-origin card is promoted into the overlay so it
47
+ * lingers uniformly with a live-add card, since the paged base never carries
48
+ * answered items and a refetch would otherwise drop it before its window elapses.
49
+ */
50
+ export declare function overlayApplyAnswered(overlay: LiveOverlay, id: string, epoch: number, seed: readonly Interaction[]): void;
51
+ /** Record an `interaction.removed`: tombstone the id and stamp its first terminal epoch. */
52
+ export declare function overlayApplyRemoved(overlay: LiveOverlay, id: string, epoch: number): void;
53
+ /**
54
+ * Age answered cards out (the server sends no removal for them): tombstone any past
55
+ * the retention window, then — as a flood backstop — the oldest beyond the count
56
+ * cap. A tombstone (not a bare delete) so a still-stale seed cannot resurrect a card
57
+ * the client has retired; the id keeps its original `goneEpoch` so moving
58
+ * answered→removed never re-dates it into a fresher resync.
59
+ */
60
+ export declare function sweepAnswered(overlay: LiveOverlay): void;
61
+ /** Fold the paged base and the live overlay into the published, ordered list. */
62
+ export declare function merge(seed: readonly Interaction[], live: LiveOverlay): StreamInteraction[];
63
+ /**
64
+ * The live pending tally: the door's `total` for the seed, plus live adds whose id
65
+ * is absent from the seed AND stamped at or after `countEpoch` (a new question not
66
+ * yet folded into `total`), minus one for every terminal id — answered OR removed —
67
+ * stamped at or after `countEpoch`, deduped per id so an id counts once however many
68
+ * terminal frames it drew. `countEpoch` is the epoch of the last resync whose refetch
69
+ * LANDED (a failed refetch never advances it): a delta stamped before it is already
70
+ * reflected in the fresh `total`, so it is NOT applied again — this is what stops a
71
+ * resync from re-subtracting a terminal it already dropped from `total`, while a
72
+ * failed refetch keeps the prior-epoch deltas applying against the prior total. One
73
+ * residual race remains: a frame arriving while a refetch is in flight may already be
74
+ * reflected in that refetch's `total`, so the raw tally can transiently dip below zero
75
+ * until the next resync reconciles. A pending tally below zero is meaningless, so the
76
+ * published count clamps at 0; the clamp covers only the negative symptom (a transient
77
+ * positive under-count reconciles on the next resync, not here).
78
+ */
79
+ export declare function pendingCount(seed: readonly Interaction[], total: number, live: LiveOverlay, countEpoch: number): number;
80
+ //# sourceMappingURL=interactions-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions-stream.d.ts","sourceRoot":"","sources":["../../src/hooks/interactions-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAoG7E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAK9D;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,GACZ,IAAI,CAGN;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,WAAW,EAAE,GAC3B,IAAI,CAUN;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMzF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAexD;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAW1F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR"}