@wallarm-org/claude-design 0.0.0-stage → 4.9.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,1244 @@
1
+ The Wally assistant panel: a header, a scrolling message log, and a footer gutter for suggestions, a docked approval card and the input. `Chat` is layout only — it holds no messages or agent state; the app renders `UserMessage`, `AssistantMessage` and `ChatInput` into `ChatBody` and `ChatFooter` from its own data. Header actions are composed from plain ghost `Button`s and vertical `Separator`s, so each one keeps its own `aria-label` and analytics attributes. `background` picks the decorative mesh: `strong` for an empty chat, `subtle` (default) once a conversation is running, `none` to drop it. Host the panel in a right-hand `Drawer` about 480px wide; `ChatBody` exposes its scroll element through `ref` for stick-to-bottom.
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
+ | `background` | `"strong" \| "subtle"` | no | `subtle` | Decorative mesh behind the panel (Figma chat-bg 67:1254). `'strong'` is Main (12%, for an empty chat), `'subtle'` is Chat (5%, for a running conversation), `'none'` renders nothing. |
10
+ | `default-checked` | `boolean \| undefined` | no | — | |
11
+ | `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
12
+ | `auto-focus` | `boolean \| undefined` | no | — | |
13
+ | `id` | `string \| undefined` | no | — | |
14
+ | `tab-index` | `number \| undefined` | no | — | |
15
+ | `title` | `string \| undefined` | no | — | |
16
+ | `rel` | `string \| undefined` | no | — | |
17
+ | `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
18
+ | `data-testid` | `string \| undefined` | no | — | |
19
+
20
+ ## Sub-components
21
+
22
+ - `WallarmDS.ChatBody` — `ChatBodyProps` in the declaration bundle.
23
+ - `WallarmDS.ChatFooter` — `ChatFooterProps` in the declaration bundle.
24
+ - `WallarmDS.ChatGreeting` — `ChatGreetingProps` in the declaration bundle.
25
+ - `WallarmDS.ChatHeader` — `ChatHeaderProps` in the declaration bundle.
26
+ - `WallarmDS.ChatHeaderActions` — `ChatHeaderActionsProps` in the declaration bundle.
27
+ - `WallarmDS.ChatHeaderTitle` — `ChatHeaderTitleProps` in the declaration bundle.
28
+ - `WallarmDS.ChatSuggestion` — `ChatSuggestionProps` in the declaration bundle.
29
+ - `WallarmDS.ChatSuggestions` — `ChatSuggestionsProps` in the declaration bundle.
30
+ - `WallarmDS.ChatTrigger` — `ChatTriggerProps` in the declaration bundle.
31
+
32
+ ## Stories
33
+
34
+ ### HeaderDefault
35
+
36
+ Figma Default (2:42): Wally's 24 px glyph and the "Ask Wally" title with History, a More menu, a separator and Close.
37
+ Every action is a ghost neutral small `Button` with an `aria-label`.
38
+
39
+ Source: Chat/Chat.stories.tsx#HeaderDefault
40
+
41
+ ### HeaderWithThreadSelect
42
+
43
+ Figma Variant2 (44:1465): children of `ChatHeaderTitle` follow a "/" joint — here a ghost thread
44
+ `Select` — and a New chat action leads the toolbar.
45
+
46
+ Source: Chat/Chat.stories.tsx#HeaderWithThreadSelect
47
+
48
+ ### Greeting
49
+
50
+ The empty state (Figma 44:1464): Wally as its live 120 px character with a contact shadow, then a
51
+ heading, with Large suggestion pills centered under it, over the `strong` background. Wally says
52
+ Hello once, 250 ms after the empty chat comes into view; under reduced motion it stays still.
53
+
54
+ Source: Chat/Chat.stories.tsx#Greeting
55
+
56
+ ### Suggestions
57
+
58
+ Both placements: `footer` (Figma 91:1167) right-aligns Medium pills under a visible label,
59
+ `greeting` (Figma 44:1706) centers Large pills. The pill size follows the placement.
60
+
61
+ Source: Chat/Chat.stories.tsx#Suggestions
62
+
63
+ ### Backgrounds
64
+
65
+ The three `background` values side by side: `strong` (Figma Main, 12%), `subtle` (Figma Chat,
66
+ 5%, the default) and `none`. The mesh is decorative and sits under every part.
67
+
68
+ Source: Chat/Chat.stories.tsx#Backgrounds
69
+
70
+ ### Analytics
71
+
72
+ Analytics attributes go on the interactive parts only: `data-analytics-id` on a `ChatSuggestion`
73
+ lands on its `<button>`; header actions are plain DS `Button`s and carry their own. Keep them off
74
+ the `Chat` root — a click anywhere inside would resolve to it.
75
+
76
+ Source: Chat/Chat.stories.tsx#Analytics
77
+
78
+ ### Trigger
79
+
80
+ The app-header button that opens the panel (Figma 101:1034): the Wally mascot in a ghost small
81
+ `Button`, with an "Ask Wally" tooltip that doubles as its accessible name (`label`).
82
+
83
+ Source: Chat/Chat.stories.tsx#Trigger
84
+
85
+ ### TriggerWithDrawer
86
+
87
+ `ChatTrigger` under `DrawerTrigger asChild`: the drawer owns the open state and `aria-expanded`,
88
+ the tooltip keeps its anchor through the shared trigger id.
89
+
90
+ Source: Chat/Chat.stories.tsx#TriggerWithDrawer
91
+
92
+ ### EmptyPanel
93
+
94
+ The full empty panel: the greeting with Large suggestion pills over the `strong` background,
95
+ and the composer in the footer. A pill click would send its text as the first message.
96
+
97
+ Source: Chat/Chat.stories.tsx#EmptyPanel
98
+
99
+ ### Conversation
100
+
101
+ A finished turn: the user's question, then Wally's answer with collapsed reasoning, rendered
102
+ markdown and a visible actions row; follow-up suggestions sit above the composer.
103
+
104
+ Source: Chat/Chat.stories.tsx#Conversation
105
+
106
+ ### Streaming
107
+
108
+ A reply in flight: `ChatBody` and the message carry `aria-busy`, the running step shimmers,
109
+ and the submit is Stop. Stop (or Esc in the textarea) ends the run in this demo.
110
+
111
+ Source: Chat/Chat.stories.tsx#Streaming
112
+
113
+ ### ApprovalDocked
114
+
115
+ Human-in-the-loop: the pending `ApprovalCard` is docked in `ChatFooter` above the composer
116
+ while the run waits. Allow or Reject resolves it in place (so its live region and focus work)
117
+ and the answer continues.
118
+
119
+ Source: Chat/Chat.stories.tsx#ApprovalDocked
120
+
121
+ ### ApprovalResolved
122
+
123
+ After the decision the docked card collapses to a one-line status and the answer completes.
124
+
125
+ Source: Chat/Chat.stories.tsx#ApprovalResolved
126
+
127
+ ### Permissions
128
+
129
+ The per-conversation tool permissions sit inside the composer, between textarea and submit.
130
+
131
+ Source: Chat/Chat.stories.tsx#Permissions
132
+
133
+ ### InDrawer
134
+
135
+ The real host: `ChatTrigger` opens a 480px right-hand `Drawer` holding the conversation, and
136
+ Close is a `DrawerClose`. Esc in the textarea while running stops the reply instead of closing
137
+ the drawer; ChatInput handles that itself, so the host needs no `onEscapeKeyDown`.
138
+
139
+ Source: Chat/Chat.stories.tsx#InDrawer
140
+
141
+ ## Story sources
142
+
143
+ ### Chat/Chat.stories.tsx
144
+
145
+ ```tsx
146
+ import { type MouseEvent, useState } from 'react';
147
+ import type { Meta, StoryFn } from 'storybook-react-rsbuild';
148
+ import {
149
+ Brain,
150
+ Database,
151
+ Ellipsis,
152
+ History,
153
+ Plus,
154
+ Search,
155
+ ShieldBan,
156
+ ThumbsDown,
157
+ ThumbsUp,
158
+ X,
159
+ } from '../../icons';
160
+ import {
161
+ ApprovalCard,
162
+ ApprovalCardActions,
163
+ ApprovalCardContent,
164
+ type ApprovalCardStatus,
165
+ } from '../ApprovalCard';
166
+ import { AssistantMessage, AssistantMessageContent } from '../AssistantMessage';
167
+ import { Button } from '../Button';
168
+ import { ChainOfThought, ChainOfThoughtStep } from '../ChainOfThought';
169
+ import { ChatInput, ChatInputSubmit, ChatInputTextarea } from '../ChatInput';
170
+ import {
171
+ ChatPermissions,
172
+ ChatPermissionsContent,
173
+ ChatPermissionsItem,
174
+ type ChatPermissionsItemCheckedChangeDetails,
175
+ ChatPermissionsTrigger,
176
+ } from '../ChatPermissions';
177
+ import { InlineCodeSnippet } from '../CodeSnippet';
178
+ import { Copyable, CopyableIcon } from '../Copyable';
179
+ import { Drawer, DrawerClose, DrawerContent, DrawerTrigger } from '../Drawer';
180
+ import {
181
+ DropdownMenu,
182
+ DropdownMenuContent,
183
+ DropdownMenuItem,
184
+ DropdownMenuTrigger,
185
+ } from '../DropdownMenu';
186
+ import { MessageAction, MessageActions, MessageTimestamp } from '../MessageActions';
187
+ import {
188
+ createListCollection,
189
+ Select,
190
+ SelectButton,
191
+ SelectContent,
192
+ SelectOption,
193
+ SelectOptionIndicator,
194
+ SelectOptionText,
195
+ SelectPositioner,
196
+ } from '../Select';
197
+ import { Separator } from '../Separator';
198
+ import { HStack } from '../Stack';
199
+ import { UserMessage, UserMessageBubble } from '../UserMessage';
200
+ import {
201
+ Chat,
202
+ type ChatBackground,
203
+ ChatBody,
204
+ ChatFooter,
205
+ ChatGreeting,
206
+ ChatHeader,
207
+ ChatHeaderActions,
208
+ ChatHeaderTitle,
209
+ ChatSuggestion,
210
+ ChatSuggestions,
211
+ ChatTrigger,
212
+ } from '.';
213
+
214
+ const DESCRIPTION = [
215
+ 'The Wally assistant panel: a header, a scrolling message log, and a footer gutter for suggestions, a docked approval card and the input.',
216
+ '`Chat` is layout only — it holds no messages or agent state; the app renders `UserMessage`, `AssistantMessage` and `ChatInput` into `ChatBody` and `ChatFooter` from its own data.',
217
+ 'Header actions are composed from plain ghost `Button`s and vertical `Separator`s, so each one keeps its own `aria-label` and analytics attributes.',
218
+ '`background` picks the decorative mesh: `strong` for an empty chat, `subtle` (default) once a conversation is running, `none` to drop it.',
219
+ 'Host the panel in a right-hand `Drawer` about 480px wide; `ChatBody` exposes its scroll element through `ref` for stick-to-bottom.',
220
+ ].join(' ');
221
+
222
+ const meta = {
223
+ title: 'AI/Chat',
224
+ component: Chat,
225
+ subcomponents: {
226
+ ChatHeader,
227
+ ChatHeaderTitle,
228
+ ChatHeaderActions,
229
+ ChatBody,
230
+ ChatFooter,
231
+ ChatGreeting,
232
+ ChatSuggestions,
233
+ ChatSuggestion,
234
+ ChatTrigger,
235
+ },
236
+ parameters: {
237
+ layout: 'centered',
238
+ docs: { description: { component: DESCRIPTION } },
239
+ },
240
+ } satisfies Meta<typeof Chat>;
241
+
242
+ export default meta;
243
+
244
+ const SUGGESTIONS = [
245
+ 'Why was this request blocked?',
246
+ 'Show top attacked endpoints',
247
+ 'Explain this rule',
248
+ ];
249
+
250
+ const threads = createListCollection({
251
+ items: [
252
+ { value: 'blocked', label: 'Blocked requests on /login' },
253
+ { value: 'rules', label: 'Rule tuning for API v2' },
254
+ ],
255
+ });
256
+
257
+ /**
258
+ * Figma Default (2:42): Wally's 24 px glyph and the "Ask Wally" title with History, a More menu, a separator and Close.
259
+ * Every action is a ghost neutral small `Button` with an `aria-label`.
260
+ */
261
+ export const HeaderDefault: StoryFn<typeof meta> = () => (
262
+ <div className='h-200 w-480'>
263
+ <Chat data-testid='chat' background='none'>
264
+ <ChatHeader>
265
+ <ChatHeaderTitle />
266
+ <ChatHeaderActions>
267
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
268
+ <History />
269
+ </Button>
270
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
271
+ <DropdownMenuTrigger asChild>
272
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
273
+ <Ellipsis />
274
+ </Button>
275
+ </DropdownMenuTrigger>
276
+ <DropdownMenuContent>
277
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
278
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
279
+ </DropdownMenuContent>
280
+ </DropdownMenu>
281
+ <Separator orientation='vertical' />
282
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
283
+ <X />
284
+ </Button>
285
+ </ChatHeaderActions>
286
+ </ChatHeader>
287
+ <ChatBody />
288
+ </Chat>
289
+ </div>
290
+ );
291
+
292
+ /**
293
+ * Figma Variant2 (44:1465): children of `ChatHeaderTitle` follow a "/" joint — here a ghost thread
294
+ * `Select` — and a New chat action leads the toolbar.
295
+ */
296
+ export const HeaderWithThreadSelect: StoryFn<typeof meta> = () => (
297
+ <div className='h-200 w-480'>
298
+ <Chat data-testid='chat' background='none'>
299
+ <ChatHeader>
300
+ <ChatHeaderTitle>
301
+ <Select collection={threads} defaultValue={['blocked']}>
302
+ <SelectButton variant='ghost' size='small' placeholder='New chat' />
303
+ <SelectPositioner>
304
+ <SelectContent>
305
+ {threads.items.map(item => (
306
+ <SelectOption key={item.value} item={item}>
307
+ <SelectOptionText>{item.label}</SelectOptionText>
308
+ <SelectOptionIndicator />
309
+ </SelectOption>
310
+ ))}
311
+ </SelectContent>
312
+ </SelectPositioner>
313
+ </Select>
314
+ </ChatHeaderTitle>
315
+ <ChatHeaderActions>
316
+ <Button variant='ghost' color='neutral' size='small' aria-label='New chat'>
317
+ <Plus />
318
+ </Button>
319
+ <Separator orientation='vertical' />
320
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
321
+ <History />
322
+ </Button>
323
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
324
+ <DropdownMenuTrigger asChild>
325
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
326
+ <Ellipsis />
327
+ </Button>
328
+ </DropdownMenuTrigger>
329
+ <DropdownMenuContent>
330
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
331
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
332
+ </DropdownMenuContent>
333
+ </DropdownMenu>
334
+ <Separator orientation='vertical' />
335
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
336
+ <X />
337
+ </Button>
338
+ </ChatHeaderActions>
339
+ </ChatHeader>
340
+ <ChatBody />
341
+ </Chat>
342
+ </div>
343
+ );
344
+
345
+ /**
346
+ * The empty state (Figma 44:1464): Wally as its live 120 px character with a contact shadow, then a
347
+ * heading, with Large suggestion pills centered under it, over the `strong` background. Wally says
348
+ * Hello once, 250 ms after the empty chat comes into view; under reduced motion it stays still.
349
+ */
350
+ export const Greeting: StoryFn<typeof meta> = () => {
351
+ const [picked, setPicked] = useState<string>();
352
+ const handleSuggestionClick = (event: MouseEvent<HTMLButtonElement>) =>
353
+ setPicked(event.currentTarget.value);
354
+
355
+ return (
356
+ <div className='h-640 w-480'>
357
+ <Chat data-testid='chat' background='strong'>
358
+ <ChatHeader>
359
+ <ChatHeaderTitle />
360
+ <ChatHeaderActions>
361
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
362
+ <History />
363
+ </Button>
364
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
365
+ <DropdownMenuTrigger asChild>
366
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
367
+ <Ellipsis />
368
+ </Button>
369
+ </DropdownMenuTrigger>
370
+ <DropdownMenuContent>
371
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
372
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
373
+ </DropdownMenuContent>
374
+ </DropdownMenu>
375
+ <Separator orientation='vertical' />
376
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
377
+ <X />
378
+ </Button>
379
+ </ChatHeaderActions>
380
+ </ChatHeader>
381
+ <ChatBody>
382
+ <ChatGreeting title='How can I help you today?'>
383
+ <ChatSuggestions placement='greeting' label='Suggestions'>
384
+ {SUGGESTIONS.map((text, index) => (
385
+ <ChatSuggestion
386
+ key={text}
387
+ data-testid={`chat--suggestion-${index}`}
388
+ value={text}
389
+ onClick={handleSuggestionClick}
390
+ >
391
+ {text}
392
+ </ChatSuggestion>
393
+ ))}
394
+ </ChatSuggestions>
395
+ </ChatGreeting>
396
+ {picked && (
397
+ <p data-testid='chat--picked' className='sr-only'>
398
+ Picked: {picked}
399
+ </p>
400
+ )}
401
+ </ChatBody>
402
+ </Chat>
403
+ </div>
404
+ );
405
+ };
406
+
407
+ /**
408
+ * Both placements: `footer` (Figma 91:1167) right-aligns Medium pills under a visible label,
409
+ * `greeting` (Figma 44:1706) centers Large pills. The pill size follows the placement.
410
+ */
411
+ export const Suggestions: StoryFn<typeof meta> = () => (
412
+ <HStack gap={24} align='start'>
413
+ <div className='h-640 w-480'>
414
+ <Chat data-testid='chat-footer-suggestions'>
415
+ <ChatHeader>
416
+ <ChatHeaderTitle />
417
+ <ChatHeaderActions>
418
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
419
+ <History />
420
+ </Button>
421
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
422
+ <DropdownMenuTrigger asChild>
423
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
424
+ <Ellipsis />
425
+ </Button>
426
+ </DropdownMenuTrigger>
427
+ <DropdownMenuContent>
428
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
429
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
430
+ </DropdownMenuContent>
431
+ </DropdownMenu>
432
+ <Separator orientation='vertical' />
433
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
434
+ <X />
435
+ </Button>
436
+ </ChatHeaderActions>
437
+ </ChatHeader>
438
+ <ChatBody />
439
+ <ChatFooter>
440
+ <ChatSuggestions label='Suggestions'>
441
+ {SUGGESTIONS.map((text, index) => (
442
+ <ChatSuggestion
443
+ key={text}
444
+ data-testid={`chat-footer-suggestions--suggestion-${index}`}
445
+ >
446
+ {text}
447
+ </ChatSuggestion>
448
+ ))}
449
+ </ChatSuggestions>
450
+ </ChatFooter>
451
+ </Chat>
452
+ </div>
453
+ <div className='h-640 w-480'>
454
+ <Chat data-testid='chat-greeting-suggestions' background='strong'>
455
+ <ChatHeader>
456
+ <ChatHeaderTitle />
457
+ <ChatHeaderActions>
458
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
459
+ <History />
460
+ </Button>
461
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
462
+ <DropdownMenuTrigger asChild>
463
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
464
+ <Ellipsis />
465
+ </Button>
466
+ </DropdownMenuTrigger>
467
+ <DropdownMenuContent>
468
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
469
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
470
+ </DropdownMenuContent>
471
+ </DropdownMenu>
472
+ <Separator orientation='vertical' />
473
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
474
+ <X />
475
+ </Button>
476
+ </ChatHeaderActions>
477
+ </ChatHeader>
478
+ <ChatBody>
479
+ <ChatGreeting title='How can I help you today?'>
480
+ <ChatSuggestions placement='greeting'>
481
+ {SUGGESTIONS.map((text, index) => (
482
+ <ChatSuggestion
483
+ key={text}
484
+ data-testid={`chat-greeting-suggestions--suggestion-${index}`}
485
+ >
486
+ {text}
487
+ </ChatSuggestion>
488
+ ))}
489
+ </ChatSuggestions>
490
+ </ChatGreeting>
491
+ </ChatBody>
492
+ </Chat>
493
+ </div>
494
+ </HStack>
495
+ );
496
+
497
+ const BACKGROUNDS: ChatBackground[] = ['strong', 'subtle', 'none'];
498
+
499
+ /**
500
+ * The three `background` values side by side: `strong` (Figma Main, 12%), `subtle` (Figma Chat,
501
+ * 5%, the default) and `none`. The mesh is decorative and sits under every part.
502
+ */
503
+ export const Backgrounds: StoryFn<typeof meta> = () => (
504
+ <HStack gap={24} align='start'>
505
+ {BACKGROUNDS.map(background => (
506
+ <div key={background} className='h-640 w-360'>
507
+ <Chat data-testid={`chat-${background}`} background={background}>
508
+ <ChatHeader>
509
+ <ChatHeaderTitle />
510
+ <ChatHeaderActions>
511
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
512
+ <History />
513
+ </Button>
514
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
515
+ <DropdownMenuTrigger asChild>
516
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
517
+ <Ellipsis />
518
+ </Button>
519
+ </DropdownMenuTrigger>
520
+ <DropdownMenuContent>
521
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
522
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
523
+ </DropdownMenuContent>
524
+ </DropdownMenu>
525
+ <Separator orientation='vertical' />
526
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
527
+ <X />
528
+ </Button>
529
+ </ChatHeaderActions>
530
+ </ChatHeader>
531
+ <ChatBody />
532
+ </Chat>
533
+ </div>
534
+ ))}
535
+ </HStack>
536
+ );
537
+
538
+ /**
539
+ * Analytics attributes go on the interactive parts only: `data-analytics-id` on a `ChatSuggestion`
540
+ * lands on its `<button>`; header actions are plain DS `Button`s and carry their own. Keep them off
541
+ * the `Chat` root — a click anywhere inside would resolve to it.
542
+ */
543
+ export const Analytics: StoryFn<typeof meta> = () => (
544
+ <div className='h-640 w-480'>
545
+ <Chat data-testid='chat'>
546
+ <ChatHeader>
547
+ <ChatHeaderTitle />
548
+ <ChatHeaderActions>
549
+ <Button
550
+ variant='ghost'
551
+ color='neutral'
552
+ size='small'
553
+ aria-label='Close chat'
554
+ data-analytics-id='AI_CHAT_CLOSE'
555
+ >
556
+ <X />
557
+ </Button>
558
+ </ChatHeaderActions>
559
+ </ChatHeader>
560
+ <ChatBody />
561
+ <ChatFooter>
562
+ <ChatSuggestions label='Suggestions'>
563
+ {SUGGESTIONS.map((text, index) => (
564
+ <ChatSuggestion
565
+ key={text}
566
+ data-testid={`chat--suggestion-${index}`}
567
+ data-analytics-id='AI_CHAT_SUGGESTION'
568
+ data-analytics-props={JSON.stringify({ index })}
569
+ >
570
+ {text}
571
+ </ChatSuggestion>
572
+ ))}
573
+ </ChatSuggestions>
574
+ </ChatFooter>
575
+ </Chat>
576
+ </div>
577
+ );
578
+
579
+ /**
580
+ * The app-header button that opens the panel (Figma 101:1034): the Wally mascot in a ghost small
581
+ * `Button`, with an "Ask Wally" tooltip that doubles as its accessible name (`label`).
582
+ */
583
+ export const Trigger: StoryFn<typeof meta> = () => <ChatTrigger data-testid='chat-trigger' />;
584
+
585
+ /**
586
+ * `ChatTrigger` under `DrawerTrigger asChild`: the drawer owns the open state and `aria-expanded`,
587
+ * the tooltip keeps its anchor through the shared trigger id.
588
+ */
589
+ export const TriggerWithDrawer: StoryFn<typeof meta> = () => (
590
+ <Drawer width={480}>
591
+ <DrawerTrigger asChild>
592
+ <ChatTrigger data-testid='chat-trigger' data-analytics-id='AI_CHAT_OPEN' />
593
+ </DrawerTrigger>
594
+ <DrawerContent>
595
+ <Chat data-testid='chat'>
596
+ <ChatHeader>
597
+ <ChatHeaderTitle />
598
+ <ChatHeaderActions>
599
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
600
+ <History />
601
+ </Button>
602
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
603
+ <DropdownMenuTrigger asChild>
604
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
605
+ <Ellipsis />
606
+ </Button>
607
+ </DropdownMenuTrigger>
608
+ <DropdownMenuContent>
609
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
610
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
611
+ </DropdownMenuContent>
612
+ </DropdownMenu>
613
+ <Separator orientation='vertical' />
614
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
615
+ <X />
616
+ </Button>
617
+ </ChatHeaderActions>
618
+ </ChatHeader>
619
+ <ChatBody />
620
+ </Chat>
621
+ </DrawerContent>
622
+ </Drawer>
623
+ );
624
+
625
+ // ---------------------------------------------------------------------------
626
+ // Composed panels: every AI part together, with mock data only.
627
+ // ---------------------------------------------------------------------------
628
+
629
+ const QUESTION = 'Why were requests to /api/login blocked last night?';
630
+ const ANSWER_TEXT =
631
+ 'Wallarm blocked 1,204 SQL injection attempts against /api/login, mostly from 203.0.113.0/24.';
632
+ const FOLLOW_UPS = ['Deny 203.0.113.0/24', 'Show the matched rule'];
633
+
634
+ /**
635
+ * The full empty panel: the greeting with Large suggestion pills over the `strong` background,
636
+ * and the composer in the footer. A pill click would send its text as the first message.
637
+ */
638
+ export const EmptyPanel: StoryFn<typeof meta> = () => {
639
+ const [value, setValue] = useState('');
640
+ const handleSubmit = () => setValue('');
641
+
642
+ return (
643
+ <div className='h-640 w-480'>
644
+ <Chat data-testid='chat' background='strong'>
645
+ <ChatHeader>
646
+ <ChatHeaderTitle />
647
+ <ChatHeaderActions>
648
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
649
+ <History />
650
+ </Button>
651
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
652
+ <DropdownMenuTrigger asChild>
653
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
654
+ <Ellipsis />
655
+ </Button>
656
+ </DropdownMenuTrigger>
657
+ <DropdownMenuContent>
658
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
659
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
660
+ </DropdownMenuContent>
661
+ </DropdownMenu>
662
+ <Separator orientation='vertical' />
663
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
664
+ <X />
665
+ </Button>
666
+ </ChatHeaderActions>
667
+ </ChatHeader>
668
+ <ChatBody>
669
+ <ChatGreeting title='How can I help you today?'>
670
+ <ChatSuggestions placement='greeting' label='Suggestions'>
671
+ {SUGGESTIONS.map((text, index) => (
672
+ <ChatSuggestion key={text} data-testid={`chat--suggestion-${index}`}>
673
+ {text}
674
+ </ChatSuggestion>
675
+ ))}
676
+ </ChatSuggestions>
677
+ </ChatGreeting>
678
+ </ChatBody>
679
+ <ChatFooter>
680
+ <ChatInput value={value} onValueChange={setValue} onSubmit={handleSubmit}>
681
+ <ChatInputTextarea />
682
+ <ChatInputSubmit />
683
+ </ChatInput>
684
+ </ChatFooter>
685
+ </Chat>
686
+ </div>
687
+ );
688
+ };
689
+
690
+ /**
691
+ * A finished turn: the user's question, then Wally's answer with collapsed reasoning, rendered
692
+ * markdown and a visible actions row; follow-up suggestions sit above the composer.
693
+ */
694
+ export const Conversation: StoryFn<typeof meta> = () => {
695
+ const [value, setValue] = useState('');
696
+ const handleSubmit = () => setValue('');
697
+
698
+ return (
699
+ <div className='h-640 w-480'>
700
+ <Chat data-testid='chat'>
701
+ <ChatHeader>
702
+ <ChatHeaderTitle />
703
+ <ChatHeaderActions>
704
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
705
+ <History />
706
+ </Button>
707
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
708
+ <DropdownMenuTrigger asChild>
709
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
710
+ <Ellipsis />
711
+ </Button>
712
+ </DropdownMenuTrigger>
713
+ <DropdownMenuContent>
714
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
715
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
716
+ </DropdownMenuContent>
717
+ </DropdownMenu>
718
+ <Separator orientation='vertical' />
719
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
720
+ <X />
721
+ </Button>
722
+ </ChatHeaderActions>
723
+ </ChatHeader>
724
+ <ChatBody>
725
+ <UserMessage data-testid='chat--user-message-0'>
726
+ <UserMessageBubble>{QUESTION}</UserMessageBubble>
727
+ <MessageActions>
728
+ <MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
729
+ <Copyable text={QUESTION}>
730
+ <MessageAction aria-label='Copy'>
731
+ <CopyableIcon />
732
+ </MessageAction>
733
+ </Copyable>
734
+ </MessageActions>
735
+ </UserMessage>
736
+ <AssistantMessage data-testid='chat--assistant-message-0'>
737
+ <ChainOfThought>
738
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
739
+ <p>
740
+ Look up blocked requests to /api/login for last night, then group them by source.
741
+ </p>
742
+ </ChainOfThoughtStep>
743
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
744
+ <ChainOfThoughtStep
745
+ icon={<Database />}
746
+ label='Queried attack events'
747
+ metric='1,204'
748
+ />
749
+ </ChainOfThought>
750
+ <AssistantMessageContent>
751
+ <h3>SQL injection on the login endpoint</h3>
752
+ <p>
753
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
754
+ <InlineCodeSnippet code='/api/login' size='sm' />.
755
+ </p>
756
+ <ul>
757
+ <li>
758
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
759
+ </li>
760
+ <li>The peak was at 03:00 UTC.</li>
761
+ <li>No request reached the application.</li>
762
+ </ul>
763
+ </AssistantMessageContent>
764
+ <MessageActions visible>
765
+ <Copyable text={ANSWER_TEXT}>
766
+ <MessageAction aria-label='Copy' data-testid='chat--answer-copy'>
767
+ <CopyableIcon />
768
+ </MessageAction>
769
+ </Copyable>
770
+ <MessageAction aria-label='Good response'>
771
+ <ThumbsUp />
772
+ </MessageAction>
773
+ <MessageAction aria-label='Bad response'>
774
+ <ThumbsDown />
775
+ </MessageAction>
776
+ <MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
777
+ </MessageActions>
778
+ </AssistantMessage>
779
+ </ChatBody>
780
+ <ChatFooter>
781
+ <ChatSuggestions label='Suggestions'>
782
+ {FOLLOW_UPS.map((text, index) => (
783
+ <ChatSuggestion key={text} data-testid={`chat--suggestion-${index}`}>
784
+ {text}
785
+ </ChatSuggestion>
786
+ ))}
787
+ </ChatSuggestions>
788
+ <ChatInput value={value} onValueChange={setValue} onSubmit={handleSubmit}>
789
+ <ChatInputTextarea />
790
+ <ChatInputSubmit />
791
+ </ChatInput>
792
+ </ChatFooter>
793
+ </Chat>
794
+ </div>
795
+ );
796
+ };
797
+
798
+ /**
799
+ * A reply in flight: `ChatBody` and the message carry `aria-busy`, the running step shimmers,
800
+ * and the submit is Stop. Stop (or Esc in the textarea) ends the run in this demo.
801
+ */
802
+ export const Streaming: StoryFn<typeof meta> = () => {
803
+ const [value, setValue] = useState('');
804
+ const [isRunning, setIsRunning] = useState(true);
805
+ const handleSubmit = () => setValue('');
806
+ const handleStop = () => setIsRunning(false);
807
+
808
+ return (
809
+ <div className='h-640 w-480'>
810
+ <Chat data-testid='chat'>
811
+ <ChatHeader>
812
+ <ChatHeaderTitle />
813
+ <ChatHeaderActions>
814
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
815
+ <History />
816
+ </Button>
817
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
818
+ <DropdownMenuTrigger asChild>
819
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
820
+ <Ellipsis />
821
+ </Button>
822
+ </DropdownMenuTrigger>
823
+ <DropdownMenuContent>
824
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
825
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
826
+ </DropdownMenuContent>
827
+ </DropdownMenu>
828
+ <Separator orientation='vertical' />
829
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
830
+ <X />
831
+ </Button>
832
+ </ChatHeaderActions>
833
+ </ChatHeader>
834
+ <ChatBody aria-busy={isRunning}>
835
+ <UserMessage data-testid='chat--user-message-0'>
836
+ <UserMessageBubble>{QUESTION}</UserMessageBubble>
837
+ <MessageActions>
838
+ <MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
839
+ <Copyable text={QUESTION}>
840
+ <MessageAction aria-label='Copy'>
841
+ <CopyableIcon />
842
+ </MessageAction>
843
+ </Copyable>
844
+ </MessageActions>
845
+ </UserMessage>
846
+ <AssistantMessage data-testid='chat--assistant-message-0' aria-busy={isRunning}>
847
+ <ChainOfThought>
848
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
849
+ <ChainOfThoughtStep
850
+ icon={<Database />}
851
+ label={isRunning ? 'Querying attack events...' : 'Stopped'}
852
+ status={isRunning ? 'running' : 'done'}
853
+ />
854
+ </ChainOfThought>
855
+ <AssistantMessageContent>
856
+ <p>Wallarm blocked 1,204 SQL injection attempts, almost all against</p>
857
+ </AssistantMessageContent>
858
+ </AssistantMessage>
859
+ </ChatBody>
860
+ <ChatFooter>
861
+ <ChatInput
862
+ value={value}
863
+ onValueChange={setValue}
864
+ onSubmit={handleSubmit}
865
+ isRunning={isRunning}
866
+ onStop={handleStop}
867
+ >
868
+ <ChatInputTextarea />
869
+ <ChatInputSubmit />
870
+ </ChatInput>
871
+ </ChatFooter>
872
+ </Chat>
873
+ </div>
874
+ );
875
+ };
876
+
877
+ /**
878
+ * Human-in-the-loop: the pending `ApprovalCard` is docked in `ChatFooter` above the composer
879
+ * while the run waits. Allow or Reject resolves it in place (so its live region and focus work)
880
+ * and the answer continues.
881
+ */
882
+ export const ApprovalDocked: StoryFn<typeof meta> = () => {
883
+ const [value, setValue] = useState('');
884
+ const [status, setStatus] = useState<ApprovalCardStatus>('pending');
885
+ const pending = status === 'pending';
886
+ const handleSubmit = () => setValue('');
887
+ const handleApprove = () => setStatus('approved');
888
+ const handleReject = () => setStatus('rejected');
889
+
890
+ return (
891
+ <div className='h-640 w-480'>
892
+ <Chat data-testid='chat'>
893
+ <ChatHeader>
894
+ <ChatHeaderTitle />
895
+ <ChatHeaderActions>
896
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
897
+ <History />
898
+ </Button>
899
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
900
+ <DropdownMenuTrigger asChild>
901
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
902
+ <Ellipsis />
903
+ </Button>
904
+ </DropdownMenuTrigger>
905
+ <DropdownMenuContent>
906
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
907
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
908
+ </DropdownMenuContent>
909
+ </DropdownMenu>
910
+ <Separator orientation='vertical' />
911
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
912
+ <X />
913
+ </Button>
914
+ </ChatHeaderActions>
915
+ </ChatHeader>
916
+ <ChatBody aria-busy={pending}>
917
+ <UserMessage data-testid='chat--user-message-0'>
918
+ <UserMessageBubble>{QUESTION}</UserMessageBubble>
919
+ <MessageActions>
920
+ <MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
921
+ <Copyable text={QUESTION}>
922
+ <MessageAction aria-label='Copy'>
923
+ <CopyableIcon />
924
+ </MessageAction>
925
+ </Copyable>
926
+ </MessageActions>
927
+ </UserMessage>
928
+ <AssistantMessage data-testid='chat--assistant-message-0'>
929
+ <ChainOfThought>
930
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
931
+ <ChainOfThoughtStep
932
+ icon={<ShieldBan />}
933
+ label='Proposed a denylist entry'
934
+ status={pending ? 'running' : 'done'}
935
+ />
936
+ </ChainOfThought>
937
+ {!pending && (
938
+ <AssistantMessageContent>
939
+ <p>
940
+ {status === 'approved'
941
+ ? 'Done. 203.0.113.0/24 is now denied on all applications.'
942
+ : 'Okay, I left the denylist unchanged.'}
943
+ </p>
944
+ </AssistantMessageContent>
945
+ )}
946
+ </AssistantMessage>
947
+ </ChatBody>
948
+ <ChatFooter>
949
+ <ApprovalCard status={status}>
950
+ <ApprovalCardContent>
951
+ <p>
952
+ Add <InlineCodeSnippet code='203.0.113.0/24' size='sm' /> to the denylist on all
953
+ applications
954
+ </p>
955
+ </ApprovalCardContent>
956
+ <ApprovalCardActions>
957
+ <Button data-testid='chat--approve' onClick={handleApprove}>
958
+ Allow
959
+ </Button>
960
+ <Button
961
+ variant='secondary'
962
+ color='neutral'
963
+ data-testid='chat--reject'
964
+ onClick={handleReject}
965
+ >
966
+ Reject
967
+ </Button>
968
+ </ApprovalCardActions>
969
+ </ApprovalCard>
970
+ <ChatInput
971
+ value={value}
972
+ onValueChange={setValue}
973
+ onSubmit={handleSubmit}
974
+ isRunning={pending}
975
+ >
976
+ <ChatInputTextarea />
977
+ <ChatInputSubmit />
978
+ </ChatInput>
979
+ </ChatFooter>
980
+ </Chat>
981
+ </div>
982
+ );
983
+ };
984
+
985
+ /** After the decision the docked card collapses to a one-line status and the answer completes. */
986
+ export const ApprovalResolved: StoryFn<typeof meta> = () => {
987
+ const [value, setValue] = useState('');
988
+ const handleSubmit = () => setValue('');
989
+
990
+ return (
991
+ <div className='h-640 w-480'>
992
+ <Chat data-testid='chat'>
993
+ <ChatHeader>
994
+ <ChatHeaderTitle />
995
+ <ChatHeaderActions>
996
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
997
+ <History />
998
+ </Button>
999
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
1000
+ <DropdownMenuTrigger asChild>
1001
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
1002
+ <Ellipsis />
1003
+ </Button>
1004
+ </DropdownMenuTrigger>
1005
+ <DropdownMenuContent>
1006
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
1007
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
1008
+ </DropdownMenuContent>
1009
+ </DropdownMenu>
1010
+ <Separator orientation='vertical' />
1011
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
1012
+ <X />
1013
+ </Button>
1014
+ </ChatHeaderActions>
1015
+ </ChatHeader>
1016
+ <ChatBody>
1017
+ <UserMessage data-testid='chat--user-message-0'>
1018
+ <UserMessageBubble>{QUESTION}</UserMessageBubble>
1019
+ <MessageActions>
1020
+ <MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
1021
+ <Copyable text={QUESTION}>
1022
+ <MessageAction aria-label='Copy'>
1023
+ <CopyableIcon />
1024
+ </MessageAction>
1025
+ </Copyable>
1026
+ </MessageActions>
1027
+ </UserMessage>
1028
+ <AssistantMessage data-testid='chat--assistant-message-0'>
1029
+ <ChainOfThought>
1030
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
1031
+ <ChainOfThoughtStep icon={<ShieldBan />} label='Proposed a denylist entry' />
1032
+ </ChainOfThought>
1033
+ <AssistantMessageContent>
1034
+ <p>Done. 203.0.113.0/24 is now denied on all applications.</p>
1035
+ </AssistantMessageContent>
1036
+ </AssistantMessage>
1037
+ </ChatBody>
1038
+ <ChatFooter>
1039
+ {/* Content and actions render only while pending; a resolved card shows just its status row. */}
1040
+ <ApprovalCard status='approved' />
1041
+ <ChatInput value={value} onValueChange={setValue} onSubmit={handleSubmit}>
1042
+ <ChatInputTextarea />
1043
+ <ChatInputSubmit />
1044
+ </ChatInput>
1045
+ </ChatFooter>
1046
+ </Chat>
1047
+ </div>
1048
+ );
1049
+ };
1050
+
1051
+ const TOOLS = [
1052
+ { name: 'search_attacks', description: 'Search attacks and blocked requests' },
1053
+ { name: 'get_api_inventory', description: 'Read the discovered API endpoints' },
1054
+ { name: 'propose_add_to_denylist', description: 'Propose adding IPs to the denylist' },
1055
+ ];
1056
+
1057
+ /** The per-conversation tool permissions sit inside the composer, between textarea and submit. */
1058
+ export const Permissions: StoryFn<typeof meta> = () => {
1059
+ const [value, setValue] = useState('');
1060
+ const [allowed, setAllowed] = useState<Record<string, boolean>>({
1061
+ search_attacks: true,
1062
+ get_api_inventory: true,
1063
+ propose_add_to_denylist: false,
1064
+ });
1065
+ const handleSubmit = () => setValue('');
1066
+ const handlePermissionChange = ({ checked, name }: ChatPermissionsItemCheckedChangeDetails) =>
1067
+ setAllowed(prev => ({ ...prev, [name]: checked }));
1068
+
1069
+ return (
1070
+ <div className='h-640 w-480'>
1071
+ <Chat data-testid='chat' background='strong'>
1072
+ <ChatHeader>
1073
+ <ChatHeaderTitle />
1074
+ <ChatHeaderActions>
1075
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
1076
+ <History />
1077
+ </Button>
1078
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
1079
+ <DropdownMenuTrigger asChild>
1080
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
1081
+ <Ellipsis />
1082
+ </Button>
1083
+ </DropdownMenuTrigger>
1084
+ <DropdownMenuContent>
1085
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
1086
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
1087
+ </DropdownMenuContent>
1088
+ </DropdownMenu>
1089
+ <Separator orientation='vertical' />
1090
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
1091
+ <X />
1092
+ </Button>
1093
+ </ChatHeaderActions>
1094
+ </ChatHeader>
1095
+ <ChatBody>
1096
+ <ChatGreeting title='How can I help you today?' />
1097
+ </ChatBody>
1098
+ <ChatFooter>
1099
+ <ChatInput value={value} onValueChange={setValue} onSubmit={handleSubmit}>
1100
+ <ChatInputTextarea />
1101
+ <ChatPermissions>
1102
+ <ChatPermissionsTrigger />
1103
+ <ChatPermissionsContent>
1104
+ {TOOLS.map(tool => (
1105
+ <ChatPermissionsItem
1106
+ key={tool.name}
1107
+ name={tool.name}
1108
+ data-testid={`chat--permission-${tool.name}`}
1109
+ title={tool.name}
1110
+ description={tool.description}
1111
+ checked={allowed[tool.name]}
1112
+ onCheckedChange={handlePermissionChange}
1113
+ />
1114
+ ))}
1115
+ </ChatPermissionsContent>
1116
+ </ChatPermissions>
1117
+ <ChatInputSubmit />
1118
+ </ChatInput>
1119
+ </ChatFooter>
1120
+ </Chat>
1121
+ </div>
1122
+ );
1123
+ };
1124
+
1125
+ /**
1126
+ * The real host: `ChatTrigger` opens a 480px right-hand `Drawer` holding the conversation, and
1127
+ * Close is a `DrawerClose`. Esc in the textarea while running stops the reply instead of closing
1128
+ * the drawer; ChatInput handles that itself, so the host needs no `onEscapeKeyDown`.
1129
+ */
1130
+ export const InDrawer: StoryFn<typeof meta> = () => {
1131
+ const [value, setValue] = useState('');
1132
+ const [isRunning, setIsRunning] = useState(true);
1133
+ const handleSubmit = () => setValue('');
1134
+ const handleStop = () => setIsRunning(false);
1135
+
1136
+ return (
1137
+ <Drawer width={480}>
1138
+ <DrawerTrigger asChild>
1139
+ <ChatTrigger data-testid='chat-trigger' />
1140
+ </DrawerTrigger>
1141
+ <DrawerContent>
1142
+ <Chat data-testid='chat'>
1143
+ <ChatHeader>
1144
+ <ChatHeaderTitle />
1145
+ <ChatHeaderActions>
1146
+ <Button variant='ghost' color='neutral' size='small' aria-label='Chat history'>
1147
+ <History />
1148
+ </Button>
1149
+ <DropdownMenu positioning={{ placement: 'bottom-end' }}>
1150
+ <DropdownMenuTrigger asChild>
1151
+ <Button variant='ghost' color='neutral' size='small' aria-label='More actions'>
1152
+ <Ellipsis />
1153
+ </Button>
1154
+ </DropdownMenuTrigger>
1155
+ <DropdownMenuContent>
1156
+ <DropdownMenuItem>Rename chat</DropdownMenuItem>
1157
+ <DropdownMenuItem>Delete chat</DropdownMenuItem>
1158
+ </DropdownMenuContent>
1159
+ </DropdownMenu>
1160
+ <Separator orientation='vertical' />
1161
+ <DrawerClose asChild>
1162
+ <Button variant='ghost' color='neutral' size='small' aria-label='Close chat'>
1163
+ <X />
1164
+ </Button>
1165
+ </DrawerClose>
1166
+ </ChatHeaderActions>
1167
+ </ChatHeader>
1168
+ <ChatBody aria-busy={isRunning}>
1169
+ <UserMessage data-testid='chat--user-message-0'>
1170
+ <UserMessageBubble>{QUESTION}</UserMessageBubble>
1171
+ <MessageActions>
1172
+ <MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
1173
+ <Copyable text={QUESTION}>
1174
+ <MessageAction aria-label='Copy'>
1175
+ <CopyableIcon />
1176
+ </MessageAction>
1177
+ </Copyable>
1178
+ </MessageActions>
1179
+ </UserMessage>
1180
+ <AssistantMessage data-testid='chat--assistant-message-0' aria-busy={isRunning}>
1181
+ <ChainOfThought>
1182
+ <ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
1183
+ <p>
1184
+ Look up blocked requests to /api/login for last night, then group them by
1185
+ source.
1186
+ </p>
1187
+ </ChainOfThoughtStep>
1188
+ <ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
1189
+ <ChainOfThoughtStep
1190
+ icon={<Database />}
1191
+ label='Queried attack events'
1192
+ metric='1,204'
1193
+ />
1194
+ </ChainOfThought>
1195
+ <AssistantMessageContent>
1196
+ <h3>SQL injection on the login endpoint</h3>
1197
+ <p>
1198
+ Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
1199
+ <InlineCodeSnippet code='/api/login' size='sm' />.
1200
+ </p>
1201
+ <ul>
1202
+ <li>
1203
+ Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
1204
+ </li>
1205
+ <li>The peak was at 03:00 UTC.</li>
1206
+ <li>No request reached the application.</li>
1207
+ </ul>
1208
+ </AssistantMessageContent>
1209
+ {!isRunning && (
1210
+ <MessageActions visible>
1211
+ <Copyable text={ANSWER_TEXT}>
1212
+ <MessageAction aria-label='Copy' data-testid='chat--answer-copy'>
1213
+ <CopyableIcon />
1214
+ </MessageAction>
1215
+ </Copyable>
1216
+ <MessageAction aria-label='Good response'>
1217
+ <ThumbsUp />
1218
+ </MessageAction>
1219
+ <MessageAction aria-label='Bad response'>
1220
+ <ThumbsDown />
1221
+ </MessageAction>
1222
+ <MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
1223
+ </MessageActions>
1224
+ )}
1225
+ </AssistantMessage>
1226
+ </ChatBody>
1227
+ <ChatFooter>
1228
+ <ChatInput
1229
+ value={value}
1230
+ onValueChange={setValue}
1231
+ onSubmit={handleSubmit}
1232
+ isRunning={isRunning}
1233
+ onStop={handleStop}
1234
+ >
1235
+ <ChatInputTextarea />
1236
+ <ChatInputSubmit />
1237
+ </ChatInput>
1238
+ </ChatFooter>
1239
+ </Chat>
1240
+ </DrawerContent>
1241
+ </Drawer>
1242
+ );
1243
+ };
1244
+ ```