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,22 +1,47 @@
1
1
  <script lang="ts">
2
- import type { Placement } from '@floating-ui/dom';
3
2
  import { onMount, tick, untrack } from 'svelte';
3
+ import type { Attachment } from 'svelte/attachments';
4
4
  import { on } from 'svelte/events';
5
5
  import { useI18n } from '../../i18n/context.svelte.js';
6
+ import { composedContains, getDeepActiveElement } from '../../utils/focus.js';
7
+ import { getInteractionType } from '../../utils/openChange.js';
8
+ import { useDirection } from '../../utils/useDirection.svelte.js';
6
9
  import { useNavigation } from '../../utils/useNavigation.svelte.js';
7
10
  import Button from '../Button/Button.svelte';
8
11
  import { arrowLeftIcon } from '../Icons/arrowLeft.js';
9
12
  import { caretRightIcon } from '../Icons/caretRight.js';
10
13
  import MenuOption from '../MenuOption/MenuOption.svelte';
11
14
  import PopupMenu from '../PopupMenu/PopupMenu.svelte';
12
- import { usePopupMenuPanelSize } from '../PopupMenu/popupMenu.context.js';
13
- import { usePopoverContext } from '../Popover/popover.state.svelte.js';
14
- import type { PopoverState } from '../Popover/popover.state.svelte.js';
15
+ import {
16
+ usePopupMenuPanelSize,
17
+ usePopupMenuRoot,
18
+ usePopupMenuSubmenu
19
+ } from '../PopupMenu/popupMenu.context.js';
20
+ import {
21
+ popoverInternals,
22
+ usePopoverContext,
23
+ type PopoverState
24
+ } from '../Popover/popover.state.svelte.js';
25
+ import type { PopoverApi } from '../Popover/popover.api.js';
26
+ import type { PopoverPlacement } from '../Popover/popover.props.js';
15
27
  import Separator from '../Separator/Separator.svelte';
16
28
  import Slot from '../Slot/Slot.svelte';
17
29
  import type { ResponsiveProps } from '../Theme/theme.js';
18
- import type { MenuProps } from './menu.props.js';
30
+ import MenuCheckboxItem from './MenuCheckboxItem.svelte';
31
+ import MenuMirroredIcon from './MenuMirroredIcon.svelte';
32
+ import MenuRadioGroup from './MenuRadioGroup.svelte';
33
+ import MenuSearchField from './MenuSearchField.svelte';
34
+ import {
35
+ HIGHLIGHT_VALUE_ATTRIBUTE,
36
+ createSearchKeys,
37
+ rowValue,
38
+ useMenuSearch,
39
+ watchHighlight
40
+ } from './menu.filter.svelte.js';
41
+ import type { MenuItem, MenuProps } from './menu.props.js';
42
+ import { isApplePlatform } from './menu.platform.js';
19
43
  import { useMenuTheme } from './menu.theme.js';
44
+ import { createMenuKeys, hasMenuRows, menuItemValue } from './menuTree.js';
20
45
 
21
46
  let {
22
47
  items,
@@ -28,37 +53,88 @@
28
53
  header,
29
54
  footer,
30
55
  focusOnMount,
56
+ filter,
57
+ search = $bindable(),
58
+ defaultSearch,
59
+ onSearchChange,
60
+ onHighlightChange,
61
+ empty,
31
62
  ...attachments
32
63
  }: MenuProps = $props();
33
64
  // The panel size of the PopupMenu this menu sits in, so a submenu opens in the same panel.
34
65
  const panelSize = usePopupMenuPanelSize();
66
+ // The menu tree this menu belongs to, which its submenus join.
67
+ const menuTree = usePopupMenuRoot();
68
+ // Whether this menu is a level below the root: ArrowLeft (ArrowRight in right-to-left text)
69
+ // leaves it, whatever hosts the root.
70
+ const hasParentMenu = usePopupMenuSubmenu();
35
71
 
36
72
  const id = $props.id();
37
73
  const parentPopover = usePopoverContext();
38
74
  const classes = $derived(useMenuTheme(theme));
39
75
  const t = $derived(useI18n());
40
76
  const isInMobileSheet = $derived(parentPopover?.isMobileSheet ?? false);
41
- const hasParentMenu = $derived(!!parentPopover?.parent);
42
77
  const showBackControl = $derived(isInMobileSheet && hasParentMenu);
43
78
  // Narrow viewports have no room beside the parent panel, so the submenu drops below it
44
- // instead; `md` up it flies out to the side. The nearest-below cascade covers `sm` from `xs`.
45
- const submenuPosition: ResponsiveProps<Placement> = {
79
+ // instead; `md` up it flies out on the reading direction's end side. The nearest-below cascade
80
+ // covers `sm` from `xs`. When neither side of the parent has room, the submenu falls back to
81
+ // the cross axis (`fallbackAxisSide`) and opens below its row instead of covering the menu.
82
+ const submenuPosition: ResponsiveProps<PopoverPlacement> = {
46
83
  xs: 'bottom-start',
47
- md: 'right-start'
84
+ md: 'inline-end-start'
48
85
  };
49
86
 
50
- let submenuPopovers = $state<Record<number, PopoverState>>({});
87
+ // The panel is portaled out of the trigger's subtree, so it does not inherit a `dir` set there:
88
+ // a menu opened from a right-to-left subtree carries that direction itself, which also keeps
89
+ // the arrow keys, the carets and the text of its rows reading the way the trigger does.
90
+ const anchorElement = () => {
91
+ const reference = parentPopover?.referenceElement;
92
+ return reference instanceof HTMLElement ? reference : null;
93
+ };
94
+ const getDirection = useDirection(anchorElement);
95
+ const panelDir = $derived.by(() => {
96
+ if (!parentPopover || typeof document === 'undefined') return undefined;
97
+ const direction = getDirection();
98
+ const inherited = getComputedStyle(document.body).direction === 'rtl' ? 'rtl' : 'ltr';
99
+ return direction === inherited ? undefined : direction;
100
+ });
101
+
102
+ const apple = isApplePlatform();
103
+
104
+ // Keyed by row key, so a row keeps its popover registration while rows around it come and go.
105
+ let submenuPopovers = $state<Record<string, PopoverState>>({});
51
106
  // Derived from the popovers' own isOpen (which flips the instant open()/close()
52
107
  // is called), not from onAfterOpen/onAfterClose callbacks, which only fire after the
53
108
  // intro/outro transitions and would keep the parent nav frozen during the fade.
54
109
  const anySubmenuOpen = $derived(Object.values(submenuPopovers).some((p) => p.isOpen));
55
110
 
56
- const navigation = useNavigation({
57
- typeahead: true,
58
- enabled: () => {
59
- if (parentPopover?.hasChildOpen || anySubmenuOpen) return false;
60
- return true;
111
+ // Keys belong to the submenu that holds focus: while one does, this menu's keys stay with it.
112
+ const submenuHoldsFocus = () => {
113
+ const active = getDeepActiveElement();
114
+ if (!active) return false;
115
+ return Object.values(submenuPopovers).some(
116
+ (popover) =>
117
+ popover.isOpen && !!popover.panelElement && composedContains(popover.panelElement, active)
118
+ );
119
+ };
120
+
121
+ // A menu with a search field keeps focus in the field: the rows are only highlighted (virtual
122
+ // focus), and typing belongs to the field rather than to type-ahead.
123
+ const query = useMenuSearch({
124
+ filter: () => filter,
125
+ search: () => search,
126
+ write: (next) => {
127
+ search = next;
61
128
  },
129
+ defaultSearch: () => defaultSearch,
130
+ onSearchChange: () => onSearchChange
131
+ });
132
+ const filterable = untrack(() => query.enabled);
133
+
134
+ const navigation = useNavigation({
135
+ typeahead: !filterable,
136
+ virtualFocus: filterable,
137
+ enabled: () => !submenuHoldsFocus(),
62
138
  orientation: () => 'vertical',
63
139
  loop: true,
64
140
  id,
@@ -67,28 +143,86 @@
67
143
  preventKeyboardDefault: false
68
144
  });
69
145
 
146
+ let list = $state<HTMLElement | null>(null);
147
+ let searchField = $state<HTMLInputElement | null>(null);
148
+ const listId = `${id}-list`;
149
+
70
150
  onMount(() => {
71
151
  void (async () => {
72
152
  await tick();
153
+ if (filterable) {
154
+ // A hover open (`false`) leaves focus where it was, even when the field could take it.
155
+ if (focusOnMount === false) return;
156
+ searchField?.focus({ preventScroll: true });
157
+ if (focusOnMount === 'last') navigation.focusLast();
158
+ else if (focusOnMount === true) navigation.focusFirst();
159
+ return;
160
+ }
73
161
  if (focusOnMount === 'container') navigation.focusContainer();
162
+ else if (focusOnMount === 'last') navigation.focusLast();
74
163
  else if (focusOnMount) navigation.focusFirst();
75
164
  })();
76
165
  });
77
166
 
167
+ // The highlighted row is named by the search field (`aria-activedescendant`) and reported to
168
+ // `onHighlightChange` by value, whether the keyboard, the pointer or the filter moved it.
169
+ let activeId = $state<string | undefined>();
170
+ const trackHighlight = $derived(!!onHighlightChange);
171
+ const watchList = (node: HTMLElement) =>
172
+ watchHighlight(node, (row) => {
173
+ activeId = row?.id || undefined;
174
+ onHighlightChange?.(rowValue(row));
175
+ });
176
+
177
+ const visibleItems = $derived(query.visible(items));
178
+
179
+ // Typing narrows the rows; the first match is highlighted so Enter presses it, and an empty
180
+ // field clears the highlight.
181
+ const editSearch = (next: string) => {
182
+ query.set(next);
183
+ void tick().then(() => {
184
+ if (query.search.trim() === '') navigation.clearFocus();
185
+ else navigation.focusFirst();
186
+ });
187
+ };
188
+
189
+ const searchKeys = createSearchKeys({
190
+ navigation,
191
+ list: () => list,
192
+ rtl: () => getDirection() === 'rtl',
193
+ leave: () => goUp()
194
+ });
195
+
196
+ // A press on a row keeps focus in the search field.
197
+ const keepFocusInField = (event: MouseEvent) => {
198
+ if (filterable) event.preventDefault();
199
+ };
200
+
78
201
  const closeParentMenu = () => {
79
202
  if (!parentPopover) return;
80
203
  const trigger = parentPopover.referenceElement;
81
- parentPopover.close();
82
- if (trigger instanceof HTMLElement) trigger.focus();
204
+ parentPopover.close({ reason: 'list-navigation', interaction: 'keyboard' });
205
+ if (!(trigger instanceof HTMLElement)) return;
206
+ // A parent with a search field keeps focus in the field (its rows are only highlighted), so
207
+ // that is where focus returns; typing then goes on filtering the parent.
208
+ const parentList = trigger.closest('[role="menu"]');
209
+ const parentField = parentList?.id
210
+ ? trigger.ownerDocument.querySelector<HTMLInputElement>(
211
+ `input[aria-controls="${CSS.escape(parentList.id)}"]`
212
+ )
213
+ : null;
214
+ (parentField ?? trigger).focus();
83
215
  };
84
216
 
85
217
  const goBack = () => {
86
218
  closeParentMenu();
87
219
  };
88
220
 
221
+ // Returns whether there was a level to leave: on a root row ArrowLeft stays unhandled.
89
222
  const goUp = () => {
90
- if (!hasParentMenu) return;
223
+ if (!hasParentMenu) return false;
91
224
  goBack();
225
+ return true;
92
226
  };
93
227
 
94
228
  const attachPrevious = (node: HTMLElement) => {
@@ -101,10 +235,9 @@
101
235
 
102
236
  const pointerFrom = (e: MouseEvent) => ({ x: e.clientX, y: e.clientY });
103
237
 
104
- const closeSubmenus = (exceptIndex?: number, pointer?: { x: number; y: number }) => {
238
+ const closeSubmenus = (exceptKey?: string, pointer?: { x: number; y: number }) => {
105
239
  for (const [key, popover] of Object.entries(submenuPopovers)) {
106
- const index = Number(key);
107
- if (index === exceptIndex) continue;
240
+ if (key === exceptKey) continue;
108
241
  // Don't close a submenu the pointer is still travelling toward: its safe
109
242
  // area (the trigger→panel corridor) has authority during the diagonal
110
243
  // transit, so a sibling row you merely cross doesn't slam it shut.
@@ -113,6 +246,28 @@
113
246
  }
114
247
  };
115
248
 
249
+ // Focus moving onto a row of this menu (a screen reader's cursor, a click, Shift+Tab from a
250
+ // submenu that stayed open) ends every submenu that row does not own, so the arrow keys work
251
+ // here again.
252
+ const closeSubmenusOnFocus = (event: FocusEvent) => {
253
+ const target = event.target;
254
+ if (!(target instanceof Element)) return;
255
+ // Focus inside a submenu belongs to that submenu, even in the moment before its panel has
256
+ // been moved out of this menu's subtree. The header, footer and search field count as this
257
+ // menu's own.
258
+ const owner = target.closest('[role="menu"]');
259
+ if (owner && owner !== list) return;
260
+ // The menu itself taking focus (its mount focus, a press on its padding) names no row.
261
+ if (target === list) return;
262
+ for (const popover of Object.values(submenuPopovers)) {
263
+ if (!popover.isOpen) continue;
264
+ const trigger = popover.triggerReference;
265
+ if (trigger && composedContains(trigger, target)) continue;
266
+ if (popover.panelElement && composedContains(popover.panelElement, target)) continue;
267
+ popover.close({ reason: 'focus-out', event, interaction: 'keyboard' });
268
+ }
269
+ };
270
+
116
271
  // The moment every submenu is closed (isOpen, not transition end), hand the
117
272
  // hover highlight to the row actually under the mouse — the parent nav was
118
273
  // disabled while a submenu was open, so the highlight froze on the trigger.
@@ -124,43 +279,110 @@
124
279
  hadSubmenuOpen = open;
125
280
  });
126
281
  });
282
+
283
+ /** Moves focus into an open submenu, onto its first row. */
284
+ const focusSubmenu = (popover: PopoverState) => {
285
+ popover.panelElement?.querySelector<HTMLElement>('[role="menu"]')?.focus();
286
+ };
287
+
288
+ /** Registers a row (checkbox, radio) with this menu's navigation, hover and ArrowLeft. */
289
+ const rowAttach: Attachment<HTMLElement> = (node) => {
290
+ const off = navigation.itemReference(node);
291
+ attachPrevious(node);
292
+ const offEnter = on(node, 'pointerenter', (event) =>
293
+ closeSubmenus(undefined, pointerFrom(event))
294
+ );
295
+ return () => {
296
+ off?.();
297
+ offEnter();
298
+ };
299
+ };
300
+
301
+ /** What a row passes to the element it renders, without the fields the menu itself reads. */
302
+ const withoutMenuFields = <T extends object, K extends string>(source: T, keys: readonly K[]) => {
303
+ const result: Record<string, unknown> = { ...(source as Record<string, unknown>) };
304
+ for (const key of keys) delete result[key];
305
+ return result as Omit<T, K>;
306
+ };
307
+
308
+ const keepOpen = (closeOnClick: boolean | undefined) =>
309
+ closeOnClick === false ? { 'data-menu-keep-open': 'true' } : {};
310
+
311
+ // The value a row reports to `onHighlightChange`, written on the row only when something reads it.
312
+ const valueAttrs = (item: MenuItem) => {
313
+ const value = trackHighlight ? menuItemValue(item) : undefined;
314
+ return value === undefined ? {} : { [HIGHLIGHT_VALUE_ATTRIBUTE]: value };
315
+ };
316
+ const withValue = <T extends { attrs?: Record<string, unknown> }>(
317
+ attrs: Record<string, unknown>,
318
+ row: T
319
+ ): T => (trackHighlight ? { ...row, attrs: { ...row.attrs, ...attrs } } : row);
320
+ const radioValueAttrs = (radio: { value: string }) =>
321
+ trackHighlight ? { [HIGHLIGHT_VALUE_ATTRIBUTE]: radio.value } : {};
322
+
323
+ // One key tracker per list of rows (the root, each group), so a row that changes its own text
324
+ // keeps its node.
325
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity -- plain memo of the previous render; nothing reads it reactively
326
+ const keyTrackers = new Map<string, ReturnType<typeof createMenuKeys>>();
327
+ const keysFor = (scope: string, entries: readonly MenuItem[]) => {
328
+ let track = keyTrackers.get(scope);
329
+ if (!track) keyTrackers.set(scope, (track = createMenuKeys()));
330
+ return track(entries);
331
+ };
332
+ const rowKeys = $derived(keysFor('', visibleItems));
333
+
334
+ /** Wires a submenu trigger row: its popover registration, ArrowRight and ArrowLeft. */
335
+ const registerSubmenu = (node: HTMLElement, key: string, api: PopoverApi) => {
336
+ const popover = popoverInternals(api);
337
+ // VoiceOver announces the trigger's state again when focus lands in the submenu it opened;
338
+ // leaving `aria-expanded` off while the submenu is open avoids that.
339
+ // The popover writes the attribute from its own effect, so this watches the attribute and
340
+ // removes it after each write, whichever effect ran first.
341
+ let offExpanded: (() => void) | undefined;
342
+ if (apple && typeof MutationObserver !== 'undefined') {
343
+ const observer = new MutationObserver(() => {
344
+ if (popover.isOpen && node.hasAttribute('aria-expanded'))
345
+ node.removeAttribute('aria-expanded');
346
+ });
347
+ observer.observe(node, { attributes: true, attributeFilter: ['aria-expanded'] });
348
+ offExpanded = () => observer.disconnect();
349
+ }
350
+ submenuPopovers[key] = popover;
351
+ Object.assign(node, {
352
+ onNext: () => {
353
+ closeSubmenus(key);
354
+ if (popover.isOpen) focusSubmenu(popover);
355
+ else popover.open({ reason: 'list-navigation', interaction: 'keyboard' });
356
+ },
357
+ onPrevious: goUp
358
+ });
359
+ return () => {
360
+ offExpanded?.();
361
+ delete submenuPopovers[key];
362
+ };
363
+ };
127
364
  </script>
128
365
 
129
- <div
130
- class={classes.root({ density, className })}
131
- role="menu"
132
- data-size={size}
133
- data-density={density}
134
- data-color={color}
135
- {...attachments}
136
- {@attach navigation.containerReference}
137
- >
138
- {#if showBackControl}
139
- <MenuOption
140
- role="menuitem"
141
- title={t.back}
142
- prefix={arrowLeftIcon}
143
- {density}
144
- {size}
145
- color={color ?? 'neutral'}
146
- theme={theme?.option}
147
- attrs={{ 'data-menu-keep-open': 'true' }}
148
- onclick={() => {
149
- goBack();
150
- }}
151
- {@attach navigation.itemReference}
152
- {@attach attachBackControl}
153
- />
154
- <Separator theme={theme?.separator} />
155
- {:else}
156
- <Slot render={header} renderIf={!!header} class={classes.header()} />
157
- {/if}
366
+ {#snippet caret()}
367
+ <MenuMirroredIcon icon={caretRightIcon} />
368
+ {/snippet}
158
369
 
159
- {#each items as item, index (index)}
370
+ {#snippet backIcon()}
371
+ <MenuMirroredIcon icon={arrowLeftIcon} />
372
+ {/snippet}
373
+
374
+ {#snippet rows(entries: MenuItem[], scope: string)}
375
+ {@const keys = scope === '' ? rowKeys : keysFor(scope, entries)}
376
+ {#each entries as item, index (keys[index])}
377
+ {@const path = `${scope}${index}`}
160
378
  {#if item.type === 'button'}
379
+ {@const buttonProps = withoutMenuFields(item, ['type', 'key', 'value', 'closeOnClick'])}
161
380
  <Button
162
381
  role="menuitem"
163
- {...item}
382
+ {...buttonProps}
383
+ {...keepOpen(item.closeOnClick)}
384
+ {...valueAttrs(item)}
385
+ data-disabled={item.disabled ? '' : undefined}
164
386
  theme={theme?.button}
165
387
  {@attach navigation.itemReference}
166
388
  {@attach attachPrevious}
@@ -168,14 +390,14 @@
168
390
  on(node, 'pointerenter', (e) => closeSubmenus(undefined, pointerFrom(e)))}
169
391
  />
170
392
  {:else if item.type === 'option'}
171
- <!-- eslint-disable-next-line @typescript-eslint/no-unused-vars -- Remove the menu discriminant before forwarding native element props. -->
172
- {@const { type: _type, ...optionProps } = item}
393
+ {@const optionProps = withoutMenuFields(item, ['type', 'key', 'value'])}
173
394
  <MenuOption
174
395
  role={optionProps.selected !== undefined ? 'menuitemradio' : 'menuitem'}
175
396
  {density}
176
397
  {size}
177
398
  {...color ? { color } : {}}
178
399
  {...optionProps}
400
+ attrs={{ ...optionProps.attrs, ...valueAttrs(item) }}
179
401
  theme={theme?.option}
180
402
  onpointerenter={(event) => {
181
403
  item.onpointerenter?.(event);
@@ -184,20 +406,65 @@
184
406
  {@attach navigation.itemReference}
185
407
  {@attach attachPrevious}
186
408
  />
409
+ {:else if item.type === 'checkbox'}
410
+ <MenuCheckboxItem
411
+ item={withValue(valueAttrs(item), item)}
412
+ {density}
413
+ {size}
414
+ {color}
415
+ {theme}
416
+ {rowAttach}
417
+ />
418
+ {:else if item.type === 'radio-group'}
419
+ <MenuRadioGroup
420
+ item={trackHighlight
421
+ ? { ...item, items: item.items.map((radio) => withValue(radioValueAttrs(radio), radio)) }
422
+ : item}
423
+ id={`${id}-group-${path}`}
424
+ {density}
425
+ {size}
426
+ {color}
427
+ {theme}
428
+ {rowAttach}
429
+ />
430
+ {:else if item.type === 'group'}
431
+ <div
432
+ role="group"
433
+ aria-labelledby={item.label ? `${id}-group-${path}` : undefined}
434
+ class={classes.group({ density })}
435
+ >
436
+ {#if item.label}
437
+ <div
438
+ id={`${id}-group-${path}`}
439
+ aria-hidden="true"
440
+ class={classes.groupLabel({ density })}
441
+ >
442
+ <Slot render={item.label} />
443
+ </div>
444
+ {/if}
445
+ {@render rows(item.items, `${scope}${keys[index]}/`)}
446
+ </div>
187
447
  {:else if item.type === 'separator'}
188
- <Separator {...item} theme={theme?.separator} />
448
+ {@const separatorProps = withoutMenuFields(item, ['key'])}
449
+ <Separator {...separatorProps} theme={theme?.separator} />
189
450
  {:else if item.type === 'submenu'}
190
451
  {@const submenuItem = item as typeof item & { popoverClass?: string }}
452
+ {@const submenuKey = `${scope}${keys[index]}`}
191
453
  <!-- eslint-disable @typescript-eslint/no-unused-vars -- Remove the submenu discriminant before forwarding native element props. -->
192
454
  {@const {
193
455
  type: _type,
456
+ key: _key,
457
+ value: _value,
194
458
  menu,
195
459
  openOnHover = true,
196
460
  openOnClick = true,
197
461
  delay = 100,
198
462
  closeOnMouseLeave = true,
199
463
  debugSafeArea = false,
464
+ filter: submenuFilter,
465
+ onHighlightChange: submenuHighlight,
200
466
  popoverClass,
467
+ closeOnClick: _closeOnClick,
201
468
  onclick: itemOnClick,
202
469
  onpointerenter: itemOnPointerEnter,
203
470
  suffix,
@@ -205,21 +472,25 @@
205
472
  ...itemProps
206
473
  } = submenuItem}
207
474
  <!-- eslint-enable @typescript-eslint/no-unused-vars -->
475
+ <!-- Inside a PopupMenu (or another tree host) the submenu joins that menu's tree: the
476
+ root's closeOnItemClick applies, and choosing an item closes every level. In an
477
+ inline Menu with no host the submenu roots its own tree and closes on item press. -->
208
478
  <PopupMenu
479
+ submenuOf={menuTree}
480
+ isSubmenu
209
481
  size={panelSize?.() ?? 'small'}
210
482
  position={submenuPosition}
483
+ fallbackAxisSide="end"
211
484
  openOnHover={openOnHover && !item.disabled && !isInMobileSheet}
212
485
  {openOnClick}
213
486
  {delay}
214
487
  {closeOnMouseLeave}
215
488
  {debugSafeArea}
216
489
  closeOnEscape={true}
217
- closeOnItemClick={false}
218
490
  mobileSheet={false}
219
491
  class={popoverClass}
220
492
  menu={{
221
493
  items: menu,
222
- focusOnMount: true,
223
494
  submenuMode: 'popover',
224
495
  // A submenu is the same menu one level down, so every axis the parent was
225
496
  // given rides along: without this a `size="small"` menu opened a
@@ -227,6 +498,8 @@
227
498
  density,
228
499
  size,
229
500
  ...(color ? { color } : {}),
501
+ ...(submenuFilter ? { filter: submenuFilter } : {}),
502
+ ...(submenuHighlight ? { onHighlightChange: submenuHighlight } : {}),
230
503
  theme
231
504
  }}
232
505
  >
@@ -237,42 +510,116 @@
237
510
  {size}
238
511
  {...color ? { color } : {}}
239
512
  {...itemProps}
240
- suffix={suffix ?? caretRightIcon}
513
+ suffix={suffix ?? caret}
241
514
  theme={theme?.submenu}
242
515
  active={popover.isOpen}
243
516
  attrs={{
244
517
  ...attrs,
518
+ ...valueAttrs(item),
245
519
  'data-menu-keep-open': 'true'
246
520
  }}
247
521
  onclick={(event) => {
248
522
  itemOnClick?.(event);
249
- closeSubmenus(index);
250
- if (openOnClick) popover.open();
523
+ closeSubmenus(submenuKey);
524
+ if (!openOnClick) return;
525
+ if (!popover.isOpen) {
526
+ popover.open(event);
527
+ return;
528
+ }
529
+ // A mouse click on a submenu the pointer opened keeps it open; any other repeated
530
+ // press (the keyboard, assistive technology, a second click) closes it.
531
+ const interaction = getInteractionType(event);
532
+ const byPointer = interaction !== 'keyboard' && interaction !== 'programmatic';
533
+ if (popover.openReason === 'hover' && byPointer) popover.open(event);
534
+ else popover.close(event);
251
535
  }}
252
536
  onpointerenter={(event) => {
253
537
  itemOnPointerEnter?.(event);
254
- closeSubmenus(index, pointerFrom(event));
538
+ closeSubmenus(submenuKey, pointerFrom(event));
255
539
  }}
256
540
  {@attach popover.reference}
257
541
  {@attach navigation.itemReference}
258
- {@attach (node) => {
259
- submenuPopovers[index] = popover;
260
- Object.assign(node, {
261
- onNext: () => {
262
- closeSubmenus(index);
263
- popover.open();
264
- },
265
- onPrevious: goUp
266
- });
267
- return () => {
268
- delete submenuPopovers[index];
269
- };
270
- }}
542
+ {@attach (node) => registerSubmenu(node, submenuKey, popover)}
271
543
  />
272
544
  {/snippet}
273
545
  </PopupMenu>
274
546
  {/if}
275
547
  {/each}
548
+ {/snippet}
549
+
550
+ <div
551
+ class={classes.root({ density, className })}
552
+ data-size={size}
553
+ data-density={density}
554
+ data-color={color}
555
+ onfocusin={closeSubmenusOnFocus}
556
+ {...panelDir ? { dir: panelDir } : {}}
557
+ {...attachments}
558
+ >
559
+ {#if !showBackControl}
560
+ <Slot render={header} renderIf={!!header} class={classes.header()} />
561
+ {/if}
562
+
563
+ {#if filterable}
564
+ <MenuSearchField
565
+ bind:input={searchField}
566
+ value={query.search}
567
+ placeholder={query.options?.placeholder ?? t.searchEllipsis}
568
+ label={query.options?.label ?? query.options?.placeholder ?? t.search}
569
+ {size}
570
+ {theme}
571
+ {listId}
572
+ {activeId}
573
+ oninput={editSearch}
574
+ onkeydown={searchKeys}
575
+ />
576
+ {/if}
577
+
578
+ <div
579
+ id={listId}
580
+ class={classes.list({ density })}
581
+ role="menu"
582
+ tabindex="-1"
583
+ data-size={size}
584
+ data-density={density}
585
+ data-color={color}
586
+ bind:this={list}
587
+ onmousedown={keepFocusInField}
588
+ {@attach navigation.containerReference}
589
+ {@attach trackHighlight || filterable ? watchList : undefined}
590
+ >
591
+ {#if showBackControl}
592
+ <MenuOption
593
+ role="menuitem"
594
+ title={t.back}
595
+ prefix={backIcon}
596
+ {density}
597
+ {size}
598
+ color={color ?? 'neutral'}
599
+ theme={theme?.option}
600
+ attrs={{ 'data-menu-keep-open': 'true' }}
601
+ onclick={() => {
602
+ goBack();
603
+ }}
604
+ {@attach navigation.itemReference}
605
+ {@attach attachBackControl}
606
+ />
607
+ <Separator theme={theme?.separator} />
608
+ {/if}
609
+
610
+ {@render rows(visibleItems, '')}
611
+ </div>
612
+
613
+ {#if filterable && !hasMenuRows(visibleItems)}
614
+ <!-- Outside the menu: it may only own rows. A status region, so the message is announced. -->
615
+ <div role="status" class={classes.empty({ density })}>
616
+ {#if empty}
617
+ {@render empty()}
618
+ {:else}
619
+ {t.noResults}
620
+ {/if}
621
+ </div>
622
+ {/if}
276
623
 
277
624
  {#if !showBackControl}
278
625
  <Slot render={footer} renderIf={!!footer} class={classes.footer()} />
@@ -1,4 +1,4 @@
1
1
  import type { MenuProps } from './menu.props.js';
2
- declare const MenuFloating: import("svelte").Component<MenuProps, {}, "">;
2
+ declare const MenuFloating: import("svelte").Component<MenuProps, {}, "search">;
3
3
  type MenuFloating = ReturnType<typeof MenuFloating>;
4
4
  export default MenuFloating;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ // An icon that points along the reading direction (the submenu caret, the back arrow) and so
5
+ // flips in right-to-left text. `rtl:` follows the `dir` the menu panel carries.
6
+ let { icon }: { icon: Snippet } = $props();
7
+ </script>
8
+
9
+ <span class="inline-flex rtl:-scale-x-100">{@render icon()}</span>