@wzrhine/agent 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +21 -0
  3. package/README.md +29 -3
  4. package/dist/agent.css +16 -0
  5. package/dist/components/artifact/ArtifactCard.d.ts +59 -0
  6. package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
  7. package/dist/components/artifact/ArtifactCard.js +79 -0
  8. package/dist/components/artifact/ArtifactCard.js.map +1 -0
  9. package/dist/components/artifact/FilePreview.d.ts +121 -0
  10. package/dist/components/artifact/FilePreview.d.ts.map +1 -0
  11. package/dist/components/artifact/FilePreview.js +213 -0
  12. package/dist/components/artifact/FilePreview.js.map +1 -0
  13. package/dist/components/artifact/FilePreviewTabs.d.ts +51 -0
  14. package/dist/components/artifact/FilePreviewTabs.d.ts.map +1 -0
  15. package/dist/components/artifact/FilePreviewTabs.js +150 -0
  16. package/dist/components/artifact/FilePreviewTabs.js.map +1 -0
  17. package/dist/components/composer/AttachmentList.d.ts +33 -0
  18. package/dist/components/composer/AttachmentList.d.ts.map +1 -0
  19. package/dist/components/composer/AttachmentList.js +60 -0
  20. package/dist/components/composer/AttachmentList.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +119 -0
  22. package/dist/components/composer/Composer.d.ts.map +1 -0
  23. package/dist/components/composer/Composer.js +336 -0
  24. package/dist/components/composer/Composer.js.map +1 -0
  25. package/dist/components/composer/ComposerInput.d.ts +103 -0
  26. package/dist/components/composer/ComposerInput.d.ts.map +1 -0
  27. package/dist/components/composer/ComposerInput.js +301 -0
  28. package/dist/components/composer/ComposerInput.js.map +1 -0
  29. package/dist/components/composer/ComposerNotice.d.ts +38 -0
  30. package/dist/components/composer/ComposerNotice.d.ts.map +1 -0
  31. package/dist/components/composer/ComposerNotice.js +16 -0
  32. package/dist/components/composer/ComposerNotice.js.map +1 -0
  33. package/dist/components/composer/MentionMenu.d.ts +37 -0
  34. package/dist/components/composer/MentionMenu.d.ts.map +1 -0
  35. package/dist/components/composer/MentionMenu.js +56 -0
  36. package/dist/components/composer/MentionMenu.js.map +1 -0
  37. package/dist/components/composer/MenuPanel.d.ts +49 -0
  38. package/dist/components/composer/MenuPanel.d.ts.map +1 -0
  39. package/dist/components/composer/MenuPanel.js +50 -0
  40. package/dist/components/composer/MenuPanel.js.map +1 -0
  41. package/dist/components/composer/ModelPicker.d.ts +53 -0
  42. package/dist/components/composer/ModelPicker.d.ts.map +1 -0
  43. package/dist/components/composer/ModelPicker.js +126 -0
  44. package/dist/components/composer/ModelPicker.js.map +1 -0
  45. package/dist/components/composer/PermissionPicker.d.ts +35 -0
  46. package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
  47. package/dist/components/composer/PermissionPicker.js +51 -0
  48. package/dist/components/composer/PermissionPicker.js.map +1 -0
  49. package/dist/components/composer/ReferencePicker.d.ts +31 -0
  50. package/dist/components/composer/ReferencePicker.d.ts.map +1 -0
  51. package/dist/components/composer/ReferencePicker.js +50 -0
  52. package/dist/components/composer/ReferencePicker.js.map +1 -0
  53. package/dist/components/composer/SendStopButton.d.ts +73 -0
  54. package/dist/components/composer/SendStopButton.d.ts.map +1 -0
  55. package/dist/components/composer/SendStopButton.js +88 -0
  56. package/dist/components/composer/SendStopButton.js.map +1 -0
  57. package/dist/components/composer/SkillPicker.d.ts +26 -0
  58. package/dist/components/composer/SkillPicker.d.ts.map +1 -0
  59. package/dist/components/composer/SkillPicker.js +26 -0
  60. package/dist/components/composer/SkillPicker.js.map +1 -0
  61. package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
  62. package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
  63. package/dist/components/composer/SlashCommandMenu.js +43 -0
  64. package/dist/components/composer/SlashCommandMenu.js.map +1 -0
  65. package/dist/components/composer/composer-text.d.ts +10 -0
  66. package/dist/components/composer/composer-text.d.ts.map +1 -0
  67. package/dist/components/composer/composer-text.js +26 -0
  68. package/dist/components/composer/composer-text.js.map +1 -0
  69. package/dist/components/composer/composer-utils.d.ts +74 -0
  70. package/dist/components/composer/composer-utils.d.ts.map +1 -0
  71. package/dist/components/composer/composer-utils.js +133 -0
  72. package/dist/components/composer/composer-utils.js.map +1 -0
  73. package/dist/components/conversation/ConversationList.d.ts +94 -0
  74. package/dist/components/conversation/ConversationList.d.ts.map +1 -0
  75. package/dist/components/conversation/ConversationList.js +81 -0
  76. package/dist/components/conversation/ConversationList.js.map +1 -0
  77. package/dist/components/conversation/ConversationRow.d.ts +66 -0
  78. package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
  79. package/dist/components/conversation/ConversationRow.js +65 -0
  80. package/dist/components/conversation/ConversationRow.js.map +1 -0
  81. package/dist/components/conversation/conversation-status.d.ts +21 -0
  82. package/dist/components/conversation/conversation-status.d.ts.map +1 -0
  83. package/dist/components/conversation/conversation-status.js +33 -0
  84. package/dist/components/conversation/conversation-status.js.map +1 -0
  85. package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
  86. package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
  87. package/dist/components/intervention/ApprovalDiff.js +25 -0
  88. package/dist/components/intervention/ApprovalDiff.js.map +1 -0
  89. package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
  90. package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
  91. package/dist/components/intervention/ApprovalPanel.js +111 -0
  92. package/dist/components/intervention/ApprovalPanel.js.map +1 -0
  93. package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
  94. package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
  95. package/dist/components/intervention/ErrorRecoveryNotice.js +31 -0
  96. package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
  97. package/dist/components/intervention/GrantList.d.ts +49 -0
  98. package/dist/components/intervention/GrantList.d.ts.map +1 -0
  99. package/dist/components/intervention/GrantList.js +58 -0
  100. package/dist/components/intervention/GrantList.js.map +1 -0
  101. package/dist/components/intervention/InterventionDock.d.ts +24 -0
  102. package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
  103. package/dist/components/intervention/InterventionDock.js +18 -0
  104. package/dist/components/intervention/InterventionDock.js.map +1 -0
  105. package/dist/components/intervention/QuestionnaireCard.d.ts +81 -0
  106. package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
  107. package/dist/components/intervention/QuestionnaireCard.js +333 -0
  108. package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
  109. package/dist/components/intervention/action-lock.d.ts +20 -0
  110. package/dist/components/intervention/action-lock.d.ts.map +1 -0
  111. package/dist/components/intervention/action-lock.js +65 -0
  112. package/dist/components/intervention/action-lock.js.map +1 -0
  113. package/dist/components/intervention/icons.d.ts +8 -0
  114. package/dist/components/intervention/icons.d.ts.map +1 -0
  115. package/dist/components/intervention/icons.js +11 -0
  116. package/dist/components/intervention/icons.js.map +1 -0
  117. package/dist/components/intervention/questionnaire-answers.d.ts +34 -0
  118. package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
  119. package/dist/components/intervention/questionnaire-answers.js +97 -0
  120. package/dist/components/intervention/questionnaire-answers.js.map +1 -0
  121. package/dist/components/message/AgentMessage.d.ts +98 -0
  122. package/dist/components/message/AgentMessage.d.ts.map +1 -0
  123. package/dist/components/message/AgentMessage.js +94 -0
  124. package/dist/components/message/AgentMessage.js.map +1 -0
  125. package/dist/components/message/CitationChip.d.ts +38 -0
  126. package/dist/components/message/CitationChip.d.ts.map +1 -0
  127. package/dist/components/message/CitationChip.js +32 -0
  128. package/dist/components/message/CitationChip.js.map +1 -0
  129. package/dist/components/message/CodeBlock.d.ts +45 -0
  130. package/dist/components/message/CodeBlock.d.ts.map +1 -0
  131. package/dist/components/message/CodeBlock.js +21 -0
  132. package/dist/components/message/CodeBlock.js.map +1 -0
  133. package/dist/components/message/JumpToLatest.d.ts +27 -0
  134. package/dist/components/message/JumpToLatest.d.ts.map +1 -0
  135. package/dist/components/message/JumpToLatest.js +17 -0
  136. package/dist/components/message/JumpToLatest.js.map +1 -0
  137. package/dist/components/message/Markdown.d.ts +21 -0
  138. package/dist/components/message/Markdown.d.ts.map +1 -0
  139. package/dist/components/message/Markdown.js +21 -0
  140. package/dist/components/message/Markdown.js.map +1 -0
  141. package/dist/components/message/MessageActions.d.ts +67 -0
  142. package/dist/components/message/MessageActions.d.ts.map +1 -0
  143. package/dist/components/message/MessageActions.js +83 -0
  144. package/dist/components/message/MessageActions.js.map +1 -0
  145. package/dist/components/message/MessageList.d.ts +106 -0
  146. package/dist/components/message/MessageList.d.ts.map +1 -0
  147. package/dist/components/message/MessageList.js +327 -0
  148. package/dist/components/message/MessageList.js.map +1 -0
  149. package/dist/components/message/MessagePart.d.ts +44 -0
  150. package/dist/components/message/MessagePart.d.ts.map +1 -0
  151. package/dist/components/message/MessagePart.js +150 -0
  152. package/dist/components/message/MessagePart.js.map +1 -0
  153. package/dist/components/message/RunDetails.d.ts +26 -0
  154. package/dist/components/message/RunDetails.d.ts.map +1 -0
  155. package/dist/components/message/RunDetails.js +113 -0
  156. package/dist/components/message/RunDetails.js.map +1 -0
  157. package/dist/components/message/SkillUseList.d.ts +22 -0
  158. package/dist/components/message/SkillUseList.d.ts.map +1 -0
  159. package/dist/components/message/SkillUseList.js +20 -0
  160. package/dist/components/message/SkillUseList.js.map +1 -0
  161. package/dist/components/message/ThinkingBlock.d.ts +44 -0
  162. package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
  163. package/dist/components/message/ThinkingBlock.js +34 -0
  164. package/dist/components/message/ThinkingBlock.js.map +1 -0
  165. package/dist/components/message/icons.d.ts +14 -0
  166. package/dist/components/message/icons.d.ts.map +1 -0
  167. package/dist/components/message/icons.js +16 -0
  168. package/dist/components/message/icons.js.map +1 -0
  169. package/dist/components/message/plain-text.d.ts +11 -0
  170. package/dist/components/message/plain-text.d.ts.map +1 -0
  171. package/dist/components/message/plain-text.js +58 -0
  172. package/dist/components/message/plain-text.js.map +1 -0
  173. package/dist/components/message/renderers.d.ts +30 -0
  174. package/dist/components/message/renderers.d.ts.map +1 -0
  175. package/dist/components/message/renderers.js +2 -0
  176. package/dist/components/message/renderers.js.map +1 -0
  177. package/dist/components/message/use-copy.d.ts +19 -0
  178. package/dist/components/message/use-copy.d.ts.map +1 -0
  179. package/dist/components/message/use-copy.js +67 -0
  180. package/dist/components/message/use-copy.js.map +1 -0
  181. package/dist/components/process/AgentProcess.d.ts +47 -0
  182. package/dist/components/process/AgentProcess.d.ts.map +1 -0
  183. package/dist/components/process/AgentProcess.js +78 -0
  184. package/dist/components/process/AgentProcess.js.map +1 -0
  185. package/dist/components/process/RunStatus.d.ts +60 -0
  186. package/dist/components/process/RunStatus.d.ts.map +1 -0
  187. package/dist/components/process/RunStatus.js +34 -0
  188. package/dist/components/process/RunStatus.js.map +1 -0
  189. package/dist/components/shell/AgentEmptyState.d.ts +35 -0
  190. package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
  191. package/dist/components/shell/AgentEmptyState.js +20 -0
  192. package/dist/components/shell/AgentEmptyState.js.map +1 -0
  193. package/dist/components/shell/AgentHeader.d.ts +84 -0
  194. package/dist/components/shell/AgentHeader.d.ts.map +1 -0
  195. package/dist/components/shell/AgentHeader.js +43 -0
  196. package/dist/components/shell/AgentHeader.js.map +1 -0
  197. package/dist/components/shell/AgentShell.d.ts +154 -0
  198. package/dist/components/shell/AgentShell.d.ts.map +1 -0
  199. package/dist/components/shell/AgentShell.js +210 -0
  200. package/dist/components/shell/AgentShell.js.map +1 -0
  201. package/dist/components/shell/AgentSidePane.d.ts +54 -0
  202. package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
  203. package/dist/components/shell/AgentSidePane.js +26 -0
  204. package/dist/components/shell/AgentSidePane.js.map +1 -0
  205. package/dist/components/shell/ResizeHandle.d.ts +54 -0
  206. package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
  207. package/dist/components/shell/ResizeHandle.js +94 -0
  208. package/dist/components/shell/ResizeHandle.js.map +1 -0
  209. package/dist/components/shell/use-controllable.d.ts +9 -0
  210. package/dist/components/shell/use-controllable.d.ts.map +1 -0
  211. package/dist/components/shell/use-controllable.js +26 -0
  212. package/dist/components/shell/use-controllable.js.map +1 -0
  213. package/dist/components/tools/ChunkPager.d.ts +48 -0
  214. package/dist/components/tools/ChunkPager.d.ts.map +1 -0
  215. package/dist/components/tools/ChunkPager.js +68 -0
  216. package/dist/components/tools/ChunkPager.js.map +1 -0
  217. package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
  218. package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
  219. package/dist/components/tools/CodeModeToolTree.js +97 -0
  220. package/dist/components/tools/CodeModeToolTree.js.map +1 -0
  221. package/dist/components/tools/DiffPreview.d.ts +83 -0
  222. package/dist/components/tools/DiffPreview.d.ts.map +1 -0
  223. package/dist/components/tools/DiffPreview.js +95 -0
  224. package/dist/components/tools/DiffPreview.js.map +1 -0
  225. package/dist/components/tools/ToolActivity.d.ts +63 -0
  226. package/dist/components/tools/ToolActivity.d.ts.map +1 -0
  227. package/dist/components/tools/ToolActivity.js +45 -0
  228. package/dist/components/tools/ToolActivity.js.map +1 -0
  229. package/dist/components/tools/ToolDetails.d.ts +118 -0
  230. package/dist/components/tools/ToolDetails.d.ts.map +1 -0
  231. package/dist/components/tools/ToolDetails.js +258 -0
  232. package/dist/components/tools/ToolDetails.js.map +1 -0
  233. package/dist/components/tools/ToolHistory.d.ts +48 -0
  234. package/dist/components/tools/ToolHistory.d.ts.map +1 -0
  235. package/dist/components/tools/ToolHistory.js +37 -0
  236. package/dist/components/tools/ToolHistory.js.map +1 -0
  237. package/dist/components/tools/ToolOutput.d.ts +61 -0
  238. package/dist/components/tools/ToolOutput.d.ts.map +1 -0
  239. package/dist/components/tools/ToolOutput.js +45 -0
  240. package/dist/components/tools/ToolOutput.js.map +1 -0
  241. package/dist/components/tools/ToolRecord.d.ts +58 -0
  242. package/dist/components/tools/ToolRecord.d.ts.map +1 -0
  243. package/dist/components/tools/ToolRecord.js +79 -0
  244. package/dist/components/tools/ToolRecord.js.map +1 -0
  245. package/dist/components/tools/shared.d.ts +93 -0
  246. package/dist/components/tools/shared.d.ts.map +1 -0
  247. package/dist/components/tools/shared.js +160 -0
  248. package/dist/components/tools/shared.js.map +1 -0
  249. package/dist/components/workspace/ActivityLedger.d.ts +44 -0
  250. package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
  251. package/dist/components/workspace/ActivityLedger.js +63 -0
  252. package/dist/components/workspace/ActivityLedger.js.map +1 -0
  253. package/dist/components/workspace/CompactionNotice.d.ts +63 -0
  254. package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
  255. package/dist/components/workspace/CompactionNotice.js +36 -0
  256. package/dist/components/workspace/CompactionNotice.js.map +1 -0
  257. package/dist/components/workspace/ContextUsage.d.ts +50 -0
  258. package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
  259. package/dist/components/workspace/ContextUsage.js +106 -0
  260. package/dist/components/workspace/ContextUsage.js.map +1 -0
  261. package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
  262. package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
  263. package/dist/components/workspace/PersistentTerminal.js +155 -0
  264. package/dist/components/workspace/PersistentTerminal.js.map +1 -0
  265. package/dist/components/workspace/PinnedSummary.d.ts +43 -0
  266. package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
  267. package/dist/components/workspace/PinnedSummary.js +33 -0
  268. package/dist/components/workspace/PinnedSummary.js.map +1 -0
  269. package/dist/components/workspace/RunOverview.d.ts +29 -0
  270. package/dist/components/workspace/RunOverview.d.ts.map +1 -0
  271. package/dist/components/workspace/RunOverview.js +20 -0
  272. package/dist/components/workspace/RunOverview.js.map +1 -0
  273. package/dist/components/workspace/RunSummary.d.ts +35 -0
  274. package/dist/components/workspace/RunSummary.d.ts.map +1 -0
  275. package/dist/components/workspace/RunSummary.js +46 -0
  276. package/dist/components/workspace/RunSummary.js.map +1 -0
  277. package/dist/components/workspace/SubAgentCard.d.ts +64 -0
  278. package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
  279. package/dist/components/workspace/SubAgentCard.js +78 -0
  280. package/dist/components/workspace/SubAgentCard.js.map +1 -0
  281. package/dist/components/workspace/TerminalRow.d.ts +61 -0
  282. package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
  283. package/dist/components/workspace/TerminalRow.js +65 -0
  284. package/dist/components/workspace/TerminalRow.js.map +1 -0
  285. package/dist/components/workspace/shared.d.ts +26 -0
  286. package/dist/components/workspace/shared.d.ts.map +1 -0
  287. package/dist/components/workspace/shared.js +41 -0
  288. package/dist/components/workspace/shared.js.map +1 -0
  289. package/dist/index.d.ts +136 -0
  290. package/dist/index.d.ts.map +1 -0
  291. package/dist/index.js +79 -0
  292. package/dist/index.js.map +1 -0
  293. package/dist/motion/agent-motion.d.ts +62 -0
  294. package/dist/motion/agent-motion.d.ts.map +1 -0
  295. package/dist/motion/agent-motion.js +61 -0
  296. package/dist/motion/agent-motion.js.map +1 -0
  297. package/dist/primitives/AgentSpark.d.ts +17 -0
  298. package/dist/primitives/AgentSpark.d.ts.map +1 -0
  299. package/dist/primitives/AgentSpark.js +11 -0
  300. package/dist/primitives/AgentSpark.js.map +1 -0
  301. package/dist/primitives/AgentStatus.d.ts +32 -0
  302. package/dist/primitives/AgentStatus.d.ts.map +1 -0
  303. package/dist/primitives/AgentStatus.js +13 -0
  304. package/dist/primitives/AgentStatus.js.map +1 -0
  305. package/dist/primitives/StatusGlyph.d.ts +16 -0
  306. package/dist/primitives/StatusGlyph.d.ts.map +1 -0
  307. package/dist/primitives/StatusGlyph.js +31 -0
  308. package/dist/primitives/StatusGlyph.js.map +1 -0
  309. package/dist/primitives/icons.d.ts +13 -0
  310. package/dist/primitives/icons.d.ts.map +1 -0
  311. package/dist/primitives/icons.js +55 -0
  312. package/dist/primitives/icons.js.map +1 -0
  313. package/dist/provider/AgentMessages.d.ts +61 -0
  314. package/dist/provider/AgentMessages.d.ts.map +1 -0
  315. package/dist/provider/AgentMessages.js +81 -0
  316. package/dist/provider/AgentMessages.js.map +1 -0
  317. package/dist/provider/messages/composer.d.ts +112 -0
  318. package/dist/provider/messages/composer.d.ts.map +1 -0
  319. package/dist/provider/messages/composer.js +165 -0
  320. package/dist/provider/messages/composer.js.map +1 -0
  321. package/dist/provider/messages/intervention.d.ts +136 -0
  322. package/dist/provider/messages/intervention.d.ts.map +1 -0
  323. package/dist/provider/messages/intervention.js +321 -0
  324. package/dist/provider/messages/intervention.js.map +1 -0
  325. package/dist/provider/messages/message.d.ts +119 -0
  326. package/dist/provider/messages/message.d.ts.map +1 -0
  327. package/dist/provider/messages/message.js +224 -0
  328. package/dist/provider/messages/message.js.map +1 -0
  329. package/dist/provider/messages/shell.d.ts +70 -0
  330. package/dist/provider/messages/shell.d.ts.map +1 -0
  331. package/dist/provider/messages/shell.js +109 -0
  332. package/dist/provider/messages/shell.js.map +1 -0
  333. package/dist/provider/messages/status.d.ts +21 -0
  334. package/dist/provider/messages/status.d.ts.map +1 -0
  335. package/dist/provider/messages/status.js +195 -0
  336. package/dist/provider/messages/status.js.map +1 -0
  337. package/dist/provider/messages/tools.d.ts +217 -0
  338. package/dist/provider/messages/tools.d.ts.map +1 -0
  339. package/dist/provider/messages/tools.js +496 -0
  340. package/dist/provider/messages/tools.js.map +1 -0
  341. package/dist/provider/messages/workspace.d.ts +187 -0
  342. package/dist/provider/messages/workspace.d.ts.map +1 -0
  343. package/dist/provider/messages/workspace.js +333 -0
  344. package/dist/provider/messages/workspace.js.map +1 -0
  345. package/dist/styles/artifact.css +564 -0
  346. package/dist/styles/base.css +220 -0
  347. package/dist/styles/composer.css +1001 -0
  348. package/dist/styles/conversation.css +275 -0
  349. package/dist/styles/intervention.css +929 -0
  350. package/dist/styles/message.css +917 -0
  351. package/dist/styles/process.css +207 -0
  352. package/dist/styles/shell.css +453 -0
  353. package/dist/styles/tools.css +929 -0
  354. package/dist/styles/workspace.css +1297 -0
  355. package/dist/styles/wpi-adoption.css +24 -0
  356. package/dist/utils/cx.d.ts +3 -0
  357. package/dist/utils/cx.d.ts.map +1 -0
  358. package/dist/utils/cx.js +5 -0
  359. package/dist/utils/cx.js.map +1 -0
  360. package/package.json +64 -3
@@ -0,0 +1,119 @@
1
+ import * as React from 'react';
2
+ import type { ActionReceipt, ActionStatus, AttachmentView, CommandOption, ComposerToken, DraftStatus, MentionOption, ReferenceView, RunStatus, SendInput, TriggerMatch } from '@wzrhine/agent-core';
3
+ import type { ComposerInputHandle, ComposerTokenKind } from './ComposerInput.js';
4
+ export type ComposerProps = {
5
+ value?: string;
6
+ defaultValue?: string;
7
+ onValueChange?: (value: string) => void;
8
+ placeholder?: string;
9
+ 'aria-label'?: string;
10
+ submitOn?: 'enter' | 'mod-enter';
11
+ slash?: 'line-start' | 'word-start';
12
+ /** Shows a character counter and blocks sending above the limit (code points of the plain text). */
13
+ maxLength?: number;
14
+ /** Show the counter without a limit. */
15
+ showCount?: boolean;
16
+ /** A token disappeared from the text (whole-token delete, cut, overwrite): unbind its reference. */
17
+ onTokenRemoved?: (token: ComposerToken) => void;
18
+ tokenKind?: (token: ComposerToken) => ComposerTokenKind;
19
+ /** Receives the plain text (`@name` / `/name`), the raw value with markers, references and attachments. */
20
+ onSubmit?: (input: SendInput) => void;
21
+ /** Allow sending when the text is empty if at least one attachment or reference exists. */
22
+ allowEmptyText?: boolean;
23
+ /** Receipt of the last send. `submitting` / `unknown` block Enter and the button (no duplicates). */
24
+ submitStatus?: ActionStatus | ActionReceipt;
25
+ runStatus?: RunStatus;
26
+ onStop?: () => void;
27
+ stopStatus?: ActionStatus | ActionReceipt;
28
+ /** Retry an `unknown` send / stop with its original actionId (ADR-0011 §4). */
29
+ onRetryAction?: (kind: 'send' | 'stop', actionId: string | undefined) => void;
30
+ /** Extra condition for sending (e.g. a model must be selected), with its reason. */
31
+ canSend?: boolean;
32
+ sendDisabledReason?: string;
33
+ draftStatus?: DraftStatus;
34
+ onRetryDraftSave?: () => void;
35
+ persistence?: DraftStatus | 'idle';
36
+ onRetryPersistence?: () => void;
37
+ retryBusy?: boolean;
38
+ references?: readonly ReferenceView[];
39
+ attachments?: readonly AttachmentView[];
40
+ onRemoveReference?: (reference: ReferenceView) => void;
41
+ onRemoveAttachment?: (attachment: AttachmentView) => void;
42
+ onRetryAttachment?: (attachment: AttachmentView) => void;
43
+ /** Files dropped on the frame (drag-over highlight while dragging). No callback → no drop zone. */
44
+ onFilesDrop?: (files: File[]) => void;
45
+ /** Files pasted into the textarea. Text paste is untouched. */
46
+ onFilesPaste?: (files: File[]) => void;
47
+ /** Enables the `@` menu. Filtered locally unless `onMentionQuery` is given (then the host filters). */
48
+ mentionOptions?: readonly MentionOption[];
49
+ mentionLoading?: boolean;
50
+ mentionError?: React.ReactNode;
51
+ onMentionRetry?: () => void;
52
+ /** Query typed after `@` while the menu is open; `null` when it closes. */
53
+ onMentionQuery?: (query: string | null) => void;
54
+ /** Token text for a chosen option (default: drilled folder + label). */
55
+ mentionTokenName?: (option: MentionOption, query: string) => string;
56
+ /** A mention was inserted as a token: bind the reference. */
57
+ onReferenceAdd?: (option: MentionOption, tokenName: string) => void;
58
+ /** A folder was drilled into (the query is already rewritten to `folder/`). */
59
+ onMentionDrill?: (option: MentionOption) => void;
60
+ /** Enables the `/` menu (commands first, then skills). Filtered locally unless `onCommandQuery` is given. */
61
+ commandOptions?: readonly CommandOption[];
62
+ commandLoading?: boolean;
63
+ onCommandQuery?: (query: string | null) => void;
64
+ /**
65
+ * A command or skill was chosen. Return `'insert'` to replace the typed `/query` with a token;
66
+ * otherwise the typed query is removed and the host dispatches its own action.
67
+ */
68
+ onCommand?: (option: CommandOption, match: TriggerMatch) => 'insert' | void;
69
+ /** A disabled command was chosen: nothing is dispatched; its reason shows in the feedback line. */
70
+ onDisabledCommand?: (option: CommandOption, match: TriggerMatch) => 'consume' | void;
71
+ disabled?: boolean;
72
+ /** Why the composer is disabled (feedback line). */
73
+ disabledReason?: string;
74
+ readOnly?: boolean;
75
+ /**
76
+ * Input blocked by a pending intervention (e.g. a questionnaire): the textarea becomes read-only
77
+ * and `aria-disabled`, the reason replaces the placeholder and shows in the feedback line.
78
+ * `true` uses the default copy ("请先在上方回答问题").
79
+ */
80
+ blocked?: boolean | string;
81
+ /** Approval / questionnaire cards docked above the frame (height animates via grid rows). */
82
+ intervention?: React.ReactNode;
83
+ /**
84
+ * Rendered instead of the input frame, menus and feedback line, e.g. a `ComposerNotice` for a
85
+ * sub-agent, archived or inherited thread. The `intervention` slot stays above it, so approvals
86
+ * and questions still dock. The draft value is kept and comes back when `replacement` is removed.
87
+ */
88
+ replacement?: React.ReactNode;
89
+ /** Toolbar start (e.g. a "+" Menu: 添加图片 / 引用文件 / 使用技能). */
90
+ toolbarStart?: React.ReactNode;
91
+ /** Toolbar end before the send button (ModelPicker, PermissionPicker, context ring). */
92
+ toolbarEnd?: React.ReactNode;
93
+ /** Extra feedback content after the status text. */
94
+ feedback?: React.ReactNode;
95
+ /** Side the menus open on. */
96
+ menuSide?: 'top' | 'bottom';
97
+ className?: string;
98
+ id?: string;
99
+ };
100
+ /**
101
+ * Full agent input frame (atlas 14): intervention slot, attachment / reference row, the
102
+ * token-mirror textarea, `@` / `/` menus, toolbar slots, the send / stop button and a feedback line.
103
+ *
104
+ * Keyboard (textarea keeps focus throughout):
105
+ * - Enter sends (Shift+Enter newline; `submitOn="mod-enter"` swaps them). Never while composing
106
+ * (IME), never while a menu consumed the key, never while the send is `submitting` / `unknown`
107
+ * or a run is in progress — the send / stop button shows 停止生成 instead.
108
+ * - `@` / `/` open the menus (role="combobox" + aria-activedescendant on the textarea);
109
+ * ↑ / ↓ move (clamped), Enter / Tab choose, Tab / Enter on a folder drills, Esc closes and the
110
+ * same trigger + query stays closed until the query changes.
111
+ *
112
+ * States: empty, focused (frame ring via :focus-within), multiline, mentions, sending, running,
113
+ * failed (draft kept + retry), blocked, disabled, drag-over, replaced (`replacement` stands in for
114
+ * the frame, e.g. ComposerNotice; the intervention slot stays).
115
+ * Motion: menus fade (MotionPresence `fade`), send / stop icons cross-fade, the intervention slot
116
+ * expands with CSS grid rows (`--rl-motion-base`); reduced motion → instant.
117
+ */
118
+ export declare const Composer: React.ForwardRefExoticComponent<ComposerProps & React.RefAttributes<ComposerInputHandle>>;
119
+ //# sourceMappingURL=Composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../../src/components/composer/Composer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Button, useRhineMotion } from '@wzrhine/react';
5
+ import { codePointLength, toPlainText } from '@wzrhine/agent-core';
6
+ import { canStopRun } from '@wzrhine/agent-core';
7
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
8
+ import { cx } from '../../utils/cx.js';
9
+ import { AttachmentList } from './AttachmentList.js';
10
+ import { ComposerInput } from './ComposerInput.js';
11
+ import { defaultMentionTokenName, drillQuery, filterCommandOptions, filterMentionOptions, menuOptionId, moveActiveIndex, orderCommandOptions, } from './composer-utils.js';
12
+ import { MentionMenu } from './MentionMenu.js';
13
+ import { SendStopButton } from './SendStopButton.js';
14
+ import { SlashCommandMenu } from './SlashCommandMenu.js';
15
+ function receiptStatus(input) {
16
+ if (input === undefined)
17
+ return undefined;
18
+ return typeof input === 'string' ? input : input.status;
19
+ }
20
+ /** The trigger word starting at `from` (up to the next whitespace), independent of the caret. */
21
+ const wordAt = (value, from) => /^\S*/.exec(value.slice(from))[0];
22
+ const sameDismissed = (d, m, value) => d.trigger === m.trigger && d.from === m.from && d.word === wordAt(value, m.from);
23
+ /**
24
+ * Full agent input frame (atlas 14): intervention slot, attachment / reference row, the
25
+ * token-mirror textarea, `@` / `/` menus, toolbar slots, the send / stop button and a feedback line.
26
+ *
27
+ * Keyboard (textarea keeps focus throughout):
28
+ * - Enter sends (Shift+Enter newline; `submitOn="mod-enter"` swaps them). Never while composing
29
+ * (IME), never while a menu consumed the key, never while the send is `submitting` / `unknown`
30
+ * or a run is in progress — the send / stop button shows 停止生成 instead.
31
+ * - `@` / `/` open the menus (role="combobox" + aria-activedescendant on the textarea);
32
+ * ↑ / ↓ move (clamped), Enter / Tab choose, Tab / Enter on a folder drills, Esc closes and the
33
+ * same trigger + query stays closed until the query changes.
34
+ *
35
+ * States: empty, focused (frame ring via :focus-within), multiline, mentions, sending, running,
36
+ * failed (draft kept + retry), blocked, disabled, drag-over, replaced (`replacement` stands in for
37
+ * the frame, e.g. ComposerNotice; the intervention slot stays).
38
+ * Motion: menus fade (MotionPresence `fade`), send / stop icons cross-fade, the intervention slot
39
+ * expands with CSS grid rows (`--rl-motion-base`); reduced motion → instant.
40
+ */
41
+ export const Composer = React.forwardRef(function Composer({ value: valueProp, defaultValue = '', onValueChange, placeholder, 'aria-label': ariaLabel, submitOn = 'enter', slash = 'line-start', maxLength, showCount = false, onTokenRemoved, tokenKind, onSubmit, allowEmptyText = false, submitStatus, runStatus, onStop, stopStatus, onRetryAction, canSend: canSendProp = true, sendDisabledReason, draftStatus, onRetryDraftSave, persistence, onRetryPersistence, retryBusy = false, references = [], attachments = [], onRemoveReference, onRemoveAttachment, onRetryAttachment, onFilesDrop, onFilesPaste, mentionOptions, mentionLoading = false, mentionError, onMentionRetry, onMentionQuery, mentionTokenName, onReferenceAdd, onMentionDrill, commandOptions, commandLoading = false, onCommandQuery, onCommand, onDisabledCommand, disabled = false, disabledReason, readOnly = false, blocked = false, intervention, replacement, toolbarStart, toolbarEnd, feedback, menuSide = 'top', className, id, }, ref) {
42
+ const messages = useAgentMessages().composer;
43
+ const format = useAgentFormat();
44
+ const { reduced } = useRhineMotion();
45
+ const autoId = React.useId();
46
+ const baseId = id ?? autoId;
47
+ const inputRef = React.useRef(null);
48
+ React.useImperativeHandle(ref, () => ({
49
+ focus: () => inputRef.current?.focus(),
50
+ insertToken: (trigger, name, range) => inputRef.current?.insertToken(trigger, name, range),
51
+ replaceRange: (from, to, text) => inputRef.current?.replaceRange(from, to, text),
52
+ getSelection: () => inputRef.current?.getSelection() ?? { start: 0, end: 0 },
53
+ get element() {
54
+ return inputRef.current?.element ?? null;
55
+ },
56
+ }), []);
57
+ const [inner, setInner] = React.useState(defaultValue);
58
+ const value = valueProp ?? inner;
59
+ const [match, setMatch] = React.useState(null);
60
+ const [dismissed, setDismissed] = React.useState(null);
61
+ const [activeIndex, setActiveIndex] = React.useState(0);
62
+ const [notice, setNotice] = React.useState(null);
63
+ const [dragging, setDragging] = React.useState(false);
64
+ const dragDepth = React.useRef(0);
65
+ // ---------- derived ----------
66
+ const plain = React.useMemo(() => toPlainText(value), [value]);
67
+ const count = codePointLength(plain);
68
+ const overLimit = maxLength !== undefined && count > maxLength;
69
+ const uploading = attachments.some((a) => a.status === 'uploading');
70
+ const submit = receiptStatus(submitStatus);
71
+ const sendBusy = submit === 'submitting' || submit === 'unknown';
72
+ const running = runStatus !== undefined && (canStopRun(runStatus) || runStatus === 'cancelling');
73
+ const blockedReason = typeof blocked === 'string' ? blocked : blocked ? messages.blockedPlaceholder : undefined;
74
+ const replaced = replacement != null && replacement !== false;
75
+ const inert = disabled || readOnly || blockedReason !== undefined || replaced;
76
+ const hasPayload = plain.trim() !== '' || attachments.length > 0 || references.length > 0;
77
+ const sendReason = disabled
78
+ ? disabledReason
79
+ : blockedReason
80
+ ? blockedReason
81
+ : sendBusy
82
+ ? messages.submittingReason
83
+ : running
84
+ ? onStop
85
+ ? undefined
86
+ : messages.runningReason
87
+ : (!allowEmptyText && plain.trim() === '') || (allowEmptyText && !hasPayload)
88
+ ? messages.emptyReason
89
+ : uploading
90
+ ? messages.uploadingReason
91
+ : overLimit
92
+ ? messages.overLimitReason
93
+ : !canSendProp
94
+ ? sendDisabledReason
95
+ : undefined;
96
+ const canSend = onSubmit !== undefined && !inert && !sendBusy && !running && (allowEmptyText ? hasPayload : plain.trim() !== '') && !uploading && !overLimit && canSendProp && persistence !== 'error';
97
+ // The Esc memory survives caret moves and leaving the word; editing the word (or another
98
+ // trigger) forgets it, so the menu reopens once the query really changes.
99
+ if (dismissed && match && !sameDismissed(dismissed, match, value))
100
+ setDismissed(null);
101
+ const menuKind = match && !inert && !(dismissed && sameDismissed(dismissed, match, value))
102
+ ? match.trigger === '@' && mentionOptions !== undefined
103
+ ? '@'
104
+ : match.trigger === '/' && commandOptions !== undefined
105
+ ? '/'
106
+ : null
107
+ : null;
108
+ const query = match?.query ?? '';
109
+ const shownMentions = React.useMemo(() => (mentionOptions ? (onMentionQuery ? [...mentionOptions] : filterMentionOptions(mentionOptions, query)) : []), [mentionOptions, onMentionQuery, query]);
110
+ const shownCommands = React.useMemo(() => (commandOptions ? orderCommandOptions(onCommandQuery ? commandOptions : filterCommandOptions(commandOptions, query)) : []), [commandOptions, onCommandQuery, query]);
111
+ const menuLoading = menuKind === '@' ? mentionLoading : menuKind === '/' ? commandLoading : false;
112
+ const menuError = menuKind === '@' && mentionError != null && mentionError !== false;
113
+ const optionCount = menuKind === '@' ? shownMentions.length : menuKind === '/' ? shownCommands.length : 0;
114
+ const listReady = menuKind !== null && !menuLoading && !menuError && optionCount > 0;
115
+ const active = listReady ? Math.min(Math.max(activeIndex, 0), optionCount - 1) : -1;
116
+ const listboxId = menuKind === '@' ? `${baseId}-mention-listbox` : `${baseId}-command-listbox`;
117
+ // ---------- host queries ----------
118
+ const mentionQuery = menuKind === '@' ? query : null;
119
+ const commandQuery = menuKind === '/' ? query : null;
120
+ const lastMentionQuery = React.useRef(null);
121
+ const lastCommandQuery = React.useRef(null);
122
+ // Layout effects: the host's filtered options must be in place before the next key event,
123
+ // otherwise a fast Enter would choose from the previous query's list.
124
+ React.useLayoutEffect(() => {
125
+ if (mentionQuery === lastMentionQuery.current)
126
+ return;
127
+ lastMentionQuery.current = mentionQuery;
128
+ onMentionQuery?.(mentionQuery);
129
+ }, [mentionQuery, onMentionQuery]);
130
+ React.useLayoutEffect(() => {
131
+ if (commandQuery === lastCommandQuery.current)
132
+ return;
133
+ lastCommandQuery.current = commandQuery;
134
+ onCommandQuery?.(commandQuery);
135
+ }, [commandQuery, onCommandQuery]);
136
+ // ---------- text ----------
137
+ const handleValueChange = (next) => {
138
+ if (valueProp === undefined)
139
+ setInner(next);
140
+ onValueChange?.(next);
141
+ };
142
+ const matchRef = React.useRef(null);
143
+ const handleTrigger = (next) => {
144
+ const prev = matchRef.current;
145
+ matchRef.current = next;
146
+ if (!next || !prev || prev.trigger !== next.trigger || prev.query !== next.query)
147
+ setActiveIndex(0);
148
+ setMatch(next);
149
+ setNotice(null);
150
+ };
151
+ const doSubmit = () => {
152
+ if (!canSend || !onSubmit)
153
+ return;
154
+ onSubmit({ text: plain, raw: value, references: [...references], attachments: [...attachments] });
155
+ };
156
+ // ---------- menu actions ----------
157
+ const chooseMention = (option, how) => {
158
+ if (!match)
159
+ return;
160
+ if (option.disabled) {
161
+ setNotice(messages.optionUnavailable(option.disabledReason));
162
+ return;
163
+ }
164
+ if (option.drillable && (how === 'tab' || how === 'enter' || how === 'click')) {
165
+ inputRef.current?.replaceRange(match.from + 1, match.to, drillQuery(match.query, option));
166
+ onMentionDrill?.(option);
167
+ return;
168
+ }
169
+ const name = mentionTokenName ? mentionTokenName(option, match.query) : defaultMentionTokenName(option, match.query);
170
+ inputRef.current?.insertToken('@', name, { from: match.from, to: match.to });
171
+ onReferenceAdd?.(option, name);
172
+ };
173
+ const chooseCommand = (option) => {
174
+ if (!match)
175
+ return;
176
+ if (option.disabled) {
177
+ setNotice(messages.optionUnavailable(option.disabledReason));
178
+ if (onDisabledCommand) {
179
+ // Preserve the original one-argument callback while enabling the richer match-aware API.
180
+ // Keep the pre-0.2 one-argument callback source-compatible while exposing the richer
181
+ // match-aware signature to hosts that declare the second parameter.
182
+ if (onDisabledCommand.length >= 2)
183
+ onDisabledCommand(option, match);
184
+ else
185
+ onDisabledCommand(option);
186
+ }
187
+ return;
188
+ }
189
+ const result = onCommand?.(option, match);
190
+ if (result === 'insert')
191
+ inputRef.current?.insertToken('/', option.name, { from: match.from, to: match.to });
192
+ else
193
+ inputRef.current?.replaceRange(match.from, match.to, '');
194
+ };
195
+ const handleMenuKey = (event) => {
196
+ if (menuKind === null || !match)
197
+ return false;
198
+ if (event.key === 'Escape') {
199
+ event.stopPropagation();
200
+ setDismissed({ trigger: match.trigger, from: match.from, word: wordAt(value, match.from) });
201
+ return true;
202
+ }
203
+ if (!listReady)
204
+ return false;
205
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
206
+ setActiveIndex(moveActiveIndex(optionCount, active, event.key === 'ArrowDown' ? 1 : -1));
207
+ return true;
208
+ }
209
+ if (event.key === 'Home' && (event.ctrlKey || event.metaKey))
210
+ return false;
211
+ const isEnter = event.key === 'Enter' && !event.shiftKey && !event.altKey;
212
+ const isTab = event.key === 'Tab' && !event.shiftKey;
213
+ if (!isEnter && !isTab)
214
+ return false;
215
+ if (menuKind === '@') {
216
+ const option = shownMentions[active];
217
+ if (option)
218
+ chooseMention(option, isTab ? 'tab' : 'enter');
219
+ }
220
+ else {
221
+ const option = shownCommands[active];
222
+ if (option)
223
+ chooseCommand(option);
224
+ }
225
+ return true;
226
+ };
227
+ // ---------- files ----------
228
+ const hasFiles = (event) => Array.from(event.dataTransfer?.types ?? []).includes('Files');
229
+ const dropHandlers = onFilesDrop
230
+ ? {
231
+ onDragEnter: (event) => {
232
+ if (!hasFiles(event) || inert)
233
+ return;
234
+ event.preventDefault();
235
+ dragDepth.current += 1;
236
+ setDragging(true);
237
+ },
238
+ onDragOver: (event) => {
239
+ if (!hasFiles(event) || inert)
240
+ return;
241
+ event.preventDefault();
242
+ event.dataTransfer.dropEffect = 'copy';
243
+ },
244
+ onDragLeave: () => {
245
+ dragDepth.current = Math.max(0, dragDepth.current - 1);
246
+ if (dragDepth.current === 0)
247
+ setDragging(false);
248
+ },
249
+ onDrop: (event) => {
250
+ dragDepth.current = 0;
251
+ setDragging(false);
252
+ if (!hasFiles(event) || inert)
253
+ return;
254
+ event.preventDefault();
255
+ const files = Array.from(event.dataTransfer.files);
256
+ if (files.length > 0)
257
+ onFilesDrop(files);
258
+ },
259
+ }
260
+ : {};
261
+ const handlePaste = (event) => {
262
+ if (!onFilesPaste || inert)
263
+ return;
264
+ const files = Array.from(event.clipboardData?.files ?? []);
265
+ if (files.length === 0)
266
+ return;
267
+ if (!event.clipboardData.types.includes('text/plain'))
268
+ event.preventDefault();
269
+ onFilesPaste(files);
270
+ };
271
+ // ---------- intervention slot (keeps its last content while collapsing) ----------
272
+ const [shownIntervention, setShownIntervention] = React.useState(intervention);
273
+ const interventionOpen = intervention != null && intervention !== false;
274
+ if (interventionOpen && shownIntervention !== intervention)
275
+ setShownIntervention(intervention);
276
+ // Without a transition (reduced motion: duration tokens are 0) no transitionend fires.
277
+ if (!interventionOpen && shownIntervention != null && reduced)
278
+ setShownIntervention(null);
279
+ // ---------- feedback ----------
280
+ let statusText;
281
+ let statusTone = 'neutral';
282
+ let retry;
283
+ if (notice) {
284
+ statusText = notice;
285
+ statusTone = 'warning';
286
+ }
287
+ else if (blockedReason) {
288
+ statusText = blockedReason;
289
+ }
290
+ else if (disabled && disabledReason) {
291
+ statusText = disabledReason;
292
+ }
293
+ else if (submit === 'rejected') {
294
+ statusText = messages.submitFailed;
295
+ statusTone = 'danger';
296
+ if (onSubmit)
297
+ retry = { label: messages.retry, onClick: doSubmit };
298
+ }
299
+ else if (submit === 'unknown') {
300
+ statusText = messages.submitUnknown;
301
+ statusTone = 'warning';
302
+ }
303
+ else if (draftStatus === 'error' || persistence === 'error') {
304
+ statusText = messages.draftError;
305
+ statusTone = 'danger';
306
+ if (onRetryPersistence || onRetryDraftSave)
307
+ retry = { label: messages.retrySave, onClick: onRetryPersistence ?? onRetryDraftSave };
308
+ }
309
+ else if (draftStatus === 'saving') {
310
+ statusText = messages.draftSaving;
311
+ }
312
+ else if (draftStatus === 'saved') {
313
+ statusText = messages.draftSaved;
314
+ }
315
+ const counter = maxLength !== undefined || showCount ? messages.characters(format.number(count), maxLength !== undefined ? format.number(maxLength) : undefined) : undefined;
316
+ const comboProps = mentionOptions !== undefined || commandOptions !== undefined
317
+ ? {
318
+ role: 'combobox',
319
+ 'aria-expanded': menuKind !== null,
320
+ // The listbox only exists with options; while loading / empty / failed the panel is controlled.
321
+ 'aria-controls': menuKind === null ? undefined : listReady ? listboxId : `${baseId}-${menuKind === '@' ? 'mention' : 'command'}-panel`,
322
+ 'aria-autocomplete': 'list',
323
+ 'aria-haspopup': 'listbox',
324
+ 'aria-activedescendant': listReady && active >= 0 ? menuOptionId(listboxId, active) : undefined,
325
+ }
326
+ : {};
327
+ const feedbackId = `${baseId}-feedback`;
328
+ return (_jsxs("div", { className: cx('rl-agent-composer', className), "data-slot": "composer", "data-disabled": disabled || undefined, "data-blocked": blockedReason !== undefined || undefined, "data-running": running || undefined, "data-replaced": replaced || undefined, children: [_jsx("div", { className: "rl-agent-composer__intervention", "data-open": interventionOpen || undefined, onTransitionEnd: (event) => {
329
+ if (!interventionOpen && event.target === event.currentTarget)
330
+ setShownIntervention(null);
331
+ }, children: _jsx("div", { className: "rl-agent-composer__intervention-inner", inert: !interventionOpen, children: interventionOpen ? intervention : shownIntervention }) }), replaced ? (_jsx("div", { className: "rl-agent-composer__replacement", children: replacement })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "rl-agent-composer__anchor", children: [mentionOptions !== undefined && (_jsx(MentionMenu, { id: `${baseId}-mention`, open: menuKind === '@', query: query, options: shownMentions, activeIndex: active, onActiveIndexChange: setActiveIndex, onSelect: (option) => chooseMention(option, 'click'), onDrill: (option) => chooseMention(option, 'click'), loading: mentionLoading, error: mentionError, onRetry: onMentionRetry, side: menuSide })), commandOptions !== undefined && (_jsx(SlashCommandMenu, { id: `${baseId}-command`, open: menuKind === '/', query: query, options: shownCommands, activeIndex: active, onActiveIndexChange: setActiveIndex, onSelect: chooseCommand, onDisabledSelect: chooseCommand, loading: commandLoading, side: menuSide })), _jsxs("div", { className: "rl-agent-composer__frame", "data-dragging": dragging || undefined, ...dropHandlers, children: [_jsx(AttachmentList, { className: "rl-agent-composer__attachments", references: references, attachments: attachments, disabled: disabled || sendBusy, onRemove: onRemoveAttachment || onRemoveReference
332
+ ? (item) => (item.type === 'attachment' ? onRemoveAttachment?.(item.attachment) : onRemoveReference?.(item.reference))
333
+ : undefined, onRetry: onRetryAttachment }), _jsx(ComposerInput, { ref: inputRef, ...comboProps, value: value, onValueChange: handleValueChange, onSubmit: onSubmit ? doSubmit : undefined, submitOn: submitOn, slash: slash, onMenuKey: handleMenuKey, onTriggerChange: handleTrigger, onTokenRemoved: onTokenRemoved, tokenKind: tokenKind ??
334
+ ((token) => token.trigger === '@' ? 'file' : commandOptions?.some((o) => o.name === token.name && o.kind === 'skill') ? 'skill' : 'command'), disabled: disabled, readOnly: readOnly || blockedReason !== undefined, "aria-disabled": blockedReason !== undefined || undefined, "aria-label": ariaLabel, "aria-describedby": statusText ? feedbackId : undefined, placeholder: blockedReason ?? placeholder, onPaste: handlePaste, className: "rl-agent-composer__input" }), dragging && (_jsx("div", { className: "rl-agent-composer__drop", "aria-hidden": "true", children: messages.dropFiles })), _jsxs("div", { className: "rl-agent-composer__toolbar", children: [_jsx("div", { className: "rl-agent-composer__tools", children: toolbarStart }), _jsxs("div", { className: "rl-agent-composer__tools", "data-end": "", children: [toolbarEnd, _jsx(SendStopButton, { className: "rl-agent-composer__send", canSend: canSend, runStatus: runStatus, sendReceipt: submitStatus, stopReceipt: stopStatus, onSend: onSubmit ? doSubmit : undefined, onStop: onStop, draftStatus: draftStatus ?? (persistence === 'error' ? 'error' : persistence === 'saving' ? 'saving' : undefined), onRetrySave: persistence ? (onRetryPersistence ?? onRetryDraftSave) : undefined, retryBusy: retryBusy, onRetry: onRetryAction, disabledReason: sendReason })] })] })] })] }), _jsxs("div", { className: "rl-agent-composer__feedback", "data-tone": statusTone, children: [_jsx("p", { id: feedbackId, className: "rl-agent-composer__status", role: "status", children: statusText }), retry && (_jsx(Button, { size: "sm", variant: "ghost", onClick: retry.onClick, children: retry.label })), feedback, counter && (_jsx("span", { className: "rl-agent-composer__count", "data-over": overLimit || undefined, children: counter }))] })] }))] }));
335
+ });
336
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../src/components/composer/Composer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAcnE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgHzD,SAAS,aAAa,CAAC,KAA+C;IACpE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1D,CAAC;AASD,iGAAiG;AACjG,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;AACnF,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,CAAe,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAE7J;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAqC,SAAS,QAAQ,CAC5F,EACE,KAAK,EAAE,SAAS,EAChB,YAAY,GAAG,EAAE,EACjB,aAAa,EACb,WAAW,EACX,YAAY,EAAE,SAAS,EACvB,QAAQ,GAAG,OAAO,EAClB,KAAK,GAAG,YAAY,EACpB,SAAS,EACT,SAAS,GAAG,KAAK,EACjB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,GAAG,KAAK,EACtB,YAAY,EACZ,SAAS,EACT,MAAM,EACN,UAAU,EACV,aAAa,EACb,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,EAAE,EACf,WAAW,GAAG,EAAE,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,cAAc,GAAG,KAAK,EACtB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,GAAG,KAAK,EACtB,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,QAAQ,GAAG,KAAK,EAChB,cAAc,EACd,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,EAAE,GACH,EACD,GAAG;IAEH,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC,QAAQ,CAAC;IAC7C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,mBAAmB,CACvB,GAAG,EACH,GAAwB,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;QACtC,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;QAC1F,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;QAChF,YAAY,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC5E,IAAI,OAAO;YACT,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;QAC3C,CAAC;KACF,CAAC,EACF,EAAE,CACH,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,IAAI,KAAK,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAuB,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAElC,gCAAgC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,IAAI,KAAK,GAAG,SAAS,CAAC;IAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,SAAS,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,YAAY,CAAC,CAAC;IACjG,MAAM,aAAa,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,MAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC;IAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1F,MAAM,UAAU,GACd,QAAQ;QACN,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,aAAa;YACb,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,QAAQ,CAAC,gBAAgB;gBAC3B,CAAC,CAAC,OAAO;oBACP,CAAC,CAAC,MAAM;wBACN,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,QAAQ,CAAC,aAAa;oBACxB,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC;wBAC7E,CAAC,CAAC,QAAQ,CAAC,WAAW;wBACtB,CAAC,CAAC,SAAS;4BACT,CAAC,CAAC,QAAQ,CAAC,eAAe;4BAC1B,CAAC,CAAC,SAAS;gCACT,CAAC,CAAC,QAAQ,CAAC,eAAe;gCAC1B,CAAC,CAAC,CAAC,WAAW;oCACZ,CAAC,CAAC,kBAAkB;oCACpB,CAAC,CAAC,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,WAAW,IAAI,WAAW,KAAK,OAAO,CAAC;IAEvM,yFAAyF;IACzF,0EAA0E;IAC1E,IAAI,SAAS,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;QAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACtF,MAAM,QAAQ,GACZ,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,cAAc,KAAK,SAAS;YACrD,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,cAAc,KAAK,SAAS;gBACrD,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,IAAI;QACV,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAClH,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,CAAC,CACxC,CAAC;IACF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAChI,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,CAAC,CACxC,CAAC;IACF,MAAM,WAAW,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IAClG,MAAM,SAAS,GAAG,QAAQ,KAAK,GAAG,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC;IACrF,MAAM,WAAW,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,SAAS,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,WAAW,GAAG,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,kBAAkB,CAAC;IAE/F,qCAAqC;IACrC,MAAM,YAAY,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,YAAY,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC3D,0FAA0F;IAC1F,sEAAsE;IACtE,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,IAAI,YAAY,KAAK,gBAAgB,CAAC,OAAO;YAAE,OAAO;QACtD,gBAAgB,CAAC,OAAO,GAAG,YAAY,CAAC;QACxC,cAAc,EAAE,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,IAAI,YAAY,KAAK,gBAAgB,CAAC,OAAO;YAAE,OAAO;QACtD,gBAAgB,CAAC,OAAO,GAAG,YAAY,CAAC;QACxC,cAAc,EAAE,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,IAAI,SAAS,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5C,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,CAAC,IAAyB,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QACpG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC;IAEF,qCAAqC;IACrC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAE,GAA8B,EAAE,EAAE;QAC9E,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC;YAC9E,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1F,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,cAAc,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAE,EAAE;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7D,IAAI,iBAAiB,EAAE,CAAC;gBACtB,yFAAyF;gBACzF,qFAAqF;gBACrF,oEAAoE;gBACpE,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC;oBAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;oBAC9D,iBAAwD,CAAC,MAAM,CAAC,CAAC;YACzE,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,QAAQ;YAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;;YACxG,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAA+C,EAAW,EAAE;QACjF,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3G,MAAM,YAAY,GAAG,WAAW;QAC9B,CAAC,CAAC;YACE,WAAW,EAAE,CAAC,KAAsC,EAAE,EAAE;gBACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;oBAAE,OAAO;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YACD,UAAU,EAAE,CAAC,KAAsC,EAAE,EAAE;gBACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;oBAAE,OAAO;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;YACzC,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBAChB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACvD,IAAI,SAAS,CAAC,OAAO,KAAK,CAAC;oBAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,EAAE,CAAC,KAAsC,EAAE,EAAE;gBACjD,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;gBACtB,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;oBAAE,OAAO;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,WAAW,GAAG,CAAC,KAAgD,EAAE,EAAE;QACvE,IAAI,CAAC,YAAY,IAAI,KAAK;YAAE,OAAO;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,KAAK,CAAC,cAAc,EAAE,CAAC;QAC9E,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,oFAAoF;IACpF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAkB,YAAY,CAAC,CAAC;IAChG,MAAM,gBAAgB,GAAG,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC;IACxE,IAAI,gBAAgB,IAAI,iBAAiB,KAAK,YAAY;QAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC/F,uFAAuF;IACvF,IAAI,CAAC,gBAAgB,IAAI,iBAAiB,IAAI,IAAI,IAAI,OAAO;QAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE1F,iCAAiC;IACjC,IAAI,UAA8B,CAAC;IACnC,IAAI,UAAU,GAAqC,SAAS,CAAC;IAC7D,IAAI,KAAyD,CAAC;IAC9D,IAAI,MAAM,EAAE,CAAC;QACX,UAAU,GAAG,MAAM,CAAC;QACpB,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,UAAU,GAAG,aAAa,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,UAAU,GAAG,cAAc,CAAC;IAC9B,CAAC;SAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC;QACnC,UAAU,GAAG,QAAQ,CAAC;QACtB,IAAI,QAAQ;YAAE,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC;QACpC,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC9D,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACjC,UAAU,GAAG,QAAQ,CAAC;QACtB,IAAI,kBAAkB,IAAI,gBAAgB;YAAE,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,IAAI,gBAAiB,EAAE,CAAC;IACtI,CAAC;SAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACpC,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACnC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACnC,CAAC;IACD,MAAM,OAAO,GACX,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/J,MAAM,UAAU,GACd,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS;QAC1D,CAAC,CAAC;YACE,IAAI,EAAE,UAAmB;YACzB,eAAe,EAAE,QAAQ,KAAK,IAAI;YAClC,gGAAgG;YAChG,eAAe,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,QAAQ;YACtI,mBAAmB,EAAE,MAAe;YACpC,eAAe,EAAE,SAAkB;YACnC,uBAAuB,EAAE,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAChG;QACH,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,UAAU,GAAG,GAAG,MAAM,WAAW,CAAC;IAExC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,eACnC,UAAU,mBACL,QAAQ,IAAI,SAAS,kBACtB,aAAa,KAAK,SAAS,IAAI,SAAS,kBACxC,OAAO,IAAI,SAAS,mBACnB,QAAQ,IAAI,SAAS,aAEpC,cACE,SAAS,EAAC,iCAAiC,eAChC,gBAAgB,IAAI,SAAS,EACxC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;wBAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC5F,CAAC,YAED,cAAK,SAAS,EAAC,uCAAuC,EAAC,KAAK,EAAE,CAAC,gBAAgB,YAC5E,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,GAChD,GACF,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,cAAK,SAAS,EAAC,gCAAgC,YAAE,WAAW,GAAO,CACpE,CAAC,CAAC,CAAC,CACF,8BACE,eAAK,SAAS,EAAC,2BAA2B,aACvC,cAAc,KAAK,SAAS,IAAI,CAC/B,KAAC,WAAW,IACV,EAAE,EAAE,GAAG,MAAM,UAAU,EACvB,IAAI,EAAE,QAAQ,KAAK,GAAG,EACtB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,cAAc,EACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,QAAQ,GACd,CACH,EACA,cAAc,KAAK,SAAS,IAAI,CAC/B,KAAC,gBAAgB,IACf,EAAE,EAAE,GAAG,MAAM,UAAU,EACvB,IAAI,EAAE,QAAQ,KAAK,GAAG,EACtB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,cAAc,EACnC,QAAQ,EAAE,aAAa,EACvB,gBAAgB,EAAE,aAAa,EAC/B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,QAAQ,GACd,CACH,EACD,eAAK,SAAS,EAAC,0BAA0B,mBAAgB,QAAQ,IAAI,SAAS,KAAM,YAAY,aAC9F,KAAC,cAAc,IACb,SAAS,EAAC,gCAAgC,EAC1C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAC9B,QAAQ,EACN,kBAAkB,IAAI,iBAAiB;4CACrC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4CACtH,CAAC,CAAC,SAAS,EAEf,OAAO,EAAE,iBAAiB,GAC1B,EACF,KAAC,aAAa,IACZ,GAAG,EAAE,QAAQ,KACT,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACzC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,aAAa,EAC9B,cAAc,EAAE,cAAc,EAC9B,SAAS,EACP,SAAS;4CACT,CAAC,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAEpI,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,IAAI,aAAa,KAAK,SAAS,mBAClC,aAAa,KAAK,SAAS,IAAI,SAAS,gBAC3C,SAAS,sBACH,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACrD,WAAW,EAAE,aAAa,IAAI,WAAW,EACzC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,0BAA0B,GACpC,EACD,QAAQ,IAAI,CACX,cAAK,SAAS,EAAC,yBAAyB,iBAAa,MAAM,YACxD,QAAQ,CAAC,SAAS,GACf,CACP,EACD,eAAK,SAAS,EAAC,4BAA4B,aACzC,cAAK,SAAS,EAAC,0BAA0B,YAAE,YAAY,GAAO,EAC9D,eAAK,SAAS,EAAC,0BAA0B,cAAU,EAAE,aAClD,UAAU,EACX,KAAC,cAAc,IACb,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,UAAU,EACvB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EACjH,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,EAC/E,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,UAAU,GAC1B,IACE,IACF,IACF,IACF,EACN,eAAK,SAAS,EAAC,6BAA6B,eAAY,UAAU,aAChE,YAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAC,2BAA2B,EAAC,IAAI,EAAC,QAAQ,YACnE,UAAU,GACT,EACH,KAAK,IAAI,CACR,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YACrD,KAAK,CAAC,KAAK,GACL,CACV,EACA,QAAQ,EACR,OAAO,IAAI,CACV,eAAM,SAAS,EAAC,0BAA0B,eAAY,SAAS,IAAI,SAAS,YACzE,OAAO,GACH,CACR,IACG,IACL,CACJ,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,103 @@
1
+ import * as React from 'react';
2
+ import type { ComposerToken, TriggerChar, TriggerMatch } from '@wzrhine/agent-core';
3
+ /** Visual kind of a token in the mirror layer. */
4
+ export type ComposerTokenKind = 'file' | 'skill' | 'command';
5
+ export interface ComposerSelection {
6
+ start: number;
7
+ end: number;
8
+ }
9
+ /** Imperative handle of ComposerInput (also forwarded by Composer). */
10
+ export interface ComposerInputHandle {
11
+ focus: () => void;
12
+ /**
13
+ * Insert a token at `range` (default: the current selection), padded with spaces. Goes through
14
+ * the browser's editing commands when available so the insertion is part of native undo.
15
+ */
16
+ insertToken: (trigger: TriggerChar, name: string, range?: {
17
+ from: number;
18
+ to: number;
19
+ }) => void;
20
+ /** Replace `[from, to)` with plain text (used for folder drilling and clearing a query). */
21
+ replaceRange: (from: number, to: number, text: string) => void;
22
+ getSelection: () => ComposerSelection;
23
+ /** The underlying textarea (focus management, measurement). */
24
+ element: HTMLTextAreaElement | null;
25
+ }
26
+ type NativeTextareaProps = Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'defaultValue' | 'onChange' | 'onSubmit' | 'children'>;
27
+ export type ComposerInputProps = NativeTextareaProps & {
28
+ value?: string;
29
+ defaultValue?: string;
30
+ /** Every edit (typing, IME, paste, cut, token insert / delete). `caret` is the new selection end. */
31
+ onValueChange?: (value: string, caret: number) => void;
32
+ /** Enter (or Mod+Enter with `submitOn="mod-enter"`) outside IME composition. Without it Enter inserts a newline. */
33
+ onSubmit?: () => void;
34
+ submitOn?: 'enter' | 'mod-enter';
35
+ /**
36
+ * Called for every key outside IME composition, before token deletion and submit. Return `true`
37
+ * when the key was consumed (menu navigation): the default action is prevented.
38
+ */
39
+ onMenuKey?: (event: React.KeyboardEvent<HTMLTextAreaElement>) => boolean;
40
+ /** Active `@` / `/` trigger before the caret; `null` when none. Not called during IME composition. */
41
+ onTriggerChange?: (match: TriggerMatch | null) => void;
42
+ /** Triggers to detect (default both). */
43
+ triggers?: readonly TriggerChar[];
44
+ slash?: 'line-start' | 'word-start';
45
+ /** A token disappeared from the text through a user edit (whole-token delete, cut, overwrite). */
46
+ onTokenRemoved?: (token: ComposerToken) => void;
47
+ /** Mirror colour per token (default: `@` → file, `/` → command). */
48
+ tokenKind?: (token: ComposerToken) => ComposerTokenKind;
49
+ /** Screen-reader hint linked via aria-describedby; `false` removes it. */
50
+ hint?: React.ReactNode | false;
51
+ /** Class on the wrapper. */
52
+ className?: string;
53
+ /** Class on the textarea. */
54
+ inputClassName?: string;
55
+ };
56
+ /**
57
+ * Token-mirror textarea (ADR-0011 §8). A real `<textarea>` sits on top with a transparent
58
+ * background and owns typing, IME, selection, undo and accessibility; an `aria-hidden` mirror
59
+ * underneath renders the same value with identical typography, where tokens
60
+ * (`U+2068 trigger name U+2069`) get a tinted background drawn only with background and
61
+ * box-shadow, so glyph positions match the textarea exactly.
62
+ *
63
+ * - Height follows the mirror content, clamped by `--rl-agent-composer-min / -max` (CSS min / max
64
+ * height); width changes are tracked with ResizeObserver when available.
65
+ * - The caret never rests inside a token: arrow keys jump across it, clicks snap to the nearer edge.
66
+ * - Backspace / Delete next to a token remove it whole (native `delete` command → part of undo).
67
+ * - IME: composition is tracked with `compositionstart/end`, `nativeEvent.isComposing` and
68
+ * keyCode 229. While composing nothing is submitted, menu keys are not handled and trigger
69
+ * detection waits for `compositionend`.
70
+ *
71
+ * Motion: none (height changes are immediate, measured, never animated).
72
+ */
73
+ export declare const ComposerInput: React.ForwardRefExoticComponent<NativeTextareaProps & {
74
+ value?: string;
75
+ defaultValue?: string;
76
+ /** Every edit (typing, IME, paste, cut, token insert / delete). `caret` is the new selection end. */
77
+ onValueChange?: (value: string, caret: number) => void;
78
+ /** Enter (or Mod+Enter with `submitOn="mod-enter"`) outside IME composition. Without it Enter inserts a newline. */
79
+ onSubmit?: () => void;
80
+ submitOn?: "enter" | "mod-enter";
81
+ /**
82
+ * Called for every key outside IME composition, before token deletion and submit. Return `true`
83
+ * when the key was consumed (menu navigation): the default action is prevented.
84
+ */
85
+ onMenuKey?: (event: React.KeyboardEvent<HTMLTextAreaElement>) => boolean;
86
+ /** Active `@` / `/` trigger before the caret; `null` when none. Not called during IME composition. */
87
+ onTriggerChange?: (match: TriggerMatch | null) => void;
88
+ /** Triggers to detect (default both). */
89
+ triggers?: readonly TriggerChar[];
90
+ slash?: "line-start" | "word-start";
91
+ /** A token disappeared from the text through a user edit (whole-token delete, cut, overwrite). */
92
+ onTokenRemoved?: (token: ComposerToken) => void;
93
+ /** Mirror colour per token (default: `@` → file, `/` → command). */
94
+ tokenKind?: (token: ComposerToken) => ComposerTokenKind;
95
+ /** Screen-reader hint linked via aria-describedby; `false` removes it. */
96
+ hint?: React.ReactNode | false;
97
+ /** Class on the wrapper. */
98
+ className?: string;
99
+ /** Class on the textarea. */
100
+ inputClassName?: string;
101
+ } & React.RefAttributes<ComposerInputHandle>>;
102
+ export {};
103
+ //# sourceMappingURL=ComposerInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerInput.d.ts","sourceRoot":"","sources":["../../../src/components/composer/ComposerInput.tsx"],"names":[],"mappings":"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"}