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
@@ -5,28 +5,56 @@
5
5
  import { useScrollAreaTheme } from './scrollArea.theme.js';
6
6
  import { caretUpIcon } from '../Icons/caretUp.js';
7
7
  import { caretDownIcon } from '../Icons/caretDown.js';
8
- import { useI18n } from '../../i18n/context.svelte.js';
8
+ import { getI18nDirection, useI18n } from '../../i18n/context.svelte.js';
9
+ import { presence } from '../../utils/stateAttributes.js';
10
+ import { useDirection } from '../../utils/useDirection.svelte.js';
11
+ import { untrack } from 'svelte';
9
12
 
10
13
  let {
11
14
  ref = $bindable(null),
12
15
  viewportRef = $bindable(null),
13
16
  label,
14
- viewportRole = 'group',
17
+ viewportRole,
18
+ viewportAttrs,
15
19
  class: className = '',
16
20
  children,
17
21
  delay = 0,
18
22
  type = 'hover',
19
23
  scrollOnEdges = false,
20
24
  scrollFade = false,
25
+ overflowEdgeThreshold = 1,
21
26
  onscroll,
22
27
  theme,
23
28
  ...attachments
24
29
  }: ScrollAreaProps = $props();
25
30
  const t = $derived(useI18n());
26
31
 
32
+ const MERGED_VIEWPORT_ATTRS = [
33
+ 'role',
34
+ 'aria-label',
35
+ 'tabindex',
36
+ 'class',
37
+ 'onscroll',
38
+ 'onfocus',
39
+ 'onblur'
40
+ ];
41
+
27
42
  const componentId = $props.id();
28
43
  const viewportId = `${componentId}-viewport`;
29
44
 
45
+ // The horizontal offset of an RTL viewport is negative. The element's own computed direction
46
+ // wins (a `dir="ltr"` code block inside an RTL page), the i18n direction covers what a
47
+ // computed style cannot say.
48
+ const i18nDirection = getI18nDirection();
49
+ const resolveDirection = useDirection(
50
+ () => viewportRef,
51
+ () => {
52
+ if (!viewportRef || typeof getComputedStyle !== 'function') return undefined;
53
+ const computed = getComputedStyle(viewportRef).direction;
54
+ return computed === 'rtl' || computed === 'ltr' ? computed : undefined;
55
+ }
56
+ );
57
+
30
58
  const scrollArea = new ScrollArea({
31
59
  get type() {
32
60
  return type;
@@ -36,7 +64,19 @@
36
64
  },
37
65
  get scrollOnEdges() {
38
66
  return scrollOnEdges;
39
- }
67
+ },
68
+ get overflowEdgeThreshold() {
69
+ return overflowEdgeThreshold;
70
+ },
71
+ direction: () => resolveDirection()
72
+ });
73
+
74
+ // A direction change (a locale switch, a `dir` flip) moves no box the observers watch.
75
+ $effect(() => {
76
+ // The computed direction answers first, so the i18n context is read here to subscribe.
77
+ void i18nDirection?.();
78
+ void resolveDirection();
79
+ untrack(() => scrollArea.measure());
40
80
  });
41
81
 
42
82
  const scrollFadeAxis = $derived.by(() => {
@@ -47,33 +87,126 @@
47
87
  });
48
88
 
49
89
  const classes = $derived(useScrollAreaTheme(theme));
90
+
91
+ // Accessibility of the viewport. An idle viewport is a plain div: it adds no role, no name and
92
+ // no tab stop, so a scroll area that fits its content (a short Select list, a card) is invisible
93
+ // to assistive tech. It becomes a named, focusable `group` only while it overflows (WCAG SCR34),
94
+ // or keeps the role and name the caller passed. A presentational viewport (`presentation` /
95
+ // `none`) stays transparent even while it overflows: the surrounding widget (a listbox with
96
+ // active-descendant navigation, say) owns keyboard scrolling, and a focusable or named node
97
+ // would cancel the presentational role.
98
+ //
99
+ // A caller that makes the viewport its own widget passes `viewportAttrs` with a `role`: the
100
+ // caller then owns the name and the tab stop as well, and the viewport adds neither.
101
+ //
102
+ // A viewport that holds focus keeps its role, name and a programmatic tab stop (-1) after its
103
+ // content stops overflowing (a resize, a zoom-out, filtered content): removing the tabindex of
104
+ // the focused element would make the browser drop focus to <body>. They go once it blurs.
105
+ let viewportFocused = $state(false);
106
+ const exposed = $derived(scrollArea.overflowing || viewportFocused);
107
+ const ownedRole = $derived(viewportAttrs?.role);
108
+ const effectiveRole = $derived(ownedRole ?? viewportRole);
109
+ const presentational = $derived(effectiveRole === 'presentation' || effectiveRole === 'none');
110
+ const resolvedViewportRole = $derived(
111
+ ownedRole ?? viewportRole ?? (label !== undefined || exposed ? 'group' : undefined)
112
+ );
113
+ const resolvedViewportLabel = $derived(
114
+ viewportAttrs?.['aria-label'] ??
115
+ (presentational
116
+ ? undefined
117
+ : (label ??
118
+ (exposed && ownedRole === undefined && !viewportAttrs?.['aria-labelledby']
119
+ ? t.scrollableContent
120
+ : undefined)))
121
+ );
122
+ const resolvedViewportTabindex = $derived(
123
+ viewportAttrs?.tabindex ??
124
+ (presentational || ownedRole !== undefined
125
+ ? undefined
126
+ : scrollArea.overflowing
127
+ ? 0
128
+ : viewportFocused
129
+ ? -1
130
+ : undefined)
131
+ );
132
+ // Everything else the caller passes goes straight onto the viewport. The properties above, the
133
+ // class and the handlers are merged instead, so they are left out here.
134
+ const viewportExtra = $derived.by(() => {
135
+ const extra: Record<PropertyKey, unknown> = { ...viewportAttrs };
136
+ for (const key of MERGED_VIEWPORT_ATTRS) delete extra[key];
137
+ return extra;
138
+ });
139
+
140
+ // Bars show while the area is hovered or scrolling in `hover` mode: touch scrolling, which
141
+ // never hovers, still reveals them.
142
+ const showScrollbarY = $derived(
143
+ scrollArea.isDraggingY ||
144
+ (scrollArea.visible &&
145
+ (type === 'always' ||
146
+ type === 'auto' ||
147
+ (type === 'hover' && (scrollArea.hoover.isHovered || scrollArea.isScrolling)) ||
148
+ (type === 'scroll' && scrollArea.isScrolling)))
149
+ );
150
+ const showScrollbarX = $derived(
151
+ scrollArea.isDraggingX ||
152
+ (scrollArea.visibleX &&
153
+ (type === 'always' ||
154
+ type === 'auto' ||
155
+ (type === 'hover' && (scrollArea.hoover.isHovered || scrollArea.isScrolling)) ||
156
+ (type === 'scroll' && scrollArea.isScrolling)))
157
+ );
158
+ const scrolling = $derived(presence(scrollArea.isScrolling));
50
159
  </script>
51
160
 
52
161
  <div
53
162
  data-scroll-area
54
163
  data-slot="scroll-area"
164
+ data-scrolling={scrolling}
165
+ data-has-overflow-x={presence(scrollArea.visibleX)}
166
+ data-has-overflow-y={presence(scrollArea.visible)}
167
+ data-overflow-x-start={presence(scrollArea.hasOverflowXStart)}
168
+ data-overflow-x-end={presence(scrollArea.hasOverflowXEnd)}
169
+ data-overflow-y-start={presence(scrollArea.hasOverflowYStart)}
170
+ data-overflow-y-end={presence(scrollArea.hasOverflowYEnd)}
55
171
  bind:this={ref}
56
172
  class={classes.root({ className })}
57
173
  style:position="relative"
174
+ style:--scroll-area-overflow-x-start="{scrollArea.overflowXStart}px"
175
+ style:--scroll-area-overflow-x-end="{scrollArea.overflowXEnd}px"
176
+ style:--scroll-area-overflow-y-start="{scrollArea.overflowYStart}px"
177
+ style:--scroll-area-overflow-y-end="{scrollArea.overflowYEnd}px"
58
178
  {@attach scrollArea.hoover.reference}
59
179
  {@attach scrollArea.scrollOnEdgesAttachment}
60
180
  {...attachments}
61
181
  >
62
182
  <!-- The viewport is the native scroll container and the keyboard scroll region: focusable
63
183
  only when it overflows (WCAG SCR34 scrollable-region pattern), so it never becomes a
64
- dead tab stop. -->
184
+ dead tab stop. Role, name and tab stop resolve in the script above. -->
65
185
  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
66
186
  <div
67
187
  id={viewportId}
188
+ {...viewportExtra}
68
189
  data-scroll-area-viewport
69
190
  data-slot="scroll-area-viewport"
191
+ data-scrolling={scrolling}
70
192
  data-scroll-fade-axis={scrollFadeAxis === 'none' ? undefined : scrollFadeAxis}
71
193
  bind:this={viewportRef}
72
- class={classes.viewport({ scrollFade: scrollFadeAxis })}
73
- tabindex={scrollArea.viewportTabindex}
74
- role={viewportRole}
75
- aria-label={label ?? t.scrollableContent}
76
- {onscroll}
194
+ class={classes.viewport({ scrollFade: scrollFadeAxis, className: viewportAttrs?.class })}
195
+ tabindex={resolvedViewportTabindex}
196
+ role={resolvedViewportRole}
197
+ aria-label={resolvedViewportLabel}
198
+ onscroll={(event) => {
199
+ viewportAttrs?.onscroll?.(event);
200
+ onscroll?.(event);
201
+ }}
202
+ onfocus={(event) => {
203
+ viewportAttrs?.onfocus?.(event);
204
+ viewportFocused = true;
205
+ }}
206
+ onblur={(event) => {
207
+ viewportAttrs?.onblur?.(event);
208
+ viewportFocused = false;
209
+ }}
77
210
  {@attach scrollArea.viewportAttachment}
78
211
  style:position="relative"
79
212
  style:overflow="scroll"
@@ -97,71 +230,76 @@
97
230
  </div>
98
231
  </div>
99
232
 
100
- {#if (type === 'hover' && scrollArea.visible && scrollArea.hoover.isHovered) || scrollArea.isDraggingY || (type === 'always' && scrollArea.visible) || (type === 'auto' && scrollArea.visible) || (type === 'scroll' && scrollArea.isScrolling)}
233
+ <!-- The scrollbars are pointer-only affordances: the viewport is the keyboard scroll region, so
234
+ the tracks stay out of the accessibility tree instead of exposing an unreachable
235
+ role="scrollbar" (inside a listbox they would also be invalid children). Where both bars
236
+ show, each stops short of the other at the corner. -->
237
+ {#if showScrollbarY}
101
238
  <div
102
239
  data-slot="scroll-area-scrollbar"
240
+ data-orientation="vertical"
241
+ data-scrolling={scrolling}
103
242
  transition:fade={{ duration: 200 }}
104
243
  bind:this={scrollArea.scrollbarYElement}
105
244
  class={classes.scrollbar()}
106
- style="bottom: 0px"
245
+ style:bottom="{scrollArea.trackXThickness}px"
107
246
  style:display="flex"
108
247
  style:user-select="none"
109
248
  style:opacity={scrollArea.visible ? 1 : 0}
110
249
  style:transition="opacity 0.2s ease"
111
- role="scrollbar"
112
- aria-controls={viewportId}
113
- aria-valuenow={scrollArea.scrollY}
114
- aria-valuemin="0"
115
- aria-valuemax={scrollArea.maxScrollY}
250
+ aria-hidden="true"
116
251
  {@attach scrollArea.trackAttachment}
117
252
  {@attach scrollArea.trackRect.reference}
118
253
  >
119
254
  <div
120
255
  data-thumb
121
256
  data-slot="scroll-area-thumb"
257
+ data-orientation="vertical"
258
+ data-scrolling={scrolling}
122
259
  class={classes.scrollbarThumb()}
123
260
  style:height={scrollArea.thumbYSize + 'px'}
124
261
  style:width="100%"
125
262
  style:transform={`translateY(${scrollArea.thumbYPosition}px)`}
126
- {@attach scrollArea.dragY.reference}
263
+ {@attach scrollArea.dragY}
127
264
  {@attach scrollArea.thumbRect.reference}
128
265
  ></div>
129
266
  </div>
130
267
  {/if}
131
268
 
132
- {#if (type === 'hover' && scrollArea.visibleX && scrollArea.hoover.isHovered) || scrollArea.isDraggingX || (type === 'always' && scrollArea.visibleX) || (type === 'auto' && scrollArea.visibleX) || (type === 'scroll' && scrollArea.isScrolling)}
269
+ {#if showScrollbarX}
133
270
  <div
134
271
  data-slot="scroll-area-scrollbar"
272
+ data-orientation="horizontal"
273
+ data-scrolling={scrolling}
135
274
  transition:fade={{ duration: 200 }}
136
275
  bind:this={scrollArea.scrollbarXElement}
137
276
  class={classes.scrollbarX()}
138
- style="right: 0px"
277
+ style:inset-inline-end="{scrollArea.trackYThickness}px"
139
278
  style:display="flex"
140
279
  style:user-select="none"
141
280
  style:opacity={scrollArea.visibleX ? 1 : 0}
142
281
  style:transition="opacity 0.2s ease"
143
- role="scrollbar"
144
- aria-orientation="horizontal"
145
- aria-controls={viewportId}
146
- aria-valuenow={scrollArea.scrollX}
147
- aria-valuemin="0"
148
- aria-valuemax={scrollArea.maxScrollX}
282
+ aria-hidden="true"
149
283
  {@attach scrollArea.trackAttachmentX}
284
+ {@attach scrollArea.trackRectX.reference}
150
285
  >
151
286
  <div
152
287
  data-thumb
153
288
  data-slot="scroll-area-thumb"
289
+ data-orientation="horizontal"
290
+ data-scrolling={scrolling}
154
291
  class={classes.scrollbarThumb()}
155
292
  style:width={scrollArea.thumbXSize + 'px'}
156
293
  style:height="100%"
157
- style:transform={`translateX(${scrollArea.thumbXPosition}px)`}
158
- {@attach scrollArea.dragX.reference}
294
+ style:transform={`translateX(${scrollArea.thumbXTranslate}px)`}
295
+ {@attach scrollArea.dragX}
159
296
  ></div>
160
297
  </div>
161
298
  {/if}
162
299
  {#if scrollArea.scrollOnEdgesAttachment}
163
300
  {#if scrollArea.canScrollUp}
164
301
  <div
302
+ aria-hidden="true"
165
303
  class="absolute top-0 left-0 flex w-full items-center justify-center"
166
304
  style:pointer-events="none"
167
305
  >
@@ -171,6 +309,7 @@
171
309
 
172
310
  {#if scrollArea.canScrollDown}
173
311
  <div
312
+ aria-hidden="true"
174
313
  class="absolute bottom-0 left-0 flex w-full items-center justify-center"
175
314
  style:pointer-events="none"
176
315
  >
@@ -1,3 +1,4 @@
1
1
  export { default as ScrollArea } from './ScrollArea.svelte';
2
- export type { ScrollAreaProps } from './scrollArea.props.js';
2
+ export type { ScrollAreaProps, ScrollAreaViewportAttributes } from './scrollArea.props.js';
3
3
  export { scrollAreaTheme, setScrollAreaTheme, useScrollAreaTheme, type ScrollAreaTheme, type ScrollAreaThemeProps } from './scrollArea.theme.js';
4
+ export { scrollAreaDataAttributes, scrollAreaCssVariables, type ScrollAreaDataAttribute, type ScrollAreaCssVariable } from './scrollArea.attributes.js';
@@ -1,2 +1,3 @@
1
1
  export { default as ScrollArea } from './ScrollArea.svelte';
2
2
  export { scrollAreaTheme, setScrollAreaTheme, useScrollAreaTheme } from './scrollArea.theme.js';
3
+ export { scrollAreaDataAttributes, scrollAreaCssVariables } from './scrollArea.attributes.js';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The styling hooks a ScrollArea exposes. Attributes are presence attributes (`''` while the
3
+ * state holds, omitted otherwise) unless the description says they carry a value; the variables
4
+ * are set on the root element in px.
5
+ */
6
+ export declare const scrollAreaDataAttributes: {
7
+ readonly 'data-scrolling': "On the root, the viewport, the scrollbars and the thumbs: present from the first scroll event until the viewport has been idle for 400 ms.";
8
+ readonly 'data-has-overflow-x': "On the root: present while the content overflows horizontally.";
9
+ readonly 'data-has-overflow-y': "On the root: present while the content overflows vertically.";
10
+ readonly 'data-overflow-x-start': "On the root: present while content is hidden past the inline start edge (to the left in LTR, to the right in RTL).";
11
+ readonly 'data-overflow-x-end': "On the root: present while content is hidden past the inline end edge (to the right in LTR, to the left in RTL).";
12
+ readonly 'data-overflow-y-start': "On the root: present while content is hidden above the viewport.";
13
+ readonly 'data-overflow-y-end': "On the root: present while content is hidden below the viewport.";
14
+ readonly 'data-orientation': "On the scrollbars and thumbs: `vertical` or `horizontal`, the axis they scroll.";
15
+ };
16
+ /** The name of a ScrollArea data attribute. */
17
+ export type ScrollAreaDataAttribute = keyof typeof scrollAreaDataAttributes;
18
+ export declare const scrollAreaCssVariables: {
19
+ readonly '--scroll-area-overflow-x-start': "Px of content hidden past the inline start edge (0 while the axis does not overflow).";
20
+ readonly '--scroll-area-overflow-x-end': "Px of content hidden past the inline end edge (0 while the axis does not overflow).";
21
+ readonly '--scroll-area-overflow-y-start': "Px of content hidden above the viewport.";
22
+ readonly '--scroll-area-overflow-y-end': "Px of content hidden below the viewport.";
23
+ };
24
+ /** The name of a ScrollArea CSS variable. */
25
+ export type ScrollAreaCssVariable = keyof typeof scrollAreaCssVariables;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The styling hooks a ScrollArea exposes. Attributes are presence attributes (`''` while the
3
+ * state holds, omitted otherwise) unless the description says they carry a value; the variables
4
+ * are set on the root element in px.
5
+ */
6
+ export const scrollAreaDataAttributes = {
7
+ 'data-scrolling': 'On the root, the viewport, the scrollbars and the thumbs: present from the first scroll event until the viewport has been idle for 400 ms.',
8
+ 'data-has-overflow-x': 'On the root: present while the content overflows horizontally.',
9
+ 'data-has-overflow-y': 'On the root: present while the content overflows vertically.',
10
+ 'data-overflow-x-start': 'On the root: present while content is hidden past the inline start edge (to the left in LTR, to the right in RTL).',
11
+ 'data-overflow-x-end': 'On the root: present while content is hidden past the inline end edge (to the right in LTR, to the left in RTL).',
12
+ 'data-overflow-y-start': 'On the root: present while content is hidden above the viewport.',
13
+ 'data-overflow-y-end': 'On the root: present while content is hidden below the viewport.',
14
+ 'data-orientation': 'On the scrollbars and thumbs: `vertical` or `horizontal`, the axis they scroll.'
15
+ };
16
+ export const scrollAreaCssVariables = {
17
+ '--scroll-area-overflow-x-start': 'Px of content hidden past the inline start edge (0 while the axis does not overflow).',
18
+ '--scroll-area-overflow-x-end': 'Px of content hidden past the inline end edge (0 while the axis does not overflow).',
19
+ '--scroll-area-overflow-y-start': 'Px of content hidden above the viewport.',
20
+ '--scroll-area-overflow-y-end': 'Px of content hidden below the viewport.'
21
+ };
@@ -1 +1 @@
1
- export declare const scrollAreaDescription = "\n# ScrollArea Component\n\nThe ScrollArea component provides a native scroll viewport with custom overlay scrollbars.\n\n## Basic Usage\n\n```svelte\n<ScrollArea class=\"h-64\">\n\t{#each items as item}\n\t\t<div>{item}</div>\n\t{/each}\n</ScrollArea>\n```\n\n## Props\n\n### Core Props\n- **children**: Snippet - Content rendered inside the scrollable viewport\n- **ref**: HTMLElement | null (bindable) - Reference to the root scroll-area element\n- **viewportRef**: HTMLElement | null (bindable) - Reference to the native scrolling viewport, suitable for virtualizers and imperative scrolling\n- Native div attributes and attachments are forwarded to the root element\n- **label**: string (default: 'Scrollable content') - Accessible name for the native scrolling viewport\n- **viewportRole**: string (default: 'group') - Role of the scrolling viewport; set it to the role the surrounding structure expects (`rowgroup` inside a grid or treegrid, for instance)\n- **type**: 'hover' | 'always' | 'scroll' | 'auto' (default: 'hover') - Controls scrollbar visibility behavior\n- **delay**: number (default: 0) - Milliseconds before hover mode treats the area as hovered\n- **onscroll**: (event: Event) => void - Native scroll handler attached to the viewport\n\n### Behavior Props\n- **scrollOnEdges**: boolean (default: false) - Enables auto-scroll and up/down indicators when the pointer rests near the viewport edges\n- **scrollFade**: boolean (default: false) - Applies the shared `scroll-fade` utility to the scrollable viewport\n\n### Styling Props\n- **class**: string - Additional CSS classes for the root scroll area\n- **theme**: ScrollAreaThemeProps - Custom theme overrides\n\n## Examples\n\n### With Scroll Fade\n```svelte\n<ScrollArea class=\"h-64\" scrollFade>\n\t{#each items as item}\n\t\t<div>{item}</div>\n\t{/each}\n</ScrollArea>\n```\n\n### Always Visible Scrollbar\n```svelte\n<ScrollArea class=\"h-64\" type=\"always\">\n\tContent\n</ScrollArea>\n```\n\n### Edge Auto Scroll\n```svelte\n<ScrollArea class=\"h-64\" scrollOnEdges>\n\tContent\n</ScrollArea>\n```\n\n## Notes\n\n- The viewport is the native scroll container.\n- The `scrollFade` prop applies the utility to the viewport, not the outer wrapper.\n- Native browser scrollbars are hidden while custom scrollbar thumbs are rendered over the viewport.\n- Keyboard focus is applied only when the viewport overflows.\n\n## Theme Structure\n\nThe theme object contains:\n- **root**: Main scroll area container styles\n- **viewport**: Scrollable viewport container styles\n- **content**: Scrollable content wrapper styles\n- **scrollbar**: Vertical scrollbar track styles\n- **scrollbarX**: Horizontal scrollbar track styles\n- **scrollbarThumb**: Scrollbar thumb styles\n\n## Available Variants\n\n**viewport**:\n- scrollFade: 'none' | 'y' | 'x' - Adds the shared vertical or horizontal scroll-fade utility\n";
1
+ export declare const scrollAreaDescription = "\n# ScrollArea Component\n\nThe ScrollArea component provides a native scroll viewport with custom overlay scrollbars.\n\n## Basic Usage\n\n```svelte\n<ScrollArea class=\"h-64\">\n\t{#each items as item}\n\t\t<div>{item}</div>\n\t{/each}\n</ScrollArea>\n```\n\n## Props\n\n### Core Props\n- **children**: Snippet - Content rendered inside the scrollable viewport\n- **ref**: HTMLElement | null (bindable) - Reference to the root scroll-area element\n- **viewportRef**: HTMLElement | null (bindable) - Reference to the native scrolling viewport, suitable for virtualizers and imperative scrolling\n- Native div attributes and attachments are forwarded to the root element\n- **label**: string - Accessible name for the native scrolling viewport; passing it makes the viewport a named `group` even when its content fits. Without it the viewport is named 'Scrollable content' (i18n `scrollableContent`) only while it overflows\n- **viewportAttrs**: attributes, handlers and attachments spread onto the scrolling viewport, for a widget that makes the viewport its own element (a listbox: `role`, `aria-activedescendant`, `id`). They win over the viewport's own: `class` is added to its classes, and `onscroll`, `onfocus` and `onblur` run before the built-in handling. A `role` here hands the viewport's semantics to the caller: the viewport then adds neither the automatic 'Scrollable content' name nor the automatic tab stop, so pass `tabindex` and a name when the role needs them\n- **viewportRole**: string - Role of the scrolling viewport. Without it the viewport is a plain element while its content fits and a `group` while it overflows (or when `label` is passed). Set it to the role the surrounding structure expects (`rowgroup` inside a grid or treegrid, for instance); inside a listbox pass `presentation`, which keeps the viewport unnamed and out of the tab order even while it overflows\n- **type**: 'hover' | 'always' | 'scroll' | 'auto' (default: 'hover') - Controls scrollbar visibility. `hover` shows the bars while the pointer is over the area or the area is scrolling, so touch scrolling (which never hovers) reveals them too; `always` and `auto` show them whenever the content overflows; `scroll` shows them only while scrolling\n- **overflowEdgeThreshold**: number (default: 1) - Px of content that may stay hidden past an edge before `data-overflow-*-start` / `data-overflow-*-end` (and the `scrollOnEdges` arrows) count it\n- **delay**: number (default: 0) - Milliseconds before hover mode treats the area as hovered\n- **onscroll**: (event: Event) => void - Native scroll handler attached to the viewport\n\n### Behavior Props\n- **scrollOnEdges**: boolean (default: false) - Enables auto-scroll and up/down indicators when the pointer rests near the viewport edges\n- **scrollFade**: boolean (default: false) - Applies the shared `scroll-fade` utility to the scrollable viewport\n\n### Styling Props\n- **class**: string - Additional CSS classes for the root scroll area\n- **theme**: ScrollAreaThemeProps - Custom theme overrides\n\n## Examples\n\n### With Scroll Fade\n```svelte\n<ScrollArea class=\"h-64\" scrollFade>\n\t{#each items as item}\n\t\t<div>{item}</div>\n\t{/each}\n</ScrollArea>\n```\n\n### Always Visible Scrollbar\n```svelte\n<ScrollArea class=\"h-64\" type=\"always\">\n\tContent\n</ScrollArea>\n```\n\n### Edge Auto Scroll\n```svelte\n<ScrollArea class=\"h-64\" scrollOnEdges>\n\tContent\n</ScrollArea>\n```\n\n## Notes\n\n- The viewport is the native scroll container.\n- The `scrollFade` prop applies the utility to the viewport, not the outer wrapper.\n- Native browser scrollbars are hidden while custom scrollbar thumbs are rendered over the viewport.\n- Keyboard focus is applied only when the viewport overflows.\n\n## Accessibility\n\n- A viewport whose content fits is a plain element: no role, no name, no tab stop.\n- While it overflows, the viewport is a `group` named by `label` (default 'Scrollable content') with `tabindex=\"0\"`, so keyboard users can scroll it (WCAG SCR34).\n- A focused viewport whose content stops overflowing keeps its role, name and `tabindex=\"-1\"` until it blurs, so focus never drops to the page.\n- `viewportRole=\"presentation\"` (or `none`) keeps the viewport transparent even while it overflows; use it when a surrounding listbox or grid owns keyboard scrolling.\n- The custom scrollbars and the edge-scroll arrows are pointer-only and carry `aria-hidden=\"true\"`.\n\n## Styling hooks\n\nData attributes (presence attributes, set to `\"\"` while the state holds):\n\n- `data-scrolling` on the root, viewport, scrollbars and thumbs: from the first scroll event until the viewport has been idle for 400 ms\n- `data-has-overflow-x` / `data-has-overflow-y` on the root: the content overflows on that axis\n- `data-overflow-x-start`, `data-overflow-x-end`, `data-overflow-y-start`, `data-overflow-y-end` on the root: content is hidden past that edge by more than `overflowEdgeThreshold`. The x edges are logical (inline start / end), so in RTL `start` is the right edge\n- `data-orientation` (`vertical` | `horizontal`) on the scrollbars and thumbs\n\nCSS variables on the root, in px (0 while the axis does not overflow): `--scroll-area-overflow-x-start`, `--scroll-area-overflow-x-end`, `--scroll-area-overflow-y-start`, `--scroll-area-overflow-y-end`. Overscroll (WebKit rubber banding) is not counted as hidden content.\n\nThe typed maps `scrollAreaDataAttributes` and `scrollAreaCssVariables` (from `entasis/scroll-area`) list each name with its meaning.\n\n```svelte\n<!-- Rules appear only while content is hidden past that edge. -->\n<ScrollArea class=\"h-64 data-overflow-y-start:border-t data-overflow-y-end:border-b\">\n\tContent\n</ScrollArea>\n```\n\n```css\n/* Fade the top edge only while content is hidden above. */\n[data-scroll-area]::before {\n\topacity: min(1, calc(var(--scroll-area-overflow-y-start) / 24));\n}\n```\n\n## Behavior\n\n- Wheeling over a scrollbar scrolls the viewport, and passes the wheel on to the page once the viewport cannot move that way.\n- Pressing a scrollbar or thumb with the primary button does not move focus (a Combobox input keeps it while its list is dragged). Scroll snapping on the viewport is paused while a thumb is held, then restored.\n- Horizontal scrolling follows the viewport's writing direction: in RTL the offset is negative, the vertical bar sits at the left, the horizontal thumb starts at the right, and the bars inset each other at the corner when both show.\n- While WebKit rubber-bands past either end, the thumb shrinks (down to 18 px) and stays pinned to that edge instead of leaving its track.\n\n## Theme Structure\n\nThe theme object contains:\n- **root**: Main scroll area container styles\n- **viewport**: Scrollable viewport container styles\n- **content**: Scrollable content wrapper styles\n- **scrollbar**: Vertical scrollbar track styles\n- **scrollbarX**: Horizontal scrollbar track styles\n- **scrollbarThumb**: Scrollbar thumb styles\n\n## Available Variants\n\n**viewport**:\n- scrollFade: 'none' | 'y' | 'x' - Adds the shared vertical or horizontal scroll-fade utility\n";
@@ -20,9 +20,11 @@ The ScrollArea component provides a native scroll viewport with custom overlay s
20
20
  - **ref**: HTMLElement | null (bindable) - Reference to the root scroll-area element
21
21
  - **viewportRef**: HTMLElement | null (bindable) - Reference to the native scrolling viewport, suitable for virtualizers and imperative scrolling
22
22
  - Native div attributes and attachments are forwarded to the root element
23
- - **label**: string (default: 'Scrollable content') - Accessible name for the native scrolling viewport
24
- - **viewportRole**: string (default: 'group') - Role of the scrolling viewport; set it to the role the surrounding structure expects (\`rowgroup\` inside a grid or treegrid, for instance)
25
- - **type**: 'hover' | 'always' | 'scroll' | 'auto' (default: 'hover') - Controls scrollbar visibility behavior
23
+ - **label**: string - Accessible name for the native scrolling viewport; passing it makes the viewport a named \`group\` even when its content fits. Without it the viewport is named 'Scrollable content' (i18n \`scrollableContent\`) only while it overflows
24
+ - **viewportAttrs**: attributes, handlers and attachments spread onto the scrolling viewport, for a widget that makes the viewport its own element (a listbox: \`role\`, \`aria-activedescendant\`, \`id\`). They win over the viewport's own: \`class\` is added to its classes, and \`onscroll\`, \`onfocus\` and \`onblur\` run before the built-in handling. A \`role\` here hands the viewport's semantics to the caller: the viewport then adds neither the automatic 'Scrollable content' name nor the automatic tab stop, so pass \`tabindex\` and a name when the role needs them
25
+ - **viewportRole**: string - Role of the scrolling viewport. Without it the viewport is a plain element while its content fits and a \`group\` while it overflows (or when \`label\` is passed). Set it to the role the surrounding structure expects (\`rowgroup\` inside a grid or treegrid, for instance); inside a listbox pass \`presentation\`, which keeps the viewport unnamed and out of the tab order even while it overflows
26
+ - **type**: 'hover' | 'always' | 'scroll' | 'auto' (default: 'hover') - Controls scrollbar visibility. \`hover\` shows the bars while the pointer is over the area or the area is scrolling, so touch scrolling (which never hovers) reveals them too; \`always\` and \`auto\` show them whenever the content overflows; \`scroll\` shows them only while scrolling
27
+ - **overflowEdgeThreshold**: number (default: 1) - Px of content that may stay hidden past an edge before \`data-overflow-*-start\` / \`data-overflow-*-end\` (and the \`scrollOnEdges\` arrows) count it
26
28
  - **delay**: number (default: 0) - Milliseconds before hover mode treats the area as hovered
27
29
  - **onscroll**: (event: Event) => void - Native scroll handler attached to the viewport
28
30
 
@@ -66,6 +68,48 @@ The ScrollArea component provides a native scroll viewport with custom overlay s
66
68
  - Native browser scrollbars are hidden while custom scrollbar thumbs are rendered over the viewport.
67
69
  - Keyboard focus is applied only when the viewport overflows.
68
70
 
71
+ ## Accessibility
72
+
73
+ - A viewport whose content fits is a plain element: no role, no name, no tab stop.
74
+ - While it overflows, the viewport is a \`group\` named by \`label\` (default 'Scrollable content') with \`tabindex="0"\`, so keyboard users can scroll it (WCAG SCR34).
75
+ - A focused viewport whose content stops overflowing keeps its role, name and \`tabindex="-1"\` until it blurs, so focus never drops to the page.
76
+ - \`viewportRole="presentation"\` (or \`none\`) keeps the viewport transparent even while it overflows; use it when a surrounding listbox or grid owns keyboard scrolling.
77
+ - The custom scrollbars and the edge-scroll arrows are pointer-only and carry \`aria-hidden="true"\`.
78
+
79
+ ## Styling hooks
80
+
81
+ Data attributes (presence attributes, set to \`""\` while the state holds):
82
+
83
+ - \`data-scrolling\` on the root, viewport, scrollbars and thumbs: from the first scroll event until the viewport has been idle for 400 ms
84
+ - \`data-has-overflow-x\` / \`data-has-overflow-y\` on the root: the content overflows on that axis
85
+ - \`data-overflow-x-start\`, \`data-overflow-x-end\`, \`data-overflow-y-start\`, \`data-overflow-y-end\` on the root: content is hidden past that edge by more than \`overflowEdgeThreshold\`. The x edges are logical (inline start / end), so in RTL \`start\` is the right edge
86
+ - \`data-orientation\` (\`vertical\` | \`horizontal\`) on the scrollbars and thumbs
87
+
88
+ CSS variables on the root, in px (0 while the axis does not overflow): \`--scroll-area-overflow-x-start\`, \`--scroll-area-overflow-x-end\`, \`--scroll-area-overflow-y-start\`, \`--scroll-area-overflow-y-end\`. Overscroll (WebKit rubber banding) is not counted as hidden content.
89
+
90
+ The typed maps \`scrollAreaDataAttributes\` and \`scrollAreaCssVariables\` (from \`entasis/scroll-area\`) list each name with its meaning.
91
+
92
+ \`\`\`svelte
93
+ <!-- Rules appear only while content is hidden past that edge. -->
94
+ <ScrollArea class="h-64 data-overflow-y-start:border-t data-overflow-y-end:border-b">
95
+ Content
96
+ </ScrollArea>
97
+ \`\`\`
98
+
99
+ \`\`\`css
100
+ /* Fade the top edge only while content is hidden above. */
101
+ [data-scroll-area]::before {
102
+ opacity: min(1, calc(var(--scroll-area-overflow-y-start) / 24));
103
+ }
104
+ \`\`\`
105
+
106
+ ## Behavior
107
+
108
+ - Wheeling over a scrollbar scrolls the viewport, and passes the wheel on to the page once the viewport cannot move that way.
109
+ - Pressing a scrollbar or thumb with the primary button does not move focus (a Combobox input keeps it while its list is dragged). Scroll snapping on the viewport is paused while a thumb is held, then restored.
110
+ - Horizontal scrolling follows the viewport's writing direction: in RTL the offset is negative, the vertical bar sits at the left, the horizontal thumb starts at the right, and the bars inset each other at the corner when both show.
111
+ - While WebKit rubber-bands past either end, the thumb shrinks (down to 18 px) and stays pinned to that edge instead of leaving its track.
112
+
69
113
  ## Theme Structure
70
114
 
71
115
  The theme object contains:
@@ -2,23 +2,43 @@ import type { Snippet } from 'svelte';
2
2
  import type { WithAttachments } from '../../types/props.js';
3
3
  import type { ScrollAreaThemeProps } from './scrollArea.theme.js';
4
4
  import type { HTMLAttributes } from 'svelte/elements';
5
+ /** Attributes, handlers and attachments for the scrolling viewport element. */
6
+ export type ScrollAreaViewportAttributes = WithAttachments<Omit<HTMLAttributes<HTMLDivElement>, 'children'>>;
5
7
  type ScrollAreaRootAttributes = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'onscroll'>;
6
8
  export type ScrollAreaProps = WithAttachments<ScrollAreaRootAttributes & {
7
9
  /** Bindable reference to the root scroll-area element. */
8
10
  ref?: HTMLDivElement | null;
9
11
  /** Bindable reference to the native scrolling viewport. */
10
12
  viewportRef?: HTMLDivElement | null;
11
- /** Accessible label applied to the native scrolling viewport. */
13
+ /**
14
+ * Accessible name of the native scrolling viewport. Passing it makes the viewport a named
15
+ * `group` even when its content fits. Without it, the viewport is named "Scrollable content"
16
+ * (from the i18n catalog) only while it overflows and is a keyboard tab stop.
17
+ */
12
18
  label?: string;
13
19
  /**
14
- * Role of the native scrolling viewport. Override it when the scroll area sits inside a
15
- * structural role whose children are constrained — a grid or treegrid, say, where the
16
- * viewport has to read as `rowgroup` rather than an unrelated group.
17
- * @default 'group'
20
+ * Role of the native scrolling viewport. Without it, the viewport is a plain element while
21
+ * its content fits and a `group` while it overflows (or when `label` is passed). Override
22
+ * it when the scroll area sits inside a structural role whose children are constrained: a
23
+ * grid or treegrid, say, where the viewport has to read as `rowgroup`. Inside a listbox,
24
+ * pass `presentation`: the viewport then never takes a name or a tab stop, even while it
25
+ * overflows, because the listbox owns keyboard scrolling.
18
26
  */
19
27
  viewportRole?: string;
20
28
  /**
21
- * Controls when the vertical scrollbar is shown (`hover`, `always`, `scroll`, or `auto`).
29
+ * Attributes spread onto the scrolling viewport, for a widget that makes the viewport itself
30
+ * its semantic element: a listbox with `role`, `aria-activedescendant` and its own `id`,
31
+ * say. They are merged with the viewport's own, and win over them: `class` is added to the
32
+ * viewport's classes, and `onscroll`, `onfocus` and `onblur` run before the built-in
33
+ * handling. A `role` here hands the viewport's semantics to the caller: the viewport then
34
+ * takes neither the automatic "Scrollable content" name nor the automatic tab stop, so pass
35
+ * `tabindex` (and a name) when the role needs them.
36
+ */
37
+ viewportAttrs?: ScrollAreaViewportAttributes;
38
+ /**
39
+ * Controls when the scrollbars are shown. `hover` shows them while the pointer is over the
40
+ * area or the area is scrolling (so touch scrolling, which never hovers, still reveals them),
41
+ * `always` and `auto` whenever the content overflows, `scroll` only while scrolling.
22
42
  * @default 'hover'
23
43
  */
24
44
  type?: 'auto' | 'always' | 'scroll' | 'hover';
@@ -32,6 +52,13 @@ export type ScrollAreaProps = WithAttachments<ScrollAreaRootAttributes & {
32
52
  * @default false
33
53
  */
34
54
  scrollFade?: boolean;
55
+ /**
56
+ * Px of content that may stay hidden past an edge before `data-overflow-*-start` and
57
+ * `data-overflow-*-end` (and the `scrollOnEdges` arrows) count it. A fractional zoom level
58
+ * leaves a remainder below one px at the scroll end, which must not read as more content.
59
+ * @default 1
60
+ */
61
+ overflowEdgeThreshold?: number;
35
62
  /**
36
63
  * Milliseconds to wait before hover mode treats the scroll area as hovered.
37
64
  * @default 0
@@ -2,6 +2,16 @@ export interface ScrollAreaOptions {
2
2
  delay: number;
3
3
  type: 'auto' | 'always' | 'scroll' | 'hover';
4
4
  scrollOnEdges: boolean;
5
+ /**
6
+ * Px of content that may stay hidden past an edge before that edge counts as overflowing.
7
+ * Defaults to 1.
8
+ */
9
+ overflowEdgeThreshold?: number;
10
+ /**
11
+ * Writing direction of the viewport. In `rtl` the horizontal offset runs from 0 down to a
12
+ * negative number, so every horizontal read and write is mirrored. Defaults to `ltr`.
13
+ */
14
+ direction?: () => 'ltr' | 'rtl';
5
15
  }
6
16
  declare const ScrollArea_base: new (props: ScrollAreaOptions) => {} & ScrollAreaOptions;
7
17
  export declare class ScrollArea extends ScrollArea_base {
@@ -27,6 +37,18 @@ export declare class ScrollArea extends ScrollArea_base {
27
37
  scrollbarXEnabled: boolean;
28
38
  visible: boolean;
29
39
  visibleX: boolean;
40
+ rtl: boolean;
41
+ trackYThickness: number;
42
+ trackXThickness: number;
43
+ private edgeThreshold;
44
+ overflowYStart: number;
45
+ overflowYEnd: number;
46
+ overflowXStart: number;
47
+ overflowXEnd: number;
48
+ hasOverflowYStart: boolean;
49
+ hasOverflowYEnd: boolean;
50
+ hasOverflowXStart: boolean;
51
+ hasOverflowXEnd: boolean;
30
52
  canScrollUp: boolean;
31
53
  canScrollDown: boolean;
32
54
  thumbRect: {
@@ -37,27 +59,48 @@ export declare class ScrollArea extends ScrollArea_base {
37
59
  readonly current: DOMRect;
38
60
  reference: (ref: HTMLElement) => (() => void) | undefined;
39
61
  };
40
- thumbYSize: number;
41
- dragY: {
42
- readonly reference: ((ref: HTMLElement) => () => void) | null;
43
- readonly isDragging: boolean;
62
+ trackRectX: {
63
+ readonly current: DOMRect;
64
+ reference: (ref: HTMLElement) => (() => void) | undefined;
44
65
  };
45
- isDraggingY: boolean;
66
+ private trackYLength;
67
+ private trackXLength;
68
+ /** Thumb length the content ratio asks for, before any overscroll shrinks it. */
69
+ thumbYBaseSize: number;
70
+ thumbXBaseSize: number;
71
+ overscrollY: number;
72
+ overscrollX: number;
73
+ thumbYSize: number;
46
74
  thumbXSize: number;
47
- dragX: {
48
- readonly reference: ((ref: HTMLElement) => () => void) | null;
49
- readonly isDragging: boolean;
50
- };
75
+ private savedScrollSnapType;
76
+ private pauseScrollSnap;
77
+ private restoreScrollSnap;
78
+ isDraggingY: boolean;
79
+ dragY: import("svelte/attachments").Attachment<HTMLElement>;
51
80
  isDraggingX: boolean;
52
- viewportTabindex: number;
81
+ dragX: import("svelte/attachments").Attachment<HTMLElement>;
82
+ overflowing: boolean;
53
83
  hoover: {
54
- reference: (ref: HTMLElement) => (() => void) | null;
84
+ reference: (ref: HTMLElement) => () => void;
55
85
  destroy: () => void;
86
+ cancel: () => void;
56
87
  readonly isHovered: boolean;
57
88
  };
58
89
  thumbYPosition: number;
90
+ /** Distance from the track's inline start to the thumb's inline start edge. */
59
91
  thumbXPosition: number;
60
- isScrolling: number | null;
92
+ /** The horizontal thumb's `translateX` in px: mirrored in RTL, where the track fills from the right. */
93
+ thumbXTranslate: number;
94
+ isScrolling: boolean;
95
+ private scrollingTimer;
96
+ private clearScrollingTimer;
97
+ /** Horizontal scroll offset as distance from the inline start, whatever the direction. */
98
+ private readScrollX;
99
+ /** Scrolls horizontally to a distance from the inline start. */
100
+ private writeScrollX;
101
+ /** Re-resolves the writing direction; true when it flipped. */
102
+ private syncDirection;
103
+ private readScrollOffsets;
61
104
  private handleScroll;
62
105
  handleTrackClick: (event: MouseEvent) => void;
63
106
  handleTrackClickX: (event: MouseEvent) => void;
@@ -75,6 +118,7 @@ export declare class ScrollArea extends ScrollArea_base {
75
118
  viewportAttachment: (element: HTMLElement) => () => void;
76
119
  contentAttachment: (element: HTMLElement) => () => void;
77
120
  private forwardWheelToViewport;
121
+ private keepFocusOnPress;
78
122
  trackAttachment: (element: HTMLElement) => () => void;
79
123
  trackAttachmentX: (element: HTMLElement) => () => void;
80
124
  private scrollAnimationFrame;