entasis 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (839) hide show
  1. package/README.md +1 -1
  2. package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
  3. package/dist/attachments/disclosurePanel.svelte.js +277 -0
  4. package/dist/attachments/portal.d.ts +17 -1
  5. package/dist/attachments/portal.js +39 -2
  6. package/dist/attachments/spinnerOverlay.svelte.js +12 -0
  7. package/dist/attachments/transitionSize.d.ts +6 -0
  8. package/dist/attachments/transitionSize.js +30 -0
  9. package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
  10. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
  11. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
  12. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
  13. package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
  14. package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
  15. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
  16. package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
  17. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
  18. package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
  19. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
  20. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
  21. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
  22. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
  23. package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
  24. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
  25. package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
  26. package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
  27. package/dist/components/AIAskUserQuestion/index.js +2 -0
  28. package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
  29. package/dist/components/AIAskUserQuestion/schemas.js +10 -3
  30. package/dist/components/AIChat/AIChat.svelte +10 -0
  31. package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
  32. package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
  33. package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
  34. package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
  35. package/dist/components/AIChat/AIChatSurface.svelte +30 -2
  36. package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
  37. package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
  38. package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
  39. package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
  40. package/dist/components/AIChat/aiChat.mcp.js +31 -15
  41. package/dist/components/AIChat/aiChat.props.d.ts +36 -10
  42. package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
  43. package/dist/components/AIChat/aiChat.theme.js +21 -4
  44. package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
  45. package/dist/components/AIChat/index.d.ts +1 -1
  46. package/dist/components/AIComposer/AIComposer.svelte +102 -5
  47. package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
  48. package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
  49. package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
  50. package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
  51. package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
  52. package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
  53. package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
  54. package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
  55. package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
  56. package/dist/components/AIComposer/aiComposer.theme.js +37 -5
  57. package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
  58. package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
  59. package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
  60. package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
  61. package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
  62. package/dist/components/AIContext/AIContext.svelte +7 -3
  63. package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
  64. package/dist/components/AIContext/aiContext.mcp.js +1 -1
  65. package/dist/components/AIContext/aiContext.props.d.ts +4 -1
  66. package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
  67. package/dist/components/AIContext/aiContext.theme.js +7 -2
  68. package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
  69. package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
  70. package/dist/components/AIMarker/AIMarker.svelte +2 -0
  71. package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
  72. package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
  73. package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
  74. package/dist/components/AIMarker/aiMarker.theme.js +2 -2
  75. package/dist/components/AIMessage/AIMessage.svelte +38 -16
  76. package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
  77. package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
  78. package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
  79. package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
  80. package/dist/components/AIMessage/aiMessage.theme.js +91 -32
  81. package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
  82. package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
  83. package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
  84. package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
  85. package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
  86. package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
  87. package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
  88. package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
  89. package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
  90. package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
  91. package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
  92. package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
  93. package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
  94. package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
  95. package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
  96. package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
  97. package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
  98. package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
  99. package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
  100. package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
  101. package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
  102. package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
  103. package/dist/components/AIThread/AIThread.svelte +378 -95
  104. package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
  105. package/dist/components/AIThread/AIThreadItems.svelte +266 -64
  106. package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
  107. package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
  108. package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
  109. package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
  110. package/dist/components/AIThread/aiThread.mcp.js +34 -20
  111. package/dist/components/AIThread/aiThread.props.d.ts +73 -8
  112. package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
  113. package/dist/components/AIThread/aiThread.theme.js +108 -9
  114. package/dist/components/AIThread/index.d.ts +1 -1
  115. package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
  116. package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
  117. package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
  118. package/dist/components/AIThread/threadRenderItems.js +265 -77
  119. package/dist/components/AIThread/threadScrollController.d.ts +0 -8
  120. package/dist/components/AIThread/threadScrollController.js +2 -39
  121. package/dist/components/AIThread/threadTools.d.ts +11 -0
  122. package/dist/components/AIThread/threadTools.js +79 -0
  123. package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
  124. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
  125. package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
  126. package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
  127. package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
  128. package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
  129. package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
  130. package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
  131. package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
  132. package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
  133. package/dist/components/AITool/AITool.svelte +56 -21
  134. package/dist/components/AITool/AIToolCallList.svelte +79 -29
  135. package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
  136. package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
  137. package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
  138. package/dist/components/AITool/AIToolValueSection.svelte +126 -28
  139. package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
  140. package/dist/components/AITool/AIToolValueTree.svelte +11 -16
  141. package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
  142. package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
  143. package/dist/components/AITool/aiTool.mcp.js +36 -8
  144. package/dist/components/AITool/aiTool.props.d.ts +52 -6
  145. package/dist/components/AITool/aiTool.theme.d.ts +117 -39
  146. package/dist/components/AITool/aiTool.theme.js +144 -140
  147. package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
  148. package/dist/components/AITool/aiToolClock.svelte.js +62 -0
  149. package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
  150. package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
  151. package/dist/components/AITool/index.d.ts +2 -1
  152. package/dist/components/AITool/index.js +1 -0
  153. package/dist/components/AITool/toolRendering.d.ts +33 -1
  154. package/dist/components/AITool/toolRendering.js +179 -15
  155. package/dist/components/AITool/toolValueTree.d.ts +14 -1
  156. package/dist/components/AITool/toolValueTree.js +126 -27
  157. package/dist/components/Accordion/Accordion.svelte +109 -109
  158. package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
  159. package/dist/components/Accordion/AccordionPanel.svelte +64 -0
  160. package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
  161. package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
  162. package/dist/components/Accordion/accordion.attributes.js +20 -0
  163. package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
  164. package/dist/components/Accordion/accordion.mcp.js +78 -22
  165. package/dist/components/Accordion/accordion.props.d.ts +54 -10
  166. package/dist/components/Accordion/accordion.theme.d.ts +3 -0
  167. package/dist/components/Accordion/accordion.theme.js +4 -0
  168. package/dist/components/Accordion/index.d.ts +1 -0
  169. package/dist/components/Accordion/index.js +1 -0
  170. package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
  171. package/dist/components/Avatar/Avatar.svelte +60 -10
  172. package/dist/components/Avatar/AvatarGroup.svelte +9 -0
  173. package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
  174. package/dist/components/Avatar/avatar.mcp.js +13 -5
  175. package/dist/components/Avatar/avatar.props.d.ts +28 -1
  176. package/dist/components/Avatar/avatar.theme.js +3 -3
  177. package/dist/components/Avatar/index.d.ts +1 -1
  178. package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
  179. package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
  180. package/dist/components/Button/Button.svelte +35 -15
  181. package/dist/components/Button/button.mcp.d.ts +1 -1
  182. package/dist/components/Button/button.mcp.js +8 -4
  183. package/dist/components/Button/button.props.d.ts +23 -8
  184. package/dist/components/Button/button.theme.d.ts +12 -0
  185. package/dist/components/Button/button.theme.js +17 -4
  186. package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
  187. package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
  188. package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
  189. package/dist/components/Collapsible/Collapsible.svelte +125 -19
  190. package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
  191. package/dist/components/Collapsible/collapsible.attributes.js +17 -0
  192. package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
  193. package/dist/components/Collapsible/collapsible.mcp.js +62 -12
  194. package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
  195. package/dist/components/Collapsible/collapsible.theme.js +3 -1
  196. package/dist/components/Collapsible/index.d.ts +1 -0
  197. package/dist/components/Collapsible/index.js +1 -0
  198. package/dist/components/Command/Command.svelte +56 -14
  199. package/dist/components/Command/command.mcp.d.ts +1 -1
  200. package/dist/components/Command/command.mcp.js +12 -6
  201. package/dist/components/Command/command.props.d.ts +39 -6
  202. package/dist/components/Command/command.state.svelte.d.ts +40 -11
  203. package/dist/components/Command/command.state.svelte.js +75 -28
  204. package/dist/components/Command/command.theme.js +4 -3
  205. package/dist/components/Confirmation/Confirmation.svelte +72 -31
  206. package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
  207. package/dist/components/Confirmation/confirmation.mcp.js +5 -4
  208. package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
  209. package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
  210. package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
  211. package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
  212. package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
  213. package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
  214. package/dist/components/DataTable/DataTable.svelte +4 -9
  215. package/dist/components/DataTable/DataTableEditor.svelte +5 -0
  216. package/dist/components/DataTable/DataTableFilter.svelte +1 -0
  217. package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
  218. package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
  219. package/dist/components/DataTable/dataTable.mcp.js +4 -2
  220. package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
  221. package/dist/components/DataTable/dataTable.theme.js +9 -6
  222. package/dist/components/Dialog/Dialog.svelte +120 -35
  223. package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
  224. package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
  225. package/dist/components/Dialog/dialog.api.d.ts +65 -0
  226. package/dist/components/Dialog/dialog.api.js +1 -0
  227. package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
  228. package/dist/components/Dialog/dialog.attributes.js +19 -0
  229. package/dist/components/Dialog/dialog.indent.d.ts +6 -0
  230. package/dist/components/Dialog/dialog.indent.js +16 -0
  231. package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
  232. package/dist/components/Dialog/dialog.mcp.js +195 -22
  233. package/dist/components/Dialog/dialog.props.d.ts +102 -19
  234. package/dist/components/Dialog/dialog.snap.d.ts +40 -0
  235. package/dist/components/Dialog/dialog.snap.js +78 -0
  236. package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
  237. package/dist/components/Dialog/dialog.state.svelte.js +525 -66
  238. package/dist/components/Dialog/dialog.theme.d.ts +48 -0
  239. package/dist/components/Dialog/dialog.theme.js +32 -9
  240. package/dist/components/Dialog/index.d.ts +4 -1
  241. package/dist/components/Dialog/index.js +1 -0
  242. package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
  243. package/dist/components/DocumentViewer/documentOutput.js +2 -1
  244. package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
  245. package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
  246. package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
  247. package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
  248. package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
  249. package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
  250. package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
  251. package/dist/components/Form/Ask/Ask.svelte +9 -13
  252. package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
  253. package/dist/components/Form/Ask/ask.mcp.js +1 -1
  254. package/dist/components/Form/Ask/ask.props.d.ts +1 -1
  255. package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
  256. package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
  257. package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
  258. package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
  259. package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
  260. package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
  261. package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
  262. package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
  263. package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
  264. package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
  265. package/dist/components/Form/Autocomplete/index.d.ts +3 -0
  266. package/dist/components/Form/Autocomplete/index.js +2 -0
  267. package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
  268. package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
  269. package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
  270. package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
  271. package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
  272. package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
  273. package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
  274. package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
  275. package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
  276. package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
  277. package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
  278. package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
  279. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
  280. package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
  281. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
  282. package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
  283. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
  284. package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
  285. package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
  286. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
  287. package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
  288. package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
  289. package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
  290. package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
  291. package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
  292. package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
  293. package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
  294. package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
  295. package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
  296. package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
  297. package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
  298. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
  299. package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
  300. package/dist/components/Form/Combobox/Combobox.svelte +145 -185
  301. package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
  302. package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
  303. package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
  304. package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
  305. package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
  306. package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
  307. package/dist/components/Form/Combobox/combobox.items.js +68 -0
  308. package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
  309. package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
  310. package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
  311. package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
  312. package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
  313. package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
  314. package/dist/components/Form/Combobox/combobox.theme.js +37 -1
  315. package/dist/components/Form/Combobox/index.d.ts +2 -1
  316. package/dist/components/Form/Combobox/index.js +1 -0
  317. package/dist/components/Form/DateInput/DateInput.svelte +11 -3
  318. package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
  319. package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
  320. package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
  321. package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
  322. package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
  323. package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
  324. package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
  325. package/dist/components/Form/Field/Field.svelte +256 -30
  326. package/dist/components/Form/Field/Field.svelte.d.ts +9 -0
  327. package/dist/components/Form/Field/FieldGroup.svelte +29 -0
  328. package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
  329. package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
  330. package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
  331. package/dist/components/Form/Field/field.d.ts +64 -8
  332. package/dist/components/Form/Field/field.mcp.d.ts +1 -1
  333. package/dist/components/Form/Field/field.mcp.js +158 -18
  334. package/dist/components/Form/Field/field.messages.d.ts +47 -0
  335. package/dist/components/Form/Field/field.messages.js +64 -0
  336. package/dist/components/Form/Field/field.state.svelte.d.ts +109 -3
  337. package/dist/components/Form/Field/field.state.svelte.js +508 -16
  338. package/dist/components/Form/Field/field.theme.d.ts +46 -0
  339. package/dist/components/Form/Field/field.theme.js +33 -0
  340. package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
  341. package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
  342. package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
  343. package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
  344. package/dist/components/Form/Field/index.d.ts +5 -2
  345. package/dist/components/Form/Field/index.js +1 -0
  346. package/dist/components/Form/Field/schemas.js +7 -2
  347. package/dist/components/Form/File/FileInput.svelte +24 -3
  348. package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
  349. package/dist/components/Form/File/fileInput.mcp.js +1 -0
  350. package/dist/components/Form/Form/Form.svelte +47 -14
  351. package/dist/components/Form/Form/FormActions.svelte +3 -1
  352. package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
  353. package/dist/components/Form/Form/FormFieldRenderer.svelte +40 -2
  354. package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
  355. package/dist/components/Form/Form/form.d.ts +35 -6
  356. package/dist/components/Form/Form/form.mcp.d.ts +1 -1
  357. package/dist/components/Form/Form/form.mcp.js +113 -13
  358. package/dist/components/Form/Form/form.props.d.ts +32 -1
  359. package/dist/components/Form/Form/form.registry.d.ts +2 -2
  360. package/dist/components/Form/Form/form.registry.js +1 -4
  361. package/dist/components/Form/Form/form.state.svelte.d.ts +1138 -413
  362. package/dist/components/Form/Form/form.state.svelte.js +319 -26
  363. package/dist/components/Form/Form/index.d.ts +3 -1
  364. package/dist/components/Form/Form/visibility.d.ts +3096 -1831
  365. package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
  366. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
  367. package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
  368. package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
  369. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
  370. package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
  371. package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
  372. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1022 -408
  373. package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
  374. package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
  375. package/dist/components/Form/NumberInput/index.d.ts +1 -1
  376. package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
  377. package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
  378. package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
  379. package/dist/components/Form/PasswordInput/Password.svelte +28 -1
  380. package/dist/components/Form/PasswordInput/index.d.ts +1 -1
  381. package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
  382. package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
  383. package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
  384. package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
  385. package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
  386. package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
  387. package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
  388. package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
  389. package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
  390. package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
  391. package/dist/components/Form/PinInput/PinInput.svelte +44 -9
  392. package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
  393. package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
  394. package/dist/components/Form/PinInput/index.d.ts +1 -1
  395. package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
  396. package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
  397. package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
  398. package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
  399. package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
  400. package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
  401. package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
  402. package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
  403. package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
  404. package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
  405. package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
  406. package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
  407. package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
  408. package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
  409. package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
  410. package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
  411. package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
  412. package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
  413. package/dist/components/Form/Select/Select.svelte +186 -48
  414. package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
  415. package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
  416. package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
  417. package/dist/components/Form/Select/index.d.ts +2 -1
  418. package/dist/components/Form/Select/index.js +1 -0
  419. package/dist/components/Form/Select/select.align.d.ts +5 -0
  420. package/dist/components/Form/Select/select.align.js +19 -5
  421. package/dist/components/Form/Select/select.attributes.d.ts +36 -0
  422. package/dist/components/Form/Select/select.attributes.js +27 -0
  423. package/dist/components/Form/Select/select.mcp.d.ts +1 -1
  424. package/dist/components/Form/Select/select.mcp.js +103 -18
  425. package/dist/components/Form/Select/select.props.d.ts +87 -10
  426. package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
  427. package/dist/components/Form/Select/select.state.svelte.js +354 -59
  428. package/dist/components/Form/Select/select.theme.d.ts +21 -0
  429. package/dist/components/Form/Select/select.theme.js +22 -0
  430. package/dist/components/Form/Slider/Slider.svelte +54 -14
  431. package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
  432. package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
  433. package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
  434. package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
  435. package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
  436. package/dist/components/Form/Slider/index.d.ts +1 -1
  437. package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
  438. package/dist/components/Form/Slider/slider.mcp.js +55 -11
  439. package/dist/components/Form/Slider/slider.props.d.ts +35 -2
  440. package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
  441. package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
  442. package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
  443. package/dist/components/Form/Slider/slider.theme.js +35 -17
  444. package/dist/components/Form/Switch/Switch.svelte +61 -38
  445. package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
  446. package/dist/components/Form/Switch/switch.mcp.js +25 -5
  447. package/dist/components/Form/Switch/switch.props.d.ts +14 -1
  448. package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
  449. package/dist/components/Form/Switch/switch.theme.js +8 -3
  450. package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
  451. package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
  452. package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
  453. package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
  454. package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
  455. package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
  456. package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
  457. package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
  458. package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
  459. package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
  460. package/dist/components/Form/TextArea/TextArea.svelte +8 -0
  461. package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
  462. package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
  463. package/dist/components/Form/TextInput/TextInput.svelte +8 -1
  464. package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
  465. package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
  466. package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
  467. package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
  468. package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
  469. package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
  470. package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
  471. package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
  472. package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
  473. package/dist/components/HoverCard/HoverCard.svelte +100 -10
  474. package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
  475. package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
  476. package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
  477. package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
  478. package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
  479. package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
  480. package/dist/components/HoverCard/hoverCard.theme.js +9 -2
  481. package/dist/components/HoverCard/index.d.ts +1 -0
  482. package/dist/components/HoverCard/index.js +1 -0
  483. package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
  484. package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
  485. package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
  486. package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
  487. package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
  488. package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
  489. package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
  490. package/dist/components/Kanban/kanban.theme.js +7 -3
  491. package/dist/components/Layout/layoutSpacing.d.ts +2 -2
  492. package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
  493. package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
  494. package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
  495. package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
  496. package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
  497. package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
  498. package/dist/components/Map/maplibre-cdn.js +3 -2
  499. package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
  500. package/dist/components/Markdown/markdown.mcp.js +2 -1
  501. package/dist/components/Markdown/markdown.theme.js +18 -9
  502. package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
  503. package/dist/components/Menu/Menu.svelte +3 -3
  504. package/dist/components/Menu/Menu.svelte.d.ts +1 -1
  505. package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
  506. package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
  507. package/dist/components/Menu/MenuFloating.svelte +421 -74
  508. package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
  509. package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
  510. package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
  511. package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
  512. package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
  513. package/dist/components/Menu/MenuSearchField.svelte +54 -0
  514. package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
  515. package/dist/components/Menu/MenuStacked.svelte +404 -158
  516. package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
  517. package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
  518. package/dist/components/Menu/index.d.ts +2 -1
  519. package/dist/components/Menu/index.js +1 -0
  520. package/dist/components/Menu/menu.attributes.d.ts +37 -0
  521. package/dist/components/Menu/menu.attributes.js +28 -0
  522. package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
  523. package/dist/components/Menu/menu.filter.svelte.js +143 -0
  524. package/dist/components/Menu/menu.mcp.d.ts +1 -1
  525. package/dist/components/Menu/menu.mcp.js +227 -17
  526. package/dist/components/Menu/menu.platform.d.ts +5 -0
  527. package/dist/components/Menu/menu.platform.js +11 -0
  528. package/dist/components/Menu/menu.props.d.ts +172 -9
  529. package/dist/components/Menu/menu.theme.d.ts +147 -0
  530. package/dist/components/Menu/menu.theme.js +101 -0
  531. package/dist/components/Menu/menuTree.d.ts +35 -1
  532. package/dist/components/Menu/menuTree.js +158 -1
  533. package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
  534. package/dist/components/MenuBar/menuBar.mcp.js +4 -2
  535. package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
  536. package/dist/components/MenuOption/MenuOption.svelte +5 -1
  537. package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
  538. package/dist/components/MenuOption/menuOption.mcp.js +8 -0
  539. package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
  540. package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
  541. package/dist/components/MenuOption/menuOption.theme.js +24 -4
  542. package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
  543. package/dist/components/Mermaid/mermaid.mcp.js +8 -8
  544. package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
  545. package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
  546. package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
  547. package/dist/components/Mermaid/mermaid.theme.js +26 -1
  548. package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
  549. package/dist/components/Meter/Meter.svelte +110 -24
  550. package/dist/components/Meter/Meter.svelte.d.ts +12 -12
  551. package/dist/components/Meter/meter.mcp.d.ts +1 -1
  552. package/dist/components/Meter/meter.mcp.js +23 -37
  553. package/dist/components/Meter/meter.props.d.ts +36 -44
  554. package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
  555. package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
  556. package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
  557. package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
  558. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
  559. package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
  560. package/dist/components/NavigationMenu/index.d.ts +4 -0
  561. package/dist/components/NavigationMenu/index.js +3 -0
  562. package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
  563. package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
  564. package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
  565. package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
  566. package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
  567. package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
  568. package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
  569. package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
  570. package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
  571. package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
  572. package/dist/components/Overlay/Overlay.svelte +19 -30
  573. package/dist/components/Overlay/index.d.ts +1 -0
  574. package/dist/components/Overlay/index.js +1 -0
  575. package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
  576. package/dist/components/Overlay/overlay.attributes.js +14 -0
  577. package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
  578. package/dist/components/Overlay/overlay.mcp.js +21 -3
  579. package/dist/components/Overlay/overlay.props.d.ts +8 -4
  580. package/dist/components/Popover/Popover.svelte +163 -52
  581. package/dist/components/Popover/Popover.svelte.d.ts +23 -2
  582. package/dist/components/Popover/PopoverSession.svelte +12 -0
  583. package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
  584. package/dist/components/Popover/index.d.ts +10 -2
  585. package/dist/components/Popover/index.js +4 -1
  586. package/dist/components/Popover/popover.api.d.ts +83 -0
  587. package/dist/components/Popover/popover.api.js +1 -0
  588. package/dist/components/Popover/popover.attributes.d.ts +32 -0
  589. package/dist/components/Popover/popover.attributes.js +28 -0
  590. package/dist/components/Popover/popover.claims.d.ts +19 -0
  591. package/dist/components/Popover/popover.claims.js +45 -0
  592. package/dist/components/Popover/popover.mcp.d.ts +1 -1
  593. package/dist/components/Popover/popover.mcp.js +163 -31
  594. package/dist/components/Popover/popover.position.d.ts +226 -0
  595. package/dist/components/Popover/popover.position.js +402 -0
  596. package/dist/components/Popover/popover.props.d.ts +179 -24
  597. package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
  598. package/dist/components/Popover/popover.state.svelte.js +1034 -194
  599. package/dist/components/Popover/popover.theme.d.ts +15 -0
  600. package/dist/components/Popover/popover.theme.js +27 -2
  601. package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
  602. package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
  603. package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
  604. package/dist/components/PopupMenu/popupMenu.context.js +52 -0
  605. package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
  606. package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
  607. package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
  608. package/dist/components/Progress/Progress.svelte +160 -0
  609. package/dist/components/Progress/Progress.svelte.d.ts +4 -0
  610. package/dist/components/Progress/index.d.ts +3 -0
  611. package/dist/components/Progress/index.js +2 -0
  612. package/dist/components/Progress/progress.mcp.d.ts +1 -0
  613. package/dist/components/Progress/progress.mcp.js +101 -0
  614. package/dist/components/Progress/progress.props.d.ts +79 -0
  615. package/dist/components/Progress/progress.props.js +1 -0
  616. package/dist/components/Progress/progress.theme.d.ts +129 -0
  617. package/dist/components/Progress/progress.theme.js +83 -0
  618. package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
  619. package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
  620. package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
  621. package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
  622. package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
  623. package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
  624. package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
  625. package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
  626. package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
  627. package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
  628. package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
  629. package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
  630. package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
  631. package/dist/components/RichTextInput/suggestions.js +2 -0
  632. package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
  633. package/dist/components/ScrollArea/index.d.ts +2 -1
  634. package/dist/components/ScrollArea/index.js +1 -0
  635. package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
  636. package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
  637. package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
  638. package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
  639. package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
  640. package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
  641. package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
  642. package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
  643. package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
  644. package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
  645. package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
  646. package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
  647. package/dist/components/Sidebar/SidebarAction.svelte +13 -3
  648. package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
  649. package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
  650. package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
  651. package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
  652. package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
  653. package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
  654. package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
  655. package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
  656. package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
  657. package/dist/components/Sidebar/index.d.ts +1 -0
  658. package/dist/components/Sidebar/index.js +1 -0
  659. package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
  660. package/dist/components/Sidebar/sidebar-position.js +31 -2
  661. package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
  662. package/dist/components/Sidebar/sidebar.attributes.js +29 -0
  663. package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
  664. package/dist/components/Sidebar/sidebar.mcp.js +45 -10
  665. package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
  666. package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
  667. package/dist/components/Sidebar/sidebar.theme.js +113 -62
  668. package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
  669. package/dist/components/Stepper/Stepper.svelte +2 -0
  670. package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
  671. package/dist/components/Stepper/stepper.mcp.js +1 -0
  672. package/dist/components/Stepper/stepper.props.d.ts +5 -0
  673. package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
  674. package/dist/components/Stepper/stepper.state.svelte.js +31 -12
  675. package/dist/components/Tabbar/Tabbar.svelte +55 -16
  676. package/dist/components/Tabbar/index.d.ts +1 -1
  677. package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
  678. package/dist/components/Tabbar/tabbar.mcp.js +26 -9
  679. package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
  680. package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
  681. package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
  682. package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
  683. package/dist/components/Tabs/Tabs.svelte +73 -16
  684. package/dist/components/Tabs/index.d.ts +2 -1
  685. package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
  686. package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
  687. package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
  688. package/dist/components/Tabs/tabs.mcp.js +22 -4
  689. package/dist/components/Tabs/tabs.props.d.ts +39 -12
  690. package/dist/components/Tabs/tabs.theme.js +3 -1
  691. package/dist/components/Theme/Theme.svelte +44 -27
  692. package/dist/components/Theme/helper.d.ts +16 -2
  693. package/dist/components/Theme/helper.js +46 -4
  694. package/dist/components/Theme/theme.mcp.d.ts +1 -1
  695. package/dist/components/Theme/theme.mcp.js +103 -0
  696. package/dist/components/Theme/theme.props.d.ts +16 -0
  697. package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
  698. package/dist/components/Theme/theme.state.svelte.js +18 -1
  699. package/dist/components/Toast/Toast.svelte +184 -39
  700. package/dist/components/Toast/Toaster.svelte +14 -10
  701. package/dist/components/Toast/index.d.ts +1 -0
  702. package/dist/components/Toast/toast.mcp.d.ts +1 -1
  703. package/dist/components/Toast/toast.mcp.js +47 -6
  704. package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
  705. package/dist/components/Toast/toast.state.svelte.js +513 -68
  706. package/dist/components/Toast/toast.theme.js +1 -1
  707. package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
  708. package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
  709. package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
  710. package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
  711. package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
  712. package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
  713. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
  714. package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
  715. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
  716. package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
  717. package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
  718. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
  719. package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
  720. package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
  721. package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
  722. package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
  723. package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
  724. package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
  725. package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
  726. package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
  727. package/dist/components/Tooltip/Tooltip.svelte +4 -12
  728. package/dist/components/Tooltip/TooltipHost.svelte +136 -15
  729. package/dist/components/Tooltip/index.d.ts +1 -0
  730. package/dist/components/Tooltip/index.js +1 -0
  731. package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
  732. package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
  733. package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
  734. package/dist/components/Tooltip/tooltip.attributes.js +28 -0
  735. package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
  736. package/dist/components/Tooltip/tooltip.mcp.js +111 -10
  737. package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
  738. package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
  739. package/dist/components/Tooltip/tooltip.surface.js +42 -0
  740. package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
  741. package/dist/components/Utils/BeforeHydratation.svelte +14 -3
  742. package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
  743. package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
  744. package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
  745. package/dist/generated/componentAliases.d.ts +3 -0
  746. package/dist/generated/componentAliases.js +3 -0
  747. package/dist/generated/componentContract.d.ts +79 -34
  748. package/dist/generated/componentContract.js +225 -6
  749. package/dist/generated/componentMcpRegistry.js +6 -0
  750. package/dist/i18n/ar.js +107 -3
  751. package/dist/i18n/context.svelte.d.ts +6 -0
  752. package/dist/i18n/context.svelte.js +12 -0
  753. package/dist/i18n/de.js +101 -3
  754. package/dist/i18n/en.d.ts +91 -2
  755. package/dist/i18n/en.js +101 -3
  756. package/dist/i18n/es.js +101 -3
  757. package/dist/i18n/fr.js +101 -3
  758. package/dist/i18n/ja.js +101 -3
  759. package/dist/i18n/pt.js +101 -3
  760. package/dist/i18n/zh.js +101 -3
  761. package/dist/tailwind/geometry.js +7 -0
  762. package/dist/tailwind/global.js +31 -0
  763. package/dist/types/index.d.ts +1 -0
  764. package/dist/types/types.mcp.d.ts +1 -1
  765. package/dist/types/types.mcp.js +23 -0
  766. package/dist/utils/cspNonce.d.ts +16 -0
  767. package/dist/utils/cspNonce.js +39 -0
  768. package/dist/utils/cva/merge.d.ts +5 -1
  769. package/dist/utils/cva/merge.js +6 -4
  770. package/dist/utils/focus.d.ts +34 -0
  771. package/dist/utils/focus.js +93 -0
  772. package/dist/utils/focusHistory.d.ts +21 -0
  773. package/dist/utils/focusHistory.js +99 -0
  774. package/dist/utils/handlers.d.ts +7 -0
  775. package/dist/utils/handlers.js +14 -0
  776. package/dist/utils/hoverIntent.d.ts +42 -0
  777. package/dist/utils/hoverIntent.js +57 -0
  778. package/dist/utils/id.d.ts +7 -0
  779. package/dist/utils/id.js +15 -0
  780. package/dist/utils/layers.svelte.d.ts +32 -4
  781. package/dist/utils/layers.svelte.js +214 -21
  782. package/dist/utils/listFilter.d.ts +44 -0
  783. package/dist/utils/listFilter.js +130 -0
  784. package/dist/utils/match.d.ts +35 -0
  785. package/dist/utils/match.js +36 -0
  786. package/dist/utils/number.d.ts +126 -0
  787. package/dist/utils/number.js +401 -0
  788. package/dist/utils/openChange.d.ts +88 -0
  789. package/dist/utils/openChange.js +71 -0
  790. package/dist/utils/openLifecycle.svelte.d.ts +41 -0
  791. package/dist/utils/openLifecycle.svelte.js +134 -0
  792. package/dist/utils/pointerDrag.d.ts +10 -0
  793. package/dist/utils/pointerDrag.js +37 -2
  794. package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
  795. package/dist/utils/pragmaticDragAndDrop.js +8 -3
  796. package/dist/utils/range.d.ts +62 -0
  797. package/dist/utils/range.js +70 -0
  798. package/dist/utils/requestNativeSubmit.d.ts +17 -0
  799. package/dist/utils/requestNativeSubmit.js +47 -0
  800. package/dist/utils/safeArea.svelte.d.ts +10 -1
  801. package/dist/utils/safeArea.svelte.js +19 -11
  802. package/dist/utils/stateAttributes.d.ts +108 -0
  803. package/dist/utils/stateAttributes.js +78 -0
  804. package/dist/utils/swipeVelocity.d.ts +32 -0
  805. package/dist/utils/swipeVelocity.js +59 -0
  806. package/dist/utils/timer.svelte.d.ts +65 -2
  807. package/dist/utils/timer.svelte.js +159 -25
  808. package/dist/utils/trigger.d.ts +41 -0
  809. package/dist/utils/trigger.js +103 -0
  810. package/dist/utils/typeahead.d.ts +9 -0
  811. package/dist/utils/typeahead.js +21 -9
  812. package/dist/utils/useDndList.svelte.d.ts +1 -1
  813. package/dist/utils/useDndList.svelte.js +6 -23
  814. package/dist/utils/useFocusScope.svelte.d.ts +29 -0
  815. package/dist/utils/useFocusScope.svelte.js +189 -27
  816. package/dist/utils/useHoverAction.svelte.d.ts +44 -4
  817. package/dist/utils/useHoverAction.svelte.js +161 -51
  818. package/dist/utils/useKeyDown.svelte.d.ts +19 -2
  819. package/dist/utils/useKeyDown.svelte.js +19 -12
  820. package/dist/utils/useListNavigation.svelte.d.ts +94 -13
  821. package/dist/utils/useListNavigation.svelte.js +261 -35
  822. package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
  823. package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
  824. package/dist/utils/useNavigation.svelte.d.ts +36 -3
  825. package/dist/utils/useNavigation.svelte.js +699 -332
  826. package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
  827. package/dist/utils/usePressAndHold.svelte.js +191 -0
  828. package/dist/utils/useScrollLock.svelte.d.ts +20 -1
  829. package/dist/utils/useScrollLock.svelte.js +54 -13
  830. package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
  831. package/dist/utils/useSlidingIndicator.svelte.js +27 -5
  832. package/dist/utils/useTabBridge.svelte.d.ts +20 -0
  833. package/dist/utils/useTabBridge.svelte.js +109 -0
  834. package/dist/utils/values.d.ts +15 -0
  835. package/dist/utils/values.js +49 -0
  836. package/package.json +31 -2
  837. package/dist/generated/componentMcpRegistry.d.ts +0 -142
  838. package/dist/utils/useDrag.svelte.d.ts +0 -11
  839. package/dist/utils/useDrag.svelte.js +0 -55
@@ -10,6 +10,8 @@
10
10
  import { magnifyingGlassIcon } from '../Icons/magnifyingGlass.js';
11
11
  import { useDefaultColor } from '../Theme/theme.state.svelte.js';
12
12
  import { useI18n } from '../../i18n/context.svelte.js';
13
+ import { useLiveAnnouncer } from '../../utils/useLiveAnnouncer.svelte.js';
14
+ import { untrack } from 'svelte';
13
15
 
14
16
  let {
15
17
  items,
@@ -30,6 +32,9 @@
30
32
  showInput = true,
31
33
  shouldFilter = true,
32
34
  filter,
35
+ limit,
36
+ autoHighlight,
37
+ loop,
33
38
  onSelect,
34
39
  onHighlightChange,
35
40
  empty,
@@ -65,9 +70,13 @@
65
70
  );
66
71
 
67
72
  const id = $props.id();
73
+ const t = $derived(useI18n());
68
74
 
69
75
  const command = new CommandState<Value>({
70
76
  id,
77
+ get locale() {
78
+ return t.locale;
79
+ },
71
80
  get items() {
72
81
  return items;
73
82
  },
@@ -104,6 +113,15 @@
104
113
  get filter() {
105
114
  return filter;
106
115
  },
116
+ get limit() {
117
+ return limit;
118
+ },
119
+ get autoHighlight() {
120
+ return autoHighlight;
121
+ },
122
+ get loop() {
123
+ return loop;
124
+ },
107
125
  get onOpenChange() {
108
126
  return onOpenChange;
109
127
  },
@@ -123,12 +141,39 @@
123
141
 
124
142
  const classes = $derived(useCommandTheme(theme));
125
143
  const resolvedColor = $derived(useDefaultColor());
126
- const t = $derived(useI18n());
127
144
  const resolvedTitle = $derived(title ?? t.commandPalette);
128
145
  const resolvedPlaceholder = $derived(placeholder ?? t.commandPlaceholder);
129
146
  const resolvedEmpty = $derived(empty ?? t.noResults);
147
+ const resolvedEmptyText = $derived(typeof empty === 'string' ? empty : t.noResults);
148
+
149
+ // A Button's `onclick={open}` hands its click event over: the change is then a trigger press.
150
+ const slotPayload = {
151
+ open: (event?: Event) => command.open(event ? { reason: 'trigger-press', event } : undefined),
152
+ close: (event?: Event) => command.close(event ? { reason: 'close-press', event } : undefined)
153
+ };
130
154
 
131
- const slotPayload = { open: () => command.open(), close: () => command.close() };
155
+ // Result counts and the empty state reach screen readers through one persistent region,
156
+ // announced after typing settles (a region that mounts already filled is skipped).
157
+ const announcer = useLiveAnnouncer(id, 'live');
158
+ const resultCount = $derived(
159
+ command.visibleGroups.reduce((count, group) => count + group.items.length, 0)
160
+ );
161
+ $effect(() => {
162
+ const searching = searchState.value.trim() !== '';
163
+ const message = command.isEmpty
164
+ ? resolvedEmptyText
165
+ : searching
166
+ ? t.resultsCount(resultCount)
167
+ : '';
168
+ return untrack(() => {
169
+ if (!message) {
170
+ announcer.reset();
171
+ return;
172
+ }
173
+ const timer = setTimeout(() => announcer.announce(message), 250);
174
+ return () => clearTimeout(timer);
175
+ });
176
+ });
132
177
 
133
178
  // Dialog mode: the content mounts on each open and the Dialog does no focus management of
134
179
  // its own, so grab focus for the search input once the mount settles ({@attach} on the input).
@@ -157,6 +202,7 @@
157
202
  {size}
158
203
  {density}
159
204
  title={item ? undefined : it.label}
205
+ description={item || !it.description ? undefined : it.description}
160
206
  prefix={item ? undefined : it.icon}
161
207
  suffix={item || !it.shortcut ? undefined : shortcut}
162
208
  children={item ? customRow : undefined}
@@ -169,8 +215,8 @@
169
215
  id: command.optionId(it.value),
170
216
  'data-value': it.value,
171
217
  tabindex: -1,
172
- onpointermove: () => {
173
- if (!it.disabled) command.setHighlighted(it.value);
218
+ onpointermove: (event: PointerEvent) => {
219
+ if (!it.disabled) command.pointerHighlight(it.value, event);
174
220
  }
175
221
  }}
176
222
  />
@@ -188,7 +234,7 @@
188
234
  type="text"
189
235
  role="combobox"
190
236
  aria-autocomplete="list"
191
- aria-expanded="true"
237
+ aria-expanded={!command.isEmpty}
192
238
  aria-controls={command.listId}
193
239
  aria-activedescendant={command.highlighted !== undefined
194
240
  ? command.optionId(command.highlighted)
@@ -207,17 +253,12 @@
207
253
  {/if}
208
254
 
209
255
  <!-- The empty/no-results message lives OUTSIDE the listbox: a listbox may only own
210
- `option`/`group` nodes (aria-required-children), and a status message is not either of
211
- those. `role="status"` also announces it politely when filtering empties the list.
256
+ `option`/`group` nodes (aria-required-children). The live region below announces it.
212
257
  It takes the list's `flex-1` so the box keeps the exact same layout as a filled list. -->
213
258
  {#if command.isEmpty}
214
- <Slot
215
- render={resolvedEmpty}
216
- class="flex-1 {classes.empty({ size })}"
217
- attrs={{ role: 'status' }}
218
- payload={slotPayload}
219
- />
259
+ <Slot render={resolvedEmpty} class="flex-1 {classes.empty({ size })}" payload={slotPayload} />
220
260
  {/if}
261
+ <span class="sr-only" {...announcer.regionAttrs}>{announcer.message}</span>
221
262
 
222
263
  <!-- Kept mounted while empty (hidden) so `aria-controls`/`aria-activedescendant` ids on the
223
264
  combobox input always resolve; `hidden` keeps it out of the flex layout. -->
@@ -269,7 +310,8 @@
269
310
 
270
311
  {#if dialog}
271
312
  <Dialog
272
- bind:open={() => openState.value, command.setOpen}
313
+ open={openState.value}
314
+ onOpenChange={(next, details) => command.setOpen(next, details)}
273
315
  type="modal"
274
316
  title={resolvedTitle}
275
317
  theme={commandDialogTheme}
@@ -1 +1 @@
1
- export declare const commandDescription = "\n# Command Component\n\nA command palette: a searchable, keyboard-navigable list of grouped commands. Renders inline by\ndefault, or inside a modal Dialog (\u2318K style) with `dialog`.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Command } from 'entasis/command';\n\timport { calendarIcon } from 'entasis/icons/calendar';\n\n\tconst items = [\n\t\t{\n\t\t\theading: 'Suggestions',\n\t\t\titems: [\n\t\t\t\t{ value: 'calendar', label: 'Calendar', icon: calendarIcon },\n\t\t\t\t{ value: 'search-emoji', label: 'Search Emoji' },\n\t\t\t\t{ value: 'calculator', label: 'Calculator', disabled: true }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\theading: 'Settings',\n\t\t\titems: [\n\t\t\t\t{ value: 'profile', label: 'Profile', shortcut: '\u2318P' },\n\t\t\t\t{ value: 'settings', label: 'Settings', shortcut: '\u2318S' }\n\t\t\t]\n\t\t}\n\t];\n</script>\n\n<Command {items} onSelect={(value) => console.log(value)} />\n```\n\n## Dialog Mode (\u2318K palette)\n\n```svelte\n<Command dialog shortcut=\"k\" {items} onSelect={run}>\n\t{#snippet trigger({ open })}\n\t\t<Button variant=\"outline\" onclick={open}>Search... \u2318K</Button>\n\t{/snippet}\n\t{#snippet footer({ close })}\n\t\t<div class=\"border-neutral-muted text-neutral/70 border-t px-3 py-2 text-xs\">\n\t\t\t\u21B5 Select \u00B7 Esc Close\n\t\t</div>\n\t{/snippet}\n</Command>\n```\n\n## Props\n\n### Core Props\n- **items**: CommandGroup[] (required)\n - `CommandGroup`: `{ heading?: string; items: CommandItem[]; class?: string }`\n - `CommandItem`: `{ value: string; label: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }`\n - Items with `href` render as `<a>` and navigate on click/Enter.\n- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Typography and spacing scale.\n- **density**: 'compact' | 'normal' | 'comfortable' (default: 'normal') - Spacing density forwarded to the option rows (paddings, gaps, min-height).\n\n### Dialog Mode Props\n- **dialog**: boolean (default: false) - Render inside a modal Dialog instead of inline.\n- **open**: boolean (bindable, default: false) - Dialog open state.\n- **defaultOpen**: boolean (default: false) - Initial dialog state when open is omitted.\n- **onOpenChange**: (open: boolean) => void - Fires once after a component-owned open state change.\n- **shortcut**: string | false (default: false) - \u2318/Ctrl + key toggles the dialog (e.g. 'k').\n- **closeOnSelect**: boolean (default: true) - Close the dialog when an item is selected.\n\n### Selection Props\n- **value**: string | null (bindable, default: null) - Value of the selected command.\n- **defaultValue**: string | null (default: null) - Initial selected value when value is omitted.\n- **onValueChange**: (value: string | null) => void - Fires once when the selected value changes.\n Selecting the same command again is silent; use onSelect for every activation.\n\n### Search / Filtering Props\n- **search**: string (bindable, default: '') - Search query.\n- **defaultSearch**: string (default: '') - Initial query when search is omitted.\n- **onSearchChange**: (search: string) => void - Fires once when the query changes.\n- **placeholder**: string (default: 'Type a command or search...')\n- **showInput**: boolean (default: true) - Render the search input row.\n- **shouldFilter**: boolean (default: true) - Filter internally; set false to filter externally.\n- **filter**: (item, search) => boolean - Custom match predicate (defaults to case-insensitive\n substring match on label + keywords + value).\n\n### Event Props\n- **onSelect**: (value: string) => void - Activation callback: fires for every selected item (after the item's own onSelect), including a repeat selection of the already-selected command.\n- Callback-naming decision: Command owns a selected-value state, so the state change keeps the\n `value`/`defaultValue`/`onValueChange` trio and `onSelect` stays the pick event \u2014 the\n `onSelect` name is reserved for \"the user picked this item\", never for a value change.\n- **onHighlightChange**: (value: string | undefined) => void - Fires when the highlighted option moves.\n\n### Content Props (Slots)\n- **empty**: Slot (default: 'No results found.') - Empty-state content.\n- **item**: Snippet<[CommandItem]> - Custom row renderer, replaces icon/label/shortcut layout.\n- **trigger**: Slot<{ open, close }> - Dialog trigger; call `open()` on click. Dialog mode only.\n- **footer**: Slot<{ open, close }> - Bar rendered below the list (e.g. shortcut hints).\n\n### Advanced Props\n- **theme**: CommandThemeProps - Overrides for parts: command, inputWrapper, inputGroup, inputIcon,\n input, list, empty, group, groupHeading, separator, item, shortcut.\n- **class**: string - Classes for the palette root.\n\n## Keyboard\n\n- **ArrowDown / ArrowUp**: move the highlight, wrapping around both ends.\n- **Home / End**: jump to first / last selectable item.\n- **Enter**: select the highlighted item (navigates for href items).\n- **Escape**: closes the dialog (dialog mode).\n- **\u2318/Ctrl + shortcut**: toggles the dialog (dialog mode with `shortcut` set).\n\n## Accessibility\n\n- The input is a `role=\"combobox\"` with `aria-activedescendant` pointing at the highlighted option.\n- The list is a `role=\"listbox\"`; rows are `role=\"option\"` with `aria-selected`/`aria-disabled`.\n- Pointer movement highlights rows; the highlight re-anchors to the first result while typing.\n\n## Notes\n\n- Filtering happens per group; groups with no matching items are hidden and separators stay contiguous.\n- Dialog mode reuses the Dialog component (modal type) with padding stripped and its close button hidden.\n- Disabled items render dimmed and are skipped by keyboard navigation.\n\n## Motion\n\n- In `dialog` mode the palette rides the Dialog's **motion** slot: `commandDialogTheme.motion`\n drops it in from just above its resting place on `duration: 'fast'`.\n- Retune it with `<Theme components={{ dialog: { motion } }}>` or `setDialogTheme({ motion })`;\n reduced motion collapses it to 0.\n";
1
+ export declare const commandDescription = "\n# Command Component\n\nA command palette: a searchable, keyboard-navigable list of grouped commands. Renders inline by\ndefault, or inside a modal Dialog (\u2318K style) with `dialog`.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Command } from 'entasis/command';\n\timport { calendarIcon } from 'entasis/icons/calendar';\n\n\tconst items = [\n\t\t{\n\t\t\theading: 'Suggestions',\n\t\t\titems: [\n\t\t\t\t{ value: 'calendar', label: 'Calendar', icon: calendarIcon },\n\t\t\t\t{ value: 'search-emoji', label: 'Search Emoji' },\n\t\t\t\t{ value: 'calculator', label: 'Calculator', disabled: true }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\theading: 'Settings',\n\t\t\titems: [\n\t\t\t\t{ value: 'profile', label: 'Profile', shortcut: '\u2318P' },\n\t\t\t\t{ value: 'settings', label: 'Settings', shortcut: '\u2318S' }\n\t\t\t]\n\t\t}\n\t];\n</script>\n\n<Command {items} onSelect={(value) => console.log(value)} />\n```\n\n## Dialog Mode (\u2318K palette)\n\n```svelte\n<Command dialog shortcut=\"k\" {items} onSelect={run}>\n\t{#snippet trigger({ open })}\n\t\t<Button variant=\"outline\" onclick={open}>Search... \u2318K</Button>\n\t{/snippet}\n\t{#snippet footer({ close })}\n\t\t<div class=\"border-neutral-muted text-neutral/70 border-t px-3 py-2 text-xs\">\n\t\t\t\u21B5 Select \u00B7 Esc Close\n\t\t</div>\n\t{/snippet}\n</Command>\n```\n\n## Props\n\n### Core Props\n- **items**: CommandGroup[] (required)\n - `CommandGroup`: `{ heading?: string; items: CommandItem[]; class?: string }`\n - `CommandItem`: `{ value: string; label: string; description?: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }`. `description` renders as a second line under the label and is not searched.\n - Items with `href` render as `<a>` and navigate on click/Enter.\n- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Typography and spacing scale.\n- **density**: 'compact' | 'normal' | 'comfortable' (default: 'normal') - Spacing density forwarded to the option rows (paddings, gaps, min-height).\n\n### Dialog Mode Props\n- **dialog**: boolean (default: false) - Render inside a modal Dialog instead of inline.\n- **open**: boolean (bindable, default: false) - Dialog open state.\n- **defaultOpen**: boolean (default: false) - Initial dialog state when open is omitted.\n- **onOpenChange**: (open: boolean, details) => void - Runs before a library action opens or closes the dialog. `details` has `reason` ('trigger-press' for the shortcut and the trigger, 'item-press' after a selection, 'escape-key', 'outside-press', 'imperative-action'), `event`, `interaction` and `cancel()`; a cancelled change leaves the dialog as it was. External `open` updates are silent.\n- **shortcut**: string | false (default: false) - \u2318/Ctrl + key toggles the dialog (e.g. 'k').\n- **closeOnSelect**: boolean (default: true) - Close the dialog when an item is selected.\n\n### Selection Props\n- **value**: string | null (bindable, default: null) - Value of the selected command.\n- **defaultValue**: string | null (default: null) - Initial selected value when value is omitted.\n- **onValueChange**: (value: string | null) => void - Fires once when the selected value changes.\n Selecting the same command again is silent; use onSelect for every activation.\n\n### Search / Filtering Props\n- **search**: string (bindable, default: '') - Search query.\n- **defaultSearch**: string (default: '') - Initial query when search is omitted.\n- **onSearchChange**: (search: string) => void - Fires once when the query changes.\n- **placeholder**: string (default: 'Type a command or search...')\n- **showInput**: boolean (default: true) - Render the search input row.\n- **shouldFilter**: boolean (default: true) - Filter internally; set false to filter externally.\n- **limit**: number - Show at most this many items across groups; matching stops once the limit is reached (while `shouldFilter` is on).\n- **autoHighlight**: boolean | 'always' (default: 'always') - `'always'` keeps the first match highlighted, `true` only while a search is typed, `false` highlights nothing until an arrow key or the pointer moves it.\n- **loop**: 'wrap' | 'input' | false (default: 'wrap') - Past either end of the list: continue at the other end, land on no highlight first, or stop.\n- **filter**: (item, search) => boolean - Custom match predicate (defaults to a case- and\n accent-insensitive substring match on label + keywords + value, compared with\n `Intl.Collator` in the active I18n locale, so \"eclair\" finds \"\u00C9clair\"; in Spanish \"n\" does\n not find \"\u00F1\", which is a letter of its own there).\n\n### Event Props\n- **onSelect**: (value: string) => void - Activation callback: fires for every selected item (after the item's own onSelect), including a repeat selection of the already-selected command.\n- Callback-naming decision: Command owns a selected-value state, so the state change keeps the\n `value`/`defaultValue`/`onValueChange` trio and `onSelect` stays the pick event \u2014 the\n `onSelect` name is reserved for \"the user picked this item\", never for a value change.\n- **onHighlightChange**: (value: string | undefined) => void - Fires when the highlighted option moves.\n\n### Content Props (Slots)\n- **empty**: Slot (default: 'No results found.') - Empty-state content.\n- **item**: Snippet<[CommandItem]> - Custom row renderer, replaces icon/label/shortcut layout.\n- **trigger**: Slot<{ open, close }> - Dialog trigger; call `open()` on click. Dialog mode only.\n- **footer**: Slot<{ open, close }> - Bar rendered below the list (e.g. shortcut hints).\n\n### Advanced Props\n- **theme**: CommandThemeProps - Overrides for parts: command, inputWrapper, inputGroup, inputIcon,\n input, list, empty, group, groupHeading, separator, item, shortcut.\n- **class**: string - Classes for the palette root.\n\n## Keyboard\n\n- **ArrowDown / ArrowUp**: move the highlight, wrapping around both ends.\n- **Home / End**: jump to first / last selectable item.\n- **Enter**: select the highlighted item (navigates for href items).\n- **Escape**: closes the dialog (dialog mode); `onOpenChange` can cancel it.\n- **\u2318/Ctrl + shortcut**: toggles the dialog (dialog mode with `shortcut` set).\n\n## Accessibility\n\n- The input is a `role=\"combobox\"` with `aria-activedescendant` pointing at the highlighted option; `aria-expanded` follows the results (false while the search matches nothing and the list is hidden).\n- A persistent visually hidden live region (`role=\"status\"`) announces result counts and the empty state after typing settles; the visible empty message is plain text.\n- The list is a `role=\"listbox\"`; rows are `role=\"option\"` with `aria-selected`/`aria-disabled`.\n- Pointer movement highlights rows; the highlight re-anchors to the first result while typing.\n\n## Notes\n\n- Filtering happens per group; groups with no matching items are hidden and separators stay contiguous.\n- Dialog mode reuses the Dialog component (modal type) with padding stripped and its close button hidden.\n- Disabled items render dimmed and are skipped by keyboard navigation.\n\n## Motion\n\n- In `dialog` mode the palette rides the Dialog's **motion** slot: `commandDialogTheme.motion`\n drops it in from just above its resting place on `duration: 'fast'`.\n- Retune it with `<Theme components={{ dialog: { motion } }}>` or `setDialogTheme({ motion })`;\n reduced motion collapses it to 0.\n";
@@ -53,7 +53,7 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
53
53
  ### Core Props
54
54
  - **items**: CommandGroup[] (required)
55
55
  - \`CommandGroup\`: \`{ heading?: string; items: CommandItem[]; class?: string }\`
56
- - \`CommandItem\`: \`{ value: string; label: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }\`
56
+ - \`CommandItem\`: \`{ value: string; label: string; description?: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }\`. \`description\` renders as a second line under the label and is not searched.
57
57
  - Items with \`href\` render as \`<a>\` and navigate on click/Enter.
58
58
  - **size**: 'small' | 'normal' | 'large' (default: 'normal') - Typography and spacing scale.
59
59
  - **density**: 'compact' | 'normal' | 'comfortable' (default: 'normal') - Spacing density forwarded to the option rows (paddings, gaps, min-height).
@@ -62,7 +62,7 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
62
62
  - **dialog**: boolean (default: false) - Render inside a modal Dialog instead of inline.
63
63
  - **open**: boolean (bindable, default: false) - Dialog open state.
64
64
  - **defaultOpen**: boolean (default: false) - Initial dialog state when open is omitted.
65
- - **onOpenChange**: (open: boolean) => void - Fires once after a component-owned open state change.
65
+ - **onOpenChange**: (open: boolean, details) => void - Runs before a library action opens or closes the dialog. \`details\` has \`reason\` ('trigger-press' for the shortcut and the trigger, 'item-press' after a selection, 'escape-key', 'outside-press', 'imperative-action'), \`event\`, \`interaction\` and \`cancel()\`; a cancelled change leaves the dialog as it was. External \`open\` updates are silent.
66
66
  - **shortcut**: string | false (default: false) - ⌘/Ctrl + key toggles the dialog (e.g. 'k').
67
67
  - **closeOnSelect**: boolean (default: true) - Close the dialog when an item is selected.
68
68
 
@@ -79,8 +79,13 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
79
79
  - **placeholder**: string (default: 'Type a command or search...')
80
80
  - **showInput**: boolean (default: true) - Render the search input row.
81
81
  - **shouldFilter**: boolean (default: true) - Filter internally; set false to filter externally.
82
- - **filter**: (item, search) => boolean - Custom match predicate (defaults to case-insensitive
83
- substring match on label + keywords + value).
82
+ - **limit**: number - Show at most this many items across groups; matching stops once the limit is reached (while \`shouldFilter\` is on).
83
+ - **autoHighlight**: boolean | 'always' (default: 'always') - \`'always'\` keeps the first match highlighted, \`true\` only while a search is typed, \`false\` highlights nothing until an arrow key or the pointer moves it.
84
+ - **loop**: 'wrap' | 'input' | false (default: 'wrap') - Past either end of the list: continue at the other end, land on no highlight first, or stop.
85
+ - **filter**: (item, search) => boolean - Custom match predicate (defaults to a case- and
86
+ accent-insensitive substring match on label + keywords + value, compared with
87
+ \`Intl.Collator\` in the active I18n locale, so "eclair" finds "Éclair"; in Spanish "n" does
88
+ not find "ñ", which is a letter of its own there).
84
89
 
85
90
  ### Event Props
86
91
  - **onSelect**: (value: string) => void - Activation callback: fires for every selected item (after the item's own onSelect), including a repeat selection of the already-selected command.
@@ -105,12 +110,13 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
105
110
  - **ArrowDown / ArrowUp**: move the highlight, wrapping around both ends.
106
111
  - **Home / End**: jump to first / last selectable item.
107
112
  - **Enter**: select the highlighted item (navigates for href items).
108
- - **Escape**: closes the dialog (dialog mode).
113
+ - **Escape**: closes the dialog (dialog mode); \`onOpenChange\` can cancel it.
109
114
  - **⌘/Ctrl + shortcut**: toggles the dialog (dialog mode with \`shortcut\` set).
110
115
 
111
116
  ## Accessibility
112
117
 
113
- - The input is a \`role="combobox"\` with \`aria-activedescendant\` pointing at the highlighted option.
118
+ - The input is a \`role="combobox"\` with \`aria-activedescendant\` pointing at the highlighted option; \`aria-expanded\` follows the results (false while the search matches nothing and the list is hidden).
119
+ - A persistent visually hidden live region (\`role="status"\`) announces result counts and the empty state after typing settles; the visible empty message is plain text.
114
120
  - The list is a \`role="listbox"\`; rows are \`role="option"\` with \`aria-selected\`/\`aria-disabled\`.
115
121
  - Pointer movement highlights rows; the highlight re-anchors to the first result while typing.
116
122
 
@@ -3,6 +3,8 @@ import type { Density, Sizes } from '../../types/index.js';
3
3
  import type { Slot, WithSlot } from '../Slot/slot.js';
4
4
  import type { WithAttachments } from '../../types/props.js';
5
5
  import type { CommandThemeProps } from './command.theme.js';
6
+ import type { OpenChangeHandler } from '../../utils/openChange.js';
7
+ import type { ListLoop } from '../../utils/useListNavigation.svelte.js';
6
8
  /** A selectable command. `value` is the filter key + `onSelect` payload; `label` is the visible
7
9
  * (and searchable) text. For rich rows (avatars, etc.) pass an `item` snippet to `<Command>`. */
8
10
  export type CommandItem<Value extends string = string> = {
@@ -10,6 +12,8 @@ export type CommandItem<Value extends string = string> = {
10
12
  value: Value;
11
13
  /** Visible label. Also matched against the search query (alongside `value`/`keywords`). */
12
14
  label: string;
15
+ /** Secondary line under the label (a command's summary, a file's path). Not searched. */
16
+ description?: string;
13
17
  /** Leading icon — a string or a snippet (typically an icon snippet from `$lib/components/Icons`). */
14
18
  icon?: Slot;
15
19
  /** Trailing keybind hint, e.g. `⌘K`. */
@@ -36,10 +40,13 @@ export type CommandGroup<Value extends string = string> = {
36
40
  };
37
41
  /** Payload passed to the `trigger`, `footer`, and `empty` slots. */
38
42
  export type CommandSlotPayload = {
39
- /** Opens the palette dialog (dialog mode only). */
40
- open: () => void;
43
+ /**
44
+ * Opens the palette dialog (dialog mode only). Pass it straight to `onclick`: the click is
45
+ * reported as the change's event, with the reason `'trigger-press'`.
46
+ */
47
+ open: (event?: Event) => void;
41
48
  /** Closes the palette dialog (dialog mode only). */
42
- close: () => void;
49
+ close: (event?: Event) => void;
43
50
  };
44
51
  export type CommandProps<Value extends string = string> = WithAttachments<WithSlot<{
45
52
  /**
@@ -61,9 +68,14 @@ export type CommandProps<Value extends string = string> = WithAttachments<WithSl
61
68
  /** Initial dialog open state when `open` is omitted. */
62
69
  defaultOpen?: boolean;
63
70
  /**
64
- * Fires once after a library action changes the dialog state. External updates are silent.
71
+ * Called before a library action opens or closes the dialog, with the requested state and
72
+ * the change details: `reason` (`'trigger-press'` for the shortcut and the trigger,
73
+ * `'item-press'` after a selection, `'escape-key'`, `'outside-press'`,
74
+ * `'imperative-action'`…), the originating `event`, the `interaction` type and `cancel()`.
75
+ * Calling `details.cancel()` keeps the dialog as it is. External `open` updates are silent.
76
+ * Dialog mode only.
65
77
  */
66
- onOpenChange?: (open: boolean) => void;
78
+ onOpenChange?: OpenChangeHandler;
67
79
  /**
68
80
  * ⌘/Ctrl + this key toggles the dialog (e.g. `'k'`). `false` disables. Dialog mode only.
69
81
  */
@@ -110,9 +122,30 @@ export type CommandProps<Value extends string = string> = WithAttachments<WithSl
110
122
  */
111
123
  shouldFilter?: boolean;
112
124
  /**
113
- * Custom match predicate. Defaults to a case-insensitive substring match on `label` + `keywords` + `value`.
125
+ * Custom match predicate. Defaults to a case- and accent-insensitive substring match on
126
+ * `label` + `keywords` + `value`, compared with `Intl.Collator` in the active I18n locale,
127
+ * so "eclair" finds "Éclair".
114
128
  */
115
129
  filter?: (item: CommandItem<Value>, search: string) => boolean;
130
+ /**
131
+ * Shows at most this many items (across groups). Matching stops once the limit is reached,
132
+ * so the rest of a long list is never compared. Applies while `shouldFilter` is on.
133
+ */
134
+ limit?: number;
135
+ /**
136
+ * Which item is highlighted without keyboard input. `'always'` (default) keeps the first
137
+ * match highlighted; `true` does so only while a search is typed; `false` highlights
138
+ * nothing until an arrow key or the pointer moves it, so Enter does nothing until then.
139
+ * @default 'always'
140
+ */
141
+ autoHighlight?: boolean | 'always';
142
+ /**
143
+ * What moving past either end of the list does: `'wrap'` continues at the other end,
144
+ * `'input'` lands on no highlight first (focus stays in the input) and wraps from there,
145
+ * `false` stops at the end.
146
+ * @default 'wrap'
147
+ */
148
+ loop?: ListLoop;
116
149
  /**
117
150
  * Activation callback: fires for every selected item, after the item's own
118
151
  * `onSelect`, including when the same item is selected again.
@@ -1,18 +1,24 @@
1
1
  import type { Attachment } from 'svelte/attachments';
2
2
  import type { CommandGroup, CommandItem, CommandProps } from './command.props.js';
3
- type CommandOptions<Value extends string = string> = Pick<CommandProps<Value>, 'items' | 'dialog' | 'shortcut' | 'closeOnSelect' | 'shouldFilter' | 'filter' | 'onSelect' | 'onHighlightChange' | 'onOpenChange' | 'onValueChange' | 'onSearchChange'> & {
3
+ import { type OpenChangeDetails, type OpenChangeInit } from '../../utils/openChange.js';
4
+ type CommandOptions<Value extends string = string> = Pick<CommandProps<Value>, 'items' | 'dialog' | 'shortcut' | 'closeOnSelect' | 'shouldFilter' | 'filter' | 'limit' | 'autoHighlight' | 'loop' | 'onSelect' | 'onHighlightChange' | 'onOpenChange' | 'onValueChange' | 'onSearchChange'> & {
4
5
  id: string;
5
6
  isOpen: boolean;
6
7
  /** Live search query. */
7
8
  search: string;
8
9
  /** Value of the selected command, or null when nothing has been selected. */
9
10
  value: Value | null;
11
+ /** Locale the default filter compares text in: the active I18n locale. */
12
+ locale?: string;
10
13
  };
11
14
  declare const BoundCommandOptions: new <Options extends object>(options: Options) => Options;
12
15
  export declare class CommandState<Value extends string = string> extends BoundCommandOptions<CommandOptions<Value>> {
13
16
  private triggerElement;
14
17
  listId: string;
15
- /** Groups whose items match the current search query (or all groups when filtering is off). */
18
+ /**
19
+ * Groups whose items match the current search query (or all groups when filtering is off),
20
+ * cut off after `limit` items.
21
+ */
16
22
  filteredGroups: CommandGroup<Value>[];
17
23
  /** Groups that actually render — those with at least one (possibly disabled) item. Filtering
18
24
  * here keeps separators contiguous (no orphan separator before the first visible group when an
@@ -24,22 +30,41 @@ export declare class CommandState<Value extends string = string> extends BoundCo
24
30
  /** Keyboard navigation: value-driven virtual focus (see useListNavigation). */
25
31
  nav: {
26
32
  readonly highlighted: Value | undefined;
33
+ readonly highlightDetails: import("../../utils/useListNavigation.svelte.js").HighlightDetails;
27
34
  readonly activeDescendant: string | undefined;
28
- setHighlighted: (value: Value | undefined) => void;
29
- highlight: (value: Value | undefined) => void;
30
- move: (delta: number) => void;
31
- first: () => void;
32
- last: () => void;
35
+ optionId: (value: Value) => string | undefined;
36
+ typeahead: {
37
+ readonly isTyping: boolean;
38
+ reset: () => void;
39
+ } | null;
40
+ setHighlighted: (value: Value | undefined, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
41
+ pointerHighlight: (value: Value | undefined, event?: MouseEvent | PointerEvent) => boolean;
42
+ highlight: (value: Value | undefined, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
43
+ move: (delta: number, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
44
+ first: (details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
45
+ last: (details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
46
+ reanchor: () => void;
47
+ scrollToHighlighted: () => void;
33
48
  onKeydown: (event: KeyboardEvent) => void;
34
49
  };
35
50
  /** Value of the currently highlighted (keyboard-active) option. */
36
51
  get highlighted(): Value | undefined;
37
52
  constructor(options: CommandOptions<Value>);
38
53
  trigger: Attachment<HTMLElement>;
54
+ /** DOM id of a command's option row, unique per value. */
39
55
  optionId: (value: string) => string;
56
+ /**
57
+ * Case- and accent-insensitive substring match on `label`, `keywords` and `value`, compared in
58
+ * the active locale.
59
+ */
40
60
  defaultMatch: (item: CommandItem<Value>, query: string) => boolean;
41
61
  /** Set the highlight without scrolling — used by pointermove on rows. */
42
62
  setHighlighted: (value: Value | undefined) => void;
63
+ /**
64
+ * Pointer hover highlight: ignores moves that did not change the pointer position (Safari
65
+ * fires one when keyboard scrolling slides a row under a resting pointer).
66
+ */
67
+ pointerHighlight: (value: Value | undefined, event?: MouseEvent | PointerEvent) => void;
43
68
  /** Move the highlight by `delta` selectable items, wrapping around both ends. */
44
69
  move: (delta: number) => void;
45
70
  select: (item: CommandItem<Value>) => void;
@@ -50,10 +75,14 @@ export declare class CommandState<Value extends string = string> extends BoundCo
50
75
  selectHighlighted: () => boolean;
51
76
  setValue: (value: Value | null) => void;
52
77
  setSearch: (search: string) => void;
53
- open: () => void;
54
- close: () => void;
55
- toggle: () => void;
56
- setOpen: (open: boolean) => void;
78
+ open: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
79
+ close: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
80
+ toggle: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
81
+ /**
82
+ * Asks to open or close the palette. `onOpenChange(open, details)` runs first and may cancel;
83
+ * returns `false` when it did.
84
+ */
85
+ setOpen: (open: boolean, input?: OpenChangeDetails | OpenChangeInit | Event) => boolean;
57
86
  onKeydown: (event: KeyboardEvent) => void;
58
87
  }
59
88
  export {};
@@ -1,6 +1,9 @@
1
+ import { createItemMatcher } from '../../utils/match.js';
1
2
  import { createBindableStateClass } from '../../utils/state.svelte.js';
2
3
  import { useListNavigation } from '../../utils/useListNavigation.svelte.js';
3
4
  import { untrack } from 'svelte';
5
+ import { elementById } from '../../utils/id.js';
6
+ import { requestOpenChange, resolveOpenChangeDetails } from '../../utils/openChange.js';
4
7
  // `bind()` copies the option accessors onto the instance; this typed base is what declares
5
8
  // them on `this`. A generic class cannot call a mixin factory in its `extends` clause, and
6
9
  // merging an interface into the class declaration would be unsafe declaration merging.
@@ -8,15 +11,35 @@ const BoundCommandOptions = createBindableStateClass();
8
11
  export class CommandState extends BoundCommandOptions {
9
12
  triggerElement = $state(null);
10
13
  listId = $derived(`${this.id}-list`);
11
- /** Groups whose items match the current search query (or all groups when filtering is off). */
14
+ /**
15
+ * Groups whose items match the current search query (or all groups when filtering is off),
16
+ * cut off after `limit` items.
17
+ */
12
18
  filteredGroups = $derived.by(() => {
13
19
  const query = this.search.trim();
14
- if (!this.shouldFilter || query === '')
20
+ const limit = this.shouldFilter ? this.limit : undefined;
21
+ if (!this.shouldFilter || (query === '' && limit === undefined))
15
22
  return this.items;
16
23
  const match = this.filter ?? this.defaultMatch;
17
- return this.items
18
- .map((group) => ({ ...group, items: group.items.filter((item) => match(item, query)) }))
19
- .filter((group) => group.items.length > 0);
24
+ // Matching stops once the limit is reached: the rest of a long list is never compared.
25
+ let remaining = limit !== undefined && limit >= 0 ? limit : Infinity;
26
+ const groups = [];
27
+ for (const group of this.items) {
28
+ if (remaining <= 0)
29
+ break;
30
+ const kept = [];
31
+ for (const item of group.items) {
32
+ if (remaining <= 0)
33
+ break;
34
+ if (query !== '' && !match(item, query))
35
+ continue;
36
+ kept.push(item);
37
+ remaining -= 1;
38
+ }
39
+ if (kept.length > 0)
40
+ groups.push({ ...group, items: kept });
41
+ }
42
+ return groups;
20
43
  });
21
44
  /** Groups that actually render — those with at least one (possibly disabled) item. Filtering
22
45
  * here keeps separators contiguous (no orphan separator before the first visible group when an
@@ -26,12 +49,20 @@ export class CommandState extends BoundCommandOptions {
26
49
  navItems = $derived(this.visibleGroups.flatMap((group) => group.items).filter((item) => !item.disabled));
27
50
  isEmpty = $derived(this.visibleGroups.length === 0);
28
51
  /** Keyboard navigation: value-driven virtual focus (see useListNavigation). */
29
- nav = useListNavigation({
30
- values: () => this.navItems.map((item) => item.value),
31
- optionId: (value) => this.optionId(value),
32
- onHighlightChange: (value) => this.onHighlightChange?.(value),
33
- onSelect: (value) => this.selectValue(value)
34
- });
52
+ nav = ((state) => useListNavigation({
53
+ values: () => state.navItems.map((item) => item.value),
54
+ get autoHighlight() {
55
+ return state.autoHighlight ?? 'always';
56
+ },
57
+ get loop() {
58
+ return state.loop ?? 'wrap';
59
+ },
60
+ query: () => state.search,
61
+ // Each value gets its own numbered id, so values such as a.b and a_b never collide.
62
+ idPrefix: `${state.id}-opt`,
63
+ onHighlightChange: (value) => state.onHighlightChange?.(value),
64
+ onSelect: (value) => state.selectValue(value)
65
+ }))(this);
35
66
  /** Value of the currently highlighted (keyboard-active) option. */
36
67
  get highlighted() {
37
68
  return this.nav.highlighted;
@@ -46,7 +77,7 @@ export class CommandState extends BoundCommandOptions {
46
77
  const onKeydown = (event) => {
47
78
  if (event.key.toLowerCase() === key && (event.metaKey || event.ctrlKey)) {
48
79
  event.preventDefault();
49
- untrack(() => this.toggle());
80
+ untrack(() => this.toggle({ reason: 'trigger-press', event }));
50
81
  }
51
82
  };
52
83
  window.addEventListener('keydown', onKeydown);
@@ -70,15 +101,24 @@ export class CommandState extends BoundCommandOptions {
70
101
  };
71
102
  });
72
103
  };
73
- optionId = (value) => `${this.id}-opt-${value.replace(/[^a-zA-Z0-9_-]/g, '_')}`;
74
- defaultMatch = (item, query) => {
75
- const haystack = `${item.label} ${item.keywords?.join(' ') ?? ''} ${item.value}`.toLowerCase();
76
- return haystack.includes(query.toLowerCase());
77
- };
104
+ /** DOM id of a command's option row, unique per value. */
105
+ optionId = (value) => this.nav.optionId(value);
106
+ /**
107
+ * Case- and accent-insensitive substring match on `label`, `keywords` and `value`, compared in
108
+ * the active locale.
109
+ */
110
+ defaultMatch = $derived(createItemMatcher({ locale: this.locale }));
78
111
  /** Set the highlight without scrolling — used by pointermove on rows. */
79
112
  setHighlighted = (value) => {
80
113
  this.nav.setHighlighted(value);
81
114
  };
115
+ /**
116
+ * Pointer hover highlight: ignores moves that did not change the pointer position (Safari
117
+ * fires one when keyboard scrolling slides a row under a resting pointer).
118
+ */
119
+ pointerHighlight = (value, event) => {
120
+ this.nav.pointerHighlight(value, event);
121
+ };
82
122
  /** Move the highlight by `delta` selectable items, wrapping around both ends. */
83
123
  move = (delta) => {
84
124
  this.nav.move(delta);
@@ -92,7 +132,7 @@ export class CommandState extends BoundCommandOptions {
92
132
  item.onSelect?.(item.value);
93
133
  this.onSelect?.(item.value);
94
134
  if (this.dialog && this.closeOnSelect)
95
- this.close();
135
+ this.close({ reason: 'item-press' });
96
136
  };
97
137
  /** Select an item by value. Link items are clicked so navigation happens natively
98
138
  * (SvelteKit intercepts the click); their own `onclick` runs `select()`. */
@@ -101,7 +141,7 @@ export class CommandState extends BoundCommandOptions {
101
141
  if (!item)
102
142
  return;
103
143
  if (item.href)
104
- document.getElementById(this.optionId(item.value))?.click();
144
+ elementById(this.triggerElement, this.optionId(item.value))?.click();
105
145
  else
106
146
  this.select(item);
107
147
  };
@@ -124,20 +164,27 @@ export class CommandState extends BoundCommandOptions {
124
164
  this.search = search;
125
165
  this.onSearchChange?.(search);
126
166
  };
127
- open = () => {
128
- this.setOpen(true);
167
+ open = (input) => {
168
+ this.setOpen(true, input);
129
169
  };
130
- close = () => {
131
- this.setOpen(false);
170
+ close = (input) => {
171
+ this.setOpen(false, input);
132
172
  };
133
- toggle = () => {
134
- this.setOpen(!this.isOpen);
173
+ toggle = (input) => {
174
+ this.setOpen(!this.isOpen, input);
135
175
  };
136
- setOpen = (open) => {
176
+ /**
177
+ * Asks to open or close the palette. `onOpenChange(open, details)` runs first and may cancel;
178
+ * returns `false` when it did.
179
+ */
180
+ setOpen = (open, input) => {
137
181
  if (open === this.isOpen)
138
- return;
182
+ return true;
183
+ const details = resolveOpenChangeDetails(input, { reason: 'imperative-action' });
184
+ if (!requestOpenChange(this.onOpenChange, open, details))
185
+ return false;
139
186
  this.isOpen = open;
140
- this.onOpenChange?.(open);
187
+ return true;
141
188
  };
142
189
  onKeydown = (event) => {
143
190
  this.nav.onKeydown(event);
@@ -1,4 +1,3 @@
1
- import { selectedSoft } from '../Theme/theme.recipes.js';
2
1
  import { setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
3
2
  import { cva } from '../../utils/cva/index.js';
4
3
  // A palette is sized by whatever hosts it — a `max-w-xl` dialog, an 18rem mention popover, an
@@ -117,8 +116,10 @@ const defaultCommandItem = cva({
117
116
  },
118
117
  highlighted: {
119
118
  // The keyboard cursor is a persistent selection, not a hover: it paints the shared soft
120
- // selected recipe in the current role, like a sidebar row or a toggle button.
121
- true: selectedSoft,
119
+ // selected fill in the current role, like a sidebar row or a toggle button. The row keeps
120
+ // its own ink: the neutral muted-readable ink is dimmer than an unhighlighted row in dark
121
+ // mode, which made the active row look disabled.
122
+ true: 'bg-selected-muted',
122
123
  false: ''
123
124
  }
124
125
  },