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
@@ -0,0 +1,79 @@
1
+ import { getAIToolStatusFromState } from '../AITool/toolRendering.js';
2
+ /**
3
+ * Every tool call a transcript message carries, in order: AI SDK tool parts and `{ type: 'tool' }`
4
+ * parts first, then `tools`, `tool`, or a tool-shaped message. Shared by the render-item
5
+ * derivation and ask-user-question detection so both see the same calls with the same ids.
6
+ */
7
+ export function collectAIThreadMessageTools(message, _messageIndex, messageKey, includePartTools = true) {
8
+ const partTools = (includePartTools ? (message.parts ?? []) : []).flatMap((part, index) => {
9
+ const tool = toolFromPart(part, `${messageKey}:part-${index}`);
10
+ return tool ? [tool] : [];
11
+ });
12
+ if (partTools.length > 0)
13
+ return partTools;
14
+ if (message.tools?.length) {
15
+ return message.tools.map((tool, index) => normalizeToolCall(tool, `${messageKey}:tool-${index}`));
16
+ }
17
+ if (message.tool)
18
+ return [normalizeToolCall(message.tool, messageKey)];
19
+ if (message.role === 'tool' || message.type === 'tool') {
20
+ return [
21
+ {
22
+ id: message.id ?? messageKey,
23
+ name: message.toolName ?? message.name,
24
+ title: message.name,
25
+ status: messageToolStatus(message),
26
+ input: message.input,
27
+ output: message.output !== undefined ? message.output : message.content,
28
+ error: message.error
29
+ }
30
+ ];
31
+ }
32
+ return [];
33
+ }
34
+ export function normalizeToolCall(tool, fallbackId) {
35
+ return { ...tool, id: tool.id ?? fallbackId, status: toolStatus(tool) };
36
+ }
37
+ export function toolFromPart(part, fallbackId) {
38
+ if (part.type === 'tool' && part.tool)
39
+ return normalizeToolCall(part.tool, fallbackId);
40
+ if (!isToolPart(part))
41
+ return undefined;
42
+ const name = part.toolName ?? (part.type.startsWith('tool-') ? part.type.slice(5) : undefined);
43
+ return normalizeToolCall({
44
+ id: part.toolCallId ?? fallbackId,
45
+ name,
46
+ title: name,
47
+ // AI SDK approval states (`approval-requested`, `approval-responded`, `output-denied`) map
48
+ // onto AITool's own statuses, so a call waiting on the user never spins.
49
+ status: getAIToolStatusFromState(part.state),
50
+ input: part.input,
51
+ output: part.output,
52
+ structuredContent: part.structuredContent,
53
+ result: part.result,
54
+ error: part.errorText ?? part.error,
55
+ ...(part.approval ? { approval: part.approval } : {}),
56
+ _meta: part._meta
57
+ }, fallbackId);
58
+ }
59
+ export function isToolPart(part) {
60
+ return part.type === 'dynamic-tool' || part.type?.startsWith('tool-') === true;
61
+ }
62
+ function toolStatus(tool) {
63
+ if (tool.status)
64
+ return tool.status;
65
+ if (tool.error !== undefined)
66
+ return 'error';
67
+ if (tool.output !== undefined || tool.result !== undefined)
68
+ return 'success';
69
+ return undefined;
70
+ }
71
+ function messageToolStatus(message) {
72
+ if (message.status)
73
+ return message.status;
74
+ if (message.error !== undefined)
75
+ return 'error';
76
+ if (message.output !== undefined || message.content !== undefined)
77
+ return 'success';
78
+ return undefined;
79
+ }
@@ -7,10 +7,12 @@
7
7
  import { quintOut } from 'svelte/easing';
8
8
  import { prefersReducedMotion } from '../../utils/motion.svelte.js';
9
9
  import { scale } from 'svelte/transition';
10
+ import type { Attachment } from 'svelte/attachments';
10
11
  import HoverCard from '../HoverCard/HoverCard.svelte';
11
12
  import ScrollArea from '../ScrollArea/ScrollArea.svelte';
12
13
  import Slot from '../Slot/Slot.svelte';
13
14
  import type { AIThreadItem, AIThreadTocEntry, AIThreadTocProps } from './aiThreadToc.props.js';
15
+ import type { AIThreadTocPin } from '../AIThread/aiThread.props.js';
14
16
  import { useAIThreadTocTheme } from './aiThreadToc.theme.js';
15
17
  import AIThreadTocPreview from './AIThreadTocPreview.svelte';
16
18
  import {
@@ -30,15 +32,21 @@
30
32
  const PREVIEW_DELAY = 80;
31
33
  const PREVIEW_CLOSE_DELAY = 120;
32
34
  const PREVIEW_GAP = 10;
35
+ const PIN_ACTIVE_OPACITY = 1;
36
+ const PIN_VISIBLE_OPACITY = 0.55;
37
+ const PIN_IDLE_OPACITY = 0.28;
38
+ const DEFAULT_MIN_CONTAINER_WIDTH = 480;
33
39
 
34
40
  let {
35
41
  ref = $bindable(),
36
42
  state: tocState,
37
43
  maxPins = 96,
44
+ showRange = false,
38
45
  scrollAreaLabel,
39
46
  side = 'left',
40
47
  previewSide,
41
48
  previewAlign = 'center',
49
+ minContainerWidth = DEFAULT_MIN_CONTAINER_WIDTH,
42
50
  pin,
43
51
  preview,
44
52
  title,
@@ -56,16 +64,51 @@
56
64
  let pointerPinPosition = $state<number>();
57
65
  let focusedPinIndex = $state<number>();
58
66
  let pinAreaElement = $state<HTMLDivElement>();
67
+ // Roving tab stop: the last pin focused from the keyboard (the first pin until then). It never
68
+ // follows the active turn, so scrolling the thread writes no `tabindex`; a keyboard entry into
69
+ // the rail moves on to the active pin instead (see `handlePinFocus`).
70
+ let rovingKey = $state<string>();
71
+ // Width of the surrounding container, measured while the rail is mounted.
72
+ let containerWidth = $state<number>();
73
+ const narrow = $derived(
74
+ minContainerWidth > 0 && containerWidth !== undefined && containerWidth < minContainerWidth
75
+ );
76
+ // A touch tap previews a pin first; a second tap on the same pin navigates.
77
+ let lastPointerType: string | undefined;
78
+ let touchPreviewKey = $state<string>();
59
79
  let pendingPointerY: number | undefined;
60
80
  let pointerFrame: number | undefined;
61
81
  let previewOpenTimer: ReturnType<typeof setTimeout> | undefined;
62
82
  let previewCloseTimer: ReturnType<typeof setTimeout> | undefined;
63
- const pins = $derived(
64
- compactAIThreadTocEntries<TMessage>(tocState.entries, {
83
+ // The TOC state is rebuilt on every scroll. Keep the previous pins while they still show the same
84
+ // entries: new pin objects make the keyed list run its flip animation, which measures every pin
85
+ // with getBoundingClientRect on each scroll event and made scrolling stutter.
86
+ let previousPins: AIThreadTocPin<TMessage>[] = [];
87
+ const t = $derived(useI18n());
88
+ const pins = $derived.by(() => {
89
+ const next = compactAIThreadTocEntries<TMessage>(tocState.entries, {
65
90
  maxPins,
66
91
  activeEntryIndex: tocState.activeIndex
67
- })
68
- );
92
+ });
93
+ const same =
94
+ next.length === previousPins.length &&
95
+ next.every((pin, index) => {
96
+ const previous = previousPins[index];
97
+ return (
98
+ pin.key === previous.key &&
99
+ pin.isBucket === previous.isBucket &&
100
+ pin.entry.index === previous.entry.index &&
101
+ pin.entry.title === previous.entry.title &&
102
+ pin.entry.excerpt === previous.entry.excerpt &&
103
+ pin.entry.fileCount === previous.entry.fileCount
104
+ );
105
+ });
106
+ if (!same) previousPins = next;
107
+ return previousPins;
108
+ });
109
+ // Built once per pin list: in the template the label would be re-truncated on every scroll,
110
+ // because it updates with the pin's active and visible state.
111
+ const pinLabels = $derived(pins.map((tocPin) => getAIThreadTocLabel(tocPin.entry, t)));
69
112
  const visibleStartPercent = $derived(offsetPercent(tocState.visibleStartOffset));
70
113
  const visibleEndPercent = $derived(offsetPercent(tocState.visibleEndOffset));
71
114
  const visibleRangePercent = $derived(Math.max(0, visibleEndPercent - visibleStartPercent));
@@ -80,10 +123,18 @@
80
123
  previewPinIndex >= 0 ? pinStackTopPercent(previewPinIndex, pins.length) : 50
81
124
  );
82
125
  const resolvedPreviewPosition = $derived(previewPosition());
126
+ const activePinIndex = $derived(
127
+ pins.findIndex((tocPin) => tocPin.entryIndex === tocState.activeIndex)
128
+ );
129
+ const tabStopIndex = $derived(
130
+ Math.max(0, rovingKey === undefined ? 0 : pins.findIndex((tocPin) => tocPin.key === rovingKey))
131
+ );
132
+ const previewTurn = $derived(
133
+ previewEntry ? tocState.entries.findIndex((entry) => entry.key === previewEntry?.key) + 1 : 0
134
+ );
83
135
  const pinTransitionDuration = $derived(prefersReducedMotion() ? 0 : 240);
84
136
  const pinFlipDuration = $derived(prefersReducedMotion() ? 0 : 170);
85
137
  const classes = $derived(useAIThreadTocTheme(theme));
86
- const t = $derived(useI18n());
87
138
 
88
139
  function offsetPercent(offset: number): number {
89
140
  const rangeSize =
@@ -122,7 +173,11 @@
122
173
  targeted: boolean
123
174
  ): string {
124
175
  if (targeted) return '1';
125
- const baseOpacity = active || visible ? 0.8 : 0.32;
176
+ const baseOpacity = active
177
+ ? PIN_ACTIVE_OPACITY
178
+ : visible
179
+ ? PIN_VISIBLE_OPACITY
180
+ : PIN_IDLE_OPACITY;
126
181
  const peakOpacity = Math.max(baseOpacity, PIN_NEIGHBOR_MAX_OPACITY);
127
182
  return (baseOpacity + influence * (peakOpacity - baseOpacity)).toFixed(3);
128
183
  }
@@ -131,6 +186,98 @@
131
186
  tocState.scrollToIndex(entry.index);
132
187
  }
133
188
 
189
+ function handlePinPointerDown(event: PointerEvent): void {
190
+ lastPointerType = event.pointerType;
191
+ }
192
+
193
+ function handlePinClick(entry: AIThreadTocEntry<TMessage>, pinIndex: number, key: string): void {
194
+ const touch = lastPointerType === 'touch';
195
+ lastPointerType = undefined;
196
+ if (touch && touchPreviewKey !== key) {
197
+ touchPreviewKey = key;
198
+ pointerPinPosition = pinIndex;
199
+ pointerPinIndex = pinIndex;
200
+ openPreview(entry, true);
201
+ return;
202
+ }
203
+ if (touch) closeTouchPreview();
204
+ activate(entry);
205
+ }
206
+
207
+ function closeTouchPreview(): void {
208
+ if (touchPreviewKey === undefined) return;
209
+ touchPreviewKey = undefined;
210
+ pointerPinIndex = undefined;
211
+ pointerPinPosition = undefined;
212
+ schedulePreviewClose();
213
+ }
214
+
215
+ // A touch preview closes on the next tap outside the rail.
216
+ $effect(() => {
217
+ if (touchPreviewKey === undefined || !ref) return;
218
+ const root = ref;
219
+ const ownerDocument = root.ownerDocument;
220
+ const handlePointerDown = (event: PointerEvent) => {
221
+ if (event.target instanceof Node && root.contains(event.target)) return;
222
+ closeTouchPreview();
223
+ };
224
+ ownerDocument.addEventListener('pointerdown', handlePointerDown, true);
225
+ return () => ownerDocument.removeEventListener('pointerdown', handlePointerDown, true);
226
+ });
227
+
228
+ function handleStackKeydown(event: KeyboardEvent): void {
229
+ if (event.altKey || event.ctrlKey || event.metaKey || pins.length === 0) return;
230
+ const current =
231
+ event.target instanceof Element ? event.target.closest('[data-toc-pin-key]') : null;
232
+ if (!current) return;
233
+ const index = pins.findIndex(
234
+ (tocPin) => tocPin.key === current.getAttribute('data-toc-pin-key')
235
+ );
236
+ let next: number;
237
+ if (event.key === 'ArrowDown' || event.key === 'ArrowRight') next = index + 1;
238
+ else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') next = index - 1;
239
+ else if (event.key === 'Home') next = 0;
240
+ else if (event.key === 'End') next = pins.length - 1;
241
+ else return;
242
+ event.preventDefault();
243
+ focusPin(Math.max(0, Math.min(pins.length - 1, next)));
244
+ }
245
+
246
+ function focusPin(pinIndex: number): void {
247
+ const tocPin = pins[pinIndex];
248
+ if (!tocPin || !pinAreaElement) return;
249
+ rovingKey = tocPin.key;
250
+ const element = Array.from(
251
+ pinAreaElement.querySelectorAll<HTMLElement>('[data-slot="ai-thread-toc-pin"]')
252
+ ).find((candidate) => candidate.dataset.tocPinKey === tocPin.key);
253
+ element?.focus();
254
+ }
255
+
256
+ // The rail is a wide-layout affordance: it removes itself when the surrounding container (the
257
+ // nearest ancestor wider than the rail, typically the thread) is narrower than
258
+ // `minContainerWidth`.
259
+ const watchContainer: Attachment<HTMLElement> = (node) => {
260
+ if (typeof ResizeObserver === 'undefined') return;
261
+ let container = node.parentElement;
262
+ while (container && container.clientWidth <= node.offsetWidth + 1) {
263
+ container = container.parentElement;
264
+ }
265
+ if (!container) return;
266
+ const measured = container;
267
+ // Only the width is stored; `narrow` derives from it, so a new `minContainerWidth` applies
268
+ // at once instead of waiting for the next resize.
269
+ const measure = () => {
270
+ containerWidth = measured.clientWidth;
271
+ };
272
+ const observer = new ResizeObserver(measure);
273
+ observer.observe(measured);
274
+ measure();
275
+ return () => {
276
+ observer.disconnect();
277
+ containerWidth = undefined;
278
+ };
279
+ };
280
+
134
281
  function handleStackPointerMove(event: PointerEvent): void {
135
282
  if (event.pointerType !== 'mouse' && event.pointerType !== 'pen') return;
136
283
  pendingPointerY = event.clientY;
@@ -190,6 +337,10 @@
190
337
  const pinIndex = Math.round(pinPosition);
191
338
  const tocPin = pins[pinIndex];
192
339
  if (!tocPin) return;
340
+ if (lastPointerType === 'touch') {
341
+ handlePinClick(tocPin.entry, pinIndex, tocPin.key);
342
+ return;
343
+ }
193
344
  activatePointerPin(pinIndex);
194
345
  activate(tocPin.entry);
195
346
  }
@@ -204,7 +355,16 @@
204
355
  focusedPinIndex = undefined;
205
356
  return;
206
357
  }
358
+ // Tab (or Shift+Tab) into the rail lands on the resting tab stop; the active turn's pin is
359
+ // where a keyboard user expects to start.
360
+ const from = event.relatedTarget;
361
+ const entering = !(from instanceof Node && pinAreaElement?.contains(from));
362
+ if (entering && activePinIndex >= 0 && activePinIndex !== pinIndex) {
363
+ focusPin(activePinIndex);
364
+ return;
365
+ }
207
366
  focusedPinIndex = pinIndex;
367
+ rovingKey = pins[pinIndex]?.key;
208
368
  openPreview(entry, true);
209
369
  }
210
370
 
@@ -292,6 +452,8 @@
292
452
  {#if previewEntry}
293
453
  <AIThreadTocPreview
294
454
  entry={previewEntry}
455
+ turn={previewTurn}
456
+ total={tocState.entries.length}
295
457
  {preview}
296
458
  {title}
297
459
  {excerpt}
@@ -306,17 +468,20 @@
306
468
  bind:this={ref}
307
469
  data-slot="ai-thread-toc"
308
470
  aria-label={t.threadMinimap}
471
+ data-narrow={narrow || undefined}
472
+ hidden={narrow || undefined}
309
473
  class={classes.root({ side, className })}
310
474
  {...rootAttributes}
475
+ {@attach watchContainer}
311
476
  >
312
- {#if pins.length > 0}
477
+ {#if pins.length > 0 && !narrow}
313
478
  <ScrollArea
314
479
  label={scrollAreaLabel ?? t.threadMinimapEntries}
480
+ viewportAttrs={{ tabindex: -1 }}
315
481
  class={classes.scrollArea()}
316
482
  theme={aiThreadTocScrollAreaTheme}
317
483
  >
318
484
  <div class={classes.scrollContent()}>
319
- <!-- svelte-ignore a11y_click_events_have_key_events -->
320
485
  <!-- svelte-ignore a11y_no_static_element_interactions -->
321
486
  <div
322
487
  data-slot="ai-thread-toc-stack"
@@ -325,7 +490,9 @@
325
490
  style:height={`${trackHeight}px`}
326
491
  onpointermove={handleStackPointerMove}
327
492
  onpointerleave={handleStackPointerLeave}
493
+ onpointerdown={handlePinPointerDown}
328
494
  onfocusout={handleStackFocusOut}
495
+ onkeydown={handleStackKeydown}
329
496
  onclick={handleStackClick}
330
497
  >
331
498
  <div
@@ -334,14 +501,16 @@
334
501
  class={classes.pinArea()}
335
502
  style={`--ai-thread-toc-preview-top: ${previewPinTop}%`}
336
503
  >
337
- <div data-slot="ai-thread-toc-rail" class={classes.rail()}>
338
- <div
339
- data-slot="ai-thread-toc-viewport"
340
- class={classes.viewport()}
341
- style:top={`${visibleStartPercent}%`}
342
- style:height={`${visibleRangePercent}%`}
343
- ></div>
344
- </div>
504
+ {#if showRange}
505
+ <div data-slot="ai-thread-toc-rail" class={classes.rail()}>
506
+ <div
507
+ data-slot="ai-thread-toc-viewport"
508
+ class={classes.viewport()}
509
+ style:top={`${visibleStartPercent}%`}
510
+ style:height={`${visibleRangePercent}%`}
511
+ ></div>
512
+ </div>
513
+ {/if}
345
514
 
346
515
  {#each pins as tocPin, pinIndex (tocPin.key)}
347
516
  {@const active = tocPin.entryIndex === tocState.activeIndex}
@@ -357,10 +526,11 @@
357
526
  data-bucket={tocPin.isBucket}
358
527
  data-magnified={influence > 0 ? 'true' : undefined}
359
528
  data-targeted={targeted ? 'true' : undefined}
529
+ tabindex={pinIndex === tabStopIndex ? 0 : -1}
360
530
  class={classes.pin({ side, active })}
361
531
  style:top={`${pinStackTopPercent(pinIndex, pins.length)}%`}
362
532
  style:transform-origin={side === 'left' ? 'left center' : 'right center'}
363
- aria-label={getAIThreadTocLabel(tocPin.entry)}
533
+ aria-label={pinLabels[pinIndex]}
364
534
  aria-current={active ? 'location' : undefined}
365
535
  animate:flip={{ duration: pinFlipDuration, easing: quintOut }}
366
536
  transition:scale={{
@@ -369,7 +539,7 @@
369
539
  easing: quintOut
370
540
  }}
371
541
  onfocus={(event) => handlePinFocus(event, tocPin.entry, pinIndex)}
372
- onclick={() => activate(tocPin.entry)}
542
+ onclick={() => handlePinClick(tocPin.entry, pinIndex, tocPin.key)}
373
543
  >
374
544
  {#if pin}
375
545
  <Slot render={pin} payload={{ entry: tocPin.entry, active }} />
@@ -9,19 +9,35 @@
9
9
  AIThreadTocProps
10
10
  } from './aiThreadToc.props.js';
11
11
  import { useAIThreadTocTheme } from './aiThreadToc.theme.js';
12
+ import { useI18n } from '../../i18n/context.svelte.js';
12
13
 
13
14
  type Props = Pick<
14
15
  AIThreadTocProps<TMessage>,
15
16
  'preview' | 'title' | 'excerpt' | 'metadata' | 'icon' | 'theme'
16
17
  > & {
17
18
  entry: AIThreadTocEntry<TMessage>;
19
+ /** 1-based position of the entry among the thread's user turns; 0 hides it. */
20
+ turn?: number;
21
+ total?: number;
18
22
  };
19
23
 
20
24
  type PreviewFile = {
21
25
  file: AIFileSource;
22
26
  };
23
27
 
24
- let { entry, preview, title, excerpt, metadata, icon, theme }: Props = $props();
28
+ let {
29
+ entry,
30
+ turn = 0,
31
+ total = 0,
32
+ preview,
33
+ title,
34
+ excerpt,
35
+ metadata,
36
+ icon,
37
+ theme
38
+ }: Props = $props();
39
+
40
+ const t = $derived(useI18n());
25
41
 
26
42
  const classes = $derived(useAIThreadTocTheme(theme));
27
43
  const files = $derived(previewFiles(entry));
@@ -55,6 +71,11 @@
55
71
  <div data-slot="ai-thread-toc-preview-title" class={classes.previewTitle()}>
56
72
  <Slot render={title ?? entry.title} payload={entry} />
57
73
  </div>
74
+ {#if turn > 0 && total > 0}
75
+ <div data-slot="ai-thread-toc-preview-turn" class={classes.previewTurn()}>
76
+ {t.aiThreadTocTurn(turn, total)}
77
+ </div>
78
+ {/if}
58
79
  {#if metadata}
59
80
  <div data-slot="ai-thread-toc-preview-metadata" class={classes.previewMetadata()}>
60
81
  <Slot render={metadata} payload={entry} />
@@ -79,7 +100,9 @@
79
100
  </div>
80
101
  {/each}
81
102
  {#if entry.fileCount > files.length}
82
- <div class={classes.previewMetadata()}>+{entry.fileCount - files.length} more</div>
103
+ <div class={classes.previewMetadata()}>
104
+ {t.aiThreadTocMoreFiles(entry.fileCount - files.length)}
105
+ </div>
83
106
  {/if}
84
107
  </div>
85
108
  {/if}
@@ -2,6 +2,9 @@ import type { AIThreadItem, AIThreadTocEntry, AIThreadTocProps } from './aiThrea
2
2
  declare function $$render<TMessage extends AIThreadItem = AIThreadItem>(): {
3
3
  props: Pick<AIThreadTocProps<TMessage>, "theme" | "title" | "metadata" | "icon" | "preview" | "excerpt"> & {
4
4
  entry: AIThreadTocEntry<TMessage>;
5
+ /** 1-based position of the entry among the thread's user turns; 0 hides it. */
6
+ turn?: number;
7
+ total?: number;
5
8
  };
6
9
  exports: {};
7
10
  bindings: "";
@@ -1,5 +1,7 @@
1
1
  import type { AIThreadItem, AIThreadScrollBehavior, AIThreadTocEntry, AIThreadTocPin, AIThreadTocState } from '../AIThread/aiThread.props.js';
2
2
  import type { AIThreadRenderItem } from '../AIThread/threadRenderItems.js';
3
+ import type { Messages } from '../../i18n/en.js';
4
+ type AIThreadTocMessages = Pick<Messages, 'aiThreadTocFiles' | 'aiThreadTocScrollTo'>;
3
5
  type BuildAIThreadTocStateOptions = {
4
6
  totalSize: number;
5
7
  scrollOffset: number;
@@ -17,7 +19,7 @@ type CompactAIThreadTocOptions = {
17
19
  };
18
20
  export declare function buildAIThreadTocState<TMessage extends AIThreadItem>(items: readonly AIThreadRenderItem<TMessage>[], options: BuildAIThreadTocStateOptions): AIThreadTocState<TMessage>;
19
21
  export declare function compactAIThreadTocEntries<TMessage extends AIThreadItem>(entries: readonly AIThreadTocEntry<TMessage>[], options: CompactAIThreadTocOptions): AIThreadTocPin<TMessage>[];
20
- export declare function getAIThreadTocMetadata(entry: AIThreadTocEntry): string;
21
- export declare function getAIThreadTocLabel(entry: AIThreadTocEntry): string;
22
+ export declare function getAIThreadTocMetadata(entry: AIThreadTocEntry, t: AIThreadTocMessages): string;
23
+ export declare function getAIThreadTocLabel(entry: AIThreadTocEntry, t: AIThreadTocMessages): string;
22
24
  export declare function isAIThreadTocEntryVisible(entry: AIThreadTocEntry, state: AIThreadTocState): boolean;
23
25
  export {};
@@ -62,7 +62,7 @@ export function compactAIThreadTocEntries(entries, options) {
62
62
  return createPin(entry, entryIndex, !preservedIndexes.has(entryIndex));
63
63
  });
64
64
  }
65
- export function getAIThreadTocMetadata(entry) {
65
+ export function getAIThreadTocMetadata(entry, t) {
66
66
  if (entry.fileCount === 0)
67
67
  return '';
68
68
  const names = [...entry.attachments, ...entry.files]
@@ -72,12 +72,12 @@ export function getAIThreadTocMetadata(entry) {
72
72
  const hiddenCount = Math.max(0, names.length - shownNames.length);
73
73
  const namesLabel = shownNames.length > 0 ? ` - ${shownNames.join(', ')}` : '';
74
74
  const hiddenLabel = hiddenCount > 0 ? ` +${hiddenCount}` : '';
75
- return truncate(`${entry.fileCount} ${entry.fileCount === 1 ? 'file' : 'files'}${namesLabel}${hiddenLabel}`, TOC_METADATA_LABEL_MAX_LENGTH);
75
+ return truncate(`${t.aiThreadTocFiles(entry.fileCount)}${namesLabel}${hiddenLabel}`, TOC_METADATA_LABEL_MAX_LENGTH);
76
76
  }
77
- export function getAIThreadTocLabel(entry) {
78
- const metadata = getAIThreadTocMetadata(entry);
77
+ export function getAIThreadTocLabel(entry, t) {
78
+ const metadata = getAIThreadTocMetadata(entry, t);
79
79
  return truncate([
80
- `Scroll to ${truncate(entry.title, TOC_TITLE_MAX_LENGTH)}`,
80
+ t.aiThreadTocScrollTo(truncate(entry.title, TOC_TITLE_MAX_LENGTH)),
81
81
  truncate(entry.excerpt, TOC_ARIA_EXCERPT_MAX_LENGTH),
82
82
  metadata
83
83
  ]
@@ -136,7 +136,19 @@ function buildEntries(items, options) {
136
136
  }
137
137
  return entries;
138
138
  }
139
+ // The TOC is rebuilt on every scroll (its active entry follows the viewport), and normalizing every
140
+ // message's text each time made scrolling a long thread drop frames. Messages are replaced, never
141
+ // mutated, so their text is computed once per message object.
142
+ const messageTextCache = new WeakMap();
139
143
  function messageText(message, renderedContent) {
144
+ const cached = messageTextCache.get(message);
145
+ if (cached && cached.renderedContent === renderedContent)
146
+ return cached.text;
147
+ const text = computeMessageText(message, renderedContent);
148
+ messageTextCache.set(message, { renderedContent, text });
149
+ return text;
150
+ }
151
+ function computeMessageText(message, renderedContent) {
140
152
  const content = normalize(message.content ?? '');
141
153
  if (content)
142
154
  return content;
@@ -1 +1 @@
1
- export declare const aiThreadTocDescription = "\n# AIThreadToc\n\nStandalone, controlled user-turn navigation for AI transcripts. It renders a compact rail, visible-range marker, magnifying pins, and one shared HoverCard preview from an AIThreadTocState.\n\nImport it directly from **entasis/ai-thread-toc**. AIThread composes the same primitive for its default minimap and exposes measured state through its **toc** slot.\n\n## Thread composition\n\n~~~svelte\n<script lang=\"ts\">\n import { AIThread } from '../AIThread/index.ts';\n import { AIThreadToc, type AIThreadTocState } from './index.ts';\n</script>\n\n{#snippet toc(state: AIThreadTocState)}\n <AIThreadToc {state} side=\"left\" previewAlign=\"start\" />\n{/snippet}\n\n<AIThread {messages} showToc {toc} />\n~~~\n\nThe component is controlled: **state.entries** supplies measured user turns, **activeIndex** and visible offsets describe the transcript viewport, and **scrollToIndex** performs navigation. A manually constructed state is also valid.\n\n## Props\n\n- **state**: AIThreadTocState - Required controlled navigation state.\n- **maxPins**: number - Maximum pins before spatial compaction. Default 96.\n- **scrollAreaLabel**: string - Accessible label for the nested scrollable pin region.\n- **side**: 'left' | 'right' - Rail alignment and pin transform origin. Default 'left'.\n- **previewSide**: 'left' | 'right' - Preview side; defaults away from the rail.\n- **previewAlign**: 'start' | 'center' | 'end' - Preview alignment. Default 'center'.\n- **pin**: Slot<{ entry, active }> - Replaces each pin indicator.\n- **preview**: Slot<AIThreadTocEntry> - Replaces the complete shared HoverCard preview.\n- **title**, **excerpt**, **metadata**, **icon**: Slot<AIThreadTocEntry> - Compose the default preview.\n- **ref**, **class**, **theme**, native nav attributes, and Svelte attachments.\n\nThe root is bounded to 80% of its containing height. Pins live in the shared ScrollArea; native and custom scrollbars are hidden, while wheel, touch, and keyboard scrolling remain available. Give a standalone TOC a parent with an explicit height.\n\n## State and entries\n\nAIThreadTocEntry includes the source user message, prompt title, latest assistant excerpt, measured offset and size, files, attachments, and file count. AIThreadTocState includes entries, total range, active entry, visible offsets, **scrollToIndex**, and **scrollToOffset**.\n\nThe default preview clamps the prompt to one line, clamps the assistant response to four lines, and renders attachments as quiet inline labels. Pin focus and activation are keyboard accessible.\n\n## Theme\n\nTheme parts are **root**, **scrollArea**, **scrollContent**, **track**, **pinArea**, **rail**, **viewport**, **pin**, **pinIndicator**, **previewAnchor**, **preview**, **previewHeader**, **previewIcon**, **previewTitle**, **previewExcerpt**, **previewMetadata**, and **previewFiles**.\n";
1
+ export declare const aiThreadTocDescription = "\n# AIThreadToc\n\nStandalone, controlled user-turn navigation for AI transcripts. It renders magnifying pins (with an optional rail and visible-range marker, `showRange`), and one shared HoverCard preview from an AIThreadTocState.\n\nImport it directly from **entasis/ai-thread-toc**. AIThread composes the same primitive for its default minimap and exposes measured state through its **toc** slot.\n\n## Thread composition\n\n~~~svelte\n<script lang=\"ts\">\n import { AIThread } from '../AIThread/index.ts';\n import { AIThreadToc, type AIThreadTocState } from './index.ts';\n</script>\n\n{#snippet toc(state: AIThreadTocState)}\n <AIThreadToc {state} side=\"left\" previewAlign=\"start\" />\n{/snippet}\n\n<AIThread {messages} showToc {toc} />\n~~~\n\nThe component is controlled: **state.entries** supplies measured user turns, **activeIndex** and visible offsets describe the transcript viewport, and **scrollToIndex** performs navigation. A manually constructed state is also valid.\n\n## Props\n\n- **state**: AIThreadTocState - Required controlled navigation state.\n- **maxPins**: number - Maximum pins before spatial compaction. Default 96.\n- **showRange**: boolean - Draws a rail beside the pins with a bar marking the part of the thread on screen. Default false (AIThread: `tocShowRange`).\n- **scrollAreaLabel**: string - Accessible label for the nested scrollable pin region.\n- **side**: 'left' | 'right' - Rail alignment and pin transform origin. Default 'left'.\n- **previewSide**: 'left' | 'right' - Preview side; defaults away from the rail.\n- **previewAlign**: 'start' | 'center' | 'end' - Preview alignment. Default 'center'.\n- **minContainerWidth**: number - Container width in pixels below which the rail removes itself (hidden, no pins). The container is the nearest ancestor wider than the rail, usually the thread. Default 480; 0 keeps it at every width.\n- **pin**: Slot<{ entry, active }> - Replaces each pin indicator.\n- **preview**: Slot<AIThreadTocEntry> - Replaces the complete shared HoverCard preview.\n- **title**, **excerpt**, **metadata**, **icon**: Slot<AIThreadTocEntry> - Compose the default preview.\n- **ref**, **class**, **theme**, native nav attributes, and Svelte attachments.\n\nThe root is bounded to 80% of its containing height. Pins live in the shared ScrollArea; native and custom scrollbars are hidden, while wheel, touch, and keyboard scrolling remain available. Give a standalone TOC a parent with an explicit height.\n\n## State and entries\n\nAIThreadTocEntry includes the source user message, prompt title, latest assistant excerpt, measured offset and size, files, attachments, and file count. AIThreadTocState includes entries, total range, active entry, visible offsets, **scrollToIndex**, and **scrollToOffset**.\n\nThe default preview clamps the prompt to one line, shows \"Turn N of M\", clamps the assistant response to four lines, and renders attachments as quiet inline labels.\n\n## Interaction\n\n- With `showRange`, the rail and the visible-range bar are painted; the active turn's pin is longer and fully opaque, pins in view are lighter, the rest faint.\n- Keyboard: the rail is one tab stop, and Tab into it lands on the active turn's pin. ArrowUp/ArrowDown (and Left/Right), Home and End move between pins; Enter or Space navigates.\n- Pointer: hovering magnifies nearby pins and previews the one under the pointer; clicking navigates.\n- Touch: the first tap on a pin previews it, a second tap on the same pin navigates, and a tap outside closes the preview.\n- Pin transitions run only while the stack is pointed at or focused; scrolling the thread does not restyle the pins.\n\n## Theme\n\nTheme parts are **root**, **scrollArea**, **scrollContent**, **track**, **pinArea**, **rail**, **viewport**, **pin**, **pinIndicator** (`active` variant), **previewAnchor**, **preview**, **previewHeader**, **previewIcon**, **previewTitle**, **previewTurn**, **previewExcerpt**, **previewMetadata**, and **previewFiles**.\n";
@@ -1,7 +1,7 @@
1
1
  export const aiThreadTocDescription = `
2
2
  # AIThreadToc
3
3
 
4
- Standalone, controlled user-turn navigation for AI transcripts. It renders a compact rail, visible-range marker, magnifying pins, and one shared HoverCard preview from an AIThreadTocState.
4
+ Standalone, controlled user-turn navigation for AI transcripts. It renders magnifying pins (with an optional rail and visible-range marker, \`showRange\`), and one shared HoverCard preview from an AIThreadTocState.
5
5
 
6
6
  Import it directly from **entasis/ai-thread-toc**. AIThread composes the same primitive for its default minimap and exposes measured state through its **toc** slot.
7
7
 
@@ -26,10 +26,12 @@ The component is controlled: **state.entries** supplies measured user turns, **a
26
26
 
27
27
  - **state**: AIThreadTocState - Required controlled navigation state.
28
28
  - **maxPins**: number - Maximum pins before spatial compaction. Default 96.
29
+ - **showRange**: boolean - Draws a rail beside the pins with a bar marking the part of the thread on screen. Default false (AIThread: \`tocShowRange\`).
29
30
  - **scrollAreaLabel**: string - Accessible label for the nested scrollable pin region.
30
31
  - **side**: 'left' | 'right' - Rail alignment and pin transform origin. Default 'left'.
31
32
  - **previewSide**: 'left' | 'right' - Preview side; defaults away from the rail.
32
33
  - **previewAlign**: 'start' | 'center' | 'end' - Preview alignment. Default 'center'.
34
+ - **minContainerWidth**: number - Container width in pixels below which the rail removes itself (hidden, no pins). The container is the nearest ancestor wider than the rail, usually the thread. Default 480; 0 keeps it at every width.
33
35
  - **pin**: Slot<{ entry, active }> - Replaces each pin indicator.
34
36
  - **preview**: Slot<AIThreadTocEntry> - Replaces the complete shared HoverCard preview.
35
37
  - **title**, **excerpt**, **metadata**, **icon**: Slot<AIThreadTocEntry> - Compose the default preview.
@@ -41,9 +43,17 @@ The root is bounded to 80% of its containing height. Pins live in the shared Scr
41
43
 
42
44
  AIThreadTocEntry includes the source user message, prompt title, latest assistant excerpt, measured offset and size, files, attachments, and file count. AIThreadTocState includes entries, total range, active entry, visible offsets, **scrollToIndex**, and **scrollToOffset**.
43
45
 
44
- The default preview clamps the prompt to one line, clamps the assistant response to four lines, and renders attachments as quiet inline labels. Pin focus and activation are keyboard accessible.
46
+ The default preview clamps the prompt to one line, shows "Turn N of M", clamps the assistant response to four lines, and renders attachments as quiet inline labels.
47
+
48
+ ## Interaction
49
+
50
+ - With \`showRange\`, the rail and the visible-range bar are painted; the active turn's pin is longer and fully opaque, pins in view are lighter, the rest faint.
51
+ - Keyboard: the rail is one tab stop, and Tab into it lands on the active turn's pin. ArrowUp/ArrowDown (and Left/Right), Home and End move between pins; Enter or Space navigates.
52
+ - Pointer: hovering magnifies nearby pins and previews the one under the pointer; clicking navigates.
53
+ - Touch: the first tap on a pin previews it, a second tap on the same pin navigates, and a tap outside closes the preview.
54
+ - Pin transitions run only while the stack is pointed at or focused; scrolling the thread does not restyle the pins.
45
55
 
46
56
  ## Theme
47
57
 
48
- Theme parts are **root**, **scrollArea**, **scrollContent**, **track**, **pinArea**, **rail**, **viewport**, **pin**, **pinIndicator**, **previewAnchor**, **preview**, **previewHeader**, **previewIcon**, **previewTitle**, **previewExcerpt**, **previewMetadata**, and **previewFiles**.
58
+ Theme parts are **root**, **scrollArea**, **scrollContent**, **track**, **pinArea**, **rail**, **viewport**, **pin**, **pinIndicator** (\`active\` variant), **previewAnchor**, **preview**, **previewHeader**, **previewIcon**, **previewTitle**, **previewTurn**, **previewExcerpt**, **previewMetadata**, and **previewFiles**.
49
59
  `;
@@ -12,6 +12,11 @@ export type AIThreadTocProps<TMessage extends AIThreadItem = AIThreadItem> = Wit
12
12
  state: AIThreadTocState<TMessage>;
13
13
  /** Maximum visible navigation pins before entries are compacted. */
14
14
  maxPins?: number;
15
+ /**
16
+ * Draws a rail beside the pins with a bar marking the part of the thread on screen.
17
+ * @default false
18
+ */
19
+ showRange?: boolean;
15
20
  /** Accessible label for the nested scrollable pin region. */
16
21
  scrollAreaLabel?: string;
17
22
  /** Side occupied by the navigation rail. @default 'left' */
@@ -20,6 +25,12 @@ export type AIThreadTocProps<TMessage extends AIThreadItem = AIThreadItem> = Wit
20
25
  previewSide?: AIThreadTocPreviewSide;
21
26
  /** Alignment of previews relative to their navigation pins. */
22
27
  previewAlign?: AIThreadTocPreviewAlign;
28
+ /**
29
+ * Container width in pixels below which the rail removes itself. The container is the
30
+ * nearest ancestor wider than the rail, usually the thread. `0` keeps it at every width.
31
+ * @default 480
32
+ */
33
+ minContainerWidth?: number;
23
34
  /** Replaces the visual indicator for each navigation pin. */
24
35
  pin?: Slot<AIThreadTocPinPayload<TMessage>>;
25
36
  /** Replaces the complete preview for a user turn. */
@@ -40,6 +40,7 @@ export declare const aiThreadTocTheme: {
40
40
  previewTitle: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
41
41
  previewExcerpt: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
42
42
  previewMetadata: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
43
+ previewTurn: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
43
44
  previewFiles: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
44
45
  };
45
46
  export type AIThreadTocTheme = typeof aiThreadTocTheme;
@@ -85,6 +86,7 @@ export declare const setAIThreadTocTheme: (theme: InferComponentTheme<{
85
86
  previewTitle: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
86
87
  previewExcerpt: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
87
88
  previewMetadata: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
89
+ previewTurn: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
88
90
  previewFiles: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
89
91
  }>) => void;
90
92
  export declare const useAIThreadTocTheme: import("../../utils/cva/theme.js").UseComponentTheme<{
@@ -128,5 +130,6 @@ export declare const useAIThreadTocTheme: import("../../utils/cva/theme.js").Use
128
130
  previewTitle: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
129
131
  previewExcerpt: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
130
132
  previewMetadata: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
133
+ previewTurn: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
131
134
  previewFiles: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
132
135
  }>;