@kitn.ai/ui 0.15.0 → 0.16.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 (366) hide show
  1. package/README.md +9 -0
  2. package/bin/mcp.js +22 -0
  3. package/dist/bash-InADTalH.js +6 -1
  4. package/dist/components/artifact.d.ts +58 -0
  5. package/dist/components/attachments.d.ts +67 -0
  6. package/dist/components/card-fallback.d.ts +10 -0
  7. package/dist/components/card-renderer.d.ts +13 -0
  8. package/dist/components/card.d.ts +28 -0
  9. package/dist/components/chain-of-thought.d.ts +29 -0
  10. package/dist/components/chat-container.d.ts +19 -0
  11. package/dist/components/chat-scope-picker.d.ts +9 -0
  12. package/dist/components/chat-thread.d.ts +93 -0
  13. package/dist/components/checkpoint.d.ts +20 -0
  14. package/dist/components/choice-card.d.ts +77 -0
  15. package/dist/components/code-block.d.ts +16 -0
  16. package/dist/components/confirm-card.d.ts +57 -0
  17. package/dist/components/context.d.ts +65 -0
  18. package/dist/components/conversation-item.d.ts +8 -0
  19. package/dist/components/conversation-list.d.ts +11 -0
  20. package/dist/components/embed.d.ts +21 -0
  21. package/dist/components/empty.d.ts +43 -0
  22. package/dist/components/feedback-bar.d.ts +45 -0
  23. package/dist/components/file-tree.d.ts +57 -0
  24. package/dist/components/file-upload.d.ts +16 -0
  25. package/dist/components/form-widgets.d.ts +31 -0
  26. package/dist/components/form.d.ts +103 -0
  27. package/dist/components/image.d.ts +12 -0
  28. package/dist/components/link-preview.d.ts +23 -0
  29. package/dist/components/loader.d.ts +60 -0
  30. package/dist/components/markdown.d.ts +8 -0
  31. package/dist/components/message-skills.d.ts +15 -0
  32. package/dist/components/message.d.ts +54 -0
  33. package/dist/components/model-switcher.d.ts +8 -0
  34. package/dist/components/prompt-input.d.ts +38 -0
  35. package/dist/components/prompt-suggestion.d.ts +13 -0
  36. package/dist/components/reasoning.d.ts +20 -0
  37. package/dist/components/response-stream.d.ts +14 -0
  38. package/dist/components/scroll-button.d.ts +7 -0
  39. package/dist/components/slash-command.d.ts +15 -0
  40. package/dist/components/source.d.ts +23 -0
  41. package/dist/components/tasks-card.d.ts +71 -0
  42. package/dist/components/text-shimmer.d.ts +9 -0
  43. package/dist/components/thinking-bar.d.ts +10 -0
  44. package/dist/components/tool.d.ts +16 -0
  45. package/dist/components/use-card-resolution.d.ts +12 -0
  46. package/dist/components/voice-input.d.ts +7 -0
  47. package/dist/core-AYMC6_lb.js +5874 -12
  48. package/dist/css-M7EaDHN_.js +6 -1
  49. package/dist/elements/artifact.d.ts +1 -0
  50. package/dist/elements/attachments.d.ts +1 -0
  51. package/dist/elements/card.d.ts +1 -0
  52. package/dist/elements/cards.d.ts +0 -0
  53. package/dist/elements/chain-of-thought.d.ts +13 -0
  54. package/dist/elements/chat-scope-picker.d.ts +1 -0
  55. package/dist/elements/chat-types.d.ts +41 -0
  56. package/dist/elements/chat-workspace.d.ts +1 -0
  57. package/dist/elements/chat.d.ts +1 -0
  58. package/dist/elements/checkpoint.d.ts +1 -0
  59. package/dist/elements/choice.d.ts +1 -0
  60. package/dist/elements/code-block.d.ts +1 -0
  61. package/dist/elements/confirm-card.d.ts +1 -0
  62. package/dist/elements/context-meter.d.ts +1 -0
  63. package/dist/elements/conversation-list.d.ts +11 -0
  64. package/dist/elements/css.d.ts +1 -0
  65. package/dist/elements/default-input.d.ts +40 -0
  66. package/dist/elements/define.d.ts +42 -0
  67. package/dist/elements/embed.d.ts +1 -0
  68. package/dist/elements/empty.d.ts +1 -0
  69. package/dist/elements/feedback-bar.d.ts +1 -0
  70. package/dist/elements/file-tree.d.ts +1 -0
  71. package/dist/elements/file-upload.d.ts +1 -0
  72. package/dist/elements/form.d.ts +1 -0
  73. package/dist/elements/image.d.ts +1 -0
  74. package/dist/elements/link-preview.d.ts +1 -0
  75. package/dist/elements/loader.d.ts +1 -0
  76. package/dist/elements/markdown.d.ts +1 -0
  77. package/dist/elements/message-skills.d.ts +17 -0
  78. package/dist/elements/message.d.ts +1 -0
  79. package/dist/elements/model-switcher.d.ts +11 -0
  80. package/dist/elements/popover.d.ts +1 -0
  81. package/dist/elements/prompt-input.d.ts +9 -0
  82. package/dist/elements/prompt-suggestions.d.ts +7 -0
  83. package/dist/elements/reasoning.d.ts +1 -0
  84. package/dist/elements/register-impl.d.ts +0 -0
  85. package/dist/elements/register.d.ts +3 -0
  86. package/dist/elements/remote.d.ts +1 -0
  87. package/dist/elements/resizable.d.ts +17 -0
  88. package/dist/elements/response-stream.d.ts +1 -0
  89. package/dist/elements/scroll-button.d.ts +1 -0
  90. package/dist/elements/source.d.ts +18 -0
  91. package/dist/elements/switch.d.ts +1 -0
  92. package/dist/elements/tasks.d.ts +1 -0
  93. package/dist/elements/text-shimmer.d.ts +1 -0
  94. package/dist/elements/thinking-bar.d.ts +1 -0
  95. package/dist/elements/tool.d.ts +1 -0
  96. package/dist/elements/voice-input.d.ts +1 -0
  97. package/dist/elements.d.ts +732 -0
  98. package/dist/engine-javascript-vq0WuIJl.js +2516 -14
  99. package/dist/github-dark-dimmed-DUshB20C.js +4 -1
  100. package/dist/github-light-JYsPkUQd.js +4 -1
  101. package/dist/html-CPZ3oZQ7.js +10 -1
  102. package/dist/index.d.ts +112 -2
  103. package/dist/index.js +13551 -0
  104. package/dist/javascript-C25yR2R2.js +6 -1
  105. package/dist/json-DxJze_jm.js +6 -1
  106. package/dist/kitn-chat.es.js +1 -77
  107. package/dist/llms/llms-full.txt +1 -1
  108. package/dist/llms/llms.txt +1 -1
  109. package/dist/mcp.es.js +2140 -0
  110. package/dist/primitives/card-contract.d.ts +103 -0
  111. package/dist/primitives/card-host.d.ts +12 -0
  112. package/dist/primitives/card-registry.d.ts +17 -0
  113. package/dist/primitives/card-resolution.d.ts +8 -0
  114. package/dist/primitives/card-routing.d.ts +12 -0
  115. package/dist/primitives/card-validate.d.ts +25 -0
  116. package/dist/primitives/chat-config.d.ts +31 -0
  117. package/dist/primitives/controllable.d.ts +13 -0
  118. package/dist/primitives/embed-providers.d.ts +65 -0
  119. package/dist/primitives/highlighter.d.ts +23 -0
  120. package/dist/primitives/link-preview.d.ts +47 -0
  121. package/dist/primitives/pdf-preview.d.ts +50 -0
  122. package/dist/primitives/use-auto-resize.d.ts +8 -0
  123. package/dist/primitives/use-resize-observer.d.ts +1 -0
  124. package/dist/primitives/use-stick-to-bottom.d.ts +5 -0
  125. package/dist/primitives/use-text-stream.d.ts +19 -0
  126. package/dist/primitives/use-voice-recorder.d.ts +9 -0
  127. package/dist/react/index.d.ts +1118 -0
  128. package/dist/react/runtime.d.ts +15 -0
  129. package/dist/react.js +265 -0
  130. package/dist/register-impl-wCsFPoh9.js +77 -0
  131. package/dist/register-ujhr1nBS.js +1 -0
  132. package/dist/remote/host-embed.d.ts +33 -0
  133. package/dist/remote/index.d.ts +2 -0
  134. package/dist/remote/origin.d.ts +5 -0
  135. package/dist/remote/provider-runtime.d.ts +27 -0
  136. package/dist/remote/provider.d.ts +2 -0
  137. package/dist/remote/validate.d.ts +4 -0
  138. package/dist/remote/version.d.ts +4 -0
  139. package/dist/remote/wire.d.ts +53 -0
  140. package/dist/svelte--5p79yCD.js +15 -1
  141. package/dist/tsx-B8rCNbgL.js +6 -1
  142. package/dist/types.d.ts +42 -0
  143. package/dist/typescript-RycA9KXf.js +6 -1
  144. package/dist/ui/action-icons.d.ts +11 -0
  145. package/dist/ui/avatar.d.ts +8 -0
  146. package/dist/ui/badge.d.ts +9 -0
  147. package/dist/ui/button.d.ts +10 -0
  148. package/dist/ui/collapsible.d.ts +27 -0
  149. package/dist/ui/dropdown.d.ts +20 -0
  150. package/dist/ui/hover-card.d.ts +28 -0
  151. package/dist/ui/overlay.d.ts +67 -0
  152. package/dist/ui/popover.d.ts +32 -0
  153. package/dist/ui/resizable.d.ts +76 -0
  154. package/dist/ui/scroll-area.d.ts +5 -0
  155. package/dist/ui/separator.d.ts +5 -0
  156. package/dist/ui/skeleton.d.ts +5 -0
  157. package/dist/ui/switch.d.ts +19 -0
  158. package/dist/ui/textarea.d.ts +6 -0
  159. package/dist/ui/tooltip.d.ts +8 -0
  160. package/dist/utils/cn.d.ts +2 -0
  161. package/dist/vue-BmIZj4XD.js +33 -1
  162. package/frameworks/react/index.tsx +4 -0
  163. package/frameworks/react/runtime.tsx +16 -2
  164. package/llms-full.txt +1 -1
  165. package/llms.txt +1 -1
  166. package/package.json +29 -11
  167. package/src/agent-tooling/archetypes.ts +46 -0
  168. package/src/agent-tooling/integrations/cloudflare.ts +88 -0
  169. package/src/agent-tooling/integrations/langgraph.ts +60 -0
  170. package/src/agent-tooling/integrations/mastra.ts +27 -0
  171. package/src/agent-tooling/integrations/mock.ts +34 -0
  172. package/src/agent-tooling/integrations/ollama.ts +47 -0
  173. package/src/agent-tooling/integrations/openrouter.ts +26 -0
  174. package/src/agent-tooling/integrations/pi.ts +40 -0
  175. package/src/agent-tooling/integrations/pydantic-ai.ts +52 -0
  176. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +44 -0
  177. package/src/agent-tooling/mcp/manifest.ts +128 -0
  178. package/src/agent-tooling/mcp/server.ts +59 -0
  179. package/src/agent-tooling/mcp/stdio.ts +18 -0
  180. package/src/agent-tooling/mcp/tools/debug.ts +305 -0
  181. package/src/agent-tooling/mcp/tools/reference.ts +132 -0
  182. package/src/agent-tooling/mcp/tools/scaffold.ts +1627 -0
  183. package/src/agent-tooling/mcp/tools/theme.ts +340 -0
  184. package/src/agent-tooling/mcp/tools/types.ts +14 -0
  185. package/src/agent-tooling/registry.ts +41 -0
  186. package/src/agent-tooling/types.ts +30 -0
  187. package/src/elements/compiled.css +1 -1
  188. package/src/elements/define.tsx +7 -1
  189. package/src/elements/element-types.d.ts +2 -1
  190. package/src/elements/register-impl.ts +55 -0
  191. package/src/elements/register.ts +17 -51
  192. package/theme.css +4 -2
  193. package/src/components/artifact.stories.tsx +0 -138
  194. package/src/components/attachments.stories.tsx +0 -303
  195. package/src/components/attachments.test.tsx +0 -64
  196. package/src/components/chain-of-thought.stories.tsx +0 -211
  197. package/src/components/chat-container.stories.tsx +0 -187
  198. package/src/components/chat-thread.test.tsx +0 -58
  199. package/src/components/checkpoint.stories.tsx +0 -102
  200. package/src/components/code-block.stories.tsx +0 -150
  201. package/src/components/confirm-card.stories.tsx +0 -74
  202. package/src/components/context.stories.tsx +0 -229
  203. package/src/components/context.test.tsx +0 -133
  204. package/src/components/conversation-item.stories.tsx +0 -125
  205. package/src/components/conversation-list.stories.tsx +0 -133
  206. package/src/components/default-input.test.tsx +0 -111
  207. package/src/components/empty.stories.tsx +0 -434
  208. package/src/components/feedback-bar.stories.tsx +0 -138
  209. package/src/components/feedback-bar.test.tsx +0 -103
  210. package/src/components/file-tree.stories.tsx +0 -73
  211. package/src/components/file-upload.stories.tsx +0 -156
  212. package/src/components/image.stories.tsx +0 -89
  213. package/src/components/loader.stories.tsx +0 -181
  214. package/src/components/markdown.stories.tsx +0 -180
  215. package/src/components/message-action-bar.test.tsx +0 -128
  216. package/src/components/message-narrow.stories.tsx +0 -329
  217. package/src/components/message-skills.stories.tsx +0 -211
  218. package/src/components/message.stories.tsx +0 -281
  219. package/src/components/model-switcher.stories.tsx +0 -123
  220. package/src/components/model-switcher.test.tsx +0 -65
  221. package/src/components/prompt-input.stories.tsx +0 -222
  222. package/src/components/prompt-suggestion.stories.tsx +0 -142
  223. package/src/components/reasoning.stories.tsx +0 -140
  224. package/src/components/resizable.test.tsx +0 -226
  225. package/src/components/scroll-button.stories.tsx +0 -100
  226. package/src/components/slash-command.stories.tsx +0 -163
  227. package/src/components/source-list.test.tsx +0 -152
  228. package/src/components/source.stories.tsx +0 -124
  229. package/src/components/tasks-card.stories.tsx +0 -78
  230. package/src/components/text-shimmer.stories.tsx +0 -87
  231. package/src/components/thinking-bar.stories.tsx +0 -87
  232. package/src/components/tool.stories.tsx +0 -153
  233. package/src/components/voice-input.stories.tsx +0 -83
  234. package/src/elements/artifact.stories.tsx +0 -506
  235. package/src/elements/attachments.stories.tsx +0 -190
  236. package/src/elements/card.stories.tsx +0 -113
  237. package/src/elements/cards.stories.tsx +0 -59
  238. package/src/elements/catalog.stories.tsx +0 -491
  239. package/src/elements/chain-of-thought.declarative.test.tsx +0 -153
  240. package/src/elements/chain-of-thought.stories.tsx +0 -113
  241. package/src/elements/chat-scope-picker.stories.tsx +0 -73
  242. package/src/elements/chat-workspace.stories.tsx +0 -288
  243. package/src/elements/chat.stories.tsx +0 -151
  244. package/src/elements/checkpoint.stories.tsx +0 -72
  245. package/src/elements/choice.stories.tsx +0 -240
  246. package/src/elements/code-block.stories.tsx +0 -83
  247. package/src/elements/composed-shell.stories.tsx +0 -316
  248. package/src/elements/confirm-card.stories.tsx +0 -227
  249. package/src/elements/context-meter.stories.tsx +0 -151
  250. package/src/elements/conversation-list.declarative.test.tsx +0 -137
  251. package/src/elements/conversation-list.stories.tsx +0 -243
  252. package/src/elements/embed.stories.tsx +0 -213
  253. package/src/elements/empty.stories.tsx +0 -111
  254. package/src/elements/feedback-bar.stories.tsx +0 -114
  255. package/src/elements/file-tree.stories.tsx +0 -134
  256. package/src/elements/file-upload.stories.tsx +0 -82
  257. package/src/elements/form.stories.tsx +0 -248
  258. package/src/elements/image.stories.tsx +0 -71
  259. package/src/elements/link-preview.stories.tsx +0 -209
  260. package/src/elements/loader.stories.tsx +0 -88
  261. package/src/elements/markdown.stories.tsx +0 -76
  262. package/src/elements/message-skills.declarative.test.tsx +0 -104
  263. package/src/elements/message-skills.stories.tsx +0 -114
  264. package/src/elements/message.stories.tsx +0 -218
  265. package/src/elements/model-switcher.declarative.test.tsx +0 -130
  266. package/src/elements/model-switcher.stories.tsx +0 -198
  267. package/src/elements/popover.stories.tsx +0 -80
  268. package/src/elements/prompt-input-slash-command.test.tsx +0 -128
  269. package/src/elements/prompt-input-stoppable.test.tsx +0 -88
  270. package/src/elements/prompt-input-toolbar-actions.test.tsx +0 -120
  271. package/src/elements/prompt-input.stories.tsx +0 -331
  272. package/src/elements/prompt-suggestions.declarative.test.tsx +0 -164
  273. package/src/elements/prompt-suggestions.stories.tsx +0 -213
  274. package/src/elements/reasoning.stories.tsx +0 -77
  275. package/src/elements/remote.stories.tsx +0 -314
  276. package/src/elements/resizable.stories.tsx +0 -426
  277. package/src/elements/response-stream.stories.tsx +0 -79
  278. package/src/elements/scroll-button.stories.tsx +0 -202
  279. package/src/elements/scroll-button.test.tsx +0 -148
  280. package/src/elements/source-list.stories.tsx +0 -143
  281. package/src/elements/source.stories.tsx +0 -88
  282. package/src/elements/switch.stories.tsx +0 -56
  283. package/src/elements/tasks.stories.tsx +0 -237
  284. package/src/elements/text-shimmer.stories.tsx +0 -64
  285. package/src/elements/thinking-bar.stories.tsx +0 -72
  286. package/src/elements/tool.stories.tsx +0 -89
  287. package/src/elements/voice-input.stories.tsx +0 -88
  288. package/src/primitives/controllable.test.ts +0 -47
  289. package/src/stories/chat-panel-layout.stories.tsx +0 -145
  290. package/src/stories/chat-scene.tsx +0 -571
  291. package/src/stories/checkpoint-restore.stories.tsx +0 -256
  292. package/src/stories/context-usage.stories.tsx +0 -212
  293. package/src/stories/conversation-with-reasoning.stories.tsx +0 -182
  294. package/src/stories/conversation-with-sources.stories.tsx +0 -471
  295. package/src/stories/docs/Accessibility.mdx +0 -119
  296. package/src/stories/docs/ChildElements.mdx +0 -269
  297. package/src/stories/docs/ForAIAgents.mdx +0 -162
  298. package/src/stories/docs/GettingStarted.mdx +0 -65
  299. package/src/stories/docs/Installation.mdx +0 -83
  300. package/src/stories/docs/Introduction.mdx +0 -50
  301. package/src/stories/docs/SolidJsAdvanced.mdx +0 -17
  302. package/src/stories/docs/Theming.mdx +0 -85
  303. package/src/stories/docs/element-controls.ts +0 -121
  304. package/src/stories/docs/frameworks/Angular.mdx +0 -245
  305. package/src/stories/docs/frameworks/Html.mdx +0 -227
  306. package/src/stories/docs/frameworks/Overview.mdx +0 -47
  307. package/src/stories/docs/frameworks/React.mdx +0 -227
  308. package/src/stories/docs/frameworks/Solid.mdx +0 -173
  309. package/src/stories/docs/frameworks/Svelte.mdx +0 -194
  310. package/src/stories/docs/frameworks/Vue.mdx +0 -238
  311. package/src/stories/docs/generative-ui-overview.mdx +0 -186
  312. package/src/stories/docs/recipes/SpeechToText.mdx +0 -7
  313. package/src/stories/docs/recipes/Streaming.mdx +0 -68
  314. package/src/stories/docs/recipes/TextToSpeech.mdx +0 -35
  315. package/src/stories/docs/theme-editor/canvas.tsx +0 -32
  316. package/src/stories/docs/theme-editor/inspector.tsx +0 -66
  317. package/src/stories/docs/theme-editor/presets.test.ts +0 -32
  318. package/src/stories/docs/theme-editor/presets.ts +0 -64
  319. package/src/stories/docs/theme-editor/theme-css.test.ts +0 -19
  320. package/src/stories/docs/theme-editor/theme-css.ts +0 -15
  321. package/src/stories/docs/theme-editor/theme-editor.tsx +0 -146
  322. package/src/stories/docs/theme-tokens.tsx +0 -174
  323. package/src/stories/examples/ChoosingComponents.mdx +0 -106
  324. package/src/stories/examples/sample-data.ts +0 -79
  325. package/src/stories/examples/usage/checkpoint-restore.ts +0 -156
  326. package/src/stories/examples/usage/context-usage.ts +0 -591
  327. package/src/stories/examples/usage/conversation-with-reasoning.ts +0 -224
  328. package/src/stories/examples/usage/conversation-with-sources.ts +0 -589
  329. package/src/stories/examples/usage/empty-state.ts +0 -144
  330. package/src/stories/examples/usage/full-chat-app.ts +0 -277
  331. package/src/stories/examples/usage/index.ts +0 -63
  332. package/src/stories/examples/usage/message-actions.ts +0 -704
  333. package/src/stories/examples/usage/pattern-centered-conversation.ts +0 -446
  334. package/src/stories/examples/usage/pattern-chat-panel-layout.ts +0 -442
  335. package/src/stories/examples/usage/pattern-docked-widget.ts +0 -479
  336. package/src/stories/examples/usage/prompt-input-variants.ts +0 -1356
  337. package/src/stories/examples/usage/streaming-response.ts +0 -687
  338. package/src/stories/examples/usage/types.ts +0 -33
  339. package/src/stories/full-chat.stories.tsx +0 -18
  340. package/src/stories/message-actions.stories.tsx +0 -230
  341. package/src/stories/pattern-centered-conversation.stories.tsx +0 -93
  342. package/src/stories/pattern-docked-widget.stories.tsx +0 -93
  343. package/src/stories/pattern-empty-state.stories.tsx +0 -76
  344. package/src/stories/prompt-input-variants.stories.tsx +0 -456
  345. package/src/stories/streaming-response.stories.tsx +0 -438
  346. package/src/stories/theme-editor.stories.tsx +0 -16
  347. package/src/stories/token-reference.stories.tsx +0 -18
  348. package/src/stories/typography.stories.tsx +0 -78
  349. package/src/ui/avatar.stories.tsx +0 -103
  350. package/src/ui/badge.stories.tsx +0 -86
  351. package/src/ui/button.stories.tsx +0 -145
  352. package/src/ui/collapsible.stories.tsx +0 -69
  353. package/src/ui/dropdown.stories.tsx +0 -59
  354. package/src/ui/hover-card.stories.tsx +0 -77
  355. package/src/ui/hover-card.test.tsx +0 -30
  356. package/src/ui/overlay.stories.tsx +0 -115
  357. package/src/ui/popover.stories.tsx +0 -81
  358. package/src/ui/popover.test.tsx +0 -99
  359. package/src/ui/resizable.stories.tsx +0 -236
  360. package/src/ui/scroll-area.stories.tsx +0 -50
  361. package/src/ui/separator.stories.tsx +0 -81
  362. package/src/ui/skeleton.stories.tsx +0 -337
  363. package/src/ui/switch.stories.tsx +0 -51
  364. package/src/ui/switch.test.tsx +0 -59
  365. package/src/ui/textarea.stories.tsx +0 -76
  366. package/src/ui/tooltip.stories.tsx +0 -74
@@ -1,211 +0,0 @@
1
- import type { Meta, StoryObj } from 'storybook-solidjs-vite';
2
- import {
3
- ChainOfThought,
4
- ChainOfThoughtStep,
5
- ChainOfThoughtTrigger,
6
- ChainOfThoughtContent,
7
- ChainOfThoughtItem,
8
- } from './chain-of-thought';
9
- import { componentDescription } from '../stories/docs/element-controls';
10
-
11
- const meta = {
12
- title: 'Solid (Advanced)/Elements/ChainOfThought',
13
- component: ChainOfThought,
14
- tags: ['autodocs'],
15
- parameters: {
16
- layout: 'padded',
17
- docs: {
18
- description: componentDescription([
19
- 'A vertical, collapsible timeline that reveals an agent\'s reasoning as a series of connected steps. Composed of `ChainOfThought` (root) wrapping `ChainOfThoughtStep` items, each with a `ChainOfThoughtTrigger`, `ChainOfThoughtContent`, and one or more `ChainOfThoughtItem`s.',
20
- '**When to use:** to surface multi-step reasoning, tool calls, or research progress behind an assistant response, letting users expand each step on demand.',
21
- '**How to use:** map each reasoning step to a `ChainOfThoughtStep` (mark the final one with `isLast`); put the summary in `ChainOfThoughtTrigger` and the detail inside `ChainOfThoughtContent` / `ChainOfThoughtItem`.',
22
- '**Placement:** above or within an assistant message, typically before the final answer.',
23
- ]),
24
- controls: { exclude: ['use:eventListener'] },
25
- },
26
- },
27
- argTypes: {
28
- children: {
29
- control: false,
30
- description: 'The `ChainOfThoughtStep` items that make up the timeline.',
31
- },
32
- class: {
33
- control: 'text',
34
- description: 'Extra classes for the root wrapper.',
35
- },
36
- },
37
- args: {},
38
- render: (args) => (
39
- <ChainOfThought {...args}>
40
- <ChainOfThoughtStep>
41
- <ChainOfThoughtTrigger>Understanding the question</ChainOfThoughtTrigger>
42
- <ChainOfThoughtContent>
43
- <ChainOfThoughtItem>
44
- The user is asking about reactive programming concepts in SolidJS.
45
- </ChainOfThoughtItem>
46
- </ChainOfThoughtContent>
47
- </ChainOfThoughtStep>
48
- <ChainOfThoughtStep isLast>
49
- <ChainOfThoughtTrigger>Formulating response</ChainOfThoughtTrigger>
50
- <ChainOfThoughtContent>
51
- <ChainOfThoughtItem>
52
- Combining insights from documentation and examples into a clear answer.
53
- </ChainOfThoughtItem>
54
- </ChainOfThoughtContent>
55
- </ChainOfThoughtStep>
56
- </ChainOfThought>
57
- ),
58
- } satisfies Meta<typeof ChainOfThought>;
59
-
60
- export default meta;
61
- type Story = StoryObj<typeof meta>;
62
-
63
- const IMPORT = `import {
64
- ChainOfThought, ChainOfThoughtStep, ChainOfThoughtTrigger,
65
- ChainOfThoughtContent, ChainOfThoughtItem,
66
- } from '@kitn.ai/ui';`;
67
- const src = (code: string) => ({
68
- parameters: { docs: { source: { code: `${IMPORT}\n\n${code}`, language: 'tsx' } } },
69
- });
70
-
71
- /** Interactive playground — expand the steps to reveal each reasoning item. */
72
- export const Playground: Story = {
73
- ...src(`<ChainOfThought>
74
- <ChainOfThoughtStep>
75
- <ChainOfThoughtTrigger>Understanding the question</ChainOfThoughtTrigger>
76
- <ChainOfThoughtContent>
77
- <ChainOfThoughtItem>The user is asking about SolidJS reactivity.</ChainOfThoughtItem>
78
- </ChainOfThoughtContent>
79
- </ChainOfThoughtStep>
80
- <ChainOfThoughtStep isLast>
81
- <ChainOfThoughtTrigger>Formulating response</ChainOfThoughtTrigger>
82
- <ChainOfThoughtContent>
83
- <ChainOfThoughtItem>Combining insights into a clear answer.</ChainOfThoughtItem>
84
- </ChainOfThoughtContent>
85
- </ChainOfThoughtStep>
86
- </ChainOfThought>`),
87
- };
88
-
89
- export const SingleStep: Story = {
90
- render: () => (
91
- <ChainOfThought>
92
- <ChainOfThoughtStep isLast>
93
- <ChainOfThoughtTrigger>Analyzing the question</ChainOfThoughtTrigger>
94
- <ChainOfThoughtContent>
95
- <ChainOfThoughtItem>
96
- Breaking down the user's query into key concepts and identifying relevant knowledge areas.
97
- </ChainOfThoughtItem>
98
- </ChainOfThoughtContent>
99
- </ChainOfThoughtStep>
100
- </ChainOfThought>
101
- ),
102
- ...src(`<ChainOfThought>
103
- <ChainOfThoughtStep isLast>
104
- <ChainOfThoughtTrigger>Analyzing the question</ChainOfThoughtTrigger>
105
- <ChainOfThoughtContent>
106
- <ChainOfThoughtItem>Breaking down the query into key concepts.</ChainOfThoughtItem>
107
- </ChainOfThoughtContent>
108
- </ChainOfThoughtStep>
109
- </ChainOfThought>`),
110
- };
111
-
112
- export const MultipleSteps: Story = {
113
- render: () => (
114
- <ChainOfThought>
115
- <ChainOfThoughtStep>
116
- <ChainOfThoughtTrigger>Understanding the question</ChainOfThoughtTrigger>
117
- <ChainOfThoughtContent>
118
- <ChainOfThoughtItem>
119
- The user is asking about reactive programming concepts in SolidJS.
120
- </ChainOfThoughtItem>
121
- </ChainOfThoughtContent>
122
- </ChainOfThoughtStep>
123
- <ChainOfThoughtStep>
124
- <ChainOfThoughtTrigger>Searching knowledge base</ChainOfThoughtTrigger>
125
- <ChainOfThoughtContent>
126
- <ChainOfThoughtItem>
127
- Found 3 relevant documents about SolidJS signals and reactivity.
128
- </ChainOfThoughtItem>
129
- </ChainOfThoughtContent>
130
- </ChainOfThoughtStep>
131
- <ChainOfThoughtStep isLast>
132
- <ChainOfThoughtTrigger>Formulating response</ChainOfThoughtTrigger>
133
- <ChainOfThoughtContent>
134
- <ChainOfThoughtItem>
135
- Combining insights from documentation and examples to create a comprehensive answer.
136
- </ChainOfThoughtItem>
137
- </ChainOfThoughtContent>
138
- </ChainOfThoughtStep>
139
- </ChainOfThought>
140
- ),
141
- ...src(`<ChainOfThought>
142
- <ChainOfThoughtStep>
143
- <ChainOfThoughtTrigger>Understanding the question</ChainOfThoughtTrigger>
144
- <ChainOfThoughtContent>
145
- <ChainOfThoughtItem>The user is asking about SolidJS reactivity.</ChainOfThoughtItem>
146
- </ChainOfThoughtContent>
147
- </ChainOfThoughtStep>
148
- <ChainOfThoughtStep>
149
- <ChainOfThoughtTrigger>Searching knowledge base</ChainOfThoughtTrigger>
150
- <ChainOfThoughtContent>
151
- <ChainOfThoughtItem>Found 3 relevant documents.</ChainOfThoughtItem>
152
- </ChainOfThoughtContent>
153
- </ChainOfThoughtStep>
154
- <ChainOfThoughtStep isLast>
155
- <ChainOfThoughtTrigger>Formulating response</ChainOfThoughtTrigger>
156
- <ChainOfThoughtContent>
157
- <ChainOfThoughtItem>Combining insights into a clear answer.</ChainOfThoughtItem>
158
- </ChainOfThoughtContent>
159
- </ChainOfThoughtStep>
160
- </ChainOfThought>`),
161
- };
162
-
163
- export const WithCustomIcons: Story = {
164
- render: () => (
165
- <ChainOfThought>
166
- <ChainOfThoughtStep>
167
- <ChainOfThoughtTrigger
168
- leftIcon={
169
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
170
- <circle cx="11" cy="11" r="8" />
171
- <line x1="21" y1="21" x2="16.65" y2="16.65" />
172
- </svg>
173
- }
174
- >
175
- Searching documents
176
- </ChainOfThoughtTrigger>
177
- <ChainOfThoughtContent>
178
- <ChainOfThoughtItem>Found 5 relevant results.</ChainOfThoughtItem>
179
- </ChainOfThoughtContent>
180
- </ChainOfThoughtStep>
181
- <ChainOfThoughtStep isLast>
182
- <ChainOfThoughtTrigger
183
- leftIcon={
184
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
185
- <polyline points="20 6 9 17 4 12" />
186
- </svg>
187
- }
188
- >
189
- Analysis complete
190
- </ChainOfThoughtTrigger>
191
- <ChainOfThoughtContent>
192
- <ChainOfThoughtItem>All sources have been analyzed and synthesized.</ChainOfThoughtItem>
193
- </ChainOfThoughtContent>
194
- </ChainOfThoughtStep>
195
- </ChainOfThought>
196
- ),
197
- ...src(`<ChainOfThought>
198
- <ChainOfThoughtStep>
199
- <ChainOfThoughtTrigger leftIcon={<SearchIcon />}>Searching documents</ChainOfThoughtTrigger>
200
- <ChainOfThoughtContent>
201
- <ChainOfThoughtItem>Found 5 relevant results.</ChainOfThoughtItem>
202
- </ChainOfThoughtContent>
203
- </ChainOfThoughtStep>
204
- <ChainOfThoughtStep isLast>
205
- <ChainOfThoughtTrigger leftIcon={<CheckIcon />}>Analysis complete</ChainOfThoughtTrigger>
206
- <ChainOfThoughtContent>
207
- <ChainOfThoughtItem>All sources analyzed and synthesized.</ChainOfThoughtItem>
208
- </ChainOfThoughtContent>
209
- </ChainOfThoughtStep>
210
- </ChainOfThought>`),
211
- };
@@ -1,187 +0,0 @@
1
- import type { Meta, StoryObj } from 'storybook-solidjs-vite';
2
- import { For } from 'solid-js';
3
- import { ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor } from './chat-container';
4
- import { Message, MessageAvatar, MessageContent } from './message';
5
- import { componentDescription } from '../stories/docs/element-controls';
6
-
7
- const sampleMessages = [
8
- { role: 'user', content: 'What is SolidJS?' },
9
- { role: 'assistant', content: '**SolidJS** is a declarative, efficient, and flexible JavaScript library for building user interfaces. Unlike React, it uses fine-grained reactivity with no Virtual DOM, resulting in excellent performance.' },
10
- { role: 'user', content: 'How does reactivity work in SolidJS?' },
11
- { role: 'assistant', content: `SolidJS uses **signals** as its core reactive primitive. Here's how it works:
12
-
13
- 1. **Signals** -- Store reactive values that track their dependencies
14
- 2. **Effects** -- Side effects that re-run when their signal dependencies change
15
- 3. **Memos** -- Derived values that cache their results
16
-
17
- Unlike React's useState, SolidJS signals are getter/setter pairs that update only the specific DOM nodes that depend on them.` },
18
- { role: 'user', content: 'Can you show me an example?' },
19
- { role: 'assistant', content: `Here's a simple counter example:
20
-
21
- \`\`\`typescript
22
- import { createSignal } from 'solid-js';
23
-
24
- function Counter() {
25
- const [count, setCount] = createSignal(0);
26
- return (
27
- <button onClick={() => setCount(c => c + 1)}>
28
- Count: {count()}
29
- </button>
30
- );
31
- }
32
- \`\`\`
33
-
34
- Notice that \`count\` is called as a function -- this is how SolidJS tracks which parts of the UI depend on which signals.` },
35
- ];
36
-
37
- const meta = {
38
- title: 'Solid (Advanced)/Elements/ChatContainer',
39
- component: ChatContainerRoot,
40
- tags: ['autodocs'],
41
- parameters: {
42
- layout: 'padded',
43
- docs: {
44
- description: componentDescription([
45
- 'A scrollable message viewport that automatically sticks to the bottom as new content streams in. Composed of `ChatContainerRoot` (the scroll region), `ChatContainerContent` (the message stack), and `ChatContainerScrollAnchor` (the stick-to-bottom target).',
46
- '**When to use:** as the conversation transcript region of a chat UI, where messages append over time and the view should follow the latest output unless the user scrolls up.',
47
- '**How to use:** wrap your message list in `ChatContainerRoot`, place messages inside `ChatContainerContent`, and end with `ChatContainerScrollAnchor`. Give the root a fixed height so it can scroll.',
48
- '**Placement:** the central pane of a chat layout, between the header and the prompt input.',
49
- ]),
50
- controls: { exclude: ['use:eventListener'] },
51
- },
52
- },
53
- argTypes: {
54
- children: {
55
- control: false,
56
- description: 'The container content — typically `ChatContainerContent` with messages.',
57
- },
58
- class: {
59
- control: 'text',
60
- description: 'Extra classes for the scroll region (set a height so it can scroll).',
61
- },
62
- },
63
- args: {
64
- class: 'h-full flex-col p-4',
65
- },
66
- render: (args) => (
67
- <div class="h-[500px] w-full max-w-2xl border border-border rounded-lg overflow-hidden">
68
- <ChatContainerRoot {...args}>
69
- <ChatContainerContent class="space-y-4">
70
- <For each={sampleMessages}>
71
- {(msg) => (
72
- <Message>
73
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
74
- <MessageContent markdown={msg.role === 'assistant'}>{msg.content}</MessageContent>
75
- </Message>
76
- )}
77
- </For>
78
- <ChatContainerScrollAnchor />
79
- </ChatContainerContent>
80
- </ChatContainerRoot>
81
- </div>
82
- ),
83
- } satisfies Meta<typeof ChatContainerRoot>;
84
-
85
- export default meta;
86
- type Story = StoryObj<typeof meta>;
87
-
88
- const IMPORT = `import {
89
- ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor,
90
- Message, MessageAvatar, MessageContent,
91
- } from '@kitn.ai/ui';`;
92
- const src = (code: string) => ({
93
- parameters: { docs: { source: { code: `${IMPORT}\n\n${code}`, language: 'tsx' } } },
94
- });
95
-
96
- /** Interactive playground — a full transcript inside the stick-to-bottom container. */
97
- export const Playground: Story = {
98
- ...src(`<div class="h-[500px]">
99
- <ChatContainerRoot class="h-full flex-col p-4">
100
- <ChatContainerContent class="space-y-4">
101
- <For each={messages}>
102
- {(msg) => (
103
- <Message>
104
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
105
- <MessageContent markdown={msg.role === 'assistant'}>{msg.content}</MessageContent>
106
- </Message>
107
- )}
108
- </For>
109
- <ChatContainerScrollAnchor />
110
- </ChatContainerContent>
111
- </ChatContainerRoot>
112
- </div>`),
113
- };
114
-
115
- export const FullChat: Story = {
116
- render: () => (
117
- <div class="h-[500px] w-full max-w-2xl border border-border rounded-lg overflow-hidden">
118
- <ChatContainerRoot class="h-full flex-col p-4">
119
- <ChatContainerContent class="space-y-4">
120
- <For each={sampleMessages}>
121
- {(msg) => (
122
- <Message>
123
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
124
- <MessageContent markdown={msg.role === 'assistant'}>{msg.content}</MessageContent>
125
- </Message>
126
- )}
127
- </For>
128
- <ChatContainerScrollAnchor />
129
- </ChatContainerContent>
130
- </ChatContainerRoot>
131
- </div>
132
- ),
133
- ...src(`<ChatContainerRoot class="h-full flex-col p-4">
134
- <ChatContainerContent class="space-y-4">
135
- <For each={messages}>
136
- {(msg) => (
137
- <Message>
138
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
139
- <MessageContent markdown={msg.role === 'assistant'}>{msg.content}</MessageContent>
140
- </Message>
141
- )}
142
- </For>
143
- <ChatContainerScrollAnchor />
144
- </ChatContainerContent>
145
- </ChatContainerRoot>`),
146
- };
147
-
148
- export const LongConversation: Story = {
149
- render: () => {
150
- const manyMessages = Array.from({ length: 20 }, (_, i) => ({
151
- role: i % 2 === 0 ? 'user' : 'assistant',
152
- content: i % 2 === 0
153
- ? `This is user message number ${Math.floor(i / 2) + 1}. It asks a question about the topic.`
154
- : `This is the assistant's response to message ${Math.floor(i / 2) + 1}. It provides a detailed explanation with relevant examples and context.`,
155
- }));
156
- return (
157
- <div class="h-[400px] w-full max-w-2xl border border-border rounded-lg overflow-hidden">
158
- <ChatContainerRoot class="h-full flex-col p-4">
159
- <ChatContainerContent class="space-y-4">
160
- <For each={manyMessages}>
161
- {(msg) => (
162
- <Message>
163
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
164
- <MessageContent>{msg.content}</MessageContent>
165
- </Message>
166
- )}
167
- </For>
168
- <ChatContainerScrollAnchor />
169
- </ChatContainerContent>
170
- </ChatContainerRoot>
171
- </div>
172
- );
173
- },
174
- ...src(`<ChatContainerRoot class="h-full flex-col p-4">
175
- <ChatContainerContent class="space-y-4">
176
- <For each={manyMessages}>
177
- {(msg) => (
178
- <Message>
179
- <MessageAvatar src="" fallback={msg.role === 'user' ? 'U' : 'AI'} alt={msg.role} />
180
- <MessageContent>{msg.content}</MessageContent>
181
- </Message>
182
- )}
183
- </For>
184
- <ChatContainerScrollAnchor />
185
- </ChatContainerContent>
186
- </ChatContainerRoot>`),
187
- };
@@ -1,58 +0,0 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import '@testing-library/jest-dom/vitest';
3
- import { render, cleanup } from '@solidjs/testing-library';
4
- import { ChatThread } from './chat-thread';
5
-
6
- // jsdom doesn't implement Element.scrollTo; the auto-scroll container calls it.
7
- if (!Element.prototype.scrollTo) (Element.prototype as unknown as { scrollTo: () => void }).scrollTo = () => {};
8
-
9
- afterEach(cleanup);
10
-
11
- describe('ChatThread header composition', () => {
12
- it('hides the header with no title, models, context, or header slot', () => {
13
- const { container } = render(() => <ChatThread messages={[]} />);
14
- expect(container.querySelector('header')).toBeNull();
15
- });
16
-
17
- it('shows the header when only header-start content is present', () => {
18
- const { container } = render(() => <ChatThread messages={[]} headerStart />);
19
- expect(container.querySelector('header')).toBeTruthy();
20
- });
21
-
22
- it('renders header-start and header-end slots inside the header', () => {
23
- const { container } = render(() => <ChatThread messages={[]} headerStart headerEnd />);
24
- expect(container.querySelector('header slot[name="header-start"]')).toBeTruthy();
25
- expect(container.querySelector('header slot[name="header-end"]')).toBeTruthy();
26
- });
27
-
28
- it('still shows the header for a chat title (back-compat)', () => {
29
- const { container, getByText } = render(() => <ChatThread messages={[]} chatTitle="Assistant" />);
30
- expect(container.querySelector('header')).toBeTruthy();
31
- expect(getByText('Assistant')).toBeInTheDocument();
32
- });
33
- });
34
-
35
- describe('ChatThread suggestions gating', () => {
36
- const SUGGESTIONS = ['What can you do?', 'Tell me a joke'];
37
- const oneMessage = [{ id: '1', role: 'user' as const, content: 'hi' }];
38
-
39
- it('renders suggestions when the thread is empty', () => {
40
- const { getByText } = render(() => <ChatThread messages={[]} suggestions={SUGGESTIONS} />);
41
- expect(getByText('What can you do?')).toBeInTheDocument();
42
- expect(getByText('Tell me a joke')).toBeInTheDocument();
43
- });
44
-
45
- it('hides suggestions once the conversation has messages (default)', () => {
46
- const { queryByText } = render(() => <ChatThread messages={oneMessage} suggestions={SUGGESTIONS} />);
47
- expect(queryByText('What can you do?')).toBeNull();
48
- expect(queryByText('Tell me a joke')).toBeNull();
49
- });
50
-
51
- it('keeps suggestions visible with messages when persistSuggestions is set', () => {
52
- const { getByText } = render(() => (
53
- <ChatThread messages={oneMessage} suggestions={SUGGESTIONS} persistSuggestions />
54
- ));
55
- expect(getByText('What can you do?')).toBeInTheDocument();
56
- expect(getByText('Tell me a joke')).toBeInTheDocument();
57
- });
58
- });
@@ -1,102 +0,0 @@
1
- import type { Meta, StoryObj } from 'storybook-solidjs-vite';
2
- import { fn } from 'storybook/test';
3
- import { Checkpoint, CheckpointIcon, CheckpointTrigger } from './checkpoint';
4
- import { componentDescription } from '../stories/docs/element-controls';
5
-
6
- const meta = {
7
- title: 'Solid (Advanced)/Elements/Checkpoint',
8
- component: Checkpoint,
9
- tags: ['autodocs'],
10
- parameters: {
11
- layout: 'padded',
12
- docs: {
13
- description: componentDescription([
14
- 'An inline marker that lets a user restore the conversation to a saved point. Composed of `Checkpoint` (row + separator) wrapping a `CheckpointIcon` and a `CheckpointTrigger` button.',
15
- '**When to use:** to mark a restorable state in a transcript — e.g. before an edit or a branching action — so the user can revert to it.',
16
- '**How to use:** place a `CheckpointIcon` and a `CheckpointTrigger` inside `Checkpoint`. Give the trigger an `onClick` handler and an optional `tooltip`; pass custom SVG children to `CheckpointIcon` to override the default flag.',
17
- '**Placement:** between messages in a chat transcript, as a thin separator-style row.',
18
- ]),
19
- controls: { exclude: ['use:eventListener'] },
20
- },
21
- },
22
- argTypes: {
23
- children: {
24
- control: false,
25
- description: 'The `CheckpointIcon` and `CheckpointTrigger` contents.',
26
- },
27
- class: {
28
- control: 'text',
29
- description: 'Extra classes for the checkpoint row.',
30
- },
31
- },
32
- args: {},
33
- render: (args) => (
34
- <div class="max-w-md">
35
- <Checkpoint {...args}>
36
- <CheckpointIcon />
37
- <CheckpointTrigger tooltip="Restore to this point" onClick={fn()}>
38
- Restore
39
- </CheckpointTrigger>
40
- </Checkpoint>
41
- </div>
42
- ),
43
- } satisfies Meta<typeof Checkpoint>;
44
-
45
- export default meta;
46
- type Story = StoryObj<typeof meta>;
47
-
48
- const IMPORT = `import { Checkpoint, CheckpointIcon, CheckpointTrigger } from '@kitn.ai/ui';`;
49
- const src = (code: string) => ({
50
- parameters: { docs: { source: { code: `${IMPORT}\n\n${code}`, language: 'tsx' } } },
51
- });
52
-
53
- /** Interactive playground — the default flag icon with a restore trigger. */
54
- export const Playground: Story = {
55
- ...src(`<Checkpoint>
56
- <CheckpointIcon />
57
- <CheckpointTrigger tooltip="Restore to this point" onClick={handleRestore}>
58
- Restore
59
- </CheckpointTrigger>
60
- </Checkpoint>`),
61
- };
62
-
63
- export const WithCustomIcon: Story = {
64
- render: () => (
65
- <div class="max-w-md">
66
- <Checkpoint>
67
- <CheckpointIcon>
68
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="size-4">
69
- <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z" />
70
- <path d="M12 6v6l4 2" />
71
- </svg>
72
- </CheckpointIcon>
73
- <CheckpointTrigger tooltip="Go back to this checkpoint" onClick={fn()}>
74
- Revert to checkpoint
75
- </CheckpointTrigger>
76
- </Checkpoint>
77
- </div>
78
- ),
79
- ...src(`<Checkpoint>
80
- <CheckpointIcon>
81
- <ClockIcon class="size-4" />
82
- </CheckpointIcon>
83
- <CheckpointTrigger tooltip="Go back to this checkpoint" onClick={handleRevert}>
84
- Revert to checkpoint
85
- </CheckpointTrigger>
86
- </Checkpoint>`),
87
- };
88
-
89
- export const NoTooltip: Story = {
90
- render: () => (
91
- <div class="max-w-md">
92
- <Checkpoint>
93
- <CheckpointIcon />
94
- <CheckpointTrigger onClick={fn()}>Restore</CheckpointTrigger>
95
- </Checkpoint>
96
- </div>
97
- ),
98
- ...src(`<Checkpoint>
99
- <CheckpointIcon />
100
- <CheckpointTrigger onClick={handleRestore}>Restore</CheckpointTrigger>
101
- </Checkpoint>`),
102
- };