entasis 0.11.0 → 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 (839) 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 +256 -30
  326. package/dist/components/Form/Field/Field.svelte.d.ts +9 -0
  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 +64 -8
  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 +109 -3
  337. package/dist/components/Form/Field/field.state.svelte.js +508 -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 +47 -14
  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 +40 -2
  354. package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
  355. package/dist/components/Form/Form/form.d.ts +35 -6
  356. package/dist/components/Form/Form/form.mcp.d.ts +1 -1
  357. package/dist/components/Form/Form/form.mcp.js +113 -13
  358. package/dist/components/Form/Form/form.props.d.ts +32 -1
  359. package/dist/components/Form/Form/form.registry.d.ts +2 -2
  360. package/dist/components/Form/Form/form.registry.js +1 -4
  361. package/dist/components/Form/Form/form.state.svelte.d.ts +1138 -413
  362. package/dist/components/Form/Form/form.state.svelte.js +319 -26
  363. package/dist/components/Form/Form/index.d.ts +3 -1
  364. package/dist/components/Form/Form/visibility.d.ts +3096 -1831
  365. package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
  366. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
  367. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
  368. package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
  369. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
  370. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
  371. package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
  372. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1022 -408
  373. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
  374. package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
  375. package/dist/components/Form/NumberInput/index.d.ts +1 -1
  376. package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
  377. package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
  378. package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
  379. package/dist/components/Form/PasswordInput/Password.svelte +28 -1
  380. package/dist/components/Form/PasswordInput/index.d.ts +1 -1
  381. package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
  382. package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
  383. package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
  384. package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
  385. package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
  386. package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
  387. package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
  388. package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
  389. package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
  390. package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
  391. package/dist/components/Form/PinInput/PinInput.svelte +44 -9
  392. package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
  393. package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
  394. package/dist/components/Form/PinInput/index.d.ts +1 -1
  395. package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
  396. package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
  397. package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
  398. package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
  399. package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
  400. package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
  401. package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
  402. package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
  403. package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
  404. package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
  405. package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
  406. package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
  407. package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
  408. package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
  409. package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
  410. package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
  411. package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
  412. package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
  413. package/dist/components/Form/Select/Select.svelte +186 -48
  414. package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
  415. package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
  416. package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
  417. package/dist/components/Form/Select/index.d.ts +2 -1
  418. package/dist/components/Form/Select/index.js +1 -0
  419. package/dist/components/Form/Select/select.align.d.ts +5 -0
  420. package/dist/components/Form/Select/select.align.js +19 -5
  421. package/dist/components/Form/Select/select.attributes.d.ts +36 -0
  422. package/dist/components/Form/Select/select.attributes.js +27 -0
  423. package/dist/components/Form/Select/select.mcp.d.ts +1 -1
  424. package/dist/components/Form/Select/select.mcp.js +103 -18
  425. package/dist/components/Form/Select/select.props.d.ts +87 -10
  426. package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
  427. package/dist/components/Form/Select/select.state.svelte.js +354 -59
  428. package/dist/components/Form/Select/select.theme.d.ts +21 -0
  429. package/dist/components/Form/Select/select.theme.js +22 -0
  430. package/dist/components/Form/Slider/Slider.svelte +54 -14
  431. package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
  432. package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
  433. package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
  434. package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
  435. package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
  436. package/dist/components/Form/Slider/index.d.ts +1 -1
  437. package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
  438. package/dist/components/Form/Slider/slider.mcp.js +55 -11
  439. package/dist/components/Form/Slider/slider.props.d.ts +35 -2
  440. package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
  441. package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
  442. package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
  443. package/dist/components/Form/Slider/slider.theme.js +35 -17
  444. package/dist/components/Form/Switch/Switch.svelte +61 -38
  445. package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
  446. package/dist/components/Form/Switch/switch.mcp.js +25 -5
  447. package/dist/components/Form/Switch/switch.props.d.ts +14 -1
  448. package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
  449. package/dist/components/Form/Switch/switch.theme.js +8 -3
  450. package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
  451. package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
  452. package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
  453. package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
  454. package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
  455. package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
  456. package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
  457. package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
  458. package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
  459. package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
  460. package/dist/components/Form/TextArea/TextArea.svelte +8 -0
  461. package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
  462. package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
  463. package/dist/components/Form/TextInput/TextInput.svelte +8 -1
  464. package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
  465. package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
  466. package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
  467. package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
  468. package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
  469. package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
  470. package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
  471. package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
  472. package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
  473. package/dist/components/HoverCard/HoverCard.svelte +100 -10
  474. package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
  475. package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
  476. package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
  477. package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
  478. package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
  479. package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
  480. package/dist/components/HoverCard/hoverCard.theme.js +9 -2
  481. package/dist/components/HoverCard/index.d.ts +1 -0
  482. package/dist/components/HoverCard/index.js +1 -0
  483. package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
  484. package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
  485. package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
  486. package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
  487. package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
  488. package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
  489. package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
  490. package/dist/components/Kanban/kanban.theme.js +7 -3
  491. package/dist/components/Layout/layoutSpacing.d.ts +2 -2
  492. package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
  493. package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
  494. package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
  495. package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
  496. package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
  497. package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
  498. package/dist/components/Map/maplibre-cdn.js +3 -2
  499. package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
  500. package/dist/components/Markdown/markdown.mcp.js +2 -1
  501. package/dist/components/Markdown/markdown.theme.js +18 -9
  502. package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
  503. package/dist/components/Menu/Menu.svelte +3 -3
  504. package/dist/components/Menu/Menu.svelte.d.ts +1 -1
  505. package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
  506. package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
  507. package/dist/components/Menu/MenuFloating.svelte +421 -74
  508. package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
  509. package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
  510. package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
  511. package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
  512. package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
  513. package/dist/components/Menu/MenuSearchField.svelte +54 -0
  514. package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
  515. package/dist/components/Menu/MenuStacked.svelte +404 -158
  516. package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
  517. package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
  518. package/dist/components/Menu/index.d.ts +2 -1
  519. package/dist/components/Menu/index.js +1 -0
  520. package/dist/components/Menu/menu.attributes.d.ts +37 -0
  521. package/dist/components/Menu/menu.attributes.js +28 -0
  522. package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
  523. package/dist/components/Menu/menu.filter.svelte.js +143 -0
  524. package/dist/components/Menu/menu.mcp.d.ts +1 -1
  525. package/dist/components/Menu/menu.mcp.js +227 -17
  526. package/dist/components/Menu/menu.platform.d.ts +5 -0
  527. package/dist/components/Menu/menu.platform.js +11 -0
  528. package/dist/components/Menu/menu.props.d.ts +172 -9
  529. package/dist/components/Menu/menu.theme.d.ts +147 -0
  530. package/dist/components/Menu/menu.theme.js +101 -0
  531. package/dist/components/Menu/menuTree.d.ts +35 -1
  532. package/dist/components/Menu/menuTree.js +158 -1
  533. package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
  534. package/dist/components/MenuBar/menuBar.mcp.js +4 -2
  535. package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
  536. package/dist/components/MenuOption/MenuOption.svelte +5 -1
  537. package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
  538. package/dist/components/MenuOption/menuOption.mcp.js +8 -0
  539. package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
  540. package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
  541. package/dist/components/MenuOption/menuOption.theme.js +24 -4
  542. package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
  543. package/dist/components/Mermaid/mermaid.mcp.js +8 -8
  544. package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
  545. package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
  546. package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
  547. package/dist/components/Mermaid/mermaid.theme.js +26 -1
  548. package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
  549. package/dist/components/Meter/Meter.svelte +110 -24
  550. package/dist/components/Meter/Meter.svelte.d.ts +12 -12
  551. package/dist/components/Meter/meter.mcp.d.ts +1 -1
  552. package/dist/components/Meter/meter.mcp.js +23 -37
  553. package/dist/components/Meter/meter.props.d.ts +36 -44
  554. package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
  555. package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
  556. package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
  557. package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
  558. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
  559. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
  560. package/dist/components/NavigationMenu/index.d.ts +4 -0
  561. package/dist/components/NavigationMenu/index.js +3 -0
  562. package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
  563. package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
  564. package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
  565. package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
  566. package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
  567. package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
  568. package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
  569. package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
  570. package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
  571. package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
  572. package/dist/components/Overlay/Overlay.svelte +19 -30
  573. package/dist/components/Overlay/index.d.ts +1 -0
  574. package/dist/components/Overlay/index.js +1 -0
  575. package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
  576. package/dist/components/Overlay/overlay.attributes.js +14 -0
  577. package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
  578. package/dist/components/Overlay/overlay.mcp.js +21 -3
  579. package/dist/components/Overlay/overlay.props.d.ts +8 -4
  580. package/dist/components/Popover/Popover.svelte +163 -52
  581. package/dist/components/Popover/Popover.svelte.d.ts +23 -2
  582. package/dist/components/Popover/PopoverSession.svelte +12 -0
  583. package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
  584. package/dist/components/Popover/index.d.ts +10 -2
  585. package/dist/components/Popover/index.js +4 -1
  586. package/dist/components/Popover/popover.api.d.ts +83 -0
  587. package/dist/components/Popover/popover.api.js +1 -0
  588. package/dist/components/Popover/popover.attributes.d.ts +32 -0
  589. package/dist/components/Popover/popover.attributes.js +28 -0
  590. package/dist/components/Popover/popover.claims.d.ts +19 -0
  591. package/dist/components/Popover/popover.claims.js +45 -0
  592. package/dist/components/Popover/popover.mcp.d.ts +1 -1
  593. package/dist/components/Popover/popover.mcp.js +163 -31
  594. package/dist/components/Popover/popover.position.d.ts +226 -0
  595. package/dist/components/Popover/popover.position.js +402 -0
  596. package/dist/components/Popover/popover.props.d.ts +179 -24
  597. package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
  598. package/dist/components/Popover/popover.state.svelte.js +1034 -194
  599. package/dist/components/Popover/popover.theme.d.ts +15 -0
  600. package/dist/components/Popover/popover.theme.js +27 -2
  601. package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
  602. package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
  603. package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
  604. package/dist/components/PopupMenu/popupMenu.context.js +52 -0
  605. package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
  606. package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
  607. package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
  608. package/dist/components/Progress/Progress.svelte +160 -0
  609. package/dist/components/Progress/Progress.svelte.d.ts +4 -0
  610. package/dist/components/Progress/index.d.ts +3 -0
  611. package/dist/components/Progress/index.js +2 -0
  612. package/dist/components/Progress/progress.mcp.d.ts +1 -0
  613. package/dist/components/Progress/progress.mcp.js +101 -0
  614. package/dist/components/Progress/progress.props.d.ts +79 -0
  615. package/dist/components/Progress/progress.props.js +1 -0
  616. package/dist/components/Progress/progress.theme.d.ts +129 -0
  617. package/dist/components/Progress/progress.theme.js +83 -0
  618. package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
  619. package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
  620. package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
  621. package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
  622. package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
  623. package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
  624. package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
  625. package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
  626. package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
  627. package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
  628. package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
  629. package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
  630. package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
  631. package/dist/components/RichTextInput/suggestions.js +2 -0
  632. package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
  633. package/dist/components/ScrollArea/index.d.ts +2 -1
  634. package/dist/components/ScrollArea/index.js +1 -0
  635. package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
  636. package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
  637. package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
  638. package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
  639. package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
  640. package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
  641. package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
  642. package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
  643. package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
  644. package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
  645. package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
  646. package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
  647. package/dist/components/Sidebar/SidebarAction.svelte +13 -3
  648. package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
  649. package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
  650. package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
  651. package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
  652. package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
  653. package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
  654. package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
  655. package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
  656. package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
  657. package/dist/components/Sidebar/index.d.ts +1 -0
  658. package/dist/components/Sidebar/index.js +1 -0
  659. package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
  660. package/dist/components/Sidebar/sidebar-position.js +31 -2
  661. package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
  662. package/dist/components/Sidebar/sidebar.attributes.js +29 -0
  663. package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
  664. package/dist/components/Sidebar/sidebar.mcp.js +45 -10
  665. package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
  666. package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
  667. package/dist/components/Sidebar/sidebar.theme.js +113 -62
  668. package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
  669. package/dist/components/Stepper/Stepper.svelte +2 -0
  670. package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
  671. package/dist/components/Stepper/stepper.mcp.js +1 -0
  672. package/dist/components/Stepper/stepper.props.d.ts +5 -0
  673. package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
  674. package/dist/components/Stepper/stepper.state.svelte.js +31 -12
  675. package/dist/components/Tabbar/Tabbar.svelte +55 -16
  676. package/dist/components/Tabbar/index.d.ts +1 -1
  677. package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
  678. package/dist/components/Tabbar/tabbar.mcp.js +26 -9
  679. package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
  680. package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
  681. package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
  682. package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
  683. package/dist/components/Tabs/Tabs.svelte +73 -16
  684. package/dist/components/Tabs/index.d.ts +2 -1
  685. package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
  686. package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
  687. package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
  688. package/dist/components/Tabs/tabs.mcp.js +22 -4
  689. package/dist/components/Tabs/tabs.props.d.ts +39 -12
  690. package/dist/components/Tabs/tabs.theme.js +3 -1
  691. package/dist/components/Theme/Theme.svelte +44 -27
  692. package/dist/components/Theme/helper.d.ts +16 -2
  693. package/dist/components/Theme/helper.js +46 -4
  694. package/dist/components/Theme/theme.mcp.d.ts +1 -1
  695. package/dist/components/Theme/theme.mcp.js +103 -0
  696. package/dist/components/Theme/theme.props.d.ts +16 -0
  697. package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
  698. package/dist/components/Theme/theme.state.svelte.js +18 -1
  699. package/dist/components/Toast/Toast.svelte +184 -39
  700. package/dist/components/Toast/Toaster.svelte +14 -10
  701. package/dist/components/Toast/index.d.ts +1 -0
  702. package/dist/components/Toast/toast.mcp.d.ts +1 -1
  703. package/dist/components/Toast/toast.mcp.js +47 -6
  704. package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
  705. package/dist/components/Toast/toast.state.svelte.js +513 -68
  706. package/dist/components/Toast/toast.theme.js +1 -1
  707. package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
  708. package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
  709. package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
  710. package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
  711. package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
  712. package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
  713. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
  714. package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
  715. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
  716. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
  717. package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
  718. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
  719. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
  720. package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
  721. package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
  722. package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
  723. package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
  724. package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
  725. package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
  726. package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
  727. package/dist/components/Tooltip/Tooltip.svelte +4 -12
  728. package/dist/components/Tooltip/TooltipHost.svelte +136 -15
  729. package/dist/components/Tooltip/index.d.ts +1 -0
  730. package/dist/components/Tooltip/index.js +1 -0
  731. package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
  732. package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
  733. package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
  734. package/dist/components/Tooltip/tooltip.attributes.js +28 -0
  735. package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
  736. package/dist/components/Tooltip/tooltip.mcp.js +111 -10
  737. package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
  738. package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
  739. package/dist/components/Tooltip/tooltip.surface.js +42 -0
  740. package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
  741. package/dist/components/Utils/BeforeHydratation.svelte +14 -3
  742. package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
  743. package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
  744. package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
  745. package/dist/generated/componentAliases.d.ts +3 -0
  746. package/dist/generated/componentAliases.js +3 -0
  747. package/dist/generated/componentContract.d.ts +79 -34
  748. package/dist/generated/componentContract.js +225 -6
  749. package/dist/generated/componentMcpRegistry.js +6 -0
  750. package/dist/i18n/ar.js +107 -3
  751. package/dist/i18n/context.svelte.d.ts +6 -0
  752. package/dist/i18n/context.svelte.js +12 -0
  753. package/dist/i18n/de.js +101 -3
  754. package/dist/i18n/en.d.ts +91 -2
  755. package/dist/i18n/en.js +101 -3
  756. package/dist/i18n/es.js +101 -3
  757. package/dist/i18n/fr.js +101 -3
  758. package/dist/i18n/ja.js +101 -3
  759. package/dist/i18n/pt.js +101 -3
  760. package/dist/i18n/zh.js +101 -3
  761. package/dist/tailwind/geometry.js +7 -0
  762. package/dist/tailwind/global.js +31 -0
  763. package/dist/types/index.d.ts +1 -0
  764. package/dist/types/types.mcp.d.ts +1 -1
  765. package/dist/types/types.mcp.js +23 -0
  766. package/dist/utils/cspNonce.d.ts +16 -0
  767. package/dist/utils/cspNonce.js +39 -0
  768. package/dist/utils/cva/merge.d.ts +5 -1
  769. package/dist/utils/cva/merge.js +6 -4
  770. package/dist/utils/focus.d.ts +34 -0
  771. package/dist/utils/focus.js +93 -0
  772. package/dist/utils/focusHistory.d.ts +21 -0
  773. package/dist/utils/focusHistory.js +99 -0
  774. package/dist/utils/handlers.d.ts +7 -0
  775. package/dist/utils/handlers.js +14 -0
  776. package/dist/utils/hoverIntent.d.ts +42 -0
  777. package/dist/utils/hoverIntent.js +57 -0
  778. package/dist/utils/id.d.ts +7 -0
  779. package/dist/utils/id.js +15 -0
  780. package/dist/utils/layers.svelte.d.ts +32 -4
  781. package/dist/utils/layers.svelte.js +214 -21
  782. package/dist/utils/listFilter.d.ts +44 -0
  783. package/dist/utils/listFilter.js +130 -0
  784. package/dist/utils/match.d.ts +35 -0
  785. package/dist/utils/match.js +36 -0
  786. package/dist/utils/number.d.ts +126 -0
  787. package/dist/utils/number.js +401 -0
  788. package/dist/utils/openChange.d.ts +88 -0
  789. package/dist/utils/openChange.js +71 -0
  790. package/dist/utils/openLifecycle.svelte.d.ts +41 -0
  791. package/dist/utils/openLifecycle.svelte.js +134 -0
  792. package/dist/utils/pointerDrag.d.ts +10 -0
  793. package/dist/utils/pointerDrag.js +37 -2
  794. package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
  795. package/dist/utils/pragmaticDragAndDrop.js +8 -3
  796. package/dist/utils/range.d.ts +62 -0
  797. package/dist/utils/range.js +70 -0
  798. package/dist/utils/requestNativeSubmit.d.ts +17 -0
  799. package/dist/utils/requestNativeSubmit.js +47 -0
  800. package/dist/utils/safeArea.svelte.d.ts +10 -1
  801. package/dist/utils/safeArea.svelte.js +19 -11
  802. package/dist/utils/stateAttributes.d.ts +108 -0
  803. package/dist/utils/stateAttributes.js +78 -0
  804. package/dist/utils/swipeVelocity.d.ts +32 -0
  805. package/dist/utils/swipeVelocity.js +59 -0
  806. package/dist/utils/timer.svelte.d.ts +65 -2
  807. package/dist/utils/timer.svelte.js +159 -25
  808. package/dist/utils/trigger.d.ts +41 -0
  809. package/dist/utils/trigger.js +103 -0
  810. package/dist/utils/typeahead.d.ts +9 -0
  811. package/dist/utils/typeahead.js +21 -9
  812. package/dist/utils/useDndList.svelte.d.ts +1 -1
  813. package/dist/utils/useDndList.svelte.js +6 -23
  814. package/dist/utils/useFocusScope.svelte.d.ts +29 -0
  815. package/dist/utils/useFocusScope.svelte.js +189 -27
  816. package/dist/utils/useHoverAction.svelte.d.ts +44 -4
  817. package/dist/utils/useHoverAction.svelte.js +161 -51
  818. package/dist/utils/useKeyDown.svelte.d.ts +19 -2
  819. package/dist/utils/useKeyDown.svelte.js +19 -12
  820. package/dist/utils/useListNavigation.svelte.d.ts +94 -13
  821. package/dist/utils/useListNavigation.svelte.js +261 -35
  822. package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
  823. package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
  824. package/dist/utils/useNavigation.svelte.d.ts +36 -3
  825. package/dist/utils/useNavigation.svelte.js +699 -332
  826. package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
  827. package/dist/utils/usePressAndHold.svelte.js +191 -0
  828. package/dist/utils/useScrollLock.svelte.d.ts +20 -1
  829. package/dist/utils/useScrollLock.svelte.js +54 -13
  830. package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
  831. package/dist/utils/useSlidingIndicator.svelte.js +27 -5
  832. package/dist/utils/useTabBridge.svelte.d.ts +20 -0
  833. package/dist/utils/useTabBridge.svelte.js +109 -0
  834. package/dist/utils/values.d.ts +15 -0
  835. package/dist/utils/values.js +49 -0
  836. package/package.json +31 -2
  837. package/dist/generated/componentMcpRegistry.d.ts +0 -142
  838. package/dist/utils/useDrag.svelte.d.ts +0 -11
  839. package/dist/utils/useDrag.svelte.js +0 -55
@@ -1,8 +1,9 @@
1
1
  import { createBindableStateClass } from '../../utils/state.svelte.js';
2
2
  import { useBoundingClientRect } from '../../utils/useBoundingClientRect.svelte.js';
3
- import { useDrag } from '../../utils/useDrag.svelte.js';
3
+ import { createPointerDrag } from '../../utils/pointerDrag.js';
4
4
  import { useHoverAction } from '../../utils/useHoverAction.svelte.js';
5
5
  import { useResizeObserver } from '../../utils/useResizeObserver.svelte.js';
6
+ import { untrack } from 'svelte';
6
7
  import { on } from 'svelte/events';
7
8
  /**
8
9
  * Slack allowed between scroll extent and client box before it counts as real overflow.
@@ -10,6 +11,15 @@ import { on } from 'svelte/events';
10
11
  * remainder is not one.
11
12
  */
12
13
  const OVERFLOW_TOLERANCE = 1;
14
+ /** Shortest a thumb gets, in px, whatever the content length or an overscroll asks for. */
15
+ const MIN_THUMB_SIZE = 18;
16
+ /** How long after the last scroll event the area still counts as scrolling, in ms. */
17
+ const SCROLLING_IDLE_MS = 400;
18
+ const clamp = (value, min, max) => Math.max(min, Math.min(value, max));
19
+ /** `-0` becomes `0`, so a normalised RTL offset compares equal to zero. */
20
+ const unsigned = (value) => (value === 0 ? 0 : value);
21
+ /** How far a scroll offset sits beyond its range (rubber banding): negative before, positive after. */
22
+ const overscrollOf = (scroll, max) => scroll - clamp(scroll, 0, max);
13
23
  export class ScrollArea extends createBindableStateClass() {
14
24
  viewportElement = $state();
15
25
  contentElement = $state();
@@ -52,75 +62,166 @@ export class ScrollArea extends createBindableStateClass() {
52
62
  scrollbarXEnabled = $derived(this.maxScrollX > OVERFLOW_TOLERANCE);
53
63
  visible = $derived(this.scrollbarYEnabled);
54
64
  visibleX = $derived(this.scrollbarXEnabled);
55
- canScrollUp = $derived(this.maxScrollY > 0 && this.scrollY > 0);
56
- canScrollDown = $derived(this.maxScrollY > 0 && this.scrollY < this.maxScrollY);
65
+ // Whether the viewport lays out right-to-left. In RTL the browser's `scrollLeft` runs from 0
66
+ // down to a negative number, so everything horizontal is read through `scrollX` (the distance
67
+ // travelled from the inline start, never negative inside the range) and written back mirrored.
68
+ rtl = $state(false);
69
+ // Thickness in px of each rendered scrollbar track (0 while it is not rendered). Where both
70
+ // bars show, each one stops short of the other so they do not overlap at the corner.
71
+ trackYThickness = $state(0);
72
+ trackXThickness = $state(0);
73
+ // The threshold for the overflow-edge hooks: hidden content past an edge counts once it is
74
+ // longer than this.
75
+ edgeThreshold = $derived(Math.max(0, this.overflowEdgeThreshold ?? OVERFLOW_TOLERANCE));
76
+ // Scroll distance travelled from the start and left to travel to the end, per axis. These stay
77
+ // inside the scroll range (an overscroll does not leave content "hidden") and are 0 while the
78
+ // axis does not overflow.
79
+ overflowYStart = $derived(this.scrollbarYEnabled ? clamp(this.scrollY, 0, this.maxScrollY) : 0);
80
+ overflowYEnd = $derived(this.scrollbarYEnabled ? clamp(this.maxScrollY - this.scrollY, 0, this.maxScrollY) : 0);
81
+ overflowXStart = $derived(this.scrollbarXEnabled ? clamp(this.scrollX, 0, this.maxScrollX) : 0);
82
+ overflowXEnd = $derived(this.scrollbarXEnabled ? clamp(this.maxScrollX - this.scrollX, 0, this.maxScrollX) : 0);
83
+ // Whether content is hidden past each edge, beyond the threshold.
84
+ hasOverflowYStart = $derived(this.overflowYStart > this.edgeThreshold);
85
+ hasOverflowYEnd = $derived(this.overflowYEnd > this.edgeThreshold);
86
+ hasOverflowXStart = $derived(this.overflowXStart > this.edgeThreshold);
87
+ hasOverflowXEnd = $derived(this.overflowXEnd > this.edgeThreshold);
88
+ canScrollUp = $derived(this.hasOverflowYStart);
89
+ canScrollDown = $derived(this.hasOverflowYEnd);
57
90
  thumbRect = useBoundingClientRect();
58
91
  trackRect = useBoundingClientRect();
59
- thumbYSize = $derived.by(() => {
92
+ trackRectX = useBoundingClientRect();
93
+ // Track lengths and thumb sizes read the live DOM, so they also depend on everything that
94
+ // moves those numbers: the observed boxes, the scroll extent (`measureVersion`) and the track
95
+ // boxes themselves (which also change when the other bar's corner inset appears). Without them
96
+ // the thumb keeps the size it had when the content last crossed the overflow threshold.
97
+ trackYLength = $derived.by(() => {
98
+ void this.viewportDimensions;
99
+ void this.measureVersion;
100
+ void this.trackRect.current;
101
+ return this.scrollbarYElement?.clientHeight ?? 0;
102
+ });
103
+ trackXLength = $derived.by(() => {
104
+ void this.viewportDimensions;
105
+ void this.measureVersion;
106
+ void this.trackRectX.current;
107
+ return this.scrollbarXElement?.clientWidth ?? 0;
108
+ });
109
+ /** Thumb length the content ratio asks for, before any overscroll shrinks it. */
110
+ thumbYBaseSize = $derived.by(() => {
111
+ void this.contentDimensions;
60
112
  if (!this.scrollbarYEnabled ||
61
113
  !this.scrollbarYElement ||
62
114
  !this.viewportElement ||
63
115
  !this.contentElement) {
64
116
  return 0;
65
117
  }
66
- const scrollbarYHeight = this.scrollbarYElement.clientHeight;
67
- const thumbYRatio = this.viewportElement.clientHeight / this.viewportElement.scrollHeight;
68
- return Math.max(thumbYRatio * scrollbarYHeight, 18);
118
+ const ratio = this.viewportElement.clientHeight / (this.viewportElement.scrollHeight || 1);
119
+ return Math.max(ratio * this.trackYLength, MIN_THUMB_SIZE);
120
+ });
121
+ thumbXBaseSize = $derived.by(() => {
122
+ void this.contentDimensions;
123
+ if (!this.scrollbarXEnabled ||
124
+ !this.scrollbarXElement ||
125
+ !this.viewportElement ||
126
+ !this.contentElement) {
127
+ return 0;
128
+ }
129
+ const ratio = this.viewportElement.clientWidth / (this.viewportElement.scrollWidth || 1);
130
+ return Math.max(ratio * this.trackXLength, MIN_THUMB_SIZE);
69
131
  });
70
- dragY = useDrag({
71
- isActive: true,
72
- onDragStart: ({ clientY, target }) => {
73
- // Calculate offset from mouse to thumb top using fresh rects
74
- const thumbRect = target.getBoundingClientRect();
75
- this.dragOffset = clientY - thumbRect.top;
132
+ // WebKit lets the scroll offset leave its range while it rubber-bands. The thumb shrinks by
133
+ // that amount and stays pinned to the edge that is being pulled, instead of leaving its track.
134
+ overscrollY = $derived(overscrollOf(this.scrollY, this.maxScrollY));
135
+ overscrollX = $derived(overscrollOf(this.scrollX, this.maxScrollX));
136
+ thumbYSize = $derived(this.thumbYBaseSize === 0
137
+ ? 0
138
+ : Math.max(this.thumbYBaseSize - Math.abs(this.overscrollY), MIN_THUMB_SIZE));
139
+ thumbXSize = $derived(this.thumbXBaseSize === 0
140
+ ? 0
141
+ : Math.max(this.thumbXBaseSize - Math.abs(this.overscrollX), MIN_THUMB_SIZE));
142
+ // Scroll snapping would pull a dragged viewport to the nearest snap point under the thumb,
143
+ // which then jumps between them. It is switched off while a thumb is held.
144
+ savedScrollSnapType = null;
145
+ pauseScrollSnap() {
146
+ const viewport = this.viewportElement;
147
+ if (!viewport || this.savedScrollSnapType !== null)
148
+ return;
149
+ this.savedScrollSnapType = viewport.style.scrollSnapType;
150
+ viewport.style.scrollSnapType = 'none';
151
+ }
152
+ restoreScrollSnap() {
153
+ if (this.savedScrollSnapType === null)
154
+ return;
155
+ if (this.viewportElement)
156
+ this.viewportElement.style.scrollSnapType = this.savedScrollSnapType;
157
+ this.savedScrollSnapType = null;
158
+ }
159
+ isDraggingY = $state(false);
160
+ // The thumb is a handle: the shared pointer drag captures the pointer on press (primary
161
+ // button only), and a cancelled touch, a lost capture or a mouse released outside the window
162
+ // ends the drag instead of leaving it stuck.
163
+ dragY = createPointerDrag({
164
+ onStart: ({ event, node }) => {
165
+ // Offset from the pointer to the thumb top, from a fresh rect
166
+ this.dragOffset = event.clientY - node.getBoundingClientRect().top;
167
+ this.isDraggingY = true;
168
+ this.pauseScrollSnap();
76
169
  },
77
- onDrag: ({ clientY }) => {
170
+ onMove: ({ y }) => {
78
171
  if (!this.scrollbarYElement)
79
172
  return;
80
173
  // Get fresh track rect at drag time
81
174
  const trackRect = this.scrollbarYElement.getBoundingClientRect();
82
- const maxThumbPos = Math.max(0, trackRect.height - this.thumbYSize);
175
+ const maxThumbPos = Math.max(0, trackRect.height - this.thumbYBaseSize);
83
176
  // Calculate new thumb position relative to track
84
- let newThumbTop = clientY - this.dragOffset - trackRect.top;
177
+ let newThumbTop = y - this.dragOffset - trackRect.top;
85
178
  newThumbTop = Math.max(0, Math.min(newThumbTop, maxThumbPos));
86
179
  const scrollPercentage = maxThumbPos > 0 ? newThumbTop / maxThumbPos : 0;
87
180
  this.viewportElement.scrollTop = scrollPercentage * this.maxScrollY;
181
+ },
182
+ onEnd: () => {
183
+ this.isDraggingY = false;
184
+ this.restoreScrollSnap();
185
+ },
186
+ onCancel: () => {
187
+ this.isDraggingY = false;
188
+ this.restoreScrollSnap();
88
189
  }
89
190
  });
90
- isDraggingY = $derived(this.dragY.isDragging);
91
- thumbXSize = $derived.by(() => {
92
- if (!this.scrollbarXEnabled ||
93
- !this.scrollbarXElement ||
94
- !this.viewportElement ||
95
- !this.contentElement) {
96
- return 0;
97
- }
98
- const scrollbarXWidth = this.scrollbarXElement.clientWidth;
99
- const thumbXRatio = this.viewportElement.clientWidth / this.viewportElement.scrollWidth;
100
- return Math.max(thumbXRatio * scrollbarXWidth, 18);
101
- });
102
- dragX = useDrag({
103
- isActive: true,
104
- onDragStart: ({ clientX, target }) => {
105
- const thumbRect = target.getBoundingClientRect();
106
- this.dragOffset = clientX - thumbRect.left;
191
+ isDraggingX = $state(false);
192
+ dragX = createPointerDrag({
193
+ onStart: ({ event, node }) => {
194
+ // Offset from the pointer to the thumb's inline start edge.
195
+ this.syncDirection();
196
+ const rect = node.getBoundingClientRect();
197
+ this.dragOffset = this.rtl ? rect.right - event.clientX : event.clientX - rect.left;
198
+ this.isDraggingX = true;
199
+ this.pauseScrollSnap();
107
200
  },
108
- onDrag: ({ clientX }) => {
201
+ onMove: ({ x }) => {
109
202
  if (!this.scrollbarXElement)
110
203
  return;
111
204
  const trackRect = this.scrollbarXElement.getBoundingClientRect();
112
- const maxThumbPos = Math.max(0, trackRect.width - this.thumbXSize);
113
- let newThumbLeft = clientX - this.dragOffset - trackRect.left;
114
- newThumbLeft = Math.max(0, Math.min(newThumbLeft, maxThumbPos));
115
- const scrollPercentage = maxThumbPos > 0 ? newThumbLeft / maxThumbPos : 0;
116
- this.viewportElement.scrollLeft = scrollPercentage * this.maxScrollX;
205
+ const maxThumbPos = Math.max(0, trackRect.width - this.thumbXBaseSize);
206
+ const pointer = this.rtl ? trackRect.right - x : x - trackRect.left;
207
+ const newThumbStart = Math.max(0, Math.min(pointer - this.dragOffset, maxThumbPos));
208
+ const scrollPercentage = maxThumbPos > 0 ? newThumbStart / maxThumbPos : 0;
209
+ this.writeScrollX(scrollPercentage * this.maxScrollX);
210
+ },
211
+ onEnd: () => {
212
+ this.isDraggingX = false;
213
+ this.restoreScrollSnap();
214
+ },
215
+ onCancel: () => {
216
+ this.isDraggingX = false;
217
+ this.restoreScrollSnap();
117
218
  }
118
219
  });
119
- isDraggingX = $derived(this.dragX.isDragging);
120
- // The viewport is the focusable scroll region — but only when it actually overflows, so an
121
- // idle ScrollArea (e.g. a dropdown whose items fit) adds no phantom tab stop. Native
122
- // `overflow: auto` then handles all keyboard scrolling (arrows, PageUp/Down, Home/End, Space).
123
- viewportTabindex = $derived(this.scrollbarYEnabled || this.scrollbarXEnabled ? 0 : -1);
220
+ // The viewport is the focusable, named scroll region — but only when it actually overflows, so
221
+ // an idle ScrollArea (e.g. a dropdown whose items fit) adds no phantom tab stop and no group to
222
+ // the accessibility tree. Native `overflow: auto` then handles all keyboard scrolling (arrows,
223
+ // PageUp/Down, Home/End, Space).
224
+ overflowing = $derived(this.scrollbarYEnabled || this.scrollbarXEnabled);
124
225
  // Warning : non reactive.
125
226
  hoover = $derived(useHoverAction({
126
227
  delay: this.delay,
@@ -129,31 +230,77 @@ export class ScrollArea extends createBindableStateClass() {
129
230
  thumbYPosition = $derived.by(() => {
130
231
  if (this.maxScrollY <= 0 || !this.scrollbarYElement)
131
232
  return 0;
132
- const trackHeight = this.scrollbarYElement.clientHeight;
133
- return (this.scrollY / this.maxScrollY) * (trackHeight - this.thumbYSize);
233
+ const overscroll = this.overscrollY;
234
+ if (overscroll < 0)
235
+ return 0;
236
+ if (overscroll > 0)
237
+ return this.trackYLength - this.thumbYSize;
238
+ return (this.scrollY / this.maxScrollY) * (this.trackYLength - this.thumbYSize);
134
239
  });
240
+ /** Distance from the track's inline start to the thumb's inline start edge. */
135
241
  thumbXPosition = $derived.by(() => {
136
242
  if (this.maxScrollX <= 0 || !this.scrollbarXElement)
137
243
  return 0;
138
- const trackWidth = this.scrollbarXElement.clientWidth;
139
- return (this.scrollX / this.maxScrollX) * (trackWidth - this.thumbXSize);
244
+ const overscroll = this.overscrollX;
245
+ if (overscroll < 0)
246
+ return 0;
247
+ if (overscroll > 0)
248
+ return this.trackXLength - this.thumbXSize;
249
+ return (this.scrollX / this.maxScrollX) * (this.trackXLength - this.thumbXSize);
140
250
  });
251
+ /** The horizontal thumb's `translateX` in px: mirrored in RTL, where the track fills from the right. */
252
+ thumbXTranslate = $derived(this.rtl ? -this.thumbXPosition : this.thumbXPosition);
141
253
  // Wheel / touch / trackpad / momentum scrolling is fully NATIVE via the viewport's
142
254
  // `overflow: auto` — no custom handlers needed. This class only reads the native scroll
143
255
  // offset (handleScroll) to position the custom thumbs, and drives programmatic scroll for
144
256
  // thumb-drag, track-click, keyboard, and edge auto-scroll.
145
- isScrolling = $state(null);
257
+ // True from the first scroll event until the viewport has been idle for a moment. The timer
258
+ // handle is a plain field: only the boolean is state, so a scroll session writes it twice
259
+ // instead of once per event.
260
+ isScrolling = $state(false);
261
+ scrollingTimer = null;
262
+ clearScrollingTimer() {
263
+ if (this.scrollingTimer === null)
264
+ return;
265
+ clearTimeout(this.scrollingTimer);
266
+ this.scrollingTimer = null;
267
+ }
268
+ /** Horizontal scroll offset as distance from the inline start, whatever the direction. */
269
+ readScrollX(viewport) {
270
+ return unsigned(this.rtl ? -viewport.scrollLeft : viewport.scrollLeft);
271
+ }
272
+ /** Scrolls horizontally to a distance from the inline start. */
273
+ writeScrollX(value) {
274
+ if (!this.viewportElement)
275
+ return;
276
+ this.viewportElement.scrollLeft = this.rtl ? -value : value;
277
+ }
278
+ /** Re-resolves the writing direction; true when it flipped. */
279
+ syncDirection() {
280
+ const rtl = this.direction?.() === 'rtl';
281
+ if (rtl === this.rtl)
282
+ return false;
283
+ this.rtl = rtl;
284
+ return true;
285
+ }
286
+ readScrollOffsets() {
287
+ const viewport = this.viewportElement;
288
+ if (!viewport)
289
+ return;
290
+ this.scrollY = viewport.scrollTop;
291
+ this.scrollX = this.readScrollX(viewport);
292
+ }
146
293
  handleScroll = () => {
147
- if (this.isScrolling) {
148
- clearTimeout(this.isScrolling);
149
- }
150
- this.isScrolling = setTimeout(() => {
151
- this.isScrolling = null;
152
- }, 400);
153
- if (this.viewportElement) {
154
- this.scrollY = this.viewportElement.scrollTop;
155
- this.scrollX = this.viewportElement.scrollLeft;
156
- }
294
+ if (!this.isScrolling)
295
+ this.isScrolling = true;
296
+ this.clearScrollingTimer();
297
+ this.scrollingTimer = setTimeout(() => {
298
+ this.scrollingTimer = null;
299
+ this.isScrolling = false;
300
+ }, SCROLLING_IDLE_MS);
301
+ // A `dir` flip moves no observed box; the next scroll is the cheapest place to notice it.
302
+ this.syncDirection();
303
+ this.readScrollOffsets();
157
304
  };
158
305
  handleTrackClick = (event) => {
159
306
  if (!this.viewportElement || !this.scrollbarYElement)
@@ -166,9 +313,9 @@ export class ScrollArea extends createBindableStateClass() {
166
313
  const trackRect = trackElement.getBoundingClientRect();
167
314
  const clickY = event.clientY - trackRect.top;
168
315
  // Calculate the maximum thumb position (track height minus thumb height)
169
- const maxThumbPos = Math.max(0, trackRect.height - this.thumbYSize);
316
+ const maxThumbPos = Math.max(0, trackRect.height - this.thumbYBaseSize);
170
317
  // Center the thumb on the click position
171
- const targetThumbPos = clickY - this.thumbYSize / 2;
318
+ const targetThumbPos = clickY - this.thumbYBaseSize / 2;
172
319
  const clampedThumbPos = Math.max(0, Math.min(targetThumbPos, maxThumbPos));
173
320
  // Convert thumb position to scroll position
174
321
  const scrollPercentage = maxThumbPos > 0 ? clampedThumbPos / maxThumbPos : 0;
@@ -179,18 +326,19 @@ export class ScrollArea extends createBindableStateClass() {
179
326
  return;
180
327
  if (event.composedPath().some((el) => el instanceof HTMLElement && el.dataset.thumb === ''))
181
328
  return;
329
+ this.syncDirection();
182
330
  const trackRect = this.scrollbarXElement.getBoundingClientRect();
183
- const clickX = event.clientX - trackRect.left;
184
- const maxThumbPos = Math.max(0, trackRect.width - this.thumbXSize);
185
- const targetThumbPos = clickX - this.thumbXSize / 2;
331
+ const clickX = this.rtl ? trackRect.right - event.clientX : event.clientX - trackRect.left;
332
+ const maxThumbPos = Math.max(0, trackRect.width - this.thumbXBaseSize);
333
+ const targetThumbPos = clickX - this.thumbXBaseSize / 2;
186
334
  const clampedThumbPos = Math.max(0, Math.min(targetThumbPos, maxThumbPos));
187
335
  const scrollPercentage = maxThumbPos > 0 ? clampedThumbPos / maxThumbPos : 0;
188
- this.viewportElement.scrollLeft = scrollPercentage * this.maxScrollX;
336
+ this.writeScrollX(scrollPercentage * this.maxScrollX);
189
337
  };
190
338
  // ---------------------------------------------------------------------------------------
191
339
  // Overflow measurement
192
340
  //
193
- // `viewportTabindex` (WCAG SCR34) hangs off these numbers, so a stale measurement is an
341
+ // `overflowing` (the WCAG SCR34 tab stop) hangs off these numbers, so a stale measurement is an
194
342
  // accessibility bug, not a cosmetic one. Three things can make the first ResizeObserver
195
343
  // callback wrong: it can fire before the first layout has settled, the content can grow
196
344
  // afterwards without changing the observed border-boxes (an image resolving, a streamed
@@ -209,6 +357,10 @@ export class ScrollArea extends createBindableStateClass() {
209
357
  const viewport = this.viewportElement;
210
358
  if (!viewport)
211
359
  return;
360
+ // The direction decides how the horizontal offset reads (negative in RTL), so it is
361
+ // re-read with every measurement, and the offsets are published again when it flips.
362
+ this.syncDirection();
363
+ this.readScrollOffsets();
212
364
  const viewportWidth = viewport.clientWidth;
213
365
  const viewportHeight = viewport.clientHeight;
214
366
  if (viewportWidth !== this.viewportDimensions.width ||
@@ -222,7 +374,7 @@ export class ScrollArea extends createBindableStateClass() {
222
374
  contentHeight !== this.contentDimensions.height) {
223
375
  this.contentDimensions = { width: contentWidth, height: contentHeight };
224
376
  }
225
- // The scroll extent is what `viewportTabindex` and the scrollbars are derived from, and it
377
+ // The scroll extent is what `overflowing` and the scrollbars are derived from, and it
226
378
  // can change while both observed border-boxes stay identical. Bump only when it moves.
227
379
  const extentY = viewport.scrollHeight - viewportHeight;
228
380
  const extentX = viewport.scrollWidth - viewportWidth;
@@ -253,6 +405,11 @@ export class ScrollArea extends createBindableStateClass() {
253
405
  }
254
406
  viewportAttachment = (element) => {
255
407
  this.viewportElement = element;
408
+ untrack(() => {
409
+ this.rtl = this.direction?.() === 'rtl';
410
+ // A restored or pre-set scroll position is not announced by a scroll event.
411
+ this.readScrollOffsets();
412
+ });
256
413
  const offScroll = on(element, 'scroll', this.handleScroll);
257
414
  // Hide the native scrollbars cross-browser (WebKit handled via the component <style>).
258
415
  element.style.scrollbarWidth = 'none'; // Firefox + standard
@@ -266,12 +423,24 @@ export class ScrollArea extends createBindableStateClass() {
266
423
  }
267
424
  });
268
425
  const offResize = resizeObserver.reference?.(element);
426
+ // A `dir` flip on the page or any wrapper (a language switcher) resizes nothing and need not
427
+ // scroll anything; watch the attribute on the way up so the direction is re-read.
428
+ let dirObserver = null;
429
+ if (typeof MutationObserver === 'function') {
430
+ dirObserver = new MutationObserver(this.scheduleMeasure);
431
+ for (let node = element; node; node = node.parentElement) {
432
+ dirObserver.observe(node, { attributes: true, attributeFilter: ['dir'] });
433
+ }
434
+ }
269
435
  // The observer's first callback can land before layout has settled; re-read next frame.
270
436
  this.scheduleMeasure();
271
437
  return () => {
272
438
  offScroll();
273
439
  offResize?.();
440
+ dirObserver?.disconnect();
274
441
  this.cancelScheduledMeasure();
442
+ this.clearScrollingTimer();
443
+ this.restoreScrollSnap();
275
444
  };
276
445
  };
277
446
  contentAttachment = (element) => {
@@ -311,28 +480,69 @@ export class ScrollArea extends createBindableStateClass() {
311
480
  };
312
481
  };
313
482
  // Forward a wheel over the (overlaid) custom scrollbar to the viewport, so wheeling on the
314
- // thin bar scrolls the content just like wheeling on the viewport does.
483
+ // thin bar scrolls the content just like wheeling on the viewport does. The wheel is only
484
+ // consumed while the viewport can still move that way: at an edge it goes on to scroll the
485
+ // page behind, as it does over the viewport itself.
315
486
  forwardWheelToViewport = (event) => {
316
- if (!this.viewportElement)
487
+ const viewport = this.viewportElement;
488
+ if (!viewport)
489
+ return;
490
+ const canScrollY = event.deltaY > 0
491
+ ? viewport.scrollHeight - viewport.clientHeight - viewport.scrollTop >= OVERFLOW_TOLERANCE
492
+ : event.deltaY < 0 && viewport.scrollTop >= OVERFLOW_TOLERANCE;
493
+ // Along the inline axis: a positive delta scrolls towards the inline end.
494
+ const towardsEnd = (this.rtl ? -event.deltaX : event.deltaX) > 0;
495
+ const towardsStart = (this.rtl ? -event.deltaX : event.deltaX) < 0;
496
+ const scrollX = this.readScrollX(viewport);
497
+ const maxScrollX = viewport.scrollWidth - viewport.clientWidth;
498
+ const canScrollX = (towardsEnd && maxScrollX - scrollX >= OVERFLOW_TOLERANCE) ||
499
+ (towardsStart && scrollX >= OVERFLOW_TOLERANCE);
500
+ if (!canScrollY && !canScrollX)
317
501
  return;
318
- this.viewportElement.scrollTop += event.deltaY;
319
- this.viewportElement.scrollLeft += event.deltaX;
502
+ viewport.scrollTop += event.deltaY;
503
+ viewport.scrollLeft += event.deltaX;
320
504
  event.preventDefault();
321
505
  };
506
+ // A press on a scrollbar or its thumb must not pull focus away from the control that has it
507
+ // (a Combobox input whose list is being dragged, say): the default action of the press, which
508
+ // moves focus and starts a text selection, is cancelled. Touch is left alone, where it would
509
+ // only stop the scroll gesture.
510
+ keepFocusOnPress = (event) => {
511
+ if (event.button === 0)
512
+ event.preventDefault();
513
+ };
322
514
  trackAttachment = (element) => {
515
+ this.trackYThickness = element.offsetWidth;
323
516
  const offClick = on(element, 'click', this.handleTrackClick);
324
517
  const offWheel = on(element, 'wheel', this.forwardWheelToViewport, { passive: false });
518
+ const offPointerDown = on(element, 'pointerdown', (event) => {
519
+ if (event.pointerType !== 'touch')
520
+ this.keepFocusOnPress(event);
521
+ });
522
+ const offMouseDown = on(element, 'mousedown', this.keepFocusOnPress);
325
523
  return () => {
326
524
  offClick();
327
525
  offWheel();
526
+ offPointerDown();
527
+ offMouseDown();
528
+ this.trackYThickness = 0;
328
529
  };
329
530
  };
330
531
  trackAttachmentX = (element) => {
532
+ this.trackXThickness = element.offsetHeight;
331
533
  const offClick = on(element, 'click', this.handleTrackClickX);
332
534
  const offWheel = on(element, 'wheel', this.forwardWheelToViewport, { passive: false });
535
+ const offPointerDown = on(element, 'pointerdown', (event) => {
536
+ if (event.pointerType !== 'touch')
537
+ this.keepFocusOnPress(event);
538
+ });
539
+ const offMouseDown = on(element, 'mousedown', this.keepFocusOnPress);
333
540
  return () => {
334
541
  offClick();
335
542
  offWheel();
543
+ offPointerDown();
544
+ offMouseDown();
545
+ this.trackXThickness = 0;
336
546
  };
337
547
  };
338
548
  scrollAnimationFrame = $state(null);
@@ -24,11 +24,14 @@ const defaultScrollAreaContent = cva({
24
24
  // Sizing (min-width/width/position) is set inline in the component; keep this minimal.
25
25
  base: 'relative'
26
26
  });
27
+ // Logical placement: the vertical bar sits at the inline end (the right in LTR, the left in RTL),
28
+ // the horizontal bar fills from the inline start. Where both show, the component insets each by
29
+ // the other's thickness so they do not overlap at the corner.
27
30
  const defaultScrollAreaScrollbar = cva({
28
- base: 'absolute top-0 right-0 z-30 w-1.5 cursor-pointer'
31
+ base: 'absolute top-0 end-0 z-30 w-1.5 cursor-pointer'
29
32
  });
30
33
  const defaultScrollAreaScrollbarX = cva({
31
- base: 'absolute bottom-0 left-0 z-30 h-1.5 cursor-pointer'
34
+ base: 'absolute bottom-0 start-0 z-30 h-1.5 cursor-pointer'
32
35
  });
33
36
  const defaultScrollAreaScrollbarThumb = cva({
34
37
  base: "relative bg-neutral-muted after:absolute after:-inset-1 after:content-['']"
@@ -72,9 +72,10 @@
72
72
  enabled: () => !disabled,
73
73
  enableHoverFocus: false,
74
74
  defaultFocusedIndex: () => (tabStopIndex >= 0 ? tabStopIndex : null),
75
- onChange: (index) => {
76
- if (index !== null) selectItem(index);
77
- }
75
+ // Selection follows the keyboard, but only a deliberate key move (an arrow, Home or End)
76
+ // selects. Tabbing in, a programmatic focus or the restore after a removal never changes
77
+ // the value, and Alt, Ctrl or Meta with an arrow is left to the browser.
78
+ onKeyboardMove: (index) => selectItem(index)
78
79
  });
79
80
 
80
81
  const indicator = useSlidingIndicator({
@@ -1 +1 @@
1
- export declare const segmentedControlDescription = "\n# SegmentedControl\n\nA compact single-selection input for switching between a small set of mutually exclusive modes. It uses radiogroup/radio semantics and an animated indicator that slides and resizes to the selected item.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { SegmentedControl } from './index.ts';\n import { gridFourIcon } from 'entasis/icons/gridFour';\n import { listIcon } from 'entasis/icons/list';\n\n const items = [\n { value: 'grid', label: 'Grid', icon: gridFourIcon },\n { value: 'list', label: 'List', icon: listIcon }\n ] as const;\n\n let value = $state<(typeof items)[number]['value']>('grid');\n</script>\n\n<SegmentedControl {items} bind:value />\n```\n\n## Props\n\n- **items**: `readonly SegmentedControlItem[]` \u2014 required options with unique `value` fields.\n- **value**: `string` \u2014 bindable selected value; defaults to the first enabled item.\n- **defaultValue**: `string` \u2014 initial selected value when value is omitted.\n- **onValueChange**: `(value: string) => void` \u2014 called once after user interaction changes the value.\n- **item**: `Snippet<[SegmentedControlItem]>` \u2014 replaces the default item renderer.\n- **size**: `'small' | 'normal' | 'large'` \u2014 defaults to `'normal'`.\n- **color**: semantic color \u2014 controls the selected pill and focus ring; defaults to `'neutral'`.\n- **variant**: `'normal' | 'pill'` \u2014 controls corner radius; defaults to the moderately rounded `'normal'` shape.\n- **disabled**: `boolean` \u2014 disables the full control.\n- **label**: `string` \u2014 accessible name for the radiogroup; defaults to the catalog's \"Segmented control\".\n- **class**: additional root classes.\n- **theme**: component theme overrides.\n\n## Item shape\n\n```ts\ntype SegmentedControlItem<Value extends string = string> = {\n value: Value;\n label?: string | Snippet;\n icon?: string | Snippet;\n disabled?: boolean;\n};\n```\n\nThe default renderer displays `icon`, then `label`. `label` is also the segment's accessible name: a string is painted and spoken, a snippet names the segment through its own content, and an icon-only segment (no `label`) falls back to its `value`.\n\n## Custom item renderer\n\n```svelte\n<SegmentedControl {items} bind:value>\n {#snippet item(option)}\n <span>{option.label}</span>\n <span>{option.count}</span>\n {/snippet}\n</SegmentedControl>\n```\n\nExtra fields on item objects remain available to the snippet through generic inference.\n\n## Shapes\n\n`variant=\"normal\"` uses a moderately rounded track and segments. Use `variant=\"pill\"` for the fully rounded stadium shape.\n\n```svelte\n<SegmentedControl {items} bind:value />\n<SegmentedControl {items} bind:value variant=\"pill\" />\n```\n\n## Keyboard behavior\n\n- Tab enters on the selected item, or the first enabled item when no value matches.\n- Arrow Left/Right moves and selects, wrapping at the ends.\n- Home/End selects the first/last enabled item.\n- Disabled items are skipped.\n\nEach item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.\n\nUse SegmentedControl for mode or value selection. Use Tabbar when changing navigational views with tab semantics.\n";
1
+ export declare const segmentedControlDescription = "\n# SegmentedControl\n\nA compact single-selection input for switching between a small set of mutually exclusive modes. It uses radiogroup/radio semantics and an animated indicator that slides and resizes to the selected item.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { SegmentedControl } from './index.ts';\n import { gridFourIcon } from 'entasis/icons/gridFour';\n import { listIcon } from 'entasis/icons/list';\n\n const items = [\n { value: 'grid', label: 'Grid', icon: gridFourIcon },\n { value: 'list', label: 'List', icon: listIcon }\n ] as const;\n\n let value = $state<(typeof items)[number]['value']>('grid');\n</script>\n\n<SegmentedControl {items} bind:value />\n```\n\n## Props\n\n- **items**: `readonly SegmentedControlItem[]` \u2014 required options with unique `value` fields.\n- **value**: `string` \u2014 bindable selected value; defaults to the first enabled item.\n- **defaultValue**: `string` \u2014 initial selected value when value is omitted.\n- **onValueChange**: `(value: string) => void` \u2014 called once after user interaction changes the value.\n- **item**: `Snippet<[SegmentedControlItem]>` \u2014 replaces the default item renderer.\n- **size**: `'small' | 'normal' | 'large'` \u2014 defaults to `'normal'`.\n- **color**: semantic color \u2014 controls the selected pill and focus ring; defaults to `'neutral'`.\n- **variant**: `'normal' | 'pill'` \u2014 controls corner radius; defaults to the moderately rounded `'normal'` shape.\n- **disabled**: `boolean` \u2014 disables the full control.\n- **label**: `string` \u2014 accessible name for the radiogroup; defaults to the catalog's \"Segmented control\".\n- **class**: additional root classes.\n- **theme**: component theme overrides.\n\n## Item shape\n\n```ts\ntype SegmentedControlItem<Value extends string = string> = {\n value: Value;\n label?: string | Snippet;\n icon?: string | Snippet;\n disabled?: boolean;\n};\n```\n\nThe default renderer displays `icon`, then `label`. `label` is also the segment's accessible name: a string is painted and spoken, a snippet names the segment through its own content, and an icon-only segment (no `label`) falls back to its `value`.\n\n## Custom item renderer\n\n```svelte\n<SegmentedControl {items} bind:value>\n {#snippet item(option)}\n <span>{option.label}</span>\n <span>{option.count}</span>\n {/snippet}\n</SegmentedControl>\n```\n\nExtra fields on item objects remain available to the snippet through generic inference.\n\n## Shapes\n\n`variant=\"normal\"` uses a moderately rounded track and segments. Use `variant=\"pill\"` for the fully rounded stadium shape.\n\n```svelte\n<SegmentedControl {items} bind:value />\n<SegmentedControl {items} bind:value variant=\"pill\" />\n```\n\n## Keyboard behavior\n\n- Tab enters on the selected item, or the first enabled item when no value matches. Tabbing in never changes the value, even when the selected item is disabled or no value matches.\n- Arrow Left/Right moves and selects, wrapping at the ends. Only a deliberate key move selects: arrows, Home and End.\n- Home/End selects the first/last enabled item.\n- Disabled items are skipped.\n- Arrow, Home and End keys pressed with Alt, Ctrl or Meta are left to the browser and never change the selection (Alt+ArrowLeft stays Back); Shift+Arrow still moves.\n\nEach item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.\n\nUse SegmentedControl for mode or value selection. Use Tabbar when changing navigational views with tab semantics.\n";
@@ -74,10 +74,11 @@ Extra fields on item objects remain available to the snippet through generic inf
74
74
 
75
75
  ## Keyboard behavior
76
76
 
77
- - Tab enters on the selected item, or the first enabled item when no value matches.
78
- - Arrow Left/Right moves and selects, wrapping at the ends.
77
+ - Tab enters on the selected item, or the first enabled item when no value matches. Tabbing in never changes the value, even when the selected item is disabled or no value matches.
78
+ - Arrow Left/Right moves and selects, wrapping at the ends. Only a deliberate key move selects: arrows, Home and End.
79
79
  - Home/End selects the first/last enabled item.
80
80
  - Disabled items are skipped.
81
+ - Arrow, Home and End keys pressed with Alt, Ctrl or Meta are left to the browser and never change the selection (Alt+ArrowLeft stays Back); Shift+Arrow still moves.
81
82
 
82
83
  Each item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.
83
84
 
@@ -2,7 +2,8 @@
2
2
  import { tick } from 'svelte';
3
3
  import type { Attachment } from 'svelte/attachments';
4
4
  import Popover from '../Popover/Popover.svelte';
5
- import type { PopoverState } from '../Popover/popover.state.svelte.js';
5
+ import { popoverInternals, type PopoverState } from '../Popover/popover.state.svelte.js';
6
+ import type { PopoverApi } from '../Popover/popover.api.js';
6
7
  import Slot from '../Slot/Slot.svelte';
7
8
  import ToggleMenu from '../ToggleMenu/ToggleMenu.svelte';
8
9
  import type { SelectionMenuProps, SelectionMenuPayload } from './selectionMenu.props.js';
@@ -84,7 +85,8 @@
84
85
  open = nextOpen;
85
86
  }
86
87
 
87
- function contentReference(popover: PopoverState): Attachment<HTMLElement> {
88
+ function contentReference(api: PopoverApi): Attachment<HTMLElement> {
89
+ const popover = popoverInternals(api);
88
90
  return (node) => {
89
91
  popoverState = popover;
90
92
  contentElement = node;
@@ -1,7 +1,12 @@
1
1
  <script lang="ts">
2
2
  import PopupMenu from '../PopupMenu/PopupMenu.svelte';
3
3
  import { dotsThreeIcon } from '../Icons/dotsThree.js';
4
- import type { SidebarApi, SidebarMenuActionDescriptor, SidebarSize } from './sidebar.props.js';
4
+ import type {
5
+ SidebarApi,
6
+ SidebarMenuActionDescriptor,
7
+ SidebarDensity,
8
+ SidebarSize
9
+ } from './sidebar.props.js';
5
10
  import { getSidebarMenuPosition } from './sidebar-position.js';
6
11
  import SidebarIcon from './SidebarIcon.svelte';
7
12
  import { useSidebarTheme, type SidebarThemeProps } from './sidebar.theme.js';
@@ -10,11 +15,13 @@
10
15
  action,
11
16
  api,
12
17
  size,
18
+ density = 'normal',
13
19
  theme
14
20
  }: {
15
21
  action: SidebarMenuActionDescriptor | import('svelte').Snippet<[SidebarApi]>;
16
22
  api: SidebarApi;
17
23
  size: SidebarSize;
24
+ density?: SidebarDensity;
18
25
  theme?: SidebarThemeProps;
19
26
  } = $props();
20
27
 
@@ -29,8 +36,11 @@
29
36
  {@render action(api)}
30
37
  {:else if action.menu}
31
38
  <PopupMenu
32
- menu={{ items: action.menu }}
33
- position={getSidebarMenuPosition(action.menuSide, action.menuAlign, api.isMobile)}
39
+ menu={{ items: action.menu, size, density }}
40
+ position={getSidebarMenuPosition(action.menuSide, action.menuAlign, {
41
+ isMobile: api.isMobile,
42
+ side: api.side
43
+ })}
34
44
  class={action.menuClass}
35
45
  fitTrigger={false}
36
46
  >
@@ -1,9 +1,10 @@
1
- import type { SidebarApi, SidebarMenuActionDescriptor, SidebarSize } from './sidebar.props.js';
1
+ import type { SidebarApi, SidebarMenuActionDescriptor, SidebarDensity, SidebarSize } from './sidebar.props.js';
2
2
  import { type SidebarThemeProps } from './sidebar.theme.js';
3
3
  type $$ComponentProps = {
4
4
  action: SidebarMenuActionDescriptor | import('svelte').Snippet<[SidebarApi]>;
5
5
  api: SidebarApi;
6
6
  size: SidebarSize;
7
+ density?: SidebarDensity;
7
8
  theme?: SidebarThemeProps;
8
9
  };
9
10
  declare const SidebarAction: import("svelte").Component<$$ComponentProps, {}, "">;