entasis 0.10.2 → 0.12.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 (841) hide show
  1. package/README.md +1 -1
  2. package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
  3. package/dist/attachments/disclosurePanel.svelte.js +277 -0
  4. package/dist/attachments/portal.d.ts +17 -1
  5. package/dist/attachments/portal.js +39 -2
  6. package/dist/attachments/spinnerOverlay.svelte.js +12 -0
  7. package/dist/attachments/transitionSize.d.ts +6 -0
  8. package/dist/attachments/transitionSize.js +30 -0
  9. package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
  10. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
  11. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
  12. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
  13. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
  14. package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
  15. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
  16. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
  17. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
  18. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
  19. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
  20. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
  21. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
  22. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
  23. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
  24. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
  25. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
  26. package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
  27. package/dist/components/AIAskUserQuestion/index.js +2 -0
  28. package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
  29. package/dist/components/AIAskUserQuestion/schemas.js +10 -3
  30. package/dist/components/AIChat/AIChat.svelte +10 -0
  31. package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
  32. package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
  33. package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
  34. package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
  35. package/dist/components/AIChat/AIChatSurface.svelte +30 -2
  36. package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
  37. package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
  38. package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
  39. package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
  40. package/dist/components/AIChat/aiChat.mcp.js +31 -15
  41. package/dist/components/AIChat/aiChat.props.d.ts +36 -10
  42. package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
  43. package/dist/components/AIChat/aiChat.theme.js +21 -4
  44. package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
  45. package/dist/components/AIChat/index.d.ts +1 -1
  46. package/dist/components/AIComposer/AIComposer.svelte +102 -5
  47. package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
  48. package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
  49. package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
  50. package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
  51. package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
  52. package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
  53. package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
  54. package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
  55. package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
  56. package/dist/components/AIComposer/aiComposer.theme.js +37 -5
  57. package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
  58. package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
  59. package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
  60. package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
  61. package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
  62. package/dist/components/AIContext/AIContext.svelte +7 -3
  63. package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
  64. package/dist/components/AIContext/aiContext.mcp.js +1 -1
  65. package/dist/components/AIContext/aiContext.props.d.ts +4 -1
  66. package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
  67. package/dist/components/AIContext/aiContext.theme.js +7 -2
  68. package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
  69. package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
  70. package/dist/components/AIMarker/AIMarker.svelte +2 -0
  71. package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
  72. package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
  73. package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
  74. package/dist/components/AIMarker/aiMarker.theme.js +2 -2
  75. package/dist/components/AIMessage/AIMessage.svelte +38 -16
  76. package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
  77. package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
  78. package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
  79. package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
  80. package/dist/components/AIMessage/aiMessage.theme.js +91 -32
  81. package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
  82. package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
  83. package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
  84. package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
  85. package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
  86. package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
  87. package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
  88. package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
  89. package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
  90. package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
  91. package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
  92. package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
  93. package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
  94. package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
  95. package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
  96. package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
  97. package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
  98. package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
  99. package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
  100. package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
  101. package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
  102. package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
  103. package/dist/components/AIThread/AIThread.svelte +378 -95
  104. package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
  105. package/dist/components/AIThread/AIThreadItems.svelte +266 -64
  106. package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
  107. package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
  108. package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
  109. package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
  110. package/dist/components/AIThread/aiThread.mcp.js +34 -20
  111. package/dist/components/AIThread/aiThread.props.d.ts +73 -8
  112. package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
  113. package/dist/components/AIThread/aiThread.theme.js +108 -9
  114. package/dist/components/AIThread/index.d.ts +1 -1
  115. package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
  116. package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
  117. package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
  118. package/dist/components/AIThread/threadRenderItems.js +265 -77
  119. package/dist/components/AIThread/threadScrollController.d.ts +0 -8
  120. package/dist/components/AIThread/threadScrollController.js +2 -39
  121. package/dist/components/AIThread/threadTools.d.ts +11 -0
  122. package/dist/components/AIThread/threadTools.js +79 -0
  123. package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
  124. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
  125. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
  126. package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
  127. package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
  128. package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
  129. package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
  130. package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
  131. package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
  132. package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
  133. package/dist/components/AITool/AITool.svelte +56 -21
  134. package/dist/components/AITool/AIToolCallList.svelte +79 -29
  135. package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
  136. package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
  137. package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
  138. package/dist/components/AITool/AIToolValueSection.svelte +126 -28
  139. package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
  140. package/dist/components/AITool/AIToolValueTree.svelte +11 -16
  141. package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
  142. package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
  143. package/dist/components/AITool/aiTool.mcp.js +36 -8
  144. package/dist/components/AITool/aiTool.props.d.ts +52 -6
  145. package/dist/components/AITool/aiTool.theme.d.ts +117 -39
  146. package/dist/components/AITool/aiTool.theme.js +144 -140
  147. package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
  148. package/dist/components/AITool/aiToolClock.svelte.js +62 -0
  149. package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
  150. package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
  151. package/dist/components/AITool/index.d.ts +2 -1
  152. package/dist/components/AITool/index.js +1 -0
  153. package/dist/components/AITool/toolRendering.d.ts +33 -1
  154. package/dist/components/AITool/toolRendering.js +179 -15
  155. package/dist/components/AITool/toolValueTree.d.ts +14 -1
  156. package/dist/components/AITool/toolValueTree.js +126 -27
  157. package/dist/components/Accordion/Accordion.svelte +109 -109
  158. package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
  159. package/dist/components/Accordion/AccordionPanel.svelte +64 -0
  160. package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
  161. package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
  162. package/dist/components/Accordion/accordion.attributes.js +20 -0
  163. package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
  164. package/dist/components/Accordion/accordion.mcp.js +78 -22
  165. package/dist/components/Accordion/accordion.props.d.ts +54 -10
  166. package/dist/components/Accordion/accordion.theme.d.ts +3 -0
  167. package/dist/components/Accordion/accordion.theme.js +4 -0
  168. package/dist/components/Accordion/index.d.ts +1 -0
  169. package/dist/components/Accordion/index.js +1 -0
  170. package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
  171. package/dist/components/Avatar/Avatar.svelte +60 -10
  172. package/dist/components/Avatar/AvatarGroup.svelte +9 -0
  173. package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
  174. package/dist/components/Avatar/avatar.mcp.js +13 -5
  175. package/dist/components/Avatar/avatar.props.d.ts +28 -1
  176. package/dist/components/Avatar/avatar.theme.js +3 -3
  177. package/dist/components/Avatar/index.d.ts +1 -1
  178. package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
  179. package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
  180. package/dist/components/Button/Button.svelte +35 -15
  181. package/dist/components/Button/button.mcp.d.ts +1 -1
  182. package/dist/components/Button/button.mcp.js +8 -4
  183. package/dist/components/Button/button.props.d.ts +23 -8
  184. package/dist/components/Button/button.theme.d.ts +12 -0
  185. package/dist/components/Button/button.theme.js +17 -4
  186. package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
  187. package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
  188. package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
  189. package/dist/components/Collapsible/Collapsible.svelte +125 -19
  190. package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
  191. package/dist/components/Collapsible/collapsible.attributes.js +17 -0
  192. package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
  193. package/dist/components/Collapsible/collapsible.mcp.js +62 -12
  194. package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
  195. package/dist/components/Collapsible/collapsible.theme.js +3 -1
  196. package/dist/components/Collapsible/index.d.ts +1 -0
  197. package/dist/components/Collapsible/index.js +1 -0
  198. package/dist/components/Command/Command.svelte +56 -14
  199. package/dist/components/Command/command.mcp.d.ts +1 -1
  200. package/dist/components/Command/command.mcp.js +12 -6
  201. package/dist/components/Command/command.props.d.ts +39 -6
  202. package/dist/components/Command/command.state.svelte.d.ts +40 -11
  203. package/dist/components/Command/command.state.svelte.js +75 -28
  204. package/dist/components/Command/command.theme.js +4 -3
  205. package/dist/components/Confirmation/Confirmation.svelte +72 -31
  206. package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
  207. package/dist/components/Confirmation/confirmation.mcp.js +5 -4
  208. package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
  209. package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
  210. package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
  211. package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
  212. package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
  213. package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
  214. package/dist/components/DataTable/DataTable.svelte +4 -9
  215. package/dist/components/DataTable/DataTableEditor.svelte +5 -0
  216. package/dist/components/DataTable/DataTableFilter.svelte +1 -0
  217. package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
  218. package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
  219. package/dist/components/DataTable/dataTable.mcp.js +4 -2
  220. package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
  221. package/dist/components/DataTable/dataTable.theme.js +9 -6
  222. package/dist/components/Dialog/Dialog.svelte +120 -35
  223. package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
  224. package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
  225. package/dist/components/Dialog/dialog.api.d.ts +65 -0
  226. package/dist/components/Dialog/dialog.api.js +1 -0
  227. package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
  228. package/dist/components/Dialog/dialog.attributes.js +19 -0
  229. package/dist/components/Dialog/dialog.indent.d.ts +6 -0
  230. package/dist/components/Dialog/dialog.indent.js +16 -0
  231. package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
  232. package/dist/components/Dialog/dialog.mcp.js +195 -22
  233. package/dist/components/Dialog/dialog.props.d.ts +102 -19
  234. package/dist/components/Dialog/dialog.snap.d.ts +40 -0
  235. package/dist/components/Dialog/dialog.snap.js +78 -0
  236. package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
  237. package/dist/components/Dialog/dialog.state.svelte.js +525 -66
  238. package/dist/components/Dialog/dialog.theme.d.ts +48 -0
  239. package/dist/components/Dialog/dialog.theme.js +32 -9
  240. package/dist/components/Dialog/index.d.ts +4 -1
  241. package/dist/components/Dialog/index.js +1 -0
  242. package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
  243. package/dist/components/DocumentViewer/documentOutput.js +2 -1
  244. package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
  245. package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
  246. package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
  247. package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
  248. package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
  249. package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
  250. package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
  251. package/dist/components/Form/Ask/Ask.svelte +9 -13
  252. package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
  253. package/dist/components/Form/Ask/ask.mcp.js +1 -1
  254. package/dist/components/Form/Ask/ask.props.d.ts +1 -1
  255. package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
  256. package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
  257. package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
  258. package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
  259. package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
  260. package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
  261. package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
  262. package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
  263. package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
  264. package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
  265. package/dist/components/Form/Autocomplete/index.d.ts +3 -0
  266. package/dist/components/Form/Autocomplete/index.js +2 -0
  267. package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
  268. package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
  269. package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
  270. package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
  271. package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
  272. package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
  273. package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
  274. package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
  275. package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
  276. package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
  277. package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
  278. package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
  279. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
  280. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
  281. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
  282. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
  283. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
  284. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
  285. package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
  286. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
  287. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
  288. package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
  289. package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
  290. package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
  291. package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
  292. package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
  293. package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
  294. package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
  295. package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
  296. package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
  297. package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
  298. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
  299. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
  300. package/dist/components/Form/Combobox/Combobox.svelte +145 -185
  301. package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
  302. package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
  303. package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
  304. package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
  305. package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
  306. package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
  307. package/dist/components/Form/Combobox/combobox.items.js +68 -0
  308. package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
  309. package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
  310. package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
  311. package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
  312. package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
  313. package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
  314. package/dist/components/Form/Combobox/combobox.theme.js +37 -1
  315. package/dist/components/Form/Combobox/index.d.ts +2 -1
  316. package/dist/components/Form/Combobox/index.js +1 -0
  317. package/dist/components/Form/DateInput/DateInput.svelte +11 -3
  318. package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
  319. package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
  320. package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
  321. package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
  322. package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
  323. package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
  324. package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
  325. package/dist/components/Form/Field/Field.svelte +258 -32
  326. package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
  327. package/dist/components/Form/Field/FieldGroup.svelte +29 -0
  328. package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
  329. package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
  330. package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
  331. package/dist/components/Form/Field/field.d.ts +75 -10
  332. package/dist/components/Form/Field/field.mcp.d.ts +1 -1
  333. package/dist/components/Form/Field/field.mcp.js +158 -18
  334. package/dist/components/Form/Field/field.messages.d.ts +47 -0
  335. package/dist/components/Form/Field/field.messages.js +64 -0
  336. package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
  337. package/dist/components/Form/Field/field.state.svelte.js +525 -16
  338. package/dist/components/Form/Field/field.theme.d.ts +46 -0
  339. package/dist/components/Form/Field/field.theme.js +33 -0
  340. package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
  341. package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
  342. package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
  343. package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
  344. package/dist/components/Form/Field/index.d.ts +5 -2
  345. package/dist/components/Form/Field/index.js +1 -0
  346. package/dist/components/Form/Field/schemas.js +7 -2
  347. package/dist/components/Form/File/FileInput.svelte +24 -3
  348. package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
  349. package/dist/components/Form/File/fileInput.mcp.js +1 -0
  350. package/dist/components/Form/Form/Form.svelte +49 -15
  351. package/dist/components/Form/Form/FormActions.svelte +3 -1
  352. package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
  353. package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
  354. package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
  355. package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
  356. package/dist/components/Form/Form/form.d.ts +84 -11
  357. package/dist/components/Form/Form/form.mcp.d.ts +1 -1
  358. package/dist/components/Form/Form/form.mcp.js +178 -12
  359. package/dist/components/Form/Form/form.props.d.ts +32 -1
  360. package/dist/components/Form/Form/form.registry.d.ts +28 -0
  361. package/dist/components/Form/Form/form.registry.js +59 -0
  362. package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
  363. package/dist/components/Form/Form/form.state.svelte.js +322 -28
  364. package/dist/components/Form/Form/index.d.ts +4 -1
  365. package/dist/components/Form/Form/index.js +1 -0
  366. package/dist/components/Form/Form/visibility.d.ts +3130 -1863
  367. package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
  368. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
  369. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
  370. package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
  371. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
  372. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
  373. package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
  374. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
  375. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
  376. package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
  377. package/dist/components/Form/NumberInput/index.d.ts +1 -1
  378. package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
  379. package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
  380. package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
  381. package/dist/components/Form/PasswordInput/Password.svelte +28 -1
  382. package/dist/components/Form/PasswordInput/index.d.ts +1 -1
  383. package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
  384. package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
  385. package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
  386. package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
  387. package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
  388. package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
  389. package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
  390. package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
  391. package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
  392. package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
  393. package/dist/components/Form/PinInput/PinInput.svelte +44 -9
  394. package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
  395. package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
  396. package/dist/components/Form/PinInput/index.d.ts +1 -1
  397. package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
  398. package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
  399. package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
  400. package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
  401. package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
  402. package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
  403. package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
  404. package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
  405. package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
  406. package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
  407. package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
  408. package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
  409. package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
  410. package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
  411. package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
  412. package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
  413. package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
  414. package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
  415. package/dist/components/Form/Select/Select.svelte +186 -48
  416. package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
  417. package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
  418. package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
  419. package/dist/components/Form/Select/index.d.ts +2 -1
  420. package/dist/components/Form/Select/index.js +1 -0
  421. package/dist/components/Form/Select/select.align.d.ts +5 -0
  422. package/dist/components/Form/Select/select.align.js +19 -5
  423. package/dist/components/Form/Select/select.attributes.d.ts +36 -0
  424. package/dist/components/Form/Select/select.attributes.js +27 -0
  425. package/dist/components/Form/Select/select.mcp.d.ts +1 -1
  426. package/dist/components/Form/Select/select.mcp.js +103 -18
  427. package/dist/components/Form/Select/select.props.d.ts +87 -10
  428. package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
  429. package/dist/components/Form/Select/select.state.svelte.js +354 -59
  430. package/dist/components/Form/Select/select.theme.d.ts +21 -0
  431. package/dist/components/Form/Select/select.theme.js +22 -0
  432. package/dist/components/Form/Slider/Slider.svelte +54 -14
  433. package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
  434. package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
  435. package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
  436. package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
  437. package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
  438. package/dist/components/Form/Slider/index.d.ts +1 -1
  439. package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
  440. package/dist/components/Form/Slider/slider.mcp.js +55 -11
  441. package/dist/components/Form/Slider/slider.props.d.ts +35 -2
  442. package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
  443. package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
  444. package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
  445. package/dist/components/Form/Slider/slider.theme.js +35 -17
  446. package/dist/components/Form/Switch/Switch.svelte +61 -38
  447. package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
  448. package/dist/components/Form/Switch/switch.mcp.js +25 -5
  449. package/dist/components/Form/Switch/switch.props.d.ts +14 -1
  450. package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
  451. package/dist/components/Form/Switch/switch.theme.js +8 -3
  452. package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
  453. package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
  454. package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
  455. package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
  456. package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
  457. package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
  458. package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
  459. package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
  460. package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
  461. package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
  462. package/dist/components/Form/TextArea/TextArea.svelte +8 -0
  463. package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
  464. package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
  465. package/dist/components/Form/TextInput/TextInput.svelte +8 -1
  466. package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
  467. package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
  468. package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
  469. package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
  470. package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
  471. package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
  472. package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
  473. package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
  474. package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
  475. package/dist/components/HoverCard/HoverCard.svelte +100 -10
  476. package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
  477. package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
  478. package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
  479. package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
  480. package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
  481. package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
  482. package/dist/components/HoverCard/hoverCard.theme.js +9 -2
  483. package/dist/components/HoverCard/index.d.ts +1 -0
  484. package/dist/components/HoverCard/index.js +1 -0
  485. package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
  486. package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
  487. package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
  488. package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
  489. package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
  490. package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
  491. package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
  492. package/dist/components/Kanban/kanban.theme.js +7 -3
  493. package/dist/components/Layout/layoutSpacing.d.ts +2 -2
  494. package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
  495. package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
  496. package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
  497. package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
  498. package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
  499. package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
  500. package/dist/components/Map/maplibre-cdn.js +3 -2
  501. package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
  502. package/dist/components/Markdown/markdown.mcp.js +2 -1
  503. package/dist/components/Markdown/markdown.theme.js +18 -9
  504. package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
  505. package/dist/components/Menu/Menu.svelte +3 -3
  506. package/dist/components/Menu/Menu.svelte.d.ts +1 -1
  507. package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
  508. package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
  509. package/dist/components/Menu/MenuFloating.svelte +421 -74
  510. package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
  511. package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
  512. package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
  513. package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
  514. package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
  515. package/dist/components/Menu/MenuSearchField.svelte +54 -0
  516. package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
  517. package/dist/components/Menu/MenuStacked.svelte +404 -158
  518. package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
  519. package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
  520. package/dist/components/Menu/index.d.ts +2 -1
  521. package/dist/components/Menu/index.js +1 -0
  522. package/dist/components/Menu/menu.attributes.d.ts +37 -0
  523. package/dist/components/Menu/menu.attributes.js +28 -0
  524. package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
  525. package/dist/components/Menu/menu.filter.svelte.js +143 -0
  526. package/dist/components/Menu/menu.mcp.d.ts +1 -1
  527. package/dist/components/Menu/menu.mcp.js +227 -17
  528. package/dist/components/Menu/menu.platform.d.ts +5 -0
  529. package/dist/components/Menu/menu.platform.js +11 -0
  530. package/dist/components/Menu/menu.props.d.ts +172 -9
  531. package/dist/components/Menu/menu.theme.d.ts +147 -0
  532. package/dist/components/Menu/menu.theme.js +101 -0
  533. package/dist/components/Menu/menuTree.d.ts +35 -1
  534. package/dist/components/Menu/menuTree.js +158 -1
  535. package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
  536. package/dist/components/MenuBar/menuBar.mcp.js +4 -2
  537. package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
  538. package/dist/components/MenuOption/MenuOption.svelte +5 -1
  539. package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
  540. package/dist/components/MenuOption/menuOption.mcp.js +8 -0
  541. package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
  542. package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
  543. package/dist/components/MenuOption/menuOption.theme.js +24 -4
  544. package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
  545. package/dist/components/Mermaid/mermaid.mcp.js +8 -8
  546. package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
  547. package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
  548. package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
  549. package/dist/components/Mermaid/mermaid.theme.js +26 -1
  550. package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
  551. package/dist/components/Meter/Meter.svelte +110 -24
  552. package/dist/components/Meter/Meter.svelte.d.ts +12 -12
  553. package/dist/components/Meter/meter.mcp.d.ts +1 -1
  554. package/dist/components/Meter/meter.mcp.js +23 -37
  555. package/dist/components/Meter/meter.props.d.ts +36 -44
  556. package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
  557. package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
  558. package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
  559. package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
  560. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
  561. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
  562. package/dist/components/NavigationMenu/index.d.ts +4 -0
  563. package/dist/components/NavigationMenu/index.js +3 -0
  564. package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
  565. package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
  566. package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
  567. package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
  568. package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
  569. package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
  570. package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
  571. package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
  572. package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
  573. package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
  574. package/dist/components/Overlay/Overlay.svelte +19 -30
  575. package/dist/components/Overlay/index.d.ts +1 -0
  576. package/dist/components/Overlay/index.js +1 -0
  577. package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
  578. package/dist/components/Overlay/overlay.attributes.js +14 -0
  579. package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
  580. package/dist/components/Overlay/overlay.mcp.js +21 -3
  581. package/dist/components/Overlay/overlay.props.d.ts +8 -4
  582. package/dist/components/Popover/Popover.svelte +163 -52
  583. package/dist/components/Popover/Popover.svelte.d.ts +23 -2
  584. package/dist/components/Popover/PopoverSession.svelte +12 -0
  585. package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
  586. package/dist/components/Popover/index.d.ts +10 -2
  587. package/dist/components/Popover/index.js +4 -1
  588. package/dist/components/Popover/popover.api.d.ts +83 -0
  589. package/dist/components/Popover/popover.api.js +1 -0
  590. package/dist/components/Popover/popover.attributes.d.ts +32 -0
  591. package/dist/components/Popover/popover.attributes.js +28 -0
  592. package/dist/components/Popover/popover.claims.d.ts +19 -0
  593. package/dist/components/Popover/popover.claims.js +45 -0
  594. package/dist/components/Popover/popover.mcp.d.ts +1 -1
  595. package/dist/components/Popover/popover.mcp.js +163 -31
  596. package/dist/components/Popover/popover.position.d.ts +226 -0
  597. package/dist/components/Popover/popover.position.js +402 -0
  598. package/dist/components/Popover/popover.props.d.ts +179 -24
  599. package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
  600. package/dist/components/Popover/popover.state.svelte.js +1034 -194
  601. package/dist/components/Popover/popover.theme.d.ts +15 -0
  602. package/dist/components/Popover/popover.theme.js +27 -2
  603. package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
  604. package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
  605. package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
  606. package/dist/components/PopupMenu/popupMenu.context.js +52 -0
  607. package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
  608. package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
  609. package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
  610. package/dist/components/Progress/Progress.svelte +160 -0
  611. package/dist/components/Progress/Progress.svelte.d.ts +4 -0
  612. package/dist/components/Progress/index.d.ts +3 -0
  613. package/dist/components/Progress/index.js +2 -0
  614. package/dist/components/Progress/progress.mcp.d.ts +1 -0
  615. package/dist/components/Progress/progress.mcp.js +101 -0
  616. package/dist/components/Progress/progress.props.d.ts +79 -0
  617. package/dist/components/Progress/progress.props.js +1 -0
  618. package/dist/components/Progress/progress.theme.d.ts +129 -0
  619. package/dist/components/Progress/progress.theme.js +83 -0
  620. package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
  621. package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
  622. package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
  623. package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
  624. package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
  625. package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
  626. package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
  627. package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
  628. package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
  629. package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
  630. package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
  631. package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
  632. package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
  633. package/dist/components/RichTextInput/suggestions.js +2 -0
  634. package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
  635. package/dist/components/ScrollArea/index.d.ts +2 -1
  636. package/dist/components/ScrollArea/index.js +1 -0
  637. package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
  638. package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
  639. package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
  640. package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
  641. package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
  642. package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
  643. package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
  644. package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
  645. package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
  646. package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
  647. package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
  648. package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
  649. package/dist/components/Sidebar/SidebarAction.svelte +13 -3
  650. package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
  651. package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
  652. package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
  653. package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
  654. package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
  655. package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
  656. package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
  657. package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
  658. package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
  659. package/dist/components/Sidebar/index.d.ts +1 -0
  660. package/dist/components/Sidebar/index.js +1 -0
  661. package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
  662. package/dist/components/Sidebar/sidebar-position.js +31 -2
  663. package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
  664. package/dist/components/Sidebar/sidebar.attributes.js +29 -0
  665. package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
  666. package/dist/components/Sidebar/sidebar.mcp.js +45 -10
  667. package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
  668. package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
  669. package/dist/components/Sidebar/sidebar.theme.js +113 -62
  670. package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
  671. package/dist/components/Stepper/Stepper.svelte +2 -0
  672. package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
  673. package/dist/components/Stepper/stepper.mcp.js +1 -0
  674. package/dist/components/Stepper/stepper.props.d.ts +5 -0
  675. package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
  676. package/dist/components/Stepper/stepper.state.svelte.js +31 -12
  677. package/dist/components/Tabbar/Tabbar.svelte +55 -16
  678. package/dist/components/Tabbar/index.d.ts +1 -1
  679. package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
  680. package/dist/components/Tabbar/tabbar.mcp.js +26 -9
  681. package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
  682. package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
  683. package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
  684. package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
  685. package/dist/components/Tabs/Tabs.svelte +73 -16
  686. package/dist/components/Tabs/index.d.ts +2 -1
  687. package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
  688. package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
  689. package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
  690. package/dist/components/Tabs/tabs.mcp.js +22 -4
  691. package/dist/components/Tabs/tabs.props.d.ts +39 -12
  692. package/dist/components/Tabs/tabs.theme.js +3 -1
  693. package/dist/components/Theme/Theme.svelte +44 -27
  694. package/dist/components/Theme/helper.d.ts +16 -2
  695. package/dist/components/Theme/helper.js +46 -4
  696. package/dist/components/Theme/theme.mcp.d.ts +1 -1
  697. package/dist/components/Theme/theme.mcp.js +103 -0
  698. package/dist/components/Theme/theme.props.d.ts +16 -0
  699. package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
  700. package/dist/components/Theme/theme.state.svelte.js +18 -1
  701. package/dist/components/Toast/Toast.svelte +184 -39
  702. package/dist/components/Toast/Toaster.svelte +14 -10
  703. package/dist/components/Toast/index.d.ts +1 -0
  704. package/dist/components/Toast/toast.mcp.d.ts +1 -1
  705. package/dist/components/Toast/toast.mcp.js +47 -6
  706. package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
  707. package/dist/components/Toast/toast.state.svelte.js +513 -68
  708. package/dist/components/Toast/toast.theme.js +1 -1
  709. package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
  710. package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
  711. package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
  712. package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
  713. package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
  714. package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
  715. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
  716. package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
  717. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
  718. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
  719. package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
  720. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
  721. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
  722. package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
  723. package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
  724. package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
  725. package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
  726. package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
  727. package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
  728. package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
  729. package/dist/components/Tooltip/Tooltip.svelte +4 -12
  730. package/dist/components/Tooltip/TooltipHost.svelte +136 -15
  731. package/dist/components/Tooltip/index.d.ts +1 -0
  732. package/dist/components/Tooltip/index.js +1 -0
  733. package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
  734. package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
  735. package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
  736. package/dist/components/Tooltip/tooltip.attributes.js +28 -0
  737. package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
  738. package/dist/components/Tooltip/tooltip.mcp.js +111 -10
  739. package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
  740. package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
  741. package/dist/components/Tooltip/tooltip.surface.js +42 -0
  742. package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
  743. package/dist/components/Utils/BeforeHydratation.svelte +14 -3
  744. package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
  745. package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
  746. package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
  747. package/dist/generated/componentAliases.d.ts +3 -0
  748. package/dist/generated/componentAliases.js +3 -0
  749. package/dist/generated/componentContract.d.ts +79 -34
  750. package/dist/generated/componentContract.js +231 -6
  751. package/dist/generated/componentMcpRegistry.js +6 -0
  752. package/dist/i18n/ar.js +107 -3
  753. package/dist/i18n/context.svelte.d.ts +6 -0
  754. package/dist/i18n/context.svelte.js +12 -0
  755. package/dist/i18n/de.js +101 -3
  756. package/dist/i18n/en.d.ts +91 -2
  757. package/dist/i18n/en.js +101 -3
  758. package/dist/i18n/es.js +101 -3
  759. package/dist/i18n/fr.js +101 -3
  760. package/dist/i18n/ja.js +101 -3
  761. package/dist/i18n/pt.js +101 -3
  762. package/dist/i18n/zh.js +101 -3
  763. package/dist/tailwind/geometry.js +7 -0
  764. package/dist/tailwind/global.js +31 -0
  765. package/dist/types/index.d.ts +1 -0
  766. package/dist/types/types.mcp.d.ts +1 -1
  767. package/dist/types/types.mcp.js +23 -0
  768. package/dist/utils/cspNonce.d.ts +16 -0
  769. package/dist/utils/cspNonce.js +39 -0
  770. package/dist/utils/cva/merge.d.ts +5 -1
  771. package/dist/utils/cva/merge.js +6 -4
  772. package/dist/utils/focus.d.ts +34 -0
  773. package/dist/utils/focus.js +93 -0
  774. package/dist/utils/focusHistory.d.ts +21 -0
  775. package/dist/utils/focusHistory.js +99 -0
  776. package/dist/utils/handlers.d.ts +7 -0
  777. package/dist/utils/handlers.js +14 -0
  778. package/dist/utils/hoverIntent.d.ts +42 -0
  779. package/dist/utils/hoverIntent.js +57 -0
  780. package/dist/utils/id.d.ts +7 -0
  781. package/dist/utils/id.js +15 -0
  782. package/dist/utils/layers.svelte.d.ts +32 -4
  783. package/dist/utils/layers.svelte.js +214 -21
  784. package/dist/utils/listFilter.d.ts +44 -0
  785. package/dist/utils/listFilter.js +130 -0
  786. package/dist/utils/match.d.ts +35 -0
  787. package/dist/utils/match.js +36 -0
  788. package/dist/utils/number.d.ts +126 -0
  789. package/dist/utils/number.js +401 -0
  790. package/dist/utils/openChange.d.ts +88 -0
  791. package/dist/utils/openChange.js +71 -0
  792. package/dist/utils/openLifecycle.svelte.d.ts +41 -0
  793. package/dist/utils/openLifecycle.svelte.js +134 -0
  794. package/dist/utils/pointerDrag.d.ts +10 -0
  795. package/dist/utils/pointerDrag.js +37 -2
  796. package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
  797. package/dist/utils/pragmaticDragAndDrop.js +8 -3
  798. package/dist/utils/range.d.ts +62 -0
  799. package/dist/utils/range.js +70 -0
  800. package/dist/utils/requestNativeSubmit.d.ts +17 -0
  801. package/dist/utils/requestNativeSubmit.js +47 -0
  802. package/dist/utils/safeArea.svelte.d.ts +10 -1
  803. package/dist/utils/safeArea.svelte.js +19 -11
  804. package/dist/utils/stateAttributes.d.ts +108 -0
  805. package/dist/utils/stateAttributes.js +78 -0
  806. package/dist/utils/swipeVelocity.d.ts +32 -0
  807. package/dist/utils/swipeVelocity.js +59 -0
  808. package/dist/utils/timer.svelte.d.ts +65 -2
  809. package/dist/utils/timer.svelte.js +159 -25
  810. package/dist/utils/trigger.d.ts +41 -0
  811. package/dist/utils/trigger.js +103 -0
  812. package/dist/utils/typeahead.d.ts +9 -0
  813. package/dist/utils/typeahead.js +21 -9
  814. package/dist/utils/useDndList.svelte.d.ts +1 -1
  815. package/dist/utils/useDndList.svelte.js +6 -23
  816. package/dist/utils/useFocusScope.svelte.d.ts +29 -0
  817. package/dist/utils/useFocusScope.svelte.js +189 -27
  818. package/dist/utils/useHoverAction.svelte.d.ts +44 -4
  819. package/dist/utils/useHoverAction.svelte.js +161 -51
  820. package/dist/utils/useKeyDown.svelte.d.ts +19 -2
  821. package/dist/utils/useKeyDown.svelte.js +19 -12
  822. package/dist/utils/useListNavigation.svelte.d.ts +94 -13
  823. package/dist/utils/useListNavigation.svelte.js +261 -35
  824. package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
  825. package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
  826. package/dist/utils/useNavigation.svelte.d.ts +36 -3
  827. package/dist/utils/useNavigation.svelte.js +699 -332
  828. package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
  829. package/dist/utils/usePressAndHold.svelte.js +191 -0
  830. package/dist/utils/useScrollLock.svelte.d.ts +20 -1
  831. package/dist/utils/useScrollLock.svelte.js +54 -13
  832. package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
  833. package/dist/utils/useSlidingIndicator.svelte.js +27 -5
  834. package/dist/utils/useTabBridge.svelte.d.ts +20 -0
  835. package/dist/utils/useTabBridge.svelte.js +109 -0
  836. package/dist/utils/values.d.ts +15 -0
  837. package/dist/utils/values.js +49 -0
  838. package/package.json +31 -2
  839. package/dist/generated/componentMcpRegistry.d.ts +0 -142
  840. package/dist/utils/useDrag.svelte.d.ts +0 -11
  841. package/dist/utils/useDrag.svelte.js +0 -55
@@ -55,6 +55,7 @@
55
55
  nextLabel={request.nextLabel}
56
56
  previousLabel={request.previousLabel}
57
57
  discardLabel={request.discardLabel}
58
+ showOther={request.showOther}
58
59
  onValueChange={(values) => onValuesChange({ request, values })}
59
60
  onSubmit={(detail: AIAskUserQuestionSubmitPayload) =>
60
61
  onResolve({ request, state: 'completed', detail })}
@@ -2,16 +2,22 @@
2
2
  import { useI18n } from '../../i18n/context.svelte.js';
3
3
  import type { VirtualItem } from '@tanstack/svelte-virtual';
4
4
  import type { Attachment } from 'svelte/attachments';
5
+ import Alert from '../Alert/Alert.svelte';
6
+ import AIAskUserQuestionSummary from '../AIAskUserQuestion/AIAskUserQuestionSummary.svelte';
5
7
  import { getAIConversation } from '../AIConversation/aiConversation.state.svelte.js';
6
- import Empty from '../Empty/Empty.svelte';
7
8
  import AIMessage from '../AIMessage/AIMessage.svelte';
8
- import AISuggestions from '../AISuggestion/AISuggestions.svelte';
9
+ import AIMessageActions from '../AIMessageActions/AIMessageActions.svelte';
10
+ import type { AIMessageActionVisibility } from '../AIMessageActions/aiMessageActions.props.js';
11
+ import AIReasoning from '../AIReasoning/AIReasoning.svelte';
12
+ import AISuggestion from '../AISuggestion/AISuggestion.svelte';
13
+ import Button from '../Button/Button.svelte';
14
+ import { arrowsClockwiseIcon } from '../Icons/arrowsClockwise.js';
9
15
  import Slot from '../Slot/Slot.svelte';
10
16
  import AITool from '../AITool/AITool.svelte';
11
17
  import AIThreadMarker from './AIThreadMarker.svelte';
12
18
  import type { AIThreadItem, AIThreadProps, AIThreadRole } from './aiThread.props.js';
13
19
  import { useAIThreadTheme } from './aiThread.theme.js';
14
- import type { AIThreadRenderItem } from './threadRenderItems.js';
20
+ import type { AIThreadRenderItem, AIThreadUnitActions } from './threadRenderItems.js';
15
21
 
16
22
  type MessageRenderItem<TMessage extends AIThreadItem> = Extract<
17
23
  AIThreadRenderItem<TMessage>,
@@ -25,6 +31,7 @@
25
31
  | 'density'
26
32
  | 'messageSize'
27
33
  | 'messageVariant'
34
+ | 'messageColor'
28
35
  | 'empty'
29
36
  | 'message'
30
37
  | 'messageActions'
@@ -46,28 +53,35 @@
46
53
  | 'marker'
47
54
  | 'markerIcon'
48
55
  | 'markerContent'
56
+ | 'liveText'
49
57
  | 'theme'
50
58
  > & {
51
59
  renderItems: readonly AIThreadRenderItem<TMessage>[];
52
60
  virtualItems: readonly VirtualItem[];
53
61
  totalSize: number;
62
+ /** The element sized to `totalSize`, so the thread can resize it in step with the virtualizer. */
63
+ listRef?: HTMLDivElement | null;
54
64
  measureItem: Attachment<HTMLElement>;
65
+ error?: unknown;
66
+ errorRetry?: () => void | Promise<void>;
55
67
  };
56
68
 
57
69
  let {
58
70
  renderItems,
59
71
  virtualItems,
60
72
  totalSize,
73
+ listRef = $bindable(null),
61
74
  measureItem,
62
75
  suggestions = [],
63
76
  onSelect,
64
77
  density = 'normal',
65
78
  messageSize = 'normal',
66
- messageVariant = 'bubble',
79
+ messageVariant = 'minimal',
80
+ messageColor,
67
81
  empty,
68
82
  message: messageSlot,
69
83
  messageActions,
70
- messageActionsVisibility,
84
+ messageActionsVisibility = 'latest',
71
85
  messageCopyable,
72
86
  messageEditable,
73
87
  messageRetryable,
@@ -85,18 +99,76 @@
85
99
  marker: markerSlot,
86
100
  markerIcon,
87
101
  markerContent,
102
+ liveText,
103
+ error,
104
+ errorRetry,
88
105
  theme
89
106
  }: Props<TMessage> = $props();
107
+ // Tool calls and reasoning read one step below the message text (code blocks do the same), so
108
+ // they sit with the answer without competing with it; `small` messages are already at the floor.
109
+ const blockSize = $derived(messageSize === 'large' ? 'normal' : 'small');
90
110
 
91
111
  const conversation = getAIConversation<TMessage>();
92
112
  const classes = $derived(useAIThreadTheme(theme));
93
113
  const t = $derived(useI18n());
94
- const resolvedMessageActionsVisibility = $derived(messageActionsVisibility ?? 'always');
95
114
 
96
115
  function messageRole(message: TMessage): AIThreadRole {
97
116
  return message.role ?? 'assistant';
98
117
  }
99
118
 
119
+ // The turn under the pointer. Its bar may sit on a row of its own, outside the hovered row, so
120
+ // hovering any row of the turn (reasoning, tools, text) reveals the turn's bar.
121
+ let hoveredUnit = $state<string>();
122
+
123
+ function enterUnit(event: PointerEvent, unit: string | undefined): void {
124
+ if (event.pointerType === 'touch') return;
125
+ hoveredUnit = unit;
126
+ }
127
+
128
+ function leaveUnit(unit: string | undefined): void {
129
+ if (hoveredUnit === unit) hoveredUnit = undefined;
130
+ }
131
+
132
+ // `latest` keeps the final assistant turn's bar visible and the rest on hover (always shown on
133
+ // touch screens by AIMessageActions' hover recipe). Segments that do not end their unit have no
134
+ // bar at all.
135
+ function unitVisibility(
136
+ actions: AIThreadUnitActions<TMessage> | false | undefined,
137
+ unit: string | undefined
138
+ ): AIMessageActionVisibility {
139
+ if (actions === false) return 'none';
140
+ const visibility =
141
+ messageActionsVisibility !== 'latest'
142
+ ? messageActionsVisibility
143
+ : actions?.latest
144
+ ? 'always'
145
+ : 'hover';
146
+ return visibility === 'hover' && unit !== undefined && hoveredUnit === unit
147
+ ? 'always'
148
+ : visibility;
149
+ }
150
+
151
+ // Whether a row ends with a built-in action bar. The bar keeps its layout space while it is
152
+ // hover-hidden, so that space already separates the turn from the next one.
153
+ function endsWithBar(item: AIThreadRenderItem<TMessage> | undefined): boolean {
154
+ if (!item || messageActions === false || messageActionsVisibility === 'none') return false;
155
+ if (item.kind === 'actions') return true;
156
+ return item.kind === 'message' && !messageSlot && Boolean(item.actions);
157
+ }
158
+
159
+ // The spacing rhythm: the first row of a turn adds the larger gap between turns, a turn's own
160
+ // action-bar row sits right under the row it closes, other rows keep the in-turn gap. After a
161
+ // turn that ends with a bar, the bar stands in for the larger gap (`afterBar`), so a hidden bar
162
+ // does not add its height on top of the turn gap.
163
+ function rowBoundary(index: number): 'part' | 'unit' | 'afterBar' | 'bar' {
164
+ const item = renderItems[index];
165
+ if (!item || index === 0) return 'part';
166
+ if (item.kind === 'actions') return 'bar';
167
+ const previous = renderItems[index - 1];
168
+ if (item.unit !== undefined && item.unit === previous?.unit) return 'part';
169
+ return endsWithBar(previous) ? 'afterBar' : 'unit';
170
+ }
171
+
100
172
  function previousMessage(index: number): MessageRenderItem<TMessage> | undefined {
101
173
  for (let previousIndex = index - 1; previousIndex >= 0; previousIndex -= 1) {
102
174
  const item = renderItems[previousIndex];
@@ -117,90 +189,220 @@
117
189
  }
118
190
  return item.message.name;
119
191
  }
192
+
193
+ function displayError(value: unknown): string {
194
+ if (value instanceof Error && value.message) return value.message;
195
+ if (typeof value === 'string' && value) return value;
196
+ return t.aiChatErrorDescription;
197
+ }
120
198
  </script>
121
199
 
122
- {#snippet suggestionContent()}
123
- <AISuggestions {suggestions} {onSelect} class="mx-auto max-w-full" />
200
+ {#snippet pendingLabel()}
201
+ <span data-slot="ai-thread-pending-label" class={classes.pending()}>
202
+ {liveText || t.aiReasoningThinking}
203
+ </span>
204
+ {/snippet}
205
+
206
+ {#snippet errorDescription()}
207
+ <span class={classes.errorBody()}>
208
+ <span>{displayError(error)}</span>
209
+ {#if errorRetry}
210
+ <Button
211
+ size="small"
212
+ variant="outline"
213
+ color="danger"
214
+ prefix={arrowsClockwiseIcon}
215
+ data-slot="ai-thread-error-retry"
216
+ onclick={() => void errorRetry?.()}>{t.aiThreadRetry}</Button
217
+ >
218
+ {/if}
219
+ </span>
124
220
  {/snippet}
125
221
 
126
222
  {#if renderItems.length === 0}
127
223
  {#if empty}
128
224
  <Slot render={empty} />
129
225
  {:else}
130
- <Empty
131
- class="min-h-48"
132
- title={t.aiThreadEmptyTitle}
133
- description={t.aiThreadEmptyDescription}
134
- content={suggestions.length > 0 ? suggestionContent : undefined}
135
- />
226
+ <div data-slot="ai-thread-empty" class={classes.empty()}>
227
+ <h2 data-slot="ai-thread-greeting" class={classes.greeting()}>{t.aiThreadGreeting}</h2>
228
+ {#if suggestions.length > 0}
229
+ <div
230
+ data-slot="ai-thread-empty-suggestions"
231
+ role="group"
232
+ aria-label={t.promptSuggestions}
233
+ class={classes.emptySuggestions()}
234
+ >
235
+ {#each suggestions as suggestion, index (`${suggestion}:${index}`)}
236
+ <AISuggestion {suggestion} onSelect={(value) => onSelect?.(value)} />
237
+ {/each}
238
+ </div>
239
+ {/if}
240
+ </div>
136
241
  {/if}
137
242
  {:else}
138
- <div class={classes.list()} style:height={`${totalSize}px`}>
243
+ <!-- Pointer tracking only reveals a turn's hover actions; the actions stay keyboard-reachable. -->
244
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
245
+ <div
246
+ bind:this={listRef}
247
+ class={classes.list()}
248
+ style:height={`${totalSize}px`}
249
+ onpointerleave={() => (hoveredUnit = undefined)}
250
+ >
139
251
  {#each virtualItems as virtualItem (virtualItem.key)}
140
252
  {@const item = renderItems[virtualItem.index]}
141
253
  {#if item}
254
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
142
255
  <div
143
256
  data-slot="ai-thread-item"
144
257
  data-index={virtualItem.index}
145
258
  data-kind={item.kind}
146
- class={classes.item({ density })}
259
+ class={classes.item({ density, boundary: rowBoundary(virtualItem.index) })}
147
260
  style:transform={`translateY(${virtualItem.start}px)`}
261
+ onpointerenter={(event) => enterUnit(event, item.unit)}
262
+ onpointerleave={() => leaveUnit(item.unit)}
148
263
  {@attach measureItem}
149
264
  >
150
- {#if item.kind === 'message'}
151
- {#if messageSlot}
152
- <Slot
153
- render={messageSlot}
154
- payload={{
155
- message: item.message,
156
- index: item.messageIndex,
157
- actionsVisibility: resolvedMessageActionsVisibility
158
- }}
265
+ <div data-slot="ai-thread-item-content" class={classes.content()}>
266
+ {#if item.kind === 'message'}
267
+ {@const visibility = unitVisibility(item.actions, item.unit)}
268
+ {#if messageSlot}
269
+ <Slot
270
+ render={messageSlot}
271
+ payload={{
272
+ message: item.message,
273
+ index: item.messageIndex,
274
+ actionsVisibility: visibility
275
+ }}
276
+ />
277
+ {:else}
278
+ <AIMessage
279
+ message={item.message}
280
+ index={item.messageIndex}
281
+ class={classes.message()}
282
+ size={messageSize}
283
+ {density}
284
+ variant={messageVariant}
285
+ color={messageColor}
286
+ name={messageName(item, virtualItem.index)}
287
+ content={item.content ?? item.message.content ?? ''}
288
+ files={item.files ?? item.message.files}
289
+ streaming={item.streaming}
290
+ {conversation}
291
+ actions={item.actions === false ? false : messageActions}
292
+ actionVisibility={visibility}
293
+ copyAction={messageCopyable}
294
+ editAction={messageEditable}
295
+ retryAction={messageRetryable}
296
+ onCopy={onMessageCopy}
297
+ onEdit={onMessageEdit}
298
+ onRetry={onMessageRetry}
299
+ />
300
+ {/if}
301
+ {:else if item.kind === 'marker'}
302
+ <AIThreadMarker
303
+ {item}
304
+ size={messageSize}
305
+ marker={markerSlot}
306
+ {markerIcon}
307
+ {markerContent}
308
+ />
309
+ {:else if item.kind === 'tool-group'}
310
+ {#if toolSlot}
311
+ <Slot
312
+ render={toolSlot}
313
+ payload={{
314
+ tools: item.tools,
315
+ message: item.message,
316
+ index: item.messageIndex
317
+ }}
318
+ />
319
+ {:else}
320
+ <AITool
321
+ tools={item.tools}
322
+ size={blockSize}
323
+ icon={toolIcon}
324
+ title={toolTitle}
325
+ content={toolContent}
326
+ input={toolInput}
327
+ output={toolOutput}
328
+ error={toolError}
329
+ status={toolStatus}
330
+ />
331
+ {/if}
332
+ {:else if item.kind === 'reasoning'}
333
+ <AIReasoning content={item.content} streaming={item.streaming} size={blockSize} />
334
+ {:else if item.kind === 'question-summary'}
335
+ <AIAskUserQuestionSummary
336
+ size={messageSize}
337
+ questions={item.questions}
338
+ value={item.value}
339
+ title={item.title}
159
340
  />
160
- {:else}
341
+ {:else if item.kind === 'sources'}
342
+ <div data-slot="ai-thread-sources" data-size={messageSize} class={classes.sources()}>
343
+ <span class={classes.sourcesLabel()}>{t.aiThreadSources}</span>
344
+ {#each item.sources as source (source.id)}
345
+ {#if source.url}
346
+ <!-- eslint-disable svelte/no-navigation-without-resolve -- Sources are external URLs from the model; library links cannot depend on SvelteKit routing. -->
347
+ <a
348
+ data-slot="ai-thread-source"
349
+ href={source.url}
350
+ target="_blank"
351
+ rel="noopener noreferrer"
352
+ title={source.url}
353
+ class={classes.source()}>{source.title}</a
354
+ >
355
+ <!-- eslint-enable svelte/no-navigation-without-resolve -->
356
+ {:else}
357
+ <span data-slot="ai-thread-source" class={classes.source()}>{source.title}</span
358
+ >
359
+ {/if}
360
+ {/each}
361
+ </div>
362
+ {:else if item.kind === 'actions'}
363
+ {@const visibility = unitVisibility(item.actions, item.unit)}
364
+ {#if messageActions !== false && visibility !== 'none'}
365
+ <AIMessageActions
366
+ message={item.actions.message}
367
+ messageIndex={item.actions.messageIndex}
368
+ role={item.actions.role}
369
+ content={item.actions.content}
370
+ size={messageSize}
371
+ {conversation}
372
+ actions={messageActions}
373
+ {visibility}
374
+ copyable={messageCopyable}
375
+ editable={messageEditable}
376
+ retryable={messageRetryable}
377
+ onCopy={onMessageCopy}
378
+ onEdit={onMessageEdit}
379
+ onRetry={onMessageRetry}
380
+ class={classes.actions()}
381
+ />
382
+ {/if}
383
+ {:else if item.kind === 'pending'}
161
384
  <AIMessage
162
- message={item.message}
163
- index={item.messageIndex}
385
+ from="assistant"
164
386
  size={messageSize}
387
+ {density}
165
388
  variant={messageVariant}
166
- name={messageName(item, virtualItem.index)}
167
- content={item.content ?? item.message.content ?? ''}
168
- {conversation}
169
- actions={messageActions}
170
- actionVisibility={resolvedMessageActionsVisibility}
171
- copyAction={messageCopyable}
172
- editAction={messageEditable}
173
- retryAction={messageRetryable}
174
- onCopy={onMessageCopy}
175
- onEdit={onMessageEdit}
176
- onRetry={onMessageRetry}
177
- />
178
- {/if}
179
- {:else if item.kind === 'marker'}
180
- <AIThreadMarker {item} marker={markerSlot} {markerIcon} {markerContent} />
181
- {:else if item.kind === 'tool-group'}
182
- {#if toolSlot}
183
- <Slot
184
- render={toolSlot}
185
- payload={{
186
- tools: item.tools,
187
- message: item.message,
188
- index: item.messageIndex
189
- }}
190
- />
191
- {:else}
192
- <AITool
193
- tools={item.tools}
194
- icon={toolIcon}
195
- title={toolTitle}
196
- content={toolContent}
197
- input={toolInput}
198
- output={toolOutput}
199
- error={toolError}
200
- status={toolStatus}
389
+ actions={false}
390
+ class={classes.message()}
391
+ aria-hidden="true"
392
+ data-slot="ai-thread-pending"
393
+ children={pendingLabel}
201
394
  />
395
+ {:else if item.kind === 'error'}
396
+ <div data-slot="ai-thread-error" class={classes.error()}>
397
+ <Alert
398
+ color="danger"
399
+ variant="soft"
400
+ title={t.aiChatErrorTitle}
401
+ description={errorDescription}
402
+ />
403
+ </div>
202
404
  {/if}
203
- {/if}
405
+ </div>
204
406
  </div>
205
407
  {/if}
206
408
  {/each}
@@ -2,16 +2,20 @@ import type { VirtualItem } from '@tanstack/svelte-virtual';
2
2
  import type { Attachment } from 'svelte/attachments';
3
3
  import type { AIThreadItem, AIThreadProps } from './aiThread.props.js';
4
4
  import type { AIThreadRenderItem } from './threadRenderItems.js';
5
- type Props<TMessage extends AIThreadItem> = Pick<AIThreadProps<TMessage>, 'suggestions' | 'onSelect' | 'density' | 'messageSize' | 'messageVariant' | 'empty' | 'message' | 'messageActions' | 'messageActionsVisibility' | 'messageCopyable' | 'messageEditable' | 'messageRetryable' | 'onMessageCopy' | 'onMessageEdit' | 'onMessageRetry' | 'tool' | 'toolIcon' | 'toolTitle' | 'toolContent' | 'toolInput' | 'toolOutput' | 'toolError' | 'toolStatus' | 'marker' | 'markerIcon' | 'markerContent' | 'theme'> & {
5
+ type Props<TMessage extends AIThreadItem> = Pick<AIThreadProps<TMessage>, 'suggestions' | 'onSelect' | 'density' | 'messageSize' | 'messageVariant' | 'messageColor' | 'empty' | 'message' | 'messageActions' | 'messageActionsVisibility' | 'messageCopyable' | 'messageEditable' | 'messageRetryable' | 'onMessageCopy' | 'onMessageEdit' | 'onMessageRetry' | 'tool' | 'toolIcon' | 'toolTitle' | 'toolContent' | 'toolInput' | 'toolOutput' | 'toolError' | 'toolStatus' | 'marker' | 'markerIcon' | 'markerContent' | 'liveText' | 'theme'> & {
6
6
  renderItems: readonly AIThreadRenderItem<TMessage>[];
7
7
  virtualItems: readonly VirtualItem[];
8
8
  totalSize: number;
9
+ /** The element sized to `totalSize`, so the thread can resize it in step with the virtualizer. */
10
+ listRef?: HTMLDivElement | null;
9
11
  measureItem: Attachment<HTMLElement>;
12
+ error?: unknown;
13
+ errorRetry?: () => void | Promise<void>;
10
14
  };
11
15
  declare function $$render<TMessage extends AIThreadItem = AIThreadItem>(): {
12
16
  props: Props<TMessage>;
13
17
  exports: {};
14
- bindings: "";
18
+ bindings: "listRef";
15
19
  slots: {};
16
20
  events: {};
17
21
  };
@@ -19,7 +23,7 @@ declare class __sveltets_Render<TMessage extends AIThreadItem = AIThreadItem> {
19
23
  props(): ReturnType<typeof $$render<TMessage>>['props'];
20
24
  events(): ReturnType<typeof $$render<TMessage>>['events'];
21
25
  slots(): ReturnType<typeof $$render<TMessage>>['slots'];
22
- bindings(): "";
26
+ bindings(): "listRef";
23
27
  exports(): {};
24
28
  }
25
29
  interface $$IsomorphicComponent {
@@ -6,11 +6,13 @@
6
6
 
7
7
  let {
8
8
  item,
9
+ size = 'normal',
9
10
  marker,
10
11
  markerIcon,
11
12
  markerContent
12
13
  }: {
13
14
  item: Extract<AIThreadRenderItem<TMessage>, { kind: 'marker' }>;
15
+ size?: import('../../types/theme.js').Sizes;
14
16
  marker?: import('../Slot/slot.js').Slot<AIThreadRenderPayload<TMessage>>;
15
17
  markerIcon?: import('../Slot/slot.js').Slot<AIThreadRenderPayload<TMessage>>;
16
18
  markerContent?: import('../Slot/slot.js').Slot<AIThreadRenderPayload<TMessage>>;
@@ -30,5 +32,10 @@
30
32
  {#if marker}
31
33
  <Slot render={marker} {payload} />
32
34
  {:else}
33
- <AIMarker variant={item.variant ?? 'separator'} icon={markerIcon ? icon : undefined} {content} />
35
+ <AIMarker
36
+ {size}
37
+ variant={item.variant ?? 'separator'}
38
+ icon={markerIcon ? icon : undefined}
39
+ {content}
40
+ />
34
41
  {/if}
@@ -5,6 +5,7 @@ declare function $$render<TMessage extends AIThreadItem = AIThreadItem>(): {
5
5
  item: Extract<AIThreadRenderItem<TMessage>, {
6
6
  kind: "marker";
7
7
  }>;
8
+ size?: import("../../types/theme.js").Sizes;
8
9
  marker?: import("../Slot/slot.js").Slot<AIThreadRenderPayload<TMessage>>;
9
10
  markerIcon?: import("../Slot/slot.js").Slot<AIThreadRenderPayload<TMessage>>;
10
11
  markerContent?: import("../Slot/slot.js").Slot<AIThreadRenderPayload<TMessage>>;
@@ -1 +1 @@
1
- export declare const aiThreadDescription = "\n# AIThread\n\nVirtualized AI transcript with stable message keys, initial end anchoring, pinned append following, prepend preservation, message actions, AI SDK tool parts, ask-user-question flows, prompt suggestions, and the standalone AIThreadToc primitive.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { AIThread, type AIThreadItem } from './index.ts';\n\n let messages: AIThreadItem[] = $state([]);\n let announcement = $state('');\n</script>\n\n<AIThread\n {messages}\n getMessageKey={(message) => message.id}\n liveText={announcement}\n streaming={Boolean(announcement)}\n showToc\n/>\n```\n\n`liveText` is announced through a polite, atomic, screen-reader-only region. It is not appended to the visual transcript and does not suppress the empty state.\n\n## Message input\n\n`AIThreadItem` accepts message, context/marker, tool-shaped, file, and attachment fields. The `parts` array supports:\n\n- `{ type: 'text', text }`\n- `{ type: 'marker', content, variant? }`\n- `{ type: 'tool', tool: AIToolCall }`\n- AI SDK `dynamic-tool` and `tool-*` parts with `toolCallId`, `state`, `input`, `output`, `structuredContent`, `result`, `error`, and `_meta`\n\nWhen text parts are present, top-level message content is not rendered again. Consecutive ordinary tools are grouped through `AITool`.\n\n## Core props\n\n- **messages**: readonly TMessage[] - Direct transcript. Falls back to the nearest AIConversation.\n- **getMessageKey**: (message, index) => string | number | bigint | undefined - Stable virtualization key. Prefer persistent identifiers.\n- **liveText**: string - Screen-reader announcement. Falls back to AIConversation.\n- **streaming**: boolean - Sets the busy state. Falls back to AIConversation.\n- **density**: 'compact' | 'normal' | 'comfortable' - Transcript row and edge spacing. Default 'normal'.\n- **messageSize**: 'small' | 'normal' | 'large' - Size forwarded to default AIMessage rows. Default 'normal'.\n- **messageVariant**: 'bubble' | 'minimal' - Presentation forwarded to default AIMessage rows. Default 'bubble'.\n- **followOutput**: boolean - Follow appended rows only while pinned. Default true.\n- **bottomThreshold**: number - End-pinned tolerance in pixels. Default 80.\n- **estimateSize**: number - Estimated row height. Defaults to 80, 96, or 120 from density.\n- **overscan**: number - Extra virtual rows. Default 4.\n- **padding**: number - Shared start/end virtual padding. Defaults to 8, 16, or 24 from density.\n- **paddingStart**, **paddingEnd**: number - Per-edge virtual padding overrides.\n- **scrollBehavior**: 'auto' | 'smooth' | 'instant' - Append, TOC, and scroll-button behavior. Default 'smooth'.\n- **showScrollButton**: boolean - Show the latest-message action away from the end. Default true.\n- **scrollButtonPosition**: 'left' | 'center' | 'right' - Default 'right'.\n- **ref**: HTMLDivElement - Bindable thread root, not the internal scroll viewport.\n- **class**: string - Thread-root classes.\n- **role**: HTML role - Thread-root role. Default 'log'.\n- **viewportLabel**: string - Label for the focusable transcript viewport.\n- **onscroll**: (event) => void - Raw native viewport-scroll callback.\n- Native div attributes and Svelte attachments are forwarded to the thread root.\n\n## Empty state and suggestions\n\n- **empty**: Slot - Replaces the empty state.\n- **suggestions**: readonly string[] - Default empty-state suggestions. Falls back to AIConversation.\n- **onSelect**: (suggestion) => void - Pick event for an empty-state suggestion; takes precedence over the provider's default `setInput` behavior.\n\n## Message composition\n\n- **message**: Slot<{ message, index, actionsVisibility }> - Replaces a complete message row. The\n resolved action visibility keeps custom renderers aligned with the thread's latest-message rule.\n- **messageSize**, **messageVariant** - Configure only the default AIMessage renderer; a custom message slot owns its presentation.\n- **messageActions**: AIMessageActionSnippet | false - Replaces or disables default actions.\n- **messageActionsVisibility**: 'hover' | 'always' | 'none' (default: 'always')\n- **messageCopyable**, **messageEditable**, **messageRetryable**: boolean\n- **onMessageCopy**, **onMessageEdit**, **onMessageRetry**: AIMessage action handlers.\n\nAssistant text that continues through tool rows into another assistant segment does not render\nan action region. Actions belong to the terminal assistant segment for that user turn; completed\nhistorical turns retain hover actions.\n\n## Tool and marker composition\n\n- **tool**: Slot<{ tools, message, index }> - Replaces an ordinary grouped tool row.\n- **toolIcon**, **toolTitle**, **toolContent**, **toolInput**, **toolOutput**, **toolError**, **toolStatus** - Forwarded to the current AITool API.\n- **marker**: Slot<{ message, index }> - Replaces a complete context/marker row.\n- **markerIcon**, **markerContent** - Compose the default AIMarker.\n\n## Ask-user-question\n\nPending ask-user-question tools are auto-detected. Inside AIConversation, AIThread publishes a detected request only when no provider request is active and clears only the exact detected request it previously published; explicit provider requests retain precedence. Standalone AIThread renders the active question below the virtual viewport.\n\n- **activeAskUserQuestion**: request | null - Direct request takes precedence. Explicit null suppresses provider state and detection.\n- **renderAskUserQuestion**: boolean - Show and filter the active question tool. Default true.\n- **askUserQuestionDisabled**: boolean - Disable the question form.\n- **onAskUserQuestionStateChange**: async callback - Takes precedence over AIConversation resolution.\n\n## Minimap\n\n- **showToc**: boolean - Show the user-turn minimap when at least two user turns overflow the viewport.\n- **tocSide**: 'left' | 'right' - Default 'left'.\n- **tocMaxPins**: number - Maximum compacted pins.\n- **tocTheme**: AIThreadTocThemeProps - Theme overrides forwarded to the default standalone primitive.\n- **toc**: Slot<AIThreadTocState> - Replaces the minimap and receives entries, range, active index, visible offsets, `scrollToIndex`, and `scrollToOffset`.\n\n```svelte\n<script lang=\"ts\">\n import { AIThread } from './index.ts';\n import { AIThreadToc } from '../AIThreadToc/index.ts';\n</script>\n\n<AIThread {messages} showToc>\n {#snippet toc(state)}\n <AIThreadToc {state} side=\"left\" previewAlign=\"start\" />\n {/snippet}\n</AIThread>\n```\n\nImport `AIThreadToc`, its controlled state types, and its dedicated theme from `entasis/ai-thread-toc`. AIThread composes that exact primitive for the default minimap.\n\n## Exports\n\nThe `entasis/ai-thread` entry exports `AIThread`, thread/message/part/question types, scroll behavior and button-position types, marker/tool/action types, and the AIThread theme helpers. It keeps an `AIThreadToc` re-export for composition compatibility; the dedicated primitive entry is `entasis/ai-thread-toc`.\n";
1
+ export declare const aiThreadDescription = "\n# AIThread\n\nVirtualized AI transcript with stable message keys, initial end anchoring, pinned append following, prepend preservation, message actions, AI SDK tool parts, ask-user-question flows, prompt suggestions, and the standalone AIThreadToc primitive.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { AIThread, type AIThreadItem } from './index.ts';\n\n let messages: AIThreadItem[] = $state([]);\n let announcement = $state('');\n</script>\n\n<AIThread\n {messages}\n getMessageKey={(message) => message.id}\n liveText={announcement}\n streaming={Boolean(announcement)}\n showToc\n/>\n```\n\n`liveText` is announced through a polite, atomic, screen-reader-only region and does not suppress the empty state. While `streaming` is true and the last item is a user turn, a pending assistant row shows `liveText` (or \"Thinking\u2026\") with the `shimmer` utility; the live region announces the same text. The segment that ends a streaming reply shows a pulsing caret.\n\n## Message input\n\n`AIThreadItem` accepts message, context/marker, tool-shaped, file, and attachment fields. The `parts` array supports:\n\n- `{ type: 'text', text }`\n- `{ type: 'marker', content, variant? }`\n- `{ type: 'tool', tool: AIToolCall }`\n- AI SDK `dynamic-tool` and `tool-*` parts with `toolCallId`, `state`, `input`, `output`, `structuredContent`, `result`, `error`, `approval`, and `_meta`. States map through `getAIToolStatusFromState`: `approval-requested`, `approval-responded` and `output-denied` become AITool's awaiting, approved and denied statuses, so a call waiting on the user never spins.\n- AI SDK `{ type: 'reasoning', text, state? }` - rendered with AIReasoning, streaming while `state` is `'streaming'` (or, without a state, while it is the last part of a streaming reply).\n- AI SDK `source-url` / `source-document` parts - one \"Sources\" row of chips per message; only http(s) URLs become links.\n- AI SDK `file` parts - shown as file previews with the message's text segment (or a segment of their own). Only https, blob and image data URLs are used as previews.\n- `step-start` and `data-*` parts carry no visible content and are skipped. An assistant message with nothing visible yet (only such parts, empty text, or the empty placeholder a client adds before the first token) is not rendered, so the pending row stays until real content arrives.\n\nWhen text parts are present, top-level message content is not rendered again. Consecutive ordinary tools are grouped through `AITool`. An ask-user-question tool that is answered (by the conversation, by the AI SDK output state, or locally through this thread) renders as a compact question \u2192 answer summary (`AIAskUserQuestionSummary`); a dismissed one settles as a cancelled call.\n\n## Core props\n\n- **messages**: readonly TMessage[] - Direct transcript. Falls back to the nearest AIConversation.\n- **getMessageKey**: (message, index) => string | number | bigint | undefined - Stable virtualization key. Prefer persistent identifiers.\n- **liveText**: string - Screen-reader announcement. Falls back to AIConversation.\n- **streaming**: boolean - Sets the busy state. Falls back to AIConversation.\n- **density**: 'compact' | 'normal' | 'comfortable' - Transcript row and edge spacing, and the spacing inside messages (table cells, code blocks, space between paragraphs and lists). Default 'normal'.\n- **messageSize**: 'small' | 'normal' | 'large' - Type scale of the whole transcript. Message text, tables, lists and quotes read at it; code blocks at 0.9\u00D7 of it; tool calls and reasoning one step below it (never under text-xs); sources, markers and answered-question summaries follow it too. Default 'normal'.\n- **messageVariant**: 'minimal' | 'bubble' - Presentation forwarded to default AIMessage rows. Default 'minimal' (flat full-width assistant prose).\n- **messageColor**: Colors - User-bubble colour forwarded to default AIMessage rows. Neutral (the theme default) is a quiet grey bubble; any other role paints a solid bubble.\n- **contentWidth**: string | number - Maximum width of the centred reading column (a CSS length, or pixels). Sets `--ai-thread-content-width`; without it rows follow an ancestor's `--ai-chat-content-width` (AIChat sets 48rem) and otherwise span the thread.\n- **followOutput**: boolean - Follow appended rows only while pinned. Default true.\n- **bottomThreshold**: number - End-pinned tolerance in pixels. Default 80.\n- **estimateSize**: number - Estimated row height. Defaults to 80, 96, or 120 from density.\n- **overscan**: number - Extra virtual rows. Default 4.\n- **padding**: number - Shared start/end virtual padding. Defaults to 8, 16, or 24 from density.\n- **paddingStart**, **paddingEnd**: number - Per-edge virtual padding overrides. Message actions sit inside their row, so the end padding reserves no extra room for them.\n- **scrollBehavior**: 'auto' | 'smooth' | 'instant' - TOC and scroll-to-latest behavior. Default 'smooth'. Following output (an appended row, streamed text, a docked question resizing the thread) is always instant, so new content is in place on its first painted frame.\n- **showScrollButton**: boolean - Show the round scroll-to-latest button as soon as the view leaves the end (by wheel, trackpad, keys or scrollbar). Default true.\n- **scrollButtonPosition**: 'left' | 'center' | 'right' - Default 'center', just above whatever sits below the thread.\n- **ref**: HTMLDivElement - Bindable thread root, not the internal scroll viewport.\n- **class**: string - Thread-root classes.\n- **role**: HTML role - Thread-root role. Default 'log'.\n- **viewportLabel**: string - Label for the focusable transcript viewport.\n- **onscroll**: (event) => void - Raw native viewport-scroll callback.\n- Native div attributes and Svelte attachments are forwarded to the thread root.\n\n## Empty state, suggestions and errors\n\n- **empty**: Slot - Replaces the empty state, a vertically centred greeting (\"How can I help you today?\") with wrapping suggestion chips.\n- **suggestions**: readonly string[] - Empty-state chips, then follow-ups below the transcript after a finished assistant turn (not while streaming, during a question or under an error). Follow-ups are one row that scrolls sideways with an edge fade instead of wrapping. Falls back to AIConversation.\n- **showFollowUps**: boolean - Show the follow-ups. Default true.\n- **onSelect**: (suggestion) => void - Pick event for a suggestion or follow-up; takes precedence over the provider's default `setInput` behavior.\n- **error**: unknown - Shown as a danger row at the end of the transcript, where the reply failed. Falls back to AIConversation. An empty transcript shows the error instead of the greeting.\n- **showError**: boolean - Show that row. Default true.\n- **onErrorRetry**: () => void - The row's Retry button. Defaults to the conversation's `retry` targeting the last message; without either, there is no Retry button.\n\n## Message composition\n\n- **message**: Slot<{ message, index, actionsVisibility }> - Replaces a complete message row. The\n resolved action visibility keeps custom renderers aligned with the thread's latest-message rule.\n- **messageVariant** configures only the default AIMessage renderer, and a custom message slot owns its presentation. **messageSize** also sizes the built-in reasoning, tool, source, marker and summary rows.\n- **messageActions**: AIMessageActionSnippet | false - Replaces or disables default actions.\n- **messageActionsVisibility**: 'latest' | 'hover' | 'always' | 'none' (default: 'latest'). `latest` keeps the final assistant turn's bar visible and reveals the rest on hover or focus; hovering any row of a turn (its reasoning, tools or text) reveals that turn's bar, and hover-revealed bars always show on touch screens. Hidden bars keep their height, so no row draws under them. A system notice or marker after the last reply does not make it lose its `latest` bar or hide the follow-ups.\n- **messageCopyable**, **messageEditable**, **messageRetryable**: boolean\n- **onMessageCopy**, **onMessageEdit**, **onMessageRetry**: AIMessage action handlers.\n\nA turn is one unit. A user message has its own bar; an assistant turn \u2014 reasoning, tools, and text\nup to the next user message or marker \u2014 has a single bar at its end. When the turn ends with its\nonly text segment the bar sits under that text; otherwise it gets a row of its own whose copy takes\nthe whole turn's text and whose retry targets the turn's last assistant message. The bar of a\nreply that is still streaming appears when it ends. The message slot's `actionsVisibility` is\n`none` for segments that do not end their unit. Rows of one turn are spaced by one gap; a larger\nfixed gap separates turns, and the action bar sits right under the row it closes.\n\n## Tool and marker composition\n\n- **tool**: Slot<{ tools, message, index }> - Replaces an ordinary grouped tool row.\n- **toolIcon**, **toolTitle**, **toolContent**, **toolInput**, **toolOutput**, **toolError**, **toolStatus** - Forwarded to the current AITool API.\n- **marker**: Slot<{ message, index }> - Replaces a complete context/marker row.\n- **markerIcon**, **markerContent** - Compose the default AIMarker.\n\n## Ask-user-question\n\nPending ask-user-question tools are auto-detected. Inside AIConversation, AIThread publishes a detected request only when no provider request is active and clears only the exact detected request it previously published; explicit provider requests retain precedence. Standalone AIThread renders the active question below the virtual viewport.\n\n- **activeAskUserQuestion**: request | null - Direct request takes precedence. Explicit null suppresses provider state and detection.\n- **renderAskUserQuestion**: boolean - Show and filter the active question tool. Default true.\n- **askUserQuestionDisabled**: boolean - Disable the question form.\n- **onAskUserQuestionStateChange**: async callback - Takes precedence over AIConversation resolution.\n\n## Minimap\n\n- **showToc**: boolean - Show the user-turn minimap when at least two user turns overflow the viewport. Below a 480px-wide viewport the minimap and its gutter step aside.\n- **tocSide**: 'left' | 'right' - Default 'left'.\n- **tocMaxPins**: number - Maximum compacted pins.\n- **tocTheme**: AIThreadTocThemeProps - Theme overrides forwarded to the default standalone primitive.\n- **toc**: Slot<AIThreadTocState> - Replaces the minimap and receives entries, range, active index, visible offsets, `scrollToIndex`, and `scrollToOffset`.\n\n```svelte\n<script lang=\"ts\">\n import { AIThread } from './index.ts';\n import { AIThreadToc } from '../AIThreadToc/index.ts';\n</script>\n\n<AIThread {messages} showToc>\n {#snippet toc(state)}\n <AIThreadToc {state} side=\"left\" previewAlign=\"start\" />\n {/snippet}\n</AIThread>\n```\n\nImport `AIThreadToc`, its controlled state types, and its dedicated theme from `entasis/ai-thread-toc`. AIThread composes that exact primitive for the default minimap.\n\n## Exports\n\nThe `entasis/ai-thread` entry exports `AIThread`, thread/message/part/question types, scroll behavior and button-position types, marker/tool/action types, and the AIThread theme helpers. It keeps an `AIThreadToc` re-export for composition compatibility; the dedicated primitive entry is `entasis/ai-thread-toc`.\n";