entasis 0.10.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/README.md +1 -1
  2. package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
  3. package/dist/attachments/disclosurePanel.svelte.js +277 -0
  4. package/dist/attachments/portal.d.ts +17 -1
  5. package/dist/attachments/portal.js +39 -2
  6. package/dist/attachments/spinnerOverlay.svelte.js +12 -0
  7. package/dist/attachments/transitionSize.d.ts +6 -0
  8. package/dist/attachments/transitionSize.js +30 -0
  9. package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
  10. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
  11. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
  12. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
  13. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
  14. package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
  15. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
  16. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
  17. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
  18. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
  19. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
  20. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
  21. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
  22. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
  23. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
  24. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
  25. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
  26. package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
  27. package/dist/components/AIAskUserQuestion/index.js +2 -0
  28. package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
  29. package/dist/components/AIAskUserQuestion/schemas.js +10 -3
  30. package/dist/components/AIChat/AIChat.svelte +10 -0
  31. package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
  32. package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
  33. package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
  34. package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
  35. package/dist/components/AIChat/AIChatSurface.svelte +30 -2
  36. package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
  37. package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
  38. package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
  39. package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
  40. package/dist/components/AIChat/aiChat.mcp.js +31 -15
  41. package/dist/components/AIChat/aiChat.props.d.ts +36 -10
  42. package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
  43. package/dist/components/AIChat/aiChat.theme.js +21 -4
  44. package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
  45. package/dist/components/AIChat/index.d.ts +1 -1
  46. package/dist/components/AIComposer/AIComposer.svelte +102 -5
  47. package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
  48. package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
  49. package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
  50. package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
  51. package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
  52. package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
  53. package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
  54. package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
  55. package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
  56. package/dist/components/AIComposer/aiComposer.theme.js +37 -5
  57. package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
  58. package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
  59. package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
  60. package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
  61. package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
  62. package/dist/components/AIContext/AIContext.svelte +7 -3
  63. package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
  64. package/dist/components/AIContext/aiContext.mcp.js +1 -1
  65. package/dist/components/AIContext/aiContext.props.d.ts +4 -1
  66. package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
  67. package/dist/components/AIContext/aiContext.theme.js +7 -2
  68. package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
  69. package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
  70. package/dist/components/AIMarker/AIMarker.svelte +2 -0
  71. package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
  72. package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
  73. package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
  74. package/dist/components/AIMarker/aiMarker.theme.js +2 -2
  75. package/dist/components/AIMessage/AIMessage.svelte +38 -16
  76. package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
  77. package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
  78. package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
  79. package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
  80. package/dist/components/AIMessage/aiMessage.theme.js +91 -32
  81. package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
  82. package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
  83. package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
  84. package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
  85. package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
  86. package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
  87. package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
  88. package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
  89. package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
  90. package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
  91. package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
  92. package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
  93. package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
  94. package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
  95. package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
  96. package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
  97. package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
  98. package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
  99. package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
  100. package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
  101. package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
  102. package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
  103. package/dist/components/AIThread/AIThread.svelte +378 -95
  104. package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
  105. package/dist/components/AIThread/AIThreadItems.svelte +266 -64
  106. package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
  107. package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
  108. package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
  109. package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
  110. package/dist/components/AIThread/aiThread.mcp.js +34 -20
  111. package/dist/components/AIThread/aiThread.props.d.ts +73 -8
  112. package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
  113. package/dist/components/AIThread/aiThread.theme.js +108 -9
  114. package/dist/components/AIThread/index.d.ts +1 -1
  115. package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
  116. package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
  117. package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
  118. package/dist/components/AIThread/threadRenderItems.js +265 -77
  119. package/dist/components/AIThread/threadScrollController.d.ts +0 -8
  120. package/dist/components/AIThread/threadScrollController.js +2 -39
  121. package/dist/components/AIThread/threadTools.d.ts +11 -0
  122. package/dist/components/AIThread/threadTools.js +79 -0
  123. package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
  124. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
  125. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
  126. package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
  127. package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
  128. package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
  129. package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
  130. package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
  131. package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
  132. package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
  133. package/dist/components/AITool/AITool.svelte +56 -21
  134. package/dist/components/AITool/AIToolCallList.svelte +79 -29
  135. package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
  136. package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
  137. package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
  138. package/dist/components/AITool/AIToolValueSection.svelte +126 -28
  139. package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
  140. package/dist/components/AITool/AIToolValueTree.svelte +11 -16
  141. package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
  142. package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
  143. package/dist/components/AITool/aiTool.mcp.js +36 -8
  144. package/dist/components/AITool/aiTool.props.d.ts +52 -6
  145. package/dist/components/AITool/aiTool.theme.d.ts +117 -39
  146. package/dist/components/AITool/aiTool.theme.js +144 -140
  147. package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
  148. package/dist/components/AITool/aiToolClock.svelte.js +62 -0
  149. package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
  150. package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
  151. package/dist/components/AITool/index.d.ts +2 -1
  152. package/dist/components/AITool/index.js +1 -0
  153. package/dist/components/AITool/toolRendering.d.ts +33 -1
  154. package/dist/components/AITool/toolRendering.js +179 -15
  155. package/dist/components/AITool/toolValueTree.d.ts +14 -1
  156. package/dist/components/AITool/toolValueTree.js +126 -27
  157. package/dist/components/Accordion/Accordion.svelte +109 -109
  158. package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
  159. package/dist/components/Accordion/AccordionPanel.svelte +64 -0
  160. package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
  161. package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
  162. package/dist/components/Accordion/accordion.attributes.js +20 -0
  163. package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
  164. package/dist/components/Accordion/accordion.mcp.js +78 -22
  165. package/dist/components/Accordion/accordion.props.d.ts +54 -10
  166. package/dist/components/Accordion/accordion.theme.d.ts +3 -0
  167. package/dist/components/Accordion/accordion.theme.js +4 -0
  168. package/dist/components/Accordion/index.d.ts +1 -0
  169. package/dist/components/Accordion/index.js +1 -0
  170. package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
  171. package/dist/components/Avatar/Avatar.svelte +60 -10
  172. package/dist/components/Avatar/AvatarGroup.svelte +9 -0
  173. package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
  174. package/dist/components/Avatar/avatar.mcp.js +13 -5
  175. package/dist/components/Avatar/avatar.props.d.ts +28 -1
  176. package/dist/components/Avatar/avatar.theme.js +3 -3
  177. package/dist/components/Avatar/index.d.ts +1 -1
  178. package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
  179. package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
  180. package/dist/components/Button/Button.svelte +35 -15
  181. package/dist/components/Button/button.mcp.d.ts +1 -1
  182. package/dist/components/Button/button.mcp.js +8 -4
  183. package/dist/components/Button/button.props.d.ts +23 -8
  184. package/dist/components/Button/button.theme.d.ts +12 -0
  185. package/dist/components/Button/button.theme.js +17 -4
  186. package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
  187. package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
  188. package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
  189. package/dist/components/Collapsible/Collapsible.svelte +125 -19
  190. package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
  191. package/dist/components/Collapsible/collapsible.attributes.js +17 -0
  192. package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
  193. package/dist/components/Collapsible/collapsible.mcp.js +62 -12
  194. package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
  195. package/dist/components/Collapsible/collapsible.theme.js +3 -1
  196. package/dist/components/Collapsible/index.d.ts +1 -0
  197. package/dist/components/Collapsible/index.js +1 -0
  198. package/dist/components/Command/Command.svelte +56 -14
  199. package/dist/components/Command/command.mcp.d.ts +1 -1
  200. package/dist/components/Command/command.mcp.js +12 -6
  201. package/dist/components/Command/command.props.d.ts +39 -6
  202. package/dist/components/Command/command.state.svelte.d.ts +40 -11
  203. package/dist/components/Command/command.state.svelte.js +75 -28
  204. package/dist/components/Command/command.theme.js +4 -3
  205. package/dist/components/Confirmation/Confirmation.svelte +72 -31
  206. package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
  207. package/dist/components/Confirmation/confirmation.mcp.js +5 -4
  208. package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
  209. package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
  210. package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
  211. package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
  212. package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
  213. package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
  214. package/dist/components/DataTable/DataTable.svelte +4 -9
  215. package/dist/components/DataTable/DataTableEditor.svelte +5 -0
  216. package/dist/components/DataTable/DataTableFilter.svelte +1 -0
  217. package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
  218. package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
  219. package/dist/components/DataTable/dataTable.mcp.js +4 -2
  220. package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
  221. package/dist/components/DataTable/dataTable.theme.js +9 -6
  222. package/dist/components/Dialog/Dialog.svelte +120 -35
  223. package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
  224. package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
  225. package/dist/components/Dialog/dialog.api.d.ts +65 -0
  226. package/dist/components/Dialog/dialog.api.js +1 -0
  227. package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
  228. package/dist/components/Dialog/dialog.attributes.js +19 -0
  229. package/dist/components/Dialog/dialog.indent.d.ts +6 -0
  230. package/dist/components/Dialog/dialog.indent.js +16 -0
  231. package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
  232. package/dist/components/Dialog/dialog.mcp.js +195 -22
  233. package/dist/components/Dialog/dialog.props.d.ts +102 -19
  234. package/dist/components/Dialog/dialog.snap.d.ts +40 -0
  235. package/dist/components/Dialog/dialog.snap.js +78 -0
  236. package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
  237. package/dist/components/Dialog/dialog.state.svelte.js +525 -66
  238. package/dist/components/Dialog/dialog.theme.d.ts +48 -0
  239. package/dist/components/Dialog/dialog.theme.js +32 -9
  240. package/dist/components/Dialog/index.d.ts +4 -1
  241. package/dist/components/Dialog/index.js +1 -0
  242. package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
  243. package/dist/components/DocumentViewer/documentOutput.js +2 -1
  244. package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
  245. package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
  246. package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
  247. package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
  248. package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
  249. package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
  250. package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
  251. package/dist/components/Form/Ask/Ask.svelte +9 -13
  252. package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
  253. package/dist/components/Form/Ask/ask.mcp.js +1 -1
  254. package/dist/components/Form/Ask/ask.props.d.ts +1 -1
  255. package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
  256. package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
  257. package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
  258. package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
  259. package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
  260. package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
  261. package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
  262. package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
  263. package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
  264. package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
  265. package/dist/components/Form/Autocomplete/index.d.ts +3 -0
  266. package/dist/components/Form/Autocomplete/index.js +2 -0
  267. package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
  268. package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
  269. package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
  270. package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
  271. package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
  272. package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
  273. package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
  274. package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
  275. package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
  276. package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
  277. package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
  278. package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
  279. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
  280. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
  281. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
  282. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
  283. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
  284. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
  285. package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
  286. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
  287. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
  288. package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
  289. package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
  290. package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
  291. package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
  292. package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
  293. package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
  294. package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
  295. package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
  296. package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
  297. package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
  298. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
  299. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
  300. package/dist/components/Form/Combobox/Combobox.svelte +145 -185
  301. package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
  302. package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
  303. package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
  304. package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
  305. package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
  306. package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
  307. package/dist/components/Form/Combobox/combobox.items.js +68 -0
  308. package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
  309. package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
  310. package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
  311. package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
  312. package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
  313. package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
  314. package/dist/components/Form/Combobox/combobox.theme.js +37 -1
  315. package/dist/components/Form/Combobox/index.d.ts +2 -1
  316. package/dist/components/Form/Combobox/index.js +1 -0
  317. package/dist/components/Form/DateInput/DateInput.svelte +11 -3
  318. package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
  319. package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
  320. package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
  321. package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
  322. package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
  323. package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
  324. package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
  325. package/dist/components/Form/Field/Field.svelte +258 -32
  326. package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
  327. package/dist/components/Form/Field/FieldGroup.svelte +29 -0
  328. package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
  329. package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
  330. package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
  331. package/dist/components/Form/Field/field.d.ts +75 -10
  332. package/dist/components/Form/Field/field.mcp.d.ts +1 -1
  333. package/dist/components/Form/Field/field.mcp.js +158 -18
  334. package/dist/components/Form/Field/field.messages.d.ts +47 -0
  335. package/dist/components/Form/Field/field.messages.js +64 -0
  336. package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
  337. package/dist/components/Form/Field/field.state.svelte.js +525 -16
  338. package/dist/components/Form/Field/field.theme.d.ts +46 -0
  339. package/dist/components/Form/Field/field.theme.js +33 -0
  340. package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
  341. package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
  342. package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
  343. package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
  344. package/dist/components/Form/Field/index.d.ts +5 -2
  345. package/dist/components/Form/Field/index.js +1 -0
  346. package/dist/components/Form/Field/schemas.js +7 -2
  347. package/dist/components/Form/File/FileInput.svelte +24 -3
  348. package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
  349. package/dist/components/Form/File/fileInput.mcp.js +1 -0
  350. package/dist/components/Form/Form/Form.svelte +49 -15
  351. package/dist/components/Form/Form/FormActions.svelte +3 -1
  352. package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
  353. package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
  354. package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
  355. package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
  356. package/dist/components/Form/Form/form.d.ts +84 -11
  357. package/dist/components/Form/Form/form.mcp.d.ts +1 -1
  358. package/dist/components/Form/Form/form.mcp.js +178 -12
  359. package/dist/components/Form/Form/form.props.d.ts +32 -1
  360. package/dist/components/Form/Form/form.registry.d.ts +28 -0
  361. package/dist/components/Form/Form/form.registry.js +59 -0
  362. package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
  363. package/dist/components/Form/Form/form.state.svelte.js +322 -28
  364. package/dist/components/Form/Form/index.d.ts +4 -1
  365. package/dist/components/Form/Form/index.js +1 -0
  366. package/dist/components/Form/Form/visibility.d.ts +3130 -1863
  367. package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
  368. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
  369. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
  370. package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
  371. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
  372. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
  373. package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
  374. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
  375. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
  376. package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
  377. package/dist/components/Form/NumberInput/index.d.ts +1 -1
  378. package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
  379. package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
  380. package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
  381. package/dist/components/Form/PasswordInput/Password.svelte +28 -1
  382. package/dist/components/Form/PasswordInput/index.d.ts +1 -1
  383. package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
  384. package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
  385. package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
  386. package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
  387. package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
  388. package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
  389. package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
  390. package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
  391. package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
  392. package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
  393. package/dist/components/Form/PinInput/PinInput.svelte +44 -9
  394. package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
  395. package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
  396. package/dist/components/Form/PinInput/index.d.ts +1 -1
  397. package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
  398. package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
  399. package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
  400. package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
  401. package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
  402. package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
  403. package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
  404. package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
  405. package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
  406. package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
  407. package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
  408. package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
  409. package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
  410. package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
  411. package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
  412. package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
  413. package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
  414. package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
  415. package/dist/components/Form/Select/Select.svelte +186 -48
  416. package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
  417. package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
  418. package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
  419. package/dist/components/Form/Select/index.d.ts +2 -1
  420. package/dist/components/Form/Select/index.js +1 -0
  421. package/dist/components/Form/Select/select.align.d.ts +5 -0
  422. package/dist/components/Form/Select/select.align.js +19 -5
  423. package/dist/components/Form/Select/select.attributes.d.ts +36 -0
  424. package/dist/components/Form/Select/select.attributes.js +27 -0
  425. package/dist/components/Form/Select/select.mcp.d.ts +1 -1
  426. package/dist/components/Form/Select/select.mcp.js +103 -18
  427. package/dist/components/Form/Select/select.props.d.ts +87 -10
  428. package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
  429. package/dist/components/Form/Select/select.state.svelte.js +354 -59
  430. package/dist/components/Form/Select/select.theme.d.ts +21 -0
  431. package/dist/components/Form/Select/select.theme.js +22 -0
  432. package/dist/components/Form/Slider/Slider.svelte +54 -14
  433. package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
  434. package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
  435. package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
  436. package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
  437. package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
  438. package/dist/components/Form/Slider/index.d.ts +1 -1
  439. package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
  440. package/dist/components/Form/Slider/slider.mcp.js +55 -11
  441. package/dist/components/Form/Slider/slider.props.d.ts +35 -2
  442. package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
  443. package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
  444. package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
  445. package/dist/components/Form/Slider/slider.theme.js +35 -17
  446. package/dist/components/Form/Switch/Switch.svelte +61 -38
  447. package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
  448. package/dist/components/Form/Switch/switch.mcp.js +25 -5
  449. package/dist/components/Form/Switch/switch.props.d.ts +14 -1
  450. package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
  451. package/dist/components/Form/Switch/switch.theme.js +8 -3
  452. package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
  453. package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
  454. package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
  455. package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
  456. package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
  457. package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
  458. package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
  459. package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
  460. package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
  461. package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
  462. package/dist/components/Form/TextArea/TextArea.svelte +8 -0
  463. package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
  464. package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
  465. package/dist/components/Form/TextInput/TextInput.svelte +8 -1
  466. package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
  467. package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
  468. package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
  469. package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
  470. package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
  471. package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
  472. package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
  473. package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
  474. package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
  475. package/dist/components/HoverCard/HoverCard.svelte +100 -10
  476. package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
  477. package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
  478. package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
  479. package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
  480. package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
  481. package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
  482. package/dist/components/HoverCard/hoverCard.theme.js +9 -2
  483. package/dist/components/HoverCard/index.d.ts +1 -0
  484. package/dist/components/HoverCard/index.js +1 -0
  485. package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
  486. package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
  487. package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
  488. package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
  489. package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
  490. package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
  491. package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
  492. package/dist/components/Kanban/kanban.theme.js +7 -3
  493. package/dist/components/Layout/layoutSpacing.d.ts +2 -2
  494. package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
  495. package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
  496. package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
  497. package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
  498. package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
  499. package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
  500. package/dist/components/Map/maplibre-cdn.js +3 -2
  501. package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
  502. package/dist/components/Markdown/markdown.mcp.js +2 -1
  503. package/dist/components/Markdown/markdown.theme.js +18 -9
  504. package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
  505. package/dist/components/Menu/Menu.svelte +3 -3
  506. package/dist/components/Menu/Menu.svelte.d.ts +1 -1
  507. package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
  508. package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
  509. package/dist/components/Menu/MenuFloating.svelte +421 -74
  510. package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
  511. package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
  512. package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
  513. package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
  514. package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
  515. package/dist/components/Menu/MenuSearchField.svelte +54 -0
  516. package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
  517. package/dist/components/Menu/MenuStacked.svelte +404 -158
  518. package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
  519. package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
  520. package/dist/components/Menu/index.d.ts +2 -1
  521. package/dist/components/Menu/index.js +1 -0
  522. package/dist/components/Menu/menu.attributes.d.ts +37 -0
  523. package/dist/components/Menu/menu.attributes.js +28 -0
  524. package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
  525. package/dist/components/Menu/menu.filter.svelte.js +143 -0
  526. package/dist/components/Menu/menu.mcp.d.ts +1 -1
  527. package/dist/components/Menu/menu.mcp.js +227 -17
  528. package/dist/components/Menu/menu.platform.d.ts +5 -0
  529. package/dist/components/Menu/menu.platform.js +11 -0
  530. package/dist/components/Menu/menu.props.d.ts +172 -9
  531. package/dist/components/Menu/menu.theme.d.ts +147 -0
  532. package/dist/components/Menu/menu.theme.js +101 -0
  533. package/dist/components/Menu/menuTree.d.ts +35 -1
  534. package/dist/components/Menu/menuTree.js +158 -1
  535. package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
  536. package/dist/components/MenuBar/menuBar.mcp.js +4 -2
  537. package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
  538. package/dist/components/MenuOption/MenuOption.svelte +5 -1
  539. package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
  540. package/dist/components/MenuOption/menuOption.mcp.js +8 -0
  541. package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
  542. package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
  543. package/dist/components/MenuOption/menuOption.theme.js +24 -4
  544. package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
  545. package/dist/components/Mermaid/mermaid.mcp.js +8 -8
  546. package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
  547. package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
  548. package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
  549. package/dist/components/Mermaid/mermaid.theme.js +26 -1
  550. package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
  551. package/dist/components/Meter/Meter.svelte +110 -24
  552. package/dist/components/Meter/Meter.svelte.d.ts +12 -12
  553. package/dist/components/Meter/meter.mcp.d.ts +1 -1
  554. package/dist/components/Meter/meter.mcp.js +23 -37
  555. package/dist/components/Meter/meter.props.d.ts +36 -44
  556. package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
  557. package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
  558. package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
  559. package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
  560. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
  561. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
  562. package/dist/components/NavigationMenu/index.d.ts +4 -0
  563. package/dist/components/NavigationMenu/index.js +3 -0
  564. package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
  565. package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
  566. package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
  567. package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
  568. package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
  569. package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
  570. package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
  571. package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
  572. package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
  573. package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
  574. package/dist/components/Overlay/Overlay.svelte +19 -30
  575. package/dist/components/Overlay/index.d.ts +1 -0
  576. package/dist/components/Overlay/index.js +1 -0
  577. package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
  578. package/dist/components/Overlay/overlay.attributes.js +14 -0
  579. package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
  580. package/dist/components/Overlay/overlay.mcp.js +21 -3
  581. package/dist/components/Overlay/overlay.props.d.ts +8 -4
  582. package/dist/components/Popover/Popover.svelte +163 -52
  583. package/dist/components/Popover/Popover.svelte.d.ts +23 -2
  584. package/dist/components/Popover/PopoverSession.svelte +12 -0
  585. package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
  586. package/dist/components/Popover/index.d.ts +10 -2
  587. package/dist/components/Popover/index.js +4 -1
  588. package/dist/components/Popover/popover.api.d.ts +83 -0
  589. package/dist/components/Popover/popover.api.js +1 -0
  590. package/dist/components/Popover/popover.attributes.d.ts +32 -0
  591. package/dist/components/Popover/popover.attributes.js +28 -0
  592. package/dist/components/Popover/popover.claims.d.ts +19 -0
  593. package/dist/components/Popover/popover.claims.js +45 -0
  594. package/dist/components/Popover/popover.mcp.d.ts +1 -1
  595. package/dist/components/Popover/popover.mcp.js +163 -31
  596. package/dist/components/Popover/popover.position.d.ts +226 -0
  597. package/dist/components/Popover/popover.position.js +402 -0
  598. package/dist/components/Popover/popover.props.d.ts +179 -24
  599. package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
  600. package/dist/components/Popover/popover.state.svelte.js +1034 -194
  601. package/dist/components/Popover/popover.theme.d.ts +15 -0
  602. package/dist/components/Popover/popover.theme.js +27 -2
  603. package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
  604. package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
  605. package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
  606. package/dist/components/PopupMenu/popupMenu.context.js +52 -0
  607. package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
  608. package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
  609. package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
  610. package/dist/components/Progress/Progress.svelte +160 -0
  611. package/dist/components/Progress/Progress.svelte.d.ts +4 -0
  612. package/dist/components/Progress/index.d.ts +3 -0
  613. package/dist/components/Progress/index.js +2 -0
  614. package/dist/components/Progress/progress.mcp.d.ts +1 -0
  615. package/dist/components/Progress/progress.mcp.js +101 -0
  616. package/dist/components/Progress/progress.props.d.ts +79 -0
  617. package/dist/components/Progress/progress.props.js +1 -0
  618. package/dist/components/Progress/progress.theme.d.ts +129 -0
  619. package/dist/components/Progress/progress.theme.js +83 -0
  620. package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
  621. package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
  622. package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
  623. package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
  624. package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
  625. package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
  626. package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
  627. package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
  628. package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
  629. package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
  630. package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
  631. package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
  632. package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
  633. package/dist/components/RichTextInput/suggestions.js +2 -0
  634. package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
  635. package/dist/components/ScrollArea/index.d.ts +2 -1
  636. package/dist/components/ScrollArea/index.js +1 -0
  637. package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
  638. package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
  639. package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
  640. package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
  641. package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
  642. package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
  643. package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
  644. package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
  645. package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
  646. package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
  647. package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
  648. package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
  649. package/dist/components/Sidebar/SidebarAction.svelte +13 -3
  650. package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
  651. package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
  652. package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
  653. package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
  654. package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
  655. package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
  656. package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
  657. package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
  658. package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
  659. package/dist/components/Sidebar/index.d.ts +1 -0
  660. package/dist/components/Sidebar/index.js +1 -0
  661. package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
  662. package/dist/components/Sidebar/sidebar-position.js +31 -2
  663. package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
  664. package/dist/components/Sidebar/sidebar.attributes.js +29 -0
  665. package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
  666. package/dist/components/Sidebar/sidebar.mcp.js +45 -10
  667. package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
  668. package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
  669. package/dist/components/Sidebar/sidebar.theme.js +113 -62
  670. package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
  671. package/dist/components/Stepper/Stepper.svelte +2 -0
  672. package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
  673. package/dist/components/Stepper/stepper.mcp.js +1 -0
  674. package/dist/components/Stepper/stepper.props.d.ts +5 -0
  675. package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
  676. package/dist/components/Stepper/stepper.state.svelte.js +31 -12
  677. package/dist/components/Tabbar/Tabbar.svelte +55 -16
  678. package/dist/components/Tabbar/index.d.ts +1 -1
  679. package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
  680. package/dist/components/Tabbar/tabbar.mcp.js +26 -9
  681. package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
  682. package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
  683. package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
  684. package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
  685. package/dist/components/Tabs/Tabs.svelte +73 -16
  686. package/dist/components/Tabs/index.d.ts +2 -1
  687. package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
  688. package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
  689. package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
  690. package/dist/components/Tabs/tabs.mcp.js +22 -4
  691. package/dist/components/Tabs/tabs.props.d.ts +39 -12
  692. package/dist/components/Tabs/tabs.theme.js +3 -1
  693. package/dist/components/Theme/Theme.svelte +44 -27
  694. package/dist/components/Theme/helper.d.ts +16 -2
  695. package/dist/components/Theme/helper.js +46 -4
  696. package/dist/components/Theme/theme.mcp.d.ts +1 -1
  697. package/dist/components/Theme/theme.mcp.js +103 -0
  698. package/dist/components/Theme/theme.props.d.ts +16 -0
  699. package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
  700. package/dist/components/Theme/theme.state.svelte.js +18 -1
  701. package/dist/components/Toast/Toast.svelte +184 -39
  702. package/dist/components/Toast/Toaster.svelte +14 -10
  703. package/dist/components/Toast/index.d.ts +1 -0
  704. package/dist/components/Toast/toast.mcp.d.ts +1 -1
  705. package/dist/components/Toast/toast.mcp.js +47 -6
  706. package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
  707. package/dist/components/Toast/toast.state.svelte.js +513 -68
  708. package/dist/components/Toast/toast.theme.js +1 -1
  709. package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
  710. package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
  711. package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
  712. package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
  713. package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
  714. package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
  715. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
  716. package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
  717. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
  718. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
  719. package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
  720. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
  721. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
  722. package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
  723. package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
  724. package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
  725. package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
  726. package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
  727. package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
  728. package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
  729. package/dist/components/Tooltip/Tooltip.svelte +4 -12
  730. package/dist/components/Tooltip/TooltipHost.svelte +136 -15
  731. package/dist/components/Tooltip/index.d.ts +1 -0
  732. package/dist/components/Tooltip/index.js +1 -0
  733. package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
  734. package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
  735. package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
  736. package/dist/components/Tooltip/tooltip.attributes.js +28 -0
  737. package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
  738. package/dist/components/Tooltip/tooltip.mcp.js +111 -10
  739. package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
  740. package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
  741. package/dist/components/Tooltip/tooltip.surface.js +42 -0
  742. package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
  743. package/dist/components/Utils/BeforeHydratation.svelte +14 -3
  744. package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
  745. package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
  746. package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
  747. package/dist/generated/componentAliases.d.ts +3 -0
  748. package/dist/generated/componentAliases.js +3 -0
  749. package/dist/generated/componentContract.d.ts +79 -34
  750. package/dist/generated/componentContract.js +231 -6
  751. package/dist/generated/componentMcpRegistry.js +6 -0
  752. package/dist/i18n/ar.js +107 -3
  753. package/dist/i18n/context.svelte.d.ts +6 -0
  754. package/dist/i18n/context.svelte.js +12 -0
  755. package/dist/i18n/de.js +101 -3
  756. package/dist/i18n/en.d.ts +91 -2
  757. package/dist/i18n/en.js +101 -3
  758. package/dist/i18n/es.js +101 -3
  759. package/dist/i18n/fr.js +101 -3
  760. package/dist/i18n/ja.js +101 -3
  761. package/dist/i18n/pt.js +101 -3
  762. package/dist/i18n/zh.js +101 -3
  763. package/dist/tailwind/geometry.js +7 -0
  764. package/dist/tailwind/global.js +31 -0
  765. package/dist/types/index.d.ts +1 -0
  766. package/dist/types/types.mcp.d.ts +1 -1
  767. package/dist/types/types.mcp.js +23 -0
  768. package/dist/utils/cspNonce.d.ts +16 -0
  769. package/dist/utils/cspNonce.js +39 -0
  770. package/dist/utils/cva/merge.d.ts +5 -1
  771. package/dist/utils/cva/merge.js +6 -4
  772. package/dist/utils/focus.d.ts +34 -0
  773. package/dist/utils/focus.js +93 -0
  774. package/dist/utils/focusHistory.d.ts +21 -0
  775. package/dist/utils/focusHistory.js +99 -0
  776. package/dist/utils/handlers.d.ts +7 -0
  777. package/dist/utils/handlers.js +14 -0
  778. package/dist/utils/hoverIntent.d.ts +42 -0
  779. package/dist/utils/hoverIntent.js +57 -0
  780. package/dist/utils/id.d.ts +7 -0
  781. package/dist/utils/id.js +15 -0
  782. package/dist/utils/layers.svelte.d.ts +32 -4
  783. package/dist/utils/layers.svelte.js +214 -21
  784. package/dist/utils/listFilter.d.ts +44 -0
  785. package/dist/utils/listFilter.js +130 -0
  786. package/dist/utils/match.d.ts +35 -0
  787. package/dist/utils/match.js +36 -0
  788. package/dist/utils/number.d.ts +126 -0
  789. package/dist/utils/number.js +401 -0
  790. package/dist/utils/openChange.d.ts +88 -0
  791. package/dist/utils/openChange.js +71 -0
  792. package/dist/utils/openLifecycle.svelte.d.ts +41 -0
  793. package/dist/utils/openLifecycle.svelte.js +134 -0
  794. package/dist/utils/pointerDrag.d.ts +10 -0
  795. package/dist/utils/pointerDrag.js +37 -2
  796. package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
  797. package/dist/utils/pragmaticDragAndDrop.js +8 -3
  798. package/dist/utils/range.d.ts +62 -0
  799. package/dist/utils/range.js +70 -0
  800. package/dist/utils/requestNativeSubmit.d.ts +17 -0
  801. package/dist/utils/requestNativeSubmit.js +47 -0
  802. package/dist/utils/safeArea.svelte.d.ts +10 -1
  803. package/dist/utils/safeArea.svelte.js +19 -11
  804. package/dist/utils/stateAttributes.d.ts +108 -0
  805. package/dist/utils/stateAttributes.js +78 -0
  806. package/dist/utils/swipeVelocity.d.ts +32 -0
  807. package/dist/utils/swipeVelocity.js +59 -0
  808. package/dist/utils/timer.svelte.d.ts +65 -2
  809. package/dist/utils/timer.svelte.js +159 -25
  810. package/dist/utils/trigger.d.ts +41 -0
  811. package/dist/utils/trigger.js +103 -0
  812. package/dist/utils/typeahead.d.ts +9 -0
  813. package/dist/utils/typeahead.js +21 -9
  814. package/dist/utils/useDndList.svelte.d.ts +1 -1
  815. package/dist/utils/useDndList.svelte.js +6 -23
  816. package/dist/utils/useFocusScope.svelte.d.ts +29 -0
  817. package/dist/utils/useFocusScope.svelte.js +189 -27
  818. package/dist/utils/useHoverAction.svelte.d.ts +44 -4
  819. package/dist/utils/useHoverAction.svelte.js +161 -51
  820. package/dist/utils/useKeyDown.svelte.d.ts +19 -2
  821. package/dist/utils/useKeyDown.svelte.js +19 -12
  822. package/dist/utils/useListNavigation.svelte.d.ts +94 -13
  823. package/dist/utils/useListNavigation.svelte.js +261 -35
  824. package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
  825. package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
  826. package/dist/utils/useNavigation.svelte.d.ts +36 -3
  827. package/dist/utils/useNavigation.svelte.js +699 -332
  828. package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
  829. package/dist/utils/usePressAndHold.svelte.js +191 -0
  830. package/dist/utils/useScrollLock.svelte.d.ts +20 -1
  831. package/dist/utils/useScrollLock.svelte.js +54 -13
  832. package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
  833. package/dist/utils/useSlidingIndicator.svelte.js +27 -5
  834. package/dist/utils/useTabBridge.svelte.d.ts +20 -0
  835. package/dist/utils/useTabBridge.svelte.js +109 -0
  836. package/dist/utils/values.d.ts +15 -0
  837. package/dist/utils/values.js +49 -0
  838. package/package.json +31 -2
  839. package/dist/generated/componentMcpRegistry.d.ts +0 -142
  840. package/dist/utils/useDrag.svelte.d.ts +0 -11
  841. package/dist/utils/useDrag.svelte.js +0 -55
@@ -1,10 +1,18 @@
1
1
  import { createBindableStateClass } from '../../utils/state.svelte.js';
2
2
  import { Registry } from '../../utils/registry.svelte.js';
3
3
  import { createPointerDrag } from '../../utils/pointerDrag.js';
4
+ import { createVelocityTracker } from '../../utils/swipeVelocity.js';
4
5
  // import { useTheme } from '../../utils/theme.svelte.js';
5
6
  import { getContext, onMount, setContext, untrack } from 'svelte';
6
7
  import { useTheme } from '../Theme/theme.state.svelte.js';
8
+ import { isTextField } from '../../utils/focus.js';
9
+ import { resolveSnapPoints, settleSnapIndex, snapPointHeight } from './dialog.snap.js';
7
10
  import { useFocusScope } from '../../utils/useFocusScope.svelte.js';
11
+ import { useOpenLifecycle } from '../../utils/openLifecycle.svelte.js';
12
+ import { applyStateAttributes, openStateAttributes, transitionStatusAttributes } from '../../utils/stateAttributes.js';
13
+ import { claimPopupOpen } from '../Popover/popover.claims.js';
14
+ import { getInteractionType, isOpenChangeDetails, requestOpenChange, resolveOpenChangeDetails } from '../../utils/openChange.js';
15
+ import { triggerActivation, triggerFocusTarget, writePopupAria } from '../../utils/trigger.js';
8
16
  import { useDialogMotion } from './dialog.theme.js';
9
17
  export { DIALOG_Z_BASE, DIALOG_Z_STEP } from '../Theme/theme.layers.js';
10
18
  export class DialogState extends createBindableStateClass() {
@@ -14,27 +22,89 @@ export class DialogState extends createBindableStateClass() {
14
22
  get children() {
15
23
  return this.#children.items;
16
24
  }
17
- hasTransitioned = $state(false);
18
25
  theme = useTheme();
19
- // Registered in the shared layer stack, which owns Escape / outside-press dismissal,
20
- // open ordering and z-index for every overlay kind.
26
+ // Svelte plays no intro for a block that is already true when it is created, so a Dialog
27
+ // created open renders once it has mounted: it animates in like any other open (and is not
28
+ // part of the server render, where it could only sit in the page flow).
29
+ #mounted = $state(false);
30
+ /** Whether the dialog is rendered: open, and mounted. */
31
+ isRendered = $derived(this.isOpen && this.#mounted);
32
+ // Open → entering → open → exiting → closed; completes even when no transition plays.
33
+ lifecycle = useOpenLifecycle({
34
+ isOpen: () => this.isRendered,
35
+ onAfterOpen: () => this.onAfterOpen?.(this),
36
+ onAfterClose: () => {
37
+ this.focusScope.restore();
38
+ this.onAfterClose?.(this);
39
+ this.#opener = null;
40
+ }
41
+ });
42
+ /** Where the dialog is in its open/close lifecycle; see `DialogApi.status`. */
43
+ get status() {
44
+ return this.lifecycle.status;
45
+ }
46
+ /** @deprecated Read `status === 'open'`; kept for one minor. */
47
+ get hasTransitioned() {
48
+ return this.lifecycle.status === 'open';
49
+ }
50
+ /**
51
+ * `data-open` / `data-closed` and `data-entering` / `data-exiting` for the root and the panel
52
+ * (see `dialogDataAttributes`). Closed, they render only while the exit transition plays.
53
+ */
54
+ stateAttributes = $derived({
55
+ ...openStateAttributes(this.isOpen),
56
+ ...transitionStatusAttributes(this.lifecycle.status)
57
+ });
58
+ /** The details of the last change that was applied, kept until the next one. */
59
+ lastOpenChange = $state.raw(null);
60
+ /** The open state `setOpen` last applied, to tell a change made from outside. */
61
+ #appliedOpen;
62
+ // Registered in the shared layer stack, which owns Escape / outside-press / close-request
63
+ // dismissal, open ordering and z-index for every overlay kind.
21
64
  layer = this.theme.layers.register({
22
65
  kind: 'dialog',
23
66
  isOpen: () => this.isOpen,
24
- isModal: () => true,
67
+ isModal: () => this.modal,
25
68
  dismissOnEscape: () => this.closeOnEscape && this.closable,
26
- dismissOnOutside: () => this.closeOnClickOutside && this.hasTransitioned,
27
- onDismiss: () => this.close(),
69
+ dismissOnOutside: () => this.computedCloseOnClickOutside,
70
+ onDismiss: (request) => this.setOpen(false, request),
28
71
  state: this
29
72
  });
30
- /** How many open dialogs sit above this one. */
31
- stackDepth = $derived(this.layer.kindDepth);
73
+ /**
74
+ * Trigger state in the library's semantic vocabulary: spread on the built-in Button, and
75
+ * written as ARIA attributes by `reference` / `trigger` on a snippet trigger.
76
+ */
77
+ triggerProps = $derived({
78
+ haspopup: 'dialog',
79
+ expanded: this.isOpen,
80
+ controls: this.isOpen ? this.id : undefined
81
+ });
82
+ /**
83
+ * How many open modal dialogs sit above this one. A non-modal dialog leaves the page usable, so
84
+ * it does not push the ones beneath it back.
85
+ */
86
+ stackDepth = $derived.by(() => {
87
+ const dialogs = this.theme.layers.ofKind('dialog');
88
+ const index = dialogs.indexOf(this.layer);
89
+ return index < 0 ? 0 : dialogs.slice(index + 1).filter((layer) => layer.isModal).length;
90
+ });
91
+ /** The dialog directly above this one, whose swipe this one follows. */
92
+ childAbove = $derived.by(() => {
93
+ const dialogs = this.theme.layers.ofKind('dialog');
94
+ const index = dialogs.indexOf(this.layer);
95
+ const child = index < 0 ? undefined : dialogs[index + 1]?.state;
96
+ return child instanceof DialogState && child.modal ? child : undefined;
97
+ });
98
+ /** Whether the dialog above is being dragged, so this one tracks it without easing. */
99
+ followsChild = $derived(!!this.childAbove?.dragging);
100
+ /** The stack depth as the dialog above is dismissed: it shrinks toward the next level as it is dragged away. */
101
+ effectiveDepth = $derived(Math.max(0, this.stackDepth - (this.childAbove ? this.childAbove.dragProgress : 0)));
32
102
  /** Topmost dialog (popovers opened above it do not count). */
33
103
  isTop = $derived(this.layer.isTopOfKind);
34
104
  // Topmost dialog renders at full size; parents scale down and fade behind it.
35
105
  zIndex = $derived(this.layer.zIndex);
36
- stackScale = $derived(Math.max(0, 1 - this.stackDepth * 0.06));
37
- stackOpacity = $derived(this.stackDepth === 0 ? 1 : Math.max(0.4, 1 - this.stackDepth * 0.35));
106
+ stackScale = $derived(Math.max(0, 1 - this.effectiveDepth * 0.06));
107
+ stackOpacity = $derived(this.effectiveDepth === 0 ? 1 : Math.max(0.4, 1 - this.effectiveDepth * 0.35));
38
108
  computedSize = $derived(this.theme.resolveResponsiveProps(this.size, 'normal'));
39
109
  // A `modal` collapses into a bottom sheet on mobile unless `responsive` is off. This
40
110
  // runs after `resolveResponsiveProps`, so an explicit responsive `type` record still
@@ -47,7 +117,18 @@ export class DialogState extends createBindableStateClass() {
47
117
  }
48
118
  return resolved;
49
119
  });
50
- computedScroll = $derived(this.theme.resolveResponsiveProps(this.scroll, 'inner'));
120
+ // A non-modal dialog lets the page behind take pointer events, so the positioner cannot be
121
+ // the scroller: it scrolls inside its card.
122
+ computedScroll = $derived(this.modal ? this.theme.resolveResponsiveProps(this.scroll, 'inner') : 'inner');
123
+ /** Whether the resolved type is `alert`: an interruption that needs an explicit answer. */
124
+ isAlert = $derived(this.computedType === 'alert');
125
+ /** `alertdialog` for an alert, so assistive technology announces it as one. */
126
+ role = $derived(this.isAlert ? 'alertdialog' : 'dialog');
127
+ /**
128
+ * `closeOnClickOutside` when set; otherwise an outside press dismisses a modal that is not an
129
+ * alert. A non-modal dialog stays open while the page is used.
130
+ */
131
+ computedCloseOnClickOutside = $derived(this.closeOnClickOutside ?? (this.modal && !this.isAlert));
51
132
  // Per-type preset from `dialogTheme.motion`, through the override ladder
52
133
  // (registry → `setDialogTheme` → instance `theme.motion` → `transition` prop).
53
134
  resolveMotion = useDialogMotion();
@@ -59,48 +140,277 @@ export class DialogState extends createBindableStateClass() {
59
140
  // Dismiss direction sign along the axis: bottom/right drag toward +; top/left toward −.
60
141
  swipeSign = $derived(this.computedType === 'drawerBottom' || this.computedType === 'drawerRight' ? 1 : -1);
61
142
  dragging = $state(false);
62
- dragOffset = $state(0); // px along the dismiss axis (0 = resting open position)
143
+ /**
144
+ * Where the panel sits along the dismiss axis, in px (0 = fully open). Follows the finger while
145
+ * dragging and otherwise rests at 0, or at the active snap point's offset.
146
+ */
147
+ dragOffset = $state(0);
63
148
  dragSize = $state(0); // panel extent along the axis, measured at drag start
64
- dragProgress = $derived(this.dragSize > 0 ? Math.min(Math.abs(this.dragOffset) / this.dragSize, 1) : 0);
149
+ /** Drag progress toward dismissal, 0 while resting at the open position or any snap point. */
150
+ dragProgress = $derived.by(() => {
151
+ const floor = this.snapFloor;
152
+ return this.dragSize > floor
153
+ ? Math.min(Math.max(Math.abs(this.dragOffset) - floor, 0) / (this.dragSize - floor), 1)
154
+ : 0;
155
+ });
65
156
  contentTransform = $derived.by(() => {
66
- if (this.dragOffset === 0 && this.stackDepth === 0) {
157
+ if (this.dragOffset === 0 && this.effectiveDepth === 0) {
67
158
  return undefined;
68
159
  }
69
160
  return `translate3d(${this.swipeAxis === 'x' ? this.dragOffset : 0}px, ${this.swipeAxis === 'y' ? this.dragOffset : 0}px, 0) scale(${this.stackScale})`;
70
161
  });
71
- // Initial focus, Tab containment, `inert` page behind, focus restore to the opener.
162
+ // --- Snap points (bottom and top drawers) ---
163
+ /** Whether the drawer rests at snap points: a bottom or top drawer with `snapPoints`. */
164
+ snapEnabled = $derived(!!this.snapPoints?.length &&
165
+ (this.computedType === 'drawerBottom' || this.computedType === 'drawerTop'));
166
+ /** Room in px the drawer may use, measured from the positioner; 0 until it is laid out. */
167
+ availableSize = $state(0);
168
+ #viewportSize = $state(0);
169
+ #rootFontSize = $state(16);
170
+ /** The snap points as px heights, lowest first. */
171
+ snapHeights = $derived(this.snapEnabled
172
+ ? resolveSnapPoints(this.snapPoints, {
173
+ available: this.availableSize,
174
+ viewport: this.#viewportSize,
175
+ rem: this.#rootFontSize
176
+ })
177
+ : []);
178
+ /** The point the drawer rests at: `snapPoint`, else `defaultSnapPoint`, else the largest. */
179
+ activeSnap = $derived.by(() => {
180
+ const heights = this.snapHeights;
181
+ const wanted = this.snapPoint ?? this.defaultSnapPoint;
182
+ if (wanted === undefined)
183
+ return heights.at(-1);
184
+ const exact = heights.find((snap) => snap.point === wanted);
185
+ return exact ?? this.#nearestSnap(wanted) ?? heights.at(-1);
186
+ });
187
+ /** The value of `snapPoint` right now, as the consumer wrote it. */
188
+ currentSnapPoint = $derived(this.activeSnap?.point);
189
+ /** Whether the drawer rests at its largest point, the only one where its body scrolls. */
190
+ atLargestSnap = $derived(!this.activeSnap || this.activeSnap === this.snapHeights.at(-1));
191
+ /** The panel's height in px: the largest snap point. */
192
+ snapPanelHeight = $derived(this.snapHeights.at(-1)?.height);
193
+ /** The panel offset in px (signed along the dismiss axis) at the active point. */
194
+ restOffset = $derived.by(() => {
195
+ const largest = this.snapHeights.at(-1);
196
+ if (!largest || !this.activeSnap)
197
+ return 0;
198
+ return this.swipeSign * (largest.height - this.activeSnap.height);
199
+ });
200
+ /** Offset in px at the lowest point: dragging beyond it moves toward dismissal. */
201
+ snapFloor = $derived.by(() => {
202
+ const largest = this.snapHeights.at(-1);
203
+ const lowest = this.snapHeights[0];
204
+ return largest && lowest ? largest.height - lowest.height : 0;
205
+ });
206
+ /** Whether the panel can be dragged: to dismiss it, or between snap points. */
207
+ gestureEnabled = $derived(this.swipeEnabled || (this.snapEnabled && this.isDrawer));
208
+ /** The panel scrolls only while it shows in full. */
209
+ bodyScrollLocked = $derived(this.snapEnabled && this.snapHeights.length > 0 && !this.atLargestSnap);
210
+ #nearestSnap(point) {
211
+ const height = snapPointHeight(point, {
212
+ available: this.availableSize,
213
+ viewport: this.#viewportSize,
214
+ rem: this.#rootFontSize
215
+ });
216
+ if (!Number.isFinite(height))
217
+ return undefined;
218
+ let nearest;
219
+ for (const snap of this.snapHeights) {
220
+ if (!nearest || Math.abs(snap.height - height) < Math.abs(nearest.height - height)) {
221
+ nearest = snap;
222
+ }
223
+ }
224
+ return nearest;
225
+ }
226
+ /**
227
+ * Moves the drawer to a snap point (one of `snapPoints`, or the nearest to it). `onSnapPointChange`
228
+ * runs first with the change details; cancelling keeps the current point. Returns `false` when
229
+ * the change did not happen.
230
+ */
231
+ setSnapPoint(point, input) {
232
+ const target = this.snapHeights.find((snap) => snap.point === point) ?? this.#nearestSnap(point);
233
+ if (!target)
234
+ return false;
235
+ if (target === this.activeSnap)
236
+ return true;
237
+ const details = this.#details(input);
238
+ this.onSnapPointChange?.({ snapPoint: target.point, details });
239
+ if (details.isCanceled)
240
+ return false;
241
+ this.snapPoint = target.point;
242
+ return true;
243
+ }
244
+ /** Reads the layout the snap points are measured against. */
245
+ #measureLayout(node) {
246
+ const positioner = node.parentElement;
247
+ if (!positioner)
248
+ return;
249
+ const view = node.ownerDocument.defaultView;
250
+ const style = view?.getComputedStyle(positioner);
251
+ const padding = (parseFloat(style?.paddingTop ?? '') || 0) + (parseFloat(style?.paddingBottom ?? '') || 0);
252
+ this.availableSize = Math.max(0, positioner.clientHeight - padding);
253
+ this.#viewportSize = view?.innerHeight ?? 0;
254
+ this.#rootFontSize =
255
+ parseFloat(view?.getComputedStyle(node.ownerDocument.documentElement).fontSize ?? '') || 16;
256
+ }
257
+ // --- Keyboard (bottom sheets) ---
258
+ /** Whether a text field inside the panel has focus, so the on-screen keyboard may be up. */
259
+ fieldFocused = $state(false);
260
+ /** A bottom sheet gives room to the keyboard while one of its fields has focus. */
261
+ keyboardAvoiding = $derived(this.fieldFocused && this.computedType === 'drawerBottom');
262
+ // Initial focus, Tab containment, `inert` page behind, focus restore to the opener: the
263
+ // trigger that opened it, else whatever had focus when it opened.
72
264
  focusScope = useFocusScope({
73
265
  isActive: () => this.isTop,
74
- inertSiblings: () => true
266
+ trap: () => this.modal && this.isTop,
267
+ inertSiblings: () => this.modal,
268
+ returnTo: () => (this.#opener?.isConnected ? this.#opener : null),
269
+ focusOnClose: () => this.focusOnClose,
270
+ closeDetails: () => this.lastOpenChange
75
271
  });
76
272
  addChild = (child) => () => this.#children.add(child);
77
273
  constructor(options) {
78
274
  super(options);
79
275
  setContext('dialog', this);
276
+ // Details describe the change `setOpen` made: an open state moved from outside (the bound
277
+ // `open` prop) leaves none, so a later close does not read the one that opened it.
278
+ $effect.pre(() => {
279
+ const open = this.isOpen;
280
+ untrack(() => {
281
+ if (this.#appliedOpen !== open)
282
+ this.lastOpenChange = null;
283
+ this.#appliedOpen = open;
284
+ });
285
+ });
80
286
  if (this.parent)
81
287
  onMount(this.parent.addChild(this));
288
+ onMount(() => {
289
+ this.#mounted = true;
290
+ });
291
+ // The root's and the panel's open state and transition phase, written from here rather than
292
+ // only by the template: Svelte pauses the effects of a block while its out-transition plays,
293
+ // so the template would leave a closing dialog marked `data-open` until it is gone.
294
+ $effect(() => {
295
+ const content = this.#contentElement;
296
+ if (!content)
297
+ return;
298
+ const attributes = this.stateAttributes;
299
+ applyStateAttributes(content, attributes);
300
+ const root = content.closest('[data-layer-root]');
301
+ if (root)
302
+ applyStateAttributes(root, attributes);
303
+ });
82
304
  }
83
- toggle = () => {
84
- this.setOpen(!this.isOpen);
305
+ /** The panel element while it is rendered, closing transition included. */
306
+ #contentElement = $state(null);
307
+ /** Calls to `setOpen`, direct or through `open`, `close` and `toggle`, unchanged state included. */
308
+ #openRequests = 0;
309
+ /** The element focus returns to: the control of the trigger that opened the dialog. */
310
+ #opener = null;
311
+ /** A press on a trigger, remembered while its event dispatches. */
312
+ #press = null;
313
+ toggle = (input) => {
314
+ this.setOpen(!this.isOpen, input);
85
315
  };
86
- open = () => {
87
- this.setOpen(true);
316
+ open = (input) => {
317
+ this.setOpen(true, input);
88
318
  };
89
- close = () => {
90
- this.setOpen(false);
319
+ close = (input) => {
320
+ this.setOpen(false, input);
91
321
  };
92
- setOpen(nextOpen) {
322
+ /** The details for a request, filled in from the trigger press it happens during. */
323
+ #details(input) {
324
+ if (isOpenChangeDetails(input))
325
+ return input;
326
+ const event = input instanceof Event ? input : input?.event;
327
+ const press = this.#press && (!event || event === this.#press.event) ? this.#press : null;
328
+ return resolveOpenChangeDetails(input, press
329
+ ? { reason: 'trigger-press', event: press.event, trigger: press.node }
330
+ : { interaction: getInteractionType(event) });
331
+ }
332
+ /**
333
+ * Requests an open-state change. `onOpenChange(nextOpen, details)` runs first; when it calls
334
+ * `details.cancel()` nothing changes. Returns `false` when the change was cancelled.
335
+ */
336
+ setOpen(nextOpen, input) {
337
+ this.#openRequests += 1;
93
338
  if (this.isOpen === nextOpen)
94
- return;
339
+ return true;
340
+ const details = this.#details(input);
341
+ if (!requestOpenChange(this.onOpenChange, nextOpen, details))
342
+ return false;
343
+ if (nextOpen) {
344
+ this.#opener = details.trigger ? triggerFocusTarget(details.trigger, details.event) : null;
345
+ }
346
+ this.lastOpenChange = details;
347
+ this.#appliedOpen = nextOpen;
95
348
  this.isOpen = nextOpen;
96
- this.onOpenChange?.(nextOpen);
349
+ return true;
97
350
  }
351
+ /**
352
+ * Attachment for a custom trigger element (`{@attach dialog.reference}`): keeps its
353
+ * `aria-haspopup`, `aria-expanded` and `aria-controls` in sync and makes it the element focus
354
+ * returns to, leaving clicks and keys to the element.
355
+ */
356
+ reference = (node) => {
357
+ $effect(() => {
358
+ writePopupAria(node, this.triggerProps);
359
+ });
360
+ // Claimed, not written: a tooltip on the same trigger closing while the dialog is open
361
+ // must leave `data-popup-open` in place.
362
+ $effect(() => {
363
+ claimPopupOpen(node, this, this.isOpen);
364
+ return () => claimPopupOpen(node, this, false);
365
+ });
366
+ return untrack(() => {
367
+ // Capture phase: runs before the element's own (delegated) handlers, so a
368
+ // `dialog.open()` called from `onclick` knows the press it belongs to.
369
+ const notePress = (event) => {
370
+ const press = { node, event };
371
+ this.#press = press;
372
+ setTimeout(() => {
373
+ if (this.#press === press)
374
+ this.#press = null;
375
+ });
376
+ };
377
+ node.addEventListener('click', notePress, true);
378
+ return () => {
379
+ node.removeEventListener('click', notePress, true);
380
+ if (this.#press?.node === node)
381
+ this.#press = null;
382
+ };
383
+ });
384
+ };
385
+ /**
386
+ * Makes any element the dialog's trigger (`{@attach dialog.trigger}`): `reference`, plus a
387
+ * click that opens the dialog, and on an element that is not already a control
388
+ * `role="button"`, `tabindex="0"` and Enter/Space activation. The element's own handler runs
389
+ * first: calling `event.preventDefault()` there, or opening the dialog itself, stops it.
390
+ */
391
+ trigger = (node) => {
392
+ const offActivation = triggerActivation(node, {
393
+ requests: () => this.#openRequests,
394
+ activate: (event) => this.open({ reason: 'trigger-press', event, trigger: node })
395
+ });
396
+ const offReference = this.reference(node);
397
+ return () => {
398
+ offActivation();
399
+ offReference();
400
+ };
401
+ };
98
402
  contentAttachment = (node) => {
99
403
  return untrack(() => {
100
404
  const cleanups = [];
405
+ this.#contentElement = node;
406
+ cleanups.push(() => {
407
+ if (this.#contentElement === node)
408
+ this.#contentElement = null;
409
+ });
101
410
  cleanups.push(this.focusScope.attachment(node));
102
411
  cleanups.push(this.layer.node(node));
103
412
  cleanups.push(this.swipeAttachment(node));
413
+ cleanups.push(this.keyboardAttachment(node));
104
414
  return () => {
105
415
  cleanups.forEach((cleanup) => cleanup?.());
106
416
  };
@@ -117,14 +427,93 @@ export class DialogState extends createBindableStateClass() {
117
427
  'VIDEO',
118
428
  'AUDIO'
119
429
  ];
430
+ /** Whether text inside `panel` is selected: a drag there is meant to extend the selection. */
431
+ static hasSelectionIn(panel) {
432
+ const selection = panel.ownerDocument.getSelection?.();
433
+ if (!selection || selection.isCollapsed || selection.rangeCount === 0)
434
+ return false;
435
+ return panel.contains(selection.anchorNode) || panel.contains(selection.focusNode);
436
+ }
437
+ // While a text field inside the panel has focus the on-screen keyboard may be up. A bottom sheet
438
+ // then makes room for it (`keyboardAvoiding`, see `--keyboard-inset`), and the field is brought
439
+ // into view once the visual viewport has stopped moving. The flag is released a frame late, so
440
+ // a tap that moves focus from one field to the next never lets the sheet drop in between.
441
+ keyboardAttachment = (node) => {
442
+ const view = node.ownerDocument.defaultView;
443
+ if (!view)
444
+ return;
445
+ let release = 0;
446
+ let reveal;
447
+ let revealing;
448
+ const insetNow = () => parseFloat(view
449
+ .getComputedStyle(node.ownerDocument.documentElement)
450
+ .getPropertyValue('--keyboard-inset')) || 0;
451
+ const stopRevealing = () => {
452
+ clearTimeout(reveal);
453
+ reveal = undefined;
454
+ revealing?.();
455
+ revealing = undefined;
456
+ };
457
+ const revealWhenSettled = (field) => {
458
+ stopRevealing();
459
+ const viewport = view.visualViewport;
460
+ const show = () => {
461
+ stopRevealing();
462
+ if (field.isConnected && field.ownerDocument.activeElement === field && insetNow() > 0) {
463
+ field.scrollIntoView({ block: 'center', inline: 'nearest' });
464
+ }
465
+ };
466
+ // The keyboard animates for a few hundred ms: wait for the viewport to stop resizing, and
467
+ // give up waiting after a short while in case it never moves (a hardware keyboard).
468
+ const settle = () => {
469
+ clearTimeout(reveal);
470
+ reveal = setTimeout(show, 120);
471
+ };
472
+ viewport?.addEventListener('resize', settle);
473
+ revealing = () => viewport?.removeEventListener('resize', settle);
474
+ reveal = setTimeout(show, 400);
475
+ };
476
+ const onFocusIn = (event) => {
477
+ const field = event.target;
478
+ if (!isTextField(field instanceof Element ? field : null))
479
+ return;
480
+ cancelAnimationFrame(release);
481
+ this.fieldFocused = true;
482
+ revealWhenSettled(field);
483
+ };
484
+ const onFocusOut = () => {
485
+ cancelAnimationFrame(release);
486
+ release = requestAnimationFrame(() => {
487
+ const active = node.ownerDocument.activeElement;
488
+ if (!isTextField(active) || !node.contains(active)) {
489
+ this.fieldFocused = false;
490
+ stopRevealing();
491
+ }
492
+ });
493
+ };
494
+ node.addEventListener('focusin', onFocusIn);
495
+ node.addEventListener('focusout', onFocusOut);
496
+ return () => {
497
+ node.removeEventListener('focusin', onFocusIn);
498
+ node.removeEventListener('focusout', onFocusOut);
499
+ cancelAnimationFrame(release);
500
+ stopRevealing();
501
+ this.fieldFocused = false;
502
+ };
503
+ };
120
504
  // Vaul-style drag-to-dismiss for drawer types. Pointer-event driven so it works for
121
- // mouse and touch; inner scroll wins over the swipe (see swipeOwnsGesture).
505
+ // mouse and touch; inner scroll wins over the swipe (see swipeOwnsGesture). With snap points
506
+ // the same drag moves the panel between them.
122
507
  swipeAttachment = (node) => {
123
508
  let candidate = false;
124
509
  let startPos = 0;
125
- let lastPos = 0;
126
- let lastTime = 0;
127
- let velocity = 0;
510
+ /** How far from fully open the panel was when the press began, in px (magnitude). */
511
+ let startOffset = 0;
512
+ let pointerType = 'mouse';
513
+ let selectionBlocks = false;
514
+ // Release speed over a short window: a trailing stationary sample or a 120 Hz input
515
+ // keeps a flick a flick, and a pointer that rested before release has none left.
516
+ const tracker = createVelocityTracker();
128
517
  const axisPos = (e) => (this.swipeAxis === 'y' ? e.clientY : e.clientX);
129
518
  // True when the press landed on something that owns the gesture: a `data-no-swipe`
130
519
  // opt-out, a native control, or a scrollable region (the panel itself included) that
@@ -147,10 +536,14 @@ export class DialogState extends createBindableStateClass() {
147
536
  return true;
148
537
  }
149
538
  else {
150
- // ponytail: LTR scroll math; RTL flips scrollLeft — handle if RTL drawers land
151
- if (this.swipeSign > 0 && el.scrollLeft > 0)
539
+ // `scrollLeft` counts from the start edge: negative in a right-to-left scroller.
540
+ // Read as the distance from the physical left edge, dragging right (+) can scroll
541
+ // back while it is past 0, and dragging left (−) while the far end is out of reach.
542
+ const maxScroll = el.scrollWidth - el.clientWidth;
543
+ const fromLeft = style.direction === 'rtl' ? el.scrollLeft + maxScroll : el.scrollLeft;
544
+ if (this.swipeSign > 0 && fromLeft > 0)
152
545
  return true;
153
- if (this.swipeSign < 0 && el.scrollLeft < el.scrollWidth - el.clientWidth - 1)
546
+ if (this.swipeSign < 0 && fromLeft < maxScroll - 1)
154
547
  return true;
155
548
  }
156
549
  }
@@ -165,50 +558,90 @@ export class DialogState extends createBindableStateClass() {
165
558
  if (!this.dragging)
166
559
  return;
167
560
  this.dragging = false;
168
- // A long stationary hold is not a flick — the last velocity sample may be old.
169
- if (event.timeStamp - lastTime > 100)
170
- velocity = 0;
171
- const shouldClose = !cancelled &&
172
- this.isOpen &&
173
- (Math.abs(this.dragOffset) > this.dragSize * 0.25 || velocity > 0.4);
561
+ tracker.add(axisPos(event), event.timeStamp);
562
+ const velocity = tracker.velocity(event.timeStamp) * this.swipeSign;
563
+ let shouldClose = false;
564
+ let snapTo;
565
+ if (!cancelled && this.isOpen) {
566
+ if (this.snapHeights.length > 0) {
567
+ // Between snap points: the nearest one to where the drag is heading, or dismissal below
568
+ // the lowest when swipe-to-dismiss is on.
569
+ const largest = this.snapHeights[this.snapHeights.length - 1];
570
+ const index = settleSnapIndex(this.snapHeights.map((snap) => snap.height), largest.height - Math.abs(this.dragOffset), velocity, this.swipeEnabled);
571
+ if (index < 0)
572
+ shouldClose = true;
573
+ else
574
+ snapTo = this.snapHeights[index].point;
575
+ }
576
+ else {
577
+ // Without usable snap points the drag only dismisses where swiping to dismiss is on.
578
+ shouldClose =
579
+ this.swipeEnabled &&
580
+ (Math.abs(this.dragOffset) > this.dragSize * 0.25 || velocity > 0.4);
581
+ }
582
+ }
174
583
  // Closing keeps dragOffset so the out transition starts from the dragged position.
175
584
  // Snap-back waits a frame so the re-enabled CSS transition animates the return — and
176
585
  // yields to a drag that started in the meantime, or it would zero that drag's offset.
177
- if (shouldClose)
178
- this.close();
179
- else
180
- requestAnimationFrame(() => {
181
- if (!this.dragging)
182
- this.dragOffset = 0;
183
- });
586
+ // A close that `onOpenChange` cancels snaps back the same way.
587
+ if (shouldClose && this.setOpen(false, { reason: 'swipe', event }))
588
+ return;
589
+ if (snapTo !== undefined)
590
+ this.setSnapPoint(snapTo, { reason: 'swipe', event });
591
+ requestAnimationFrame(() => {
592
+ if (!this.dragging)
593
+ this.dragOffset = this.restOffset;
594
+ });
184
595
  };
185
596
  const drag = createPointerDrag({
186
- disabled: () => !this.swipeEnabled || !this.isTop,
597
+ disabled: () => !this.gestureEnabled || !this.isTop,
187
598
  // The panel is the whole drawer, not a handle: capturing every press would retarget the
188
599
  // compatibility mouse events and steal clicks from the buttons and inputs inside it.
189
600
  capture: 'on-activate',
190
601
  // Touch panning is already governed by `touch-action` on the handles and by `ownsGesture`,
191
602
  // which only promotes where nothing else can still scroll along the axis.
192
603
  preventTouchMove: false,
604
+ // A press that travels mostly across the dismiss axis is spent before the drawer can take
605
+ // it, so a sideways drag (a carousel in the drawer) never starts dismissing it.
606
+ axis: () => this.swipeAxis,
193
607
  onDown: ({ event }) => {
194
608
  candidate = true;
195
- startPos = lastPos = axisPos(event);
196
- lastTime = event.timeStamp;
197
- velocity = 0;
198
- this.dragSize = this.swipeAxis === 'y' ? node.offsetHeight : node.offsetWidth;
609
+ startPos = axisPos(event);
610
+ pointerType = event.pointerType;
611
+ selectionBlocks = DialogState.hasSelectionIn(node);
612
+ tracker.reset();
613
+ tracker.add(startPos, event.timeStamp);
614
+ this.#measureLayout(node);
615
+ const largest = this.snapHeights.at(-1);
616
+ this.dragSize =
617
+ this.snapEnabled && largest
618
+ ? largest.height
619
+ : this.swipeAxis === 'y'
620
+ ? node.offsetHeight
621
+ : node.offsetWidth;
622
+ // From the resting place, not from an offset still easing back from the last drag.
623
+ startOffset = Math.abs(this.restOffset);
199
624
  },
200
- // The press becomes a drag once it has moved past 4px toward the dismissing edge.
625
+ // The press becomes a drag once it has moved past 4px toward the dismissing edge, or,
626
+ // resting below the largest snap point, toward the opposite edge to open further.
201
627
  shouldActivate: ({ event, startTarget }) => {
202
628
  if (!candidate || !this.isOpen)
203
629
  return false;
204
630
  const pos = axisPos(event);
205
631
  const delta = (pos - startPos) * this.swipeSign; // + = dismiss direction
206
632
  // Handles (thumb, header) always drag — even when a scrolled body would own the
207
- // gesture. The body only drags in `panel` mode, and never over a region that can
208
- // still scroll along the axis. The intent is fixed to where the press started.
633
+ // gesture. The body drags only under a finger, in `panel` mode, never with a text
634
+ // selection to extend, and never over a region that can still scroll along the axis.
635
+ // A mouse or pen press on the body selects text instead. The intent is fixed to where
636
+ // the press started.
209
637
  const onHandle = startTarget instanceof Element && !!startTarget.closest('[data-drag-handle]');
210
- const eligible = onHandle || ((this.swipeFrom ?? 'panel') === 'panel' && !ownsGesture(startTarget));
211
- if (delta > 4 && eligible)
638
+ const eligible = onHandle ||
639
+ ((this.swipeFrom ?? 'panel') === 'panel' &&
640
+ pointerType === 'touch' &&
641
+ !selectionBlocks &&
642
+ !ownsGesture(startTarget));
643
+ const opening = this.snapHeights.length > 0 && !this.atLargestSnap && delta < -4;
644
+ if ((delta > 4 || opening) && eligible)
212
645
  return true;
213
646
  // Wrong direction, or the target owns the gesture: the press is spent. The session
214
647
  // itself stays until the pointer lifts, so a second finger cannot take over mid-press.
@@ -221,21 +654,47 @@ export class DialogState extends createBindableStateClass() {
221
654
  },
222
655
  onMove: ({ event }) => {
223
656
  const pos = axisPos(event);
224
- this.dragOffset = this.swipeSign * Math.max(0, (pos - startPos) * this.swipeSign); // clamp: can't drag past open
225
- // Resample velocity on ~frame intervals so a single sub-frame move can't spike it.
226
- const dt = event.timeStamp - lastTime;
227
- if (dt >= 8) {
228
- velocity = ((pos - lastPos) * this.swipeSign) / dt;
229
- lastPos = pos;
230
- lastTime = event.timeStamp;
231
- }
657
+ // Clamped: it can't be dragged past open, nor past its own extent.
658
+ const travelled = startOffset + (pos - startPos) * this.swipeSign;
659
+ const magnitude = Math.max(0, this.dragSize > 0 ? Math.min(travelled, this.dragSize) : travelled);
660
+ this.dragOffset = this.swipeSign * magnitude;
661
+ tracker.add(pos, event.timeStamp);
232
662
  },
233
663
  onEnd: ({ event }) => endDrag(event, false),
234
664
  onCancel: ({ event }) => endDrag(event, true)
235
665
  });
236
- // Fresh mount = fresh open: clear any offset left over from a drag-dismiss.
237
- this.dragOffset = 0;
666
+ // Fresh mount = fresh open: start from the resting position (open, or the active snap point)
667
+ // rather than any offset left over from a drag-dismiss. The layout is read first, so snap
668
+ // points have heights; a change in it (rotation, a keyboard) moves the panel with it.
669
+ this.#measureLayout(node);
238
670
  this.dragging = false;
239
- return drag(node);
671
+ this.dragOffset = this.restOffset;
672
+ // Written now, not on the next render: the intro transition reads the panel's computed
673
+ // transform when it starts and slides relative to it. Left to the template, it read none and
674
+ // slid the sheet fully open, then the snap point's offset landed as the intro ended.
675
+ node.style.transform = this.contentTransform ?? '';
676
+ const positioner = node.parentElement;
677
+ const observer = positioner && typeof ResizeObserver !== 'undefined'
678
+ ? new ResizeObserver(() => this.#measureLayout(node))
679
+ : undefined;
680
+ if (positioner)
681
+ observer?.observe(positioner);
682
+ $effect(() => {
683
+ const offset = this.restOffset;
684
+ untrack(() => {
685
+ if (!this.dragging)
686
+ this.dragOffset = offset;
687
+ });
688
+ });
689
+ const stopDrag = drag(node);
690
+ return () => {
691
+ stopDrag?.();
692
+ observer?.disconnect();
693
+ };
240
694
  };
241
695
  }
696
+ /**
697
+ * The state behind the `DialogApi` a Dialog hands its snippets and callbacks. For library code
698
+ * and tests that read a dialog's internals; consumers get the narrow API.
699
+ */
700
+ export const dialogInternals = (dialog) => dialog;