@flanksource/clicky-ui 0.3.1 → 0.3.3

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 (382) hide show
  1. package/dist/comments/CommentAuthor.cjs +58 -0
  2. package/dist/comments/CommentAuthor.cjs.map +1 -0
  3. package/dist/comments/CommentAuthor.d.ts +17 -0
  4. package/dist/comments/CommentAuthor.d.ts.map +1 -0
  5. package/dist/comments/CommentAuthor.js +58 -0
  6. package/dist/comments/CommentAuthor.js.map +1 -0
  7. package/dist/comments/CommentCard.cjs +343 -0
  8. package/dist/comments/CommentCard.cjs.map +1 -0
  9. package/dist/comments/CommentCard.d.ts +27 -0
  10. package/dist/comments/CommentCard.d.ts.map +1 -0
  11. package/dist/comments/CommentCard.js +343 -0
  12. package/dist/comments/CommentCard.js.map +1 -0
  13. package/dist/comments/CommentComposer.cjs +207 -0
  14. package/dist/comments/CommentComposer.cjs.map +1 -0
  15. package/dist/comments/CommentComposer.d.ts +23 -0
  16. package/dist/comments/CommentComposer.d.ts.map +1 -0
  17. package/dist/comments/CommentComposer.js +207 -0
  18. package/dist/comments/CommentComposer.js.map +1 -0
  19. package/dist/comments/CommentFilterBar.cjs +145 -0
  20. package/dist/comments/CommentFilterBar.cjs.map +1 -0
  21. package/dist/comments/CommentFilterBar.d.ts +15 -0
  22. package/dist/comments/CommentFilterBar.d.ts.map +1 -0
  23. package/dist/comments/CommentFilterBar.js +145 -0
  24. package/dist/comments/CommentFilterBar.js.map +1 -0
  25. package/dist/comments/CommentMarkdown.cjs +156 -0
  26. package/dist/comments/CommentMarkdown.cjs.map +1 -0
  27. package/dist/comments/CommentMarkdown.d.ts +13 -0
  28. package/dist/comments/CommentMarkdown.d.ts.map +1 -0
  29. package/dist/comments/CommentMarkdown.js +156 -0
  30. package/dist/comments/CommentMarkdown.js.map +1 -0
  31. package/dist/comments/CommentProgress.cjs +86 -0
  32. package/dist/comments/CommentProgress.cjs.map +1 -0
  33. package/dist/comments/CommentProgress.d.ts +16 -0
  34. package/dist/comments/CommentProgress.d.ts.map +1 -0
  35. package/dist/comments/CommentProgress.js +86 -0
  36. package/dist/comments/CommentProgress.js.map +1 -0
  37. package/dist/comments/CommentProvider.cjs +99 -0
  38. package/dist/comments/CommentProvider.cjs.map +1 -0
  39. package/dist/comments/CommentProvider.d.ts +19 -0
  40. package/dist/comments/CommentProvider.d.ts.map +1 -0
  41. package/dist/comments/CommentProvider.js +99 -0
  42. package/dist/comments/CommentProvider.js.map +1 -0
  43. package/dist/comments/CommentSidePanel.cjs +219 -0
  44. package/dist/comments/CommentSidePanel.cjs.map +1 -0
  45. package/dist/comments/CommentSidePanel.d.ts +16 -0
  46. package/dist/comments/CommentSidePanel.d.ts.map +1 -0
  47. package/dist/comments/CommentSidePanel.js +219 -0
  48. package/dist/comments/CommentSidePanel.js.map +1 -0
  49. package/dist/comments/CommentThread.cjs +57 -0
  50. package/dist/comments/CommentThread.cjs.map +1 -0
  51. package/dist/comments/CommentThread.d.ts +24 -0
  52. package/dist/comments/CommentThread.d.ts.map +1 -0
  53. package/dist/comments/CommentThread.js +57 -0
  54. package/dist/comments/CommentThread.js.map +1 -0
  55. package/dist/comments/CommentThreadList.cjs +124 -0
  56. package/dist/comments/CommentThreadList.cjs.map +1 -0
  57. package/dist/comments/CommentThreadList.d.ts +25 -0
  58. package/dist/comments/CommentThreadList.d.ts.map +1 -0
  59. package/dist/comments/CommentThreadList.js +124 -0
  60. package/dist/comments/CommentThreadList.js.map +1 -0
  61. package/dist/comments/GroupedComments.cjs +74 -0
  62. package/dist/comments/GroupedComments.cjs.map +1 -0
  63. package/dist/comments/GroupedComments.d.ts +18 -0
  64. package/dist/comments/GroupedComments.d.ts.map +1 -0
  65. package/dist/comments/GroupedComments.js +74 -0
  66. package/dist/comments/GroupedComments.js.map +1 -0
  67. package/dist/comments/MentionTextarea.cjs +253 -0
  68. package/dist/comments/MentionTextarea.cjs.map +1 -0
  69. package/dist/comments/MentionTextarea.d.ts +28 -0
  70. package/dist/comments/MentionTextarea.d.ts.map +1 -0
  71. package/dist/comments/MentionTextarea.js +253 -0
  72. package/dist/comments/MentionTextarea.js.map +1 -0
  73. package/dist/comments/comment-context.cjs +33 -0
  74. package/dist/comments/comment-context.cjs.map +1 -0
  75. package/dist/comments/comment-context.d.ts +32 -0
  76. package/dist/comments/comment-context.d.ts.map +1 -0
  77. package/dist/comments/comment-context.js +33 -0
  78. package/dist/comments/comment-context.js.map +1 -0
  79. package/dist/comments/comment-fixtures.d.ts +11 -0
  80. package/dist/comments/comment-fixtures.d.ts.map +1 -0
  81. package/dist/comments/comment-types.cjs +19 -0
  82. package/dist/comments/comment-types.cjs.map +1 -0
  83. package/dist/comments/comment-types.d.ts +170 -0
  84. package/dist/comments/comment-types.d.ts.map +1 -0
  85. package/dist/comments/comment-types.js +19 -0
  86. package/dist/comments/comment-types.js.map +1 -0
  87. package/dist/comments/comment-utils.cjs +216 -0
  88. package/dist/comments/comment-utils.cjs.map +1 -0
  89. package/dist/comments/comment-utils.d.ts +59 -0
  90. package/dist/comments/comment-utils.d.ts.map +1 -0
  91. package/dist/comments/comment-utils.js +216 -0
  92. package/dist/comments/comment-utils.js.map +1 -0
  93. package/dist/comments.cjs +57 -0
  94. package/dist/comments.cjs.map +1 -0
  95. package/dist/comments.d.ts +16 -0
  96. package/dist/comments.d.ts.map +1 -0
  97. package/dist/comments.js +57 -0
  98. package/dist/comments.js.map +1 -0
  99. package/dist/components/FilterBar.cjs +13 -3
  100. package/dist/components/FilterBar.cjs.map +1 -1
  101. package/dist/components/FilterBar.js +13 -3
  102. package/dist/components/FilterBar.js.map +1 -1
  103. package/dist/components/JsonSchemaForm.cjs +20 -6
  104. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  105. package/dist/components/JsonSchemaForm.d.ts +1 -1
  106. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  107. package/dist/components/JsonSchemaForm.js +22 -8
  108. package/dist/components/JsonSchemaForm.js.map +1 -1
  109. package/dist/components/NamespacePicker.cjs +52 -0
  110. package/dist/components/NamespacePicker.cjs.map +1 -0
  111. package/dist/components/NamespacePicker.d.ts +17 -0
  112. package/dist/components/NamespacePicker.d.ts.map +1 -0
  113. package/dist/components/NamespacePicker.js +52 -0
  114. package/dist/components/NamespacePicker.js.map +1 -0
  115. package/dist/components/form-lookup-context.cjs +36 -0
  116. package/dist/components/form-lookup-context.cjs.map +1 -0
  117. package/dist/components/form-lookup-context.d.ts +9 -0
  118. package/dist/components/form-lookup-context.d.ts.map +1 -0
  119. package/dist/components/form-lookup-context.js +36 -0
  120. package/dist/components/form-lookup-context.js.map +1 -0
  121. package/dist/components/json-schema-form-discriminator.cjs +67 -0
  122. package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
  123. package/dist/components/json-schema-form-discriminator.d.ts +10 -0
  124. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
  125. package/dist/components/json-schema-form-discriminator.js +67 -0
  126. package/dist/components/json-schema-form-discriminator.js.map +1 -0
  127. package/dist/components/json-schema-form-fields.cjs +66 -1
  128. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  129. package/dist/components/json-schema-form-fields.d.ts +7 -0
  130. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  131. package/dist/components/json-schema-form-fields.js +66 -1
  132. package/dist/components/json-schema-form-fields.js.map +1 -1
  133. package/dist/components/json-schema-form-grid.cjs +92 -0
  134. package/dist/components/json-schema-form-grid.cjs.map +1 -0
  135. package/dist/components/json-schema-form-grid.d.ts +9 -0
  136. package/dist/components/json-schema-form-grid.d.ts.map +1 -0
  137. package/dist/components/json-schema-form-grid.js +92 -0
  138. package/dist/components/json-schema-form-grid.js.map +1 -0
  139. package/dist/components/json-schema-form-render.cjs +20 -3
  140. package/dist/components/json-schema-form-render.cjs.map +1 -1
  141. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  142. package/dist/components/json-schema-form-render.js +22 -5
  143. package/dist/components/json-schema-form-render.js.map +1 -1
  144. package/dist/components/json-schema-form-resolve.cjs +24 -2
  145. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  146. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  147. package/dist/components/json-schema-form-resolve.js +24 -2
  148. package/dist/components/json-schema-form-resolve.js.map +1 -1
  149. package/dist/components/json-schema-form-types.d.ts +37 -2
  150. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  151. package/dist/components/json-schema-form-utils.cjs +8 -0
  152. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  153. package/dist/components/json-schema-form-utils.d.ts +1 -0
  154. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  155. package/dist/components/json-schema-form-utils.js +8 -0
  156. package/dist/components/json-schema-form-utils.js.map +1 -1
  157. package/dist/components/workload-picker-utils.cjs.map +1 -1
  158. package/dist/components/workload-picker-utils.d.ts +11 -1
  159. package/dist/components/workload-picker-utils.d.ts.map +1 -1
  160. package/dist/components/workload-picker-utils.js.map +1 -1
  161. package/dist/components.cjs +6 -0
  162. package/dist/components.cjs.map +1 -1
  163. package/dist/components.d.ts +4 -2
  164. package/dist/components.d.ts.map +1 -1
  165. package/dist/components.js +6 -0
  166. package/dist/components.js.map +1 -1
  167. package/dist/data/Clicky.cjs +225 -60
  168. package/dist/data/Clicky.cjs.map +1 -1
  169. package/dist/data/Clicky.d.ts +7 -1
  170. package/dist/data/Clicky.d.ts.map +1 -1
  171. package/dist/data/Clicky.fixtures.d.ts +3 -1
  172. package/dist/data/Clicky.fixtures.d.ts.map +1 -1
  173. package/dist/data/Clicky.js +226 -61
  174. package/dist/data/Clicky.js.map +1 -1
  175. package/dist/data/ExecutionTree.cjs +68 -0
  176. package/dist/data/ExecutionTree.cjs.map +1 -0
  177. package/dist/data/ExecutionTree.d.ts +40 -0
  178. package/dist/data/ExecutionTree.d.ts.map +1 -0
  179. package/dist/data/ExecutionTree.js +68 -0
  180. package/dist/data/ExecutionTree.js.map +1 -0
  181. package/dist/data/GaugeHoverCard.cjs +35 -0
  182. package/dist/data/GaugeHoverCard.cjs.map +1 -0
  183. package/dist/data/GaugeHoverCard.d.ts +25 -0
  184. package/dist/data/GaugeHoverCard.d.ts.map +1 -0
  185. package/dist/data/GaugeHoverCard.js +35 -0
  186. package/dist/data/GaugeHoverCard.js.map +1 -0
  187. package/dist/data/MarkdownEditor.cjs +616 -0
  188. package/dist/data/MarkdownEditor.cjs.map +1 -0
  189. package/dist/data/MarkdownEditor.d.ts +61 -0
  190. package/dist/data/MarkdownEditor.d.ts.map +1 -0
  191. package/dist/data/MarkdownEditor.js +616 -0
  192. package/dist/data/MarkdownEditor.js.map +1 -0
  193. package/dist/data/MarkdownEditor.model.cjs +27 -0
  194. package/dist/data/MarkdownEditor.model.cjs.map +1 -0
  195. package/dist/data/MarkdownEditor.model.d.ts +38 -0
  196. package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
  197. package/dist/data/MarkdownEditor.model.js +27 -0
  198. package/dist/data/MarkdownEditor.model.js.map +1 -0
  199. package/dist/data/ObjectGraph.cjs +44 -0
  200. package/dist/data/ObjectGraph.cjs.map +1 -0
  201. package/dist/data/ObjectGraph.d.ts +39 -0
  202. package/dist/data/ObjectGraph.d.ts.map +1 -0
  203. package/dist/data/ObjectGraph.js +44 -0
  204. package/dist/data/ObjectGraph.js.map +1 -0
  205. package/dist/data/SchemaViewer.cjs +152 -0
  206. package/dist/data/SchemaViewer.cjs.map +1 -0
  207. package/dist/data/SchemaViewer.d.ts +27 -0
  208. package/dist/data/SchemaViewer.d.ts.map +1 -0
  209. package/dist/data/SchemaViewer.js +152 -0
  210. package/dist/data/SchemaViewer.js.map +1 -0
  211. package/dist/data/TimeseriesCoreBars.cjs +51 -12
  212. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  213. package/dist/data/TimeseriesCoreBars.d.ts +32 -5
  214. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  215. package/dist/data/TimeseriesCoreBars.js +51 -12
  216. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  217. package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
  218. package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
  219. package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
  220. package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
  221. package/dist/data/TimeseriesCoreBars.model.js +5 -5
  222. package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
  223. package/dist/data/TimeseriesGauge.cjs +103 -65
  224. package/dist/data/TimeseriesGauge.cjs.map +1 -1
  225. package/dist/data/TimeseriesGauge.d.ts +10 -1
  226. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  227. package/dist/data/TimeseriesGauge.js +104 -66
  228. package/dist/data/TimeseriesGauge.js.map +1 -1
  229. package/dist/data/WorkloadCard.cjs +4 -4
  230. package/dist/data/WorkloadCard.cjs.map +1 -1
  231. package/dist/data/WorkloadCard.d.ts +3 -2
  232. package/dist/data/WorkloadCard.d.ts.map +1 -1
  233. package/dist/data/WorkloadCard.js +4 -4
  234. package/dist/data/WorkloadCard.js.map +1 -1
  235. package/dist/data/ai/ChatWindow.cjs +11 -19
  236. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  237. package/dist/data/ai/ChatWindow.d.ts +1 -7
  238. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  239. package/dist/data/ai/ChatWindow.js +11 -19
  240. package/dist/data/ai/ChatWindow.js.map +1 -1
  241. package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
  242. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
  243. package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
  244. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
  245. package/dist/data/ai/ChatWindowRequestBody.js +20 -0
  246. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
  247. package/dist/data/chat/Chat.cjs +12 -0
  248. package/dist/data/chat/Chat.cjs.map +1 -1
  249. package/dist/data/chat/Chat.d.ts +8 -1
  250. package/dist/data/chat/Chat.d.ts.map +1 -1
  251. package/dist/data/chat/Chat.js +12 -0
  252. package/dist/data/chat/Chat.js.map +1 -1
  253. package/dist/data/gauge-stats.cjs +19 -0
  254. package/dist/data/gauge-stats.cjs.map +1 -0
  255. package/dist/data/gauge-stats.d.ts +15 -0
  256. package/dist/data/gauge-stats.d.ts.map +1 -0
  257. package/dist/data/gauge-stats.js +19 -0
  258. package/dist/data/gauge-stats.js.map +1 -0
  259. package/dist/data/schema-viewer-model.cjs +436 -0
  260. package/dist/data/schema-viewer-model.cjs.map +1 -0
  261. package/dist/data/schema-viewer-model.d.ts +64 -0
  262. package/dist/data/schema-viewer-model.d.ts.map +1 -0
  263. package/dist/data/schema-viewer-model.js +436 -0
  264. package/dist/data/schema-viewer-model.js.map +1 -0
  265. package/dist/data/version-info.cjs +2 -2
  266. package/dist/data/version-info.js +2 -2
  267. package/dist/data.cjs +23 -0
  268. package/dist/data.cjs.map +1 -1
  269. package/dist/data.d.ts +11 -3
  270. package/dist/data.d.ts.map +1 -1
  271. package/dist/data.js +23 -0
  272. package/dist/data.js.map +1 -1
  273. package/dist/index.cjs +87 -2
  274. package/dist/index.cjs.map +1 -1
  275. package/dist/index.d.ts +1 -0
  276. package/dist/index.d.ts.map +1 -1
  277. package/dist/index.js +87 -2
  278. package/dist/index.js.map +1 -1
  279. package/dist/rpc/EntityExplorerApp.cjs +102 -143
  280. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  281. package/dist/rpc/EntityExplorerApp.d.ts +34 -1
  282. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  283. package/dist/rpc/EntityExplorerApp.js +105 -146
  284. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  285. package/dist/rpc/OperationActionBar.cjs +135 -0
  286. package/dist/rpc/OperationActionBar.cjs.map +1 -0
  287. package/dist/rpc/OperationActionBar.d.ts +20 -0
  288. package/dist/rpc/OperationActionBar.d.ts.map +1 -0
  289. package/dist/rpc/OperationActionBar.js +135 -0
  290. package/dist/rpc/OperationActionBar.js.map +1 -0
  291. package/dist/rpc/OperationCatalog.cjs +79 -116
  292. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  293. package/dist/rpc/OperationCatalog.d.ts +8 -1
  294. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  295. package/dist/rpc/OperationCatalog.js +80 -117
  296. package/dist/rpc/OperationCatalog.js.map +1 -1
  297. package/dist/rpc/OperationCommandPage.cjs +134 -223
  298. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  299. package/dist/rpc/OperationCommandPage.d.ts +1 -1
  300. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  301. package/dist/rpc/OperationCommandPage.js +135 -224
  302. package/dist/rpc/OperationCommandPage.js.map +1 -1
  303. package/dist/rpc/OperationEntityPage.cjs +49 -100
  304. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  305. package/dist/rpc/OperationEntityPage.d.ts +6 -1
  306. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  307. package/dist/rpc/OperationEntityPage.js +50 -101
  308. package/dist/rpc/OperationEntityPage.js.map +1 -1
  309. package/dist/rpc/OperationResultView.cjs +43 -0
  310. package/dist/rpc/OperationResultView.cjs.map +1 -0
  311. package/dist/rpc/OperationResultView.d.ts +30 -0
  312. package/dist/rpc/OperationResultView.d.ts.map +1 -0
  313. package/dist/rpc/OperationResultView.js +43 -0
  314. package/dist/rpc/OperationResultView.js.map +1 -0
  315. package/dist/rpc/SchemaActionForm.cjs +102 -0
  316. package/dist/rpc/SchemaActionForm.cjs.map +1 -0
  317. package/dist/rpc/SchemaActionForm.d.ts +23 -0
  318. package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
  319. package/dist/rpc/SchemaActionForm.js +102 -0
  320. package/dist/rpc/SchemaActionForm.js.map +1 -0
  321. package/dist/rpc/accept-options.cjs.map +1 -1
  322. package/dist/rpc/accept-options.d.ts +0 -1
  323. package/dist/rpc/accept-options.d.ts.map +1 -1
  324. package/dist/rpc/accept-options.js.map +1 -1
  325. package/dist/rpc/apiClient.cjs +34 -2
  326. package/dist/rpc/apiClient.cjs.map +1 -1
  327. package/dist/rpc/apiClient.d.ts +4 -1
  328. package/dist/rpc/apiClient.d.ts.map +1 -1
  329. package/dist/rpc/apiClient.js +34 -2
  330. package/dist/rpc/apiClient.js.map +1 -1
  331. package/dist/rpc/clickyMetadata.cjs +4 -4
  332. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  333. package/dist/rpc/clickyMetadata.d.ts +0 -1
  334. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  335. package/dist/rpc/clickyMetadata.js +4 -4
  336. package/dist/rpc/clickyMetadata.js.map +1 -1
  337. package/dist/rpc/formMetadata.cjs +1 -0
  338. package/dist/rpc/formMetadata.cjs.map +1 -1
  339. package/dist/rpc/formMetadata.d.ts +6 -1
  340. package/dist/rpc/formMetadata.d.ts.map +1 -1
  341. package/dist/rpc/formMetadata.js +1 -0
  342. package/dist/rpc/formMetadata.js.map +1 -1
  343. package/dist/rpc/rowNavigation.cjs +86 -0
  344. package/dist/rpc/rowNavigation.cjs.map +1 -0
  345. package/dist/rpc/rowNavigation.d.ts +14 -0
  346. package/dist/rpc/rowNavigation.d.ts.map +1 -0
  347. package/dist/rpc/rowNavigation.js +86 -0
  348. package/dist/rpc/rowNavigation.js.map +1 -0
  349. package/dist/rpc/schemaActionPath.cjs +22 -0
  350. package/dist/rpc/schemaActionPath.cjs.map +1 -0
  351. package/dist/rpc/schemaActionPath.d.ts +4 -0
  352. package/dist/rpc/schemaActionPath.d.ts.map +1 -0
  353. package/dist/rpc/schemaActionPath.js +22 -0
  354. package/dist/rpc/schemaActionPath.js.map +1 -0
  355. package/dist/rpc/surfaceIconMap.cjs +35 -0
  356. package/dist/rpc/surfaceIconMap.cjs.map +1 -0
  357. package/dist/rpc/surfaceIconMap.d.ts +3 -0
  358. package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
  359. package/dist/rpc/surfaceIconMap.js +35 -0
  360. package/dist/rpc/surfaceIconMap.js.map +1 -0
  361. package/dist/rpc/types.cjs.map +1 -1
  362. package/dist/rpc/types.d.ts +2 -0
  363. package/dist/rpc/types.d.ts.map +1 -1
  364. package/dist/rpc/types.js.map +1 -1
  365. package/dist/rpc/useOperations.cjs.map +1 -1
  366. package/dist/rpc/useOperations.d.ts +4 -1
  367. package/dist/rpc/useOperations.d.ts.map +1 -1
  368. package/dist/rpc/useOperations.js.map +1 -1
  369. package/dist/rpc.cjs +4 -2
  370. package/dist/rpc.cjs.map +1 -1
  371. package/dist/rpc.d.ts +7 -6
  372. package/dist/rpc.d.ts.map +1 -1
  373. package/dist/rpc.js +4 -2
  374. package/dist/rpc.js.map +1 -1
  375. package/dist/styles.css +1 -1
  376. package/package.json +6 -1
  377. package/dist/rpc/AcceptPicker.cjs +0 -137
  378. package/dist/rpc/AcceptPicker.cjs.map +0 -1
  379. package/dist/rpc/AcceptPicker.d.ts +0 -12
  380. package/dist/rpc/AcceptPicker.d.ts.map +0 -1
  381. package/dist/rpc/AcceptPicker.js +0 -137
  382. package/dist/rpc/AcceptPicker.js.map +0 -1
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const Avatar = require("../data/Avatar.cjs");
5
+ const Icon = require("../data/Icon.cjs");
6
+ const HoverCard = require("../overlay/HoverCard.cjs");
7
+ const size = require("../lib/size.cjs");
8
+ const useDensity = require("../hooks/use-density.cjs");
9
+ const commentUtils = require("./comment-utils.cjs");
10
+ const UiRobotAi = require("../icons/components/UiRobotAi.cjs");
11
+ function CommentAuthorAvatar({
12
+ author,
13
+ size: size$1 = "sm",
14
+ bare = false
15
+ }) {
16
+ const density = useDensity.useDensityValue();
17
+ const name = commentUtils.authorDisplayName(author);
18
+ const isAgent = (author == null ? void 0 : author.kind) === "agent";
19
+ const glyph = isAgent ? /* @__PURE__ */ jsxRuntime.jsx(AgentChip, { author, size: size.resolveSize(size$1, density) }) : /* @__PURE__ */ jsxRuntime.jsx(
20
+ Avatar.Avatar,
21
+ {
22
+ alt: name,
23
+ size: size$1,
24
+ ...(author == null ? void 0 : author.avatar) ? { src: author.avatar } : {},
25
+ title: name
26
+ }
27
+ );
28
+ if (bare) return glyph;
29
+ return /* @__PURE__ */ jsxRuntime.jsxs(HoverCard.HoverCard, { trigger: glyph, placement: "top", children: [
30
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: name }),
31
+ isAgent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-muted-foreground", children: "· agent" })
32
+ ] });
33
+ }
34
+ function AgentChip({
35
+ author,
36
+ size: size2
37
+ }) {
38
+ const icon = author.icon;
39
+ return /* @__PURE__ */ jsxRuntime.jsx(
40
+ "span",
41
+ {
42
+ role: "img",
43
+ "aria-label": author.name,
44
+ className: "inline-flex shrink-0 items-center justify-center rounded-full border border-border bg-muted text-foreground",
45
+ style: { width: size2, height: size2 },
46
+ children: /* @__PURE__ */ jsxRuntime.jsx(
47
+ Icon.Icon,
48
+ {
49
+ ...typeof icon === "string" ? { name: icon } : { icon: icon ?? UiRobotAi.UiRobotAi },
50
+ width: Math.max(10, Math.round(size2 * 0.6)),
51
+ height: Math.max(10, Math.round(size2 * 0.6))
52
+ }
53
+ )
54
+ }
55
+ );
56
+ }
57
+ exports.CommentAuthorAvatar = CommentAuthorAvatar;
58
+ //# sourceMappingURL=CommentAuthor.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentAuthor.cjs","sources":["../../src/comments/CommentAuthor.tsx"],"sourcesContent":["import { Avatar } from \"../data/Avatar\";\nimport { Icon } from \"../data/Icon\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\nimport { UiRobotAi } from \"../icons\";\nimport { authorDisplayName } from \"./comment-utils\";\nimport type { CommentAuthor as CommentAuthorModel } from \"./comment-types\";\n\nexport type CommentAuthorAvatarProps = {\n /** Author to render; null renders an anonymous user. */\n author: CommentAuthorModel | null;\n /** Avatar size token. */\n size?: SizeToken;\n /** Render only the glyph (no hover card). */\n bare?: boolean;\n};\n\n/**\n * Renders a comment author's identity glyph: a person avatar for `user`\n * authors, an icon chip for `agent` authors. Wrapped in a hover card naming the\n * author unless `bare`.\n */\nexport function CommentAuthorAvatar({\n author,\n size = \"sm\",\n bare = false,\n}: CommentAuthorAvatarProps) {\n const density = useDensityValue();\n const name = authorDisplayName(author);\n const isAgent = author?.kind === \"agent\";\n\n const glyph = isAgent ? (\n <AgentChip author={author} size={resolveSize(size, density)} />\n ) : (\n <Avatar\n alt={name}\n size={size}\n {...(author?.avatar ? { src: author.avatar } : {})}\n title={name}\n />\n );\n\n if (bare) return glyph;\n\n return (\n <HoverCard trigger={glyph} placement=\"top\">\n <span className=\"font-medium\">{name}</span>\n {isAgent && <span className=\"ml-1 text-muted-foreground\">· agent</span>}\n </HoverCard>\n );\n}\n\nfunction AgentChip({\n author,\n size,\n}: {\n author: CommentAuthorModel;\n size: number;\n}) {\n const icon = author.icon;\n return (\n <span\n role=\"img\"\n aria-label={author.name}\n className=\"inline-flex shrink-0 items-center justify-center rounded-full border border-border bg-muted text-foreground\"\n style={{ width: size, height: size }}\n >\n <Icon\n {...(typeof icon === \"string\"\n ? { name: icon }\n : { icon: icon ?? UiRobotAi })}\n width={Math.max(10, Math.round(size * 0.6))}\n height={Math.max(10, Math.round(size * 0.6))}\n />\n </span>\n );\n}\n"],"names":["size","useDensityValue","authorDisplayName","jsx","resolveSize","Avatar","jsxs","HoverCard","Icon","UiRobotAi"],"mappings":";;;;;;;;;;AAuBO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EAAA,MACAA,SAAO;AAAA,EACP,OAAO;AACT,GAA6B;AAC3B,QAAM,UAAUC,WAAAA,gBAAA;AAChB,QAAM,OAAOC,aAAAA,kBAAkB,MAAM;AACrC,QAAM,WAAU,iCAAQ,UAAS;AAEjC,QAAM,QAAQ,UACZC,2BAAAA,IAAC,WAAA,EAAU,QAAgB,MAAMC,KAAAA,YAAYJ,QAAM,OAAO,EAAA,CAAG,IAE7DG,2BAAAA;AAAAA,IAACE,OAAAA;AAAAA,IAAA;AAAA,MACC,KAAK;AAAA,MAAA,MACLL;AAAAA,MACC,IAAI,iCAAQ,UAAS,EAAE,KAAK,OAAO,OAAA,IAAW,CAAA;AAAA,MAC/C,OAAO;AAAA,IAAA;AAAA,EAAA;AAIX,MAAI,KAAM,QAAO;AAEjB,SACEM,2BAAAA,KAACC,UAAAA,WAAA,EAAU,SAAS,OAAO,WAAU,OACnC,UAAA;AAAA,IAAAJ,2BAAAA,IAAC,QAAA,EAAK,WAAU,eAAe,UAAA,MAAK;AAAA,IACnC,WAAWA,2BAAAA,IAAC,QAAA,EAAK,WAAU,8BAA6B,UAAA,UAAA,CAAO;AAAA,EAAA,GAClE;AAEJ;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA,MAAAH;AACF,GAGG;AACD,QAAM,OAAO,OAAO;AACpB,SACEG,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY,OAAO;AAAA,MACnB,WAAU;AAAA,MACV,OAAO,EAAE,OAAOH,OAAM,QAAQA,MAAA;AAAA,MAE9B,UAAAG,2BAAAA;AAAAA,QAACK,KAAAA;AAAAA,QAAA;AAAA,UACE,GAAI,OAAO,SAAS,WACjB,EAAE,MAAM,KAAA,IACR,EAAE,MAAM,QAAQC,oBAAA;AAAA,UACpB,OAAO,KAAK,IAAI,IAAI,KAAK,MAAMT,QAAO,GAAG,CAAC;AAAA,UAC1C,QAAQ,KAAK,IAAI,IAAI,KAAK,MAAMA,QAAO,GAAG,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7C;AAAA,EAAA;AAGN;;"}
@@ -0,0 +1,17 @@
1
+ import { SizeToken } from '../lib/size';
2
+ import { CommentAuthor as CommentAuthorModel } from './comment-types';
3
+ export type CommentAuthorAvatarProps = {
4
+ /** Author to render; null renders an anonymous user. */
5
+ author: CommentAuthorModel | null;
6
+ /** Avatar size token. */
7
+ size?: SizeToken;
8
+ /** Render only the glyph (no hover card). */
9
+ bare?: boolean;
10
+ };
11
+ /**
12
+ * Renders a comment author's identity glyph: a person avatar for `user`
13
+ * authors, an icon chip for `agent` authors. Wrapped in a hover card naming the
14
+ * author unless `bare`.
15
+ */
16
+ export declare function CommentAuthorAvatar({ author, size, bare, }: CommentAuthorAvatarProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=CommentAuthor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentAuthor.d.ts","sourceRoot":"","sources":["../../src/comments/CommentAuthor.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAI1D,OAAO,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,wBAAwB,GAAG;IACrC,wDAAwD;IACxD,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,yBAAyB;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,IAAW,EACX,IAAY,GACb,EAAE,wBAAwB,2CAwB1B"}
@@ -0,0 +1,58 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Avatar } from "../data/Avatar.js";
3
+ import { Icon } from "../data/Icon.js";
4
+ import { HoverCard } from "../overlay/HoverCard.js";
5
+ import { resolveSize } from "../lib/size.js";
6
+ import { useDensityValue } from "../hooks/use-density.js";
7
+ import { authorDisplayName } from "./comment-utils.js";
8
+ import { UiRobotAi } from "../icons/components/UiRobotAi.js";
9
+ function CommentAuthorAvatar({
10
+ author,
11
+ size = "sm",
12
+ bare = false
13
+ }) {
14
+ const density = useDensityValue();
15
+ const name = authorDisplayName(author);
16
+ const isAgent = (author == null ? void 0 : author.kind) === "agent";
17
+ const glyph = isAgent ? /* @__PURE__ */ jsx(AgentChip, { author, size: resolveSize(size, density) }) : /* @__PURE__ */ jsx(
18
+ Avatar,
19
+ {
20
+ alt: name,
21
+ size,
22
+ ...(author == null ? void 0 : author.avatar) ? { src: author.avatar } : {},
23
+ title: name
24
+ }
25
+ );
26
+ if (bare) return glyph;
27
+ return /* @__PURE__ */ jsxs(HoverCard, { trigger: glyph, placement: "top", children: [
28
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: name }),
29
+ isAgent && /* @__PURE__ */ jsx("span", { className: "ml-1 text-muted-foreground", children: "· agent" })
30
+ ] });
31
+ }
32
+ function AgentChip({
33
+ author,
34
+ size
35
+ }) {
36
+ const icon = author.icon;
37
+ return /* @__PURE__ */ jsx(
38
+ "span",
39
+ {
40
+ role: "img",
41
+ "aria-label": author.name,
42
+ className: "inline-flex shrink-0 items-center justify-center rounded-full border border-border bg-muted text-foreground",
43
+ style: { width: size, height: size },
44
+ children: /* @__PURE__ */ jsx(
45
+ Icon,
46
+ {
47
+ ...typeof icon === "string" ? { name: icon } : { icon: icon ?? UiRobotAi },
48
+ width: Math.max(10, Math.round(size * 0.6)),
49
+ height: Math.max(10, Math.round(size * 0.6))
50
+ }
51
+ )
52
+ }
53
+ );
54
+ }
55
+ export {
56
+ CommentAuthorAvatar
57
+ };
58
+ //# sourceMappingURL=CommentAuthor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentAuthor.js","sources":["../../src/comments/CommentAuthor.tsx"],"sourcesContent":["import { Avatar } from \"../data/Avatar\";\nimport { Icon } from \"../data/Icon\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\nimport { UiRobotAi } from \"../icons\";\nimport { authorDisplayName } from \"./comment-utils\";\nimport type { CommentAuthor as CommentAuthorModel } from \"./comment-types\";\n\nexport type CommentAuthorAvatarProps = {\n /** Author to render; null renders an anonymous user. */\n author: CommentAuthorModel | null;\n /** Avatar size token. */\n size?: SizeToken;\n /** Render only the glyph (no hover card). */\n bare?: boolean;\n};\n\n/**\n * Renders a comment author's identity glyph: a person avatar for `user`\n * authors, an icon chip for `agent` authors. Wrapped in a hover card naming the\n * author unless `bare`.\n */\nexport function CommentAuthorAvatar({\n author,\n size = \"sm\",\n bare = false,\n}: CommentAuthorAvatarProps) {\n const density = useDensityValue();\n const name = authorDisplayName(author);\n const isAgent = author?.kind === \"agent\";\n\n const glyph = isAgent ? (\n <AgentChip author={author} size={resolveSize(size, density)} />\n ) : (\n <Avatar\n alt={name}\n size={size}\n {...(author?.avatar ? { src: author.avatar } : {})}\n title={name}\n />\n );\n\n if (bare) return glyph;\n\n return (\n <HoverCard trigger={glyph} placement=\"top\">\n <span className=\"font-medium\">{name}</span>\n {isAgent && <span className=\"ml-1 text-muted-foreground\">· agent</span>}\n </HoverCard>\n );\n}\n\nfunction AgentChip({\n author,\n size,\n}: {\n author: CommentAuthorModel;\n size: number;\n}) {\n const icon = author.icon;\n return (\n <span\n role=\"img\"\n aria-label={author.name}\n className=\"inline-flex shrink-0 items-center justify-center rounded-full border border-border bg-muted text-foreground\"\n style={{ width: size, height: size }}\n >\n <Icon\n {...(typeof icon === \"string\"\n ? { name: icon }\n : { icon: icon ?? UiRobotAi })}\n width={Math.max(10, Math.round(size * 0.6))}\n height={Math.max(10, Math.round(size * 0.6))}\n />\n </span>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAuBO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AACT,GAA6B;AAC3B,QAAM,UAAU,gBAAA;AAChB,QAAM,OAAO,kBAAkB,MAAM;AACrC,QAAM,WAAU,iCAAQ,UAAS;AAEjC,QAAM,QAAQ,UACZ,oBAAC,WAAA,EAAU,QAAgB,MAAM,YAAY,MAAM,OAAO,EAAA,CAAG,IAE7D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACC,IAAI,iCAAQ,UAAS,EAAE,KAAK,OAAO,OAAA,IAAW,CAAA;AAAA,MAC/C,OAAO;AAAA,IAAA;AAAA,EAAA;AAIX,MAAI,KAAM,QAAO;AAEjB,SACE,qBAAC,WAAA,EAAU,SAAS,OAAO,WAAU,OACnC,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,eAAe,UAAA,MAAK;AAAA,IACnC,WAAW,oBAAC,QAAA,EAAK,WAAU,8BAA6B,UAAA,UAAA,CAAO;AAAA,EAAA,GAClE;AAEJ;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AACF,GAGG;AACD,QAAM,OAAO,OAAO;AACpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY,OAAO;AAAA,MACnB,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAA;AAAA,MAE9B,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAI,OAAO,SAAS,WACjB,EAAE,MAAM,KAAA,IACR,EAAE,MAAM,QAAQ,UAAA;AAAA,UACpB,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,UAC1C,QAAQ,KAAK,IAAI,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7C;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const utils = require("../lib/utils.cjs");
6
+ const Badge = require("../data/Badge.cjs");
7
+ const Icon = require("../data/Icon.cjs");
8
+ const Modal = require("../overlay/Modal.cjs");
9
+ const DropdownMenu = require("../overlay/DropdownMenu.cjs");
10
+ const timestampFormat = require("../data/cells/timestamp-format.cjs");
11
+ const CommentAuthor = require("./CommentAuthor.cjs");
12
+ const CommentMarkdown = require("./CommentMarkdown.cjs");
13
+ const commentUtils = require("./comment-utils.cjs");
14
+ const UiFullscreen = require("../icons/components/UiFullscreen.cjs");
15
+ const UiDotsVertical = require("../icons/components/UiDotsVertical.cjs");
16
+ const UiClose = require("../icons/components/UiClose.cjs");
17
+ const UiTrash = require("../icons/components/UiTrash.cjs");
18
+ function StatusChip({
19
+ status,
20
+ config,
21
+ showLabel
22
+ }) {
23
+ const cfg = commentUtils.resolveStatusConfig(config, status);
24
+ if (!cfg) return null;
25
+ return /* @__PURE__ */ jsxRuntime.jsx(
26
+ Badge.Badge,
27
+ {
28
+ variant: "soft",
29
+ tone: commentUtils.toneToBadgeTone(cfg.tone),
30
+ size: "xs",
31
+ ...cfg.icon ? { icon: cfg.icon } : {},
32
+ children: showLabel ? cfg.label : null
33
+ }
34
+ );
35
+ }
36
+ function FacetBadges({
37
+ comment,
38
+ config,
39
+ compact
40
+ }) {
41
+ const facets = config.facets ?? [];
42
+ const chips = facets.flatMap((facet) => {
43
+ var _a;
44
+ const value = (_a = comment.facets) == null ? void 0 : _a[facet.key];
45
+ const option = commentUtils.resolveFacetOption(facet, value);
46
+ if (!option) return [];
47
+ return [
48
+ /* @__PURE__ */ jsxRuntime.jsx(
49
+ Badge.Badge,
50
+ {
51
+ variant: "soft",
52
+ tone: commentUtils.toneToBadgeTone(option.tone),
53
+ size: "xs",
54
+ children: compact ? option.short ?? option.label : option.label
55
+ },
56
+ facet.key
57
+ )
58
+ ];
59
+ });
60
+ return chips.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chips }) : null;
61
+ }
62
+ function ChecklistChips({
63
+ comment,
64
+ onChecklistToggle
65
+ }) {
66
+ if (!comment.checklist || comment.checklist.length === 0) return null;
67
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: comment.checklist.map((item, i) => {
68
+ const done = /done|complete|resolved/i.test(item.status);
69
+ const active = /progress|doing/i.test(item.status);
70
+ return /* @__PURE__ */ jsxRuntime.jsx(
71
+ "button",
72
+ {
73
+ type: "button",
74
+ onClick: () => onChecklistToggle == null ? void 0 : onChecklistToggle(i),
75
+ disabled: !onChecklistToggle,
76
+ className: utils.cn(
77
+ "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] transition-opacity",
78
+ onChecklistToggle && "cursor-pointer hover:opacity-80",
79
+ done ? "bg-green-100 text-green-800 line-through dark:bg-green-500/20 dark:text-green-300" : active ? "bg-yellow-100 text-yellow-800 dark:bg-yellow-500/20 dark:text-yellow-300" : "bg-muted text-muted-foreground"
80
+ ),
81
+ children: item.label
82
+ },
83
+ i
84
+ );
85
+ }) });
86
+ }
87
+ function RefChips({ comment }) {
88
+ if (!comment.refs || comment.refs.length === 0) return null;
89
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: comment.refs.map((group, i) => /* @__PURE__ */ jsxRuntime.jsxs(
90
+ "span",
91
+ {
92
+ className: "inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",
93
+ children: [
94
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium", children: [
95
+ group.label,
96
+ ":"
97
+ ] }),
98
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: group.mono ? "font-mono" : void 0, children: group.items.join(", ") })
99
+ ]
100
+ },
101
+ i
102
+ )) });
103
+ }
104
+ function statusMenuItems(comment, config, isReply, opts) {
105
+ const items = [];
106
+ if (opts.onCollapse) {
107
+ items.push({ label: "Collapse", icon: UiClose.UiClose, onSelect: opts.onCollapse });
108
+ }
109
+ if (!isReply && opts.onUpdateStatus) {
110
+ for (const status of config.statuses) {
111
+ const current = status.value === comment.status;
112
+ items.push({
113
+ label: /* @__PURE__ */ jsxRuntime.jsxs(
114
+ "span",
115
+ {
116
+ className: utils.cn(
117
+ "inline-flex items-center gap-1.5",
118
+ current && "font-semibold"
119
+ ),
120
+ children: [
121
+ /* @__PURE__ */ jsxRuntime.jsx(StatusChip, { status: status.value, config }),
122
+ status.label
123
+ ]
124
+ }
125
+ ),
126
+ onSelect: () => {
127
+ var _a;
128
+ return (_a = opts.onUpdateStatus) == null ? void 0 : _a.call(opts, status.value);
129
+ }
130
+ });
131
+ }
132
+ }
133
+ if (opts.onDelete) {
134
+ items.push({ label: "Delete", icon: UiTrash.UiTrash, onSelect: opts.onDelete });
135
+ }
136
+ return items;
137
+ }
138
+ function IconAction({
139
+ icon,
140
+ label,
141
+ onClick
142
+ }) {
143
+ return /* @__PURE__ */ jsxRuntime.jsx(
144
+ "button",
145
+ {
146
+ type: "button",
147
+ onClick,
148
+ "aria-label": label,
149
+ title: label,
150
+ className: "rounded p-1 text-muted-foreground opacity-70 hover:bg-muted hover:opacity-100",
151
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: "text-xs" })
152
+ }
153
+ );
154
+ }
155
+ function CommentBody({
156
+ comment,
157
+ config,
158
+ renderBody,
159
+ onUpdateStatus,
160
+ onDelete,
161
+ onReply,
162
+ onChecklistToggle,
163
+ onCollapse,
164
+ onMaximize
165
+ }) {
166
+ const isReply = Boolean(comment.parentId);
167
+ const date = timestampFormat.parseTimestamp(comment.createdAt);
168
+ const menuItems = statusMenuItems(comment, config, isReply, {
169
+ ...onUpdateStatus ? { onUpdateStatus } : {},
170
+ ...onDelete ? { onDelete } : {},
171
+ ...onCollapse ? { onCollapse } : {}
172
+ });
173
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
174
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
175
+ /* @__PURE__ */ jsxRuntime.jsx(CommentAuthor.CommentAuthorAvatar, { author: comment.author }),
176
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(StatusChip, { status: comment.status, config, showLabel: true }),
177
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(FacetBadges, { comment, config }),
178
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-1", children: [
179
+ date && /* @__PURE__ */ jsxRuntime.jsx(
180
+ "span",
181
+ {
182
+ title: date.toLocaleString(),
183
+ className: "text-[10px] text-muted-foreground",
184
+ children: timestampFormat.formatRelativeTime(date)
185
+ }
186
+ ),
187
+ onReply && /* @__PURE__ */ jsxRuntime.jsx(
188
+ "button",
189
+ {
190
+ type: "button",
191
+ onClick: onReply,
192
+ className: "rounded px-1.5 py-1 text-[10px] text-muted-foreground hover:bg-muted hover:text-foreground",
193
+ children: "Reply"
194
+ }
195
+ ),
196
+ onMaximize && /* @__PURE__ */ jsxRuntime.jsx(
197
+ IconAction,
198
+ {
199
+ icon: UiFullscreen.UiFullscreen,
200
+ label: "Maximize",
201
+ onClick: onMaximize
202
+ }
203
+ ),
204
+ menuItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
205
+ DropdownMenu.DropdownMenu,
206
+ {
207
+ align: "right",
208
+ menuClassName: "min-w-[150px]",
209
+ trigger: /* @__PURE__ */ jsxRuntime.jsx(
210
+ "span",
211
+ {
212
+ role: "button",
213
+ tabIndex: 0,
214
+ "aria-label": "Comment actions",
215
+ className: "rounded p-1 text-muted-foreground opacity-70 hover:bg-muted hover:opacity-100",
216
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiDotsVertical.UiDotsVertical, className: "text-sm" })
217
+ }
218
+ ),
219
+ items: menuItems
220
+ }
221
+ )
222
+ ] })
223
+ ] }),
224
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13px] leading-6", children: renderBody ? renderBody(comment.body) : /* @__PURE__ */ jsxRuntime.jsx(CommentMarkdown.CommentMarkdown, { text: comment.body }) }),
225
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(
226
+ ChecklistChips,
227
+ {
228
+ comment,
229
+ ...onChecklistToggle ? { onChecklistToggle } : {}
230
+ }
231
+ ),
232
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(RefChips, { comment })
233
+ ] });
234
+ }
235
+ function CommentCard(props) {
236
+ const { comment, config, compact, defaultExpanded } = props;
237
+ const [expanded, setExpanded] = react.useState(defaultExpanded ?? false);
238
+ const [maximized, setMaximized] = react.useState(false);
239
+ const isReply = Boolean(comment.parentId);
240
+ const body = /* @__PURE__ */ jsxRuntime.jsx(
241
+ CommentBody,
242
+ {
243
+ ...props,
244
+ onMaximize: () => setMaximized(true),
245
+ ...expanded ? { onCollapse: () => setExpanded(false) } : {}
246
+ }
247
+ );
248
+ const modal = /* @__PURE__ */ jsxRuntime.jsx(
249
+ Modal.Modal,
250
+ {
251
+ open: maximized,
252
+ onClose: () => setMaximized(false),
253
+ title: "Comment",
254
+ size: "lg",
255
+ children: /* @__PURE__ */ jsxRuntime.jsx(CommentBody, { ...props })
256
+ }
257
+ );
258
+ if (!expanded) {
259
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
260
+ /* @__PURE__ */ jsxRuntime.jsxs(
261
+ "div",
262
+ {
263
+ role: "button",
264
+ tabIndex: 0,
265
+ onClick: () => setExpanded(true),
266
+ onKeyDown: (e) => {
267
+ if (e.key === "Enter" || e.key === " ") {
268
+ e.preventDefault();
269
+ setExpanded(true);
270
+ }
271
+ },
272
+ "data-testid": "comment-card",
273
+ "data-comment-kind": isReply ? "reply" : "root",
274
+ "data-comment-id": comment.id,
275
+ className: utils.cn(
276
+ "group/comment flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs transition-colors hover:bg-muted/50",
277
+ !isReply && "border border-border bg-background shadow-sm",
278
+ isReply && "ml-4 border-l-2 border-l-border bg-muted/30"
279
+ ),
280
+ children: [
281
+ /* @__PURE__ */ jsxRuntime.jsx(CommentAuthor.CommentAuthorAvatar, { author: comment.author, bare: true }),
282
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(StatusChip, { status: comment.status, config }),
283
+ !isReply && /* @__PURE__ */ jsxRuntime.jsx(FacetBadges, { comment, config, compact: true }),
284
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] text-foreground/80", children: commentUtils.truncatePlain(comment.body) }),
285
+ /* @__PURE__ */ jsxRuntime.jsx(
286
+ "span",
287
+ {
288
+ role: "presentation",
289
+ onClick: (e) => e.stopPropagation(),
290
+ onKeyDown: (e) => e.stopPropagation(),
291
+ children: /* @__PURE__ */ jsxRuntime.jsx(
292
+ DropdownMenu.DropdownMenu,
293
+ {
294
+ align: "right",
295
+ trigger: /* @__PURE__ */ jsxRuntime.jsx(
296
+ "span",
297
+ {
298
+ role: "button",
299
+ tabIndex: 0,
300
+ "aria-label": "Comment actions",
301
+ className: "rounded p-0.5 text-muted-foreground opacity-0 transition-opacity hover:bg-muted hover:opacity-100 group-hover/comment:opacity-70",
302
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiDotsVertical.UiDotsVertical, className: "text-sm" })
303
+ }
304
+ ),
305
+ items: [
306
+ { label: "Expand", onSelect: () => setExpanded(true) },
307
+ {
308
+ label: "Maximize",
309
+ icon: UiFullscreen.UiFullscreen,
310
+ onSelect: () => setMaximized(true)
311
+ }
312
+ ]
313
+ }
314
+ )
315
+ }
316
+ )
317
+ ]
318
+ }
319
+ ),
320
+ modal
321
+ ] });
322
+ }
323
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
324
+ /* @__PURE__ */ jsxRuntime.jsx(
325
+ "div",
326
+ {
327
+ "data-testid": "comment-card",
328
+ "data-comment-kind": isReply ? "reply" : "root",
329
+ "data-comment-id": comment.id,
330
+ className: utils.cn(
331
+ "group/comment rounded-xl bg-background px-3 py-3 text-xs",
332
+ !isReply && "border border-border shadow-sm",
333
+ compact && "px-2.5 py-2.5",
334
+ isReply && "ml-4 border-l-2 border-l-border bg-muted/30 shadow-none"
335
+ ),
336
+ children: body
337
+ }
338
+ ),
339
+ modal
340
+ ] });
341
+ }
342
+ exports.CommentCard = CommentCard;
343
+ //# sourceMappingURL=CommentCard.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentCard.cjs","sources":["../../src/comments/CommentCard.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Badge } from \"../data/Badge\";\nimport { Icon } from \"../data/Icon\";\nimport { Modal } from \"../overlay/Modal\";\nimport { DropdownMenu, type DropdownMenuItem } from \"../overlay/DropdownMenu\";\nimport {\n parseTimestamp,\n formatRelativeTime,\n} from \"../data/cells/timestamp-format\";\nimport { UiClose, UiDotsVertical, UiFullscreen, UiTrash } from \"../icons\";\nimport { CommentAuthorAvatar } from \"./CommentAuthor\";\nimport { CommentMarkdown } from \"./CommentMarkdown\";\nimport {\n resolveFacetOption,\n resolveStatusConfig,\n toneToBadgeTone,\n truncatePlain,\n} from \"./comment-utils\";\nimport type { Comment, CommentConfig } from \"./comment-types\";\n\nexport type CommentCardProps = {\n comment: Comment;\n config: CommentConfig;\n /** Tighter padding for dense rails. */\n compact?: boolean;\n /** Render expanded on first mount. */\n defaultExpanded?: boolean;\n /** Custom body renderer; defaults to the lightweight CommentMarkdown. */\n renderBody?: (body: string) => ReactNode;\n /** Change this comment's status (roots only). */\n onUpdateStatus?: (status: string) => void;\n /** Delete this comment. */\n onDelete?: () => void;\n /** Begin a reply to this comment. */\n onReply?: () => void;\n /** Advance the checklist item at `index` to its next status. */\n onChecklistToggle?: (index: number) => void;\n};\n\nfunction StatusChip({\n status,\n config,\n showLabel,\n}: {\n status: string | undefined;\n config: CommentConfig;\n showLabel?: boolean;\n}) {\n const cfg = resolveStatusConfig(config, status);\n if (!cfg) return null;\n return (\n <Badge\n variant=\"soft\"\n tone={toneToBadgeTone(cfg.tone)}\n size=\"xs\"\n {...(cfg.icon ? { icon: cfg.icon } : {})}\n >\n {showLabel ? cfg.label : null}\n </Badge>\n );\n}\n\nfunction FacetBadges({\n comment,\n config,\n compact,\n}: {\n comment: Comment;\n config: CommentConfig;\n compact?: boolean;\n}) {\n const facets = config.facets ?? [];\n const chips = facets.flatMap((facet) => {\n const value = comment.facets?.[facet.key];\n const option = resolveFacetOption(facet, value);\n if (!option) return [];\n return [\n <Badge\n key={facet.key}\n variant=\"soft\"\n tone={toneToBadgeTone(option.tone)}\n size=\"xs\"\n >\n {compact ? (option.short ?? option.label) : option.label}\n </Badge>,\n ];\n });\n return chips.length > 0 ? <>{chips}</> : null;\n}\n\nfunction ChecklistChips({\n comment,\n onChecklistToggle,\n}: {\n comment: Comment;\n onChecklistToggle?: (index: number) => void;\n}) {\n if (!comment.checklist || comment.checklist.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-1\">\n {comment.checklist.map((item, i) => {\n const done = /done|complete|resolved/i.test(item.status);\n const active = /progress|doing/i.test(item.status);\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => onChecklistToggle?.(i)}\n disabled={!onChecklistToggle}\n className={cn(\n \"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] transition-opacity\",\n onChecklistToggle && \"cursor-pointer hover:opacity-80\",\n done\n ? \"bg-green-100 text-green-800 line-through dark:bg-green-500/20 dark:text-green-300\"\n : active\n ? \"bg-yellow-100 text-yellow-800 dark:bg-yellow-500/20 dark:text-yellow-300\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction RefChips({ comment }: { comment: Comment }) {\n if (!comment.refs || comment.refs.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-1.5\">\n {comment.refs.map((group, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground\"\n >\n <span className=\"font-medium\">{group.label}:</span>\n <span className={group.mono ? \"font-mono\" : undefined}>\n {group.items.join(\", \")}\n </span>\n </span>\n ))}\n </div>\n );\n}\n\nfunction statusMenuItems(\n comment: Comment,\n config: CommentConfig,\n isReply: boolean,\n opts: {\n onUpdateStatus?: (status: string) => void;\n onDelete?: () => void;\n onCollapse?: () => void;\n },\n): DropdownMenuItem[] {\n const items: DropdownMenuItem[] = [];\n if (opts.onCollapse) {\n items.push({ label: \"Collapse\", icon: UiClose, onSelect: opts.onCollapse });\n }\n if (!isReply && opts.onUpdateStatus) {\n for (const status of config.statuses) {\n const current = status.value === comment.status;\n items.push({\n label: (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5\",\n current && \"font-semibold\",\n )}\n >\n <StatusChip status={status.value} config={config} />\n {status.label}\n </span>\n ),\n onSelect: () => opts.onUpdateStatus?.(status.value),\n });\n }\n }\n if (opts.onDelete) {\n items.push({ label: \"Delete\", icon: UiTrash, onSelect: opts.onDelete });\n }\n return items;\n}\n\nfunction IconAction({\n icon,\n label,\n onClick,\n}: {\n icon: typeof UiClose;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n title={label}\n className=\"rounded p-1 text-muted-foreground opacity-70 hover:bg-muted hover:opacity-100\"\n >\n <Icon icon={icon} className=\"text-xs\" />\n </button>\n );\n}\n\nfunction CommentBody({\n comment,\n config,\n renderBody,\n onUpdateStatus,\n onDelete,\n onReply,\n onChecklistToggle,\n onCollapse,\n onMaximize,\n}: CommentCardProps & { onCollapse?: () => void; onMaximize?: () => void }) {\n const isReply = Boolean(comment.parentId);\n const date = parseTimestamp(comment.createdAt);\n const menuItems = statusMenuItems(comment, config, isReply, {\n ...(onUpdateStatus ? { onUpdateStatus } : {}),\n ...(onDelete ? { onDelete } : {}),\n ...(onCollapse ? { onCollapse } : {}),\n });\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <CommentAuthorAvatar author={comment.author} />\n {!isReply && (\n <StatusChip status={comment.status} config={config} showLabel />\n )}\n {!isReply && <FacetBadges comment={comment} config={config} />}\n <div className=\"ml-auto flex items-center gap-1\">\n {date && (\n <span\n title={date.toLocaleString()}\n className=\"text-[10px] text-muted-foreground\"\n >\n {formatRelativeTime(date)}\n </span>\n )}\n {onReply && (\n <button\n type=\"button\"\n onClick={onReply}\n className=\"rounded px-1.5 py-1 text-[10px] text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n Reply\n </button>\n )}\n {onMaximize && (\n <IconAction\n icon={UiFullscreen}\n label=\"Maximize\"\n onClick={onMaximize}\n />\n )}\n {menuItems.length > 0 && (\n <DropdownMenu\n align=\"right\"\n menuClassName=\"min-w-[150px]\"\n trigger={\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Comment actions\"\n className=\"rounded p-1 text-muted-foreground opacity-70 hover:bg-muted hover:opacity-100\"\n >\n <Icon icon={UiDotsVertical} className=\"text-sm\" />\n </span>\n }\n items={menuItems}\n />\n )}\n </div>\n </div>\n <div className=\"text-[13px] leading-6\">\n {renderBody ? (\n renderBody(comment.body)\n ) : (\n <CommentMarkdown text={comment.body} />\n )}\n </div>\n {!isReply && (\n <ChecklistChips\n comment={comment}\n {...(onChecklistToggle ? { onChecklistToggle } : {})}\n />\n )}\n {!isReply && <RefChips comment={comment} />}\n </div>\n );\n}\n\n/**\n * A single comment, collapsible between a compact one-line preview and a full\n * card. The full view can be maximized into a modal. Fully controlled — all\n * mutations are delegated to the supplied callbacks.\n */\nexport function CommentCard(props: CommentCardProps) {\n const { comment, config, compact, defaultExpanded } = props;\n const [expanded, setExpanded] = useState(defaultExpanded ?? false);\n const [maximized, setMaximized] = useState(false);\n const isReply = Boolean(comment.parentId);\n\n const body = (\n <CommentBody\n {...props}\n onMaximize={() => setMaximized(true)}\n {...(expanded ? { onCollapse: () => setExpanded(false) } : {})}\n />\n );\n\n const modal = (\n <Modal\n open={maximized}\n onClose={() => setMaximized(false)}\n title=\"Comment\"\n size=\"lg\"\n >\n <CommentBody {...props} />\n </Modal>\n );\n\n if (!expanded) {\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setExpanded(true)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setExpanded(true);\n }\n }}\n data-testid=\"comment-card\"\n data-comment-kind={isReply ? \"reply\" : \"root\"}\n data-comment-id={comment.id}\n className={cn(\n \"group/comment flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs transition-colors hover:bg-muted/50\",\n !isReply && \"border border-border bg-background shadow-sm\",\n isReply && \"ml-4 border-l-2 border-l-border bg-muted/30\",\n )}\n >\n <CommentAuthorAvatar author={comment.author} bare />\n {!isReply && <StatusChip status={comment.status} config={config} />}\n {!isReply && (\n <FacetBadges comment={comment} config={config} compact />\n )}\n <span className=\"min-w-0 flex-1 truncate text-[12px] text-foreground/80\">\n {truncatePlain(comment.body)}\n </span>\n <span\n role=\"presentation\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <DropdownMenu\n align=\"right\"\n trigger={\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Comment actions\"\n className=\"rounded p-0.5 text-muted-foreground opacity-0 transition-opacity hover:bg-muted hover:opacity-100 group-hover/comment:opacity-70\"\n >\n <Icon icon={UiDotsVertical} className=\"text-sm\" />\n </span>\n }\n items={[\n { label: \"Expand\", onSelect: () => setExpanded(true) },\n {\n label: \"Maximize\",\n icon: UiFullscreen,\n onSelect: () => setMaximized(true),\n },\n ]}\n />\n </span>\n </div>\n {modal}\n </>\n );\n }\n\n return (\n <>\n <div\n data-testid=\"comment-card\"\n data-comment-kind={isReply ? \"reply\" : \"root\"}\n data-comment-id={comment.id}\n className={cn(\n \"group/comment rounded-xl bg-background px-3 py-3 text-xs\",\n !isReply && \"border border-border shadow-sm\",\n compact && \"px-2.5 py-2.5\",\n isReply && \"ml-4 border-l-2 border-l-border bg-muted/30 shadow-none\",\n )}\n >\n {body}\n </div>\n {modal}\n </>\n );\n}\n"],"names":["resolveStatusConfig","jsx","Badge","toneToBadgeTone","resolveFacetOption","Fragment","cn","jsxs","UiClose","UiTrash","Icon","parseTimestamp","CommentAuthorAvatar","UiFullscreen","DropdownMenu","UiDotsVertical","CommentMarkdown","useState","Modal","truncatePlain"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ReactNode } from 'react';
2
+ import { Comment, CommentConfig } from './comment-types';
3
+ export type CommentCardProps = {
4
+ comment: Comment;
5
+ config: CommentConfig;
6
+ /** Tighter padding for dense rails. */
7
+ compact?: boolean;
8
+ /** Render expanded on first mount. */
9
+ defaultExpanded?: boolean;
10
+ /** Custom body renderer; defaults to the lightweight CommentMarkdown. */
11
+ renderBody?: (body: string) => ReactNode;
12
+ /** Change this comment's status (roots only). */
13
+ onUpdateStatus?: (status: string) => void;
14
+ /** Delete this comment. */
15
+ onDelete?: () => void;
16
+ /** Begin a reply to this comment. */
17
+ onReply?: () => void;
18
+ /** Advance the checklist item at `index` to its next status. */
19
+ onChecklistToggle?: (index: number) => void;
20
+ };
21
+ /**
22
+ * A single comment, collapsible between a compact one-line preview and a full
23
+ * card. The full view can be maximized into a modal. Fully controlled — all
24
+ * mutations are delegated to the supplied callbacks.
25
+ */
26
+ export declare function CommentCard(props: CommentCardProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=CommentCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentCard.d.ts","sourceRoot":"","sources":["../../src/comments/CommentCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmBjD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACzC,iDAAiD;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,CAAC;AAmQF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA0GlD"}