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
@@ -7,7 +7,9 @@
7
7
  import type { ConfirmationProps } from './confirmation.props.js';
8
8
  import { useConfirmationTheme } from './confirmation.theme.js';
9
9
  import { useTheme } from '../Theme/theme.state.svelte.js';
10
- import { onMount, tick } from 'svelte';
10
+ import { onMount } from 'svelte';
11
+ import { composeHandlers } from '../../utils/handlers.js';
12
+ import type { OpenChangeDetails } from '../../utils/openChange.js';
11
13
  let { theme }: ConfirmationProps = $props();
12
14
 
13
15
  let confirmations = $state<ConfirmationState[]>([]);
@@ -15,45 +17,84 @@
15
17
  const classes = $derived(useConfirmationTheme(theme));
16
18
  const themeState = useTheme();
17
19
 
18
- // Mounted first, then opened on the next tick so the Dialog plays its enter transition.
19
- onMount(() =>
20
- registerConfirmationHost(themeState, {
20
+ // Requests the user has not answered yet. A plain set, not `$state`: the unmount teardown
21
+ // reads it, and a `$state` read in teardown can return the value from before the last change.
22
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity -- read in teardown, never rendered
23
+ const unanswered = new Set<(outcome: ConfirmationOutcome) => void>();
24
+ // Set by the unmount teardown; a plain flag for the same reason.
25
+ let unmounted = false;
26
+
27
+ // Each request mounts its Dialog open: the Dialog itself renders once mounted, so it still
28
+ // plays its enter transition and reports `onAfterOpen`.
29
+ onMount(() => {
30
+ const unregister = registerConfirmationHost(themeState, {
21
31
  request: (detail) =>
22
- new Promise<ConfirmationOutcome>((settle) => {
32
+ new Promise<ConfirmationOutcome>((resolve) => {
33
+ const settle = (outcome: ConfirmationOutcome) => {
34
+ unanswered.delete(settle);
35
+ resolve(outcome);
36
+ };
37
+ unanswered.add(settle);
23
38
  const confirmationState = Object.assign({}, detail, {
24
- isOpen: false,
39
+ isOpen: true,
25
40
  loading: false,
26
41
  settle
27
42
  }) satisfies ConfirmationState;
28
43
  confirmations.push(confirmationState);
29
- tick().then(() => {
30
- confirmations.forEach((a) => {
31
- if (a.id === confirmationState.id) {
32
- a.isOpen = true;
33
- }
34
- });
35
- });
36
44
  })
37
- })
38
- );
45
+ });
46
+ return () => {
47
+ unmounted = true;
48
+ unregister();
49
+ // Nobody can answer these dialogs any more: settle them as declined so an
50
+ // `await confirmation()` never hangs on a host that left (a layout remount). A request
51
+ // whose `onConfirm` is running was answered, and settles when that finishes.
52
+ for (const settle of [...unanswered]) settle({ confirmed: false });
53
+ };
54
+ });
39
55
 
40
- const actionConfirmation =
41
- (
42
- confirmation: ConfirmationState,
43
- continued: boolean,
44
- onclick?: ButtonProps['onclick']
45
- ): NonNullable<ButtonProps['onclick']> =>
46
- async (event) => {
47
- onclick?.(event);
48
- let result;
49
- if (continued) {
50
- const res = confirmation.onConfirm?.();
51
- confirmation.loading = !!res && res instanceof Promise;
52
- result = continued && res ? await res : undefined;
56
+ // The button's own `onclick` runs first; calling `event.preventDefault()` there keeps the
57
+ // question open.
58
+ const actionConfirmation = (
59
+ confirmation: ConfirmationState,
60
+ continued: boolean,
61
+ onclick?: ButtonProps['onclick']
62
+ ): NonNullable<ButtonProps['onclick']> =>
63
+ composeHandlers(onclick, async () => {
64
+ let result: unknown;
65
+ if (continued && confirmation.onConfirm) {
66
+ // The user answered: while `onConfirm` runs, an unmount must not decline the request
67
+ // (the action may be what navigated away), so it settles with the action's outcome.
68
+ unanswered.delete(confirmation.settle);
69
+ // A throwing or rejected `onConfirm` ends the loading state and keeps the dialog
70
+ // open, so Cancel works again; the error still propagates like any handler error.
71
+ try {
72
+ const pending = confirmation.onConfirm();
73
+ if (pending instanceof Promise) confirmation.loading = true;
74
+ result = await pending;
75
+ } catch (error) {
76
+ // The question is open again, unless the host left and nobody can answer it.
77
+ if (unmounted) confirmation.settle({ confirmed: false });
78
+ else unanswered.add(confirmation.settle);
79
+ throw error;
80
+ } finally {
81
+ confirmation.loading = false;
82
+ }
53
83
  }
54
- confirmation.loading = false;
55
84
  confirmation.isOpen = false;
56
85
  confirmation.settle({ confirmed: continued, result });
86
+ });
87
+ // Escape (and the Android Back gesture) answers a question as Cancel, unless an action is
88
+ // running: then the dialog stays, like its buttons, until it finishes. Outside presses never
89
+ // answer it. The state it ends in is the one `confirmation.settle` reports.
90
+ const cancelOnEscape =
91
+ (confirmation: ConfirmationState) => (open: boolean, details: OpenChangeDetails) => {
92
+ if (open) return;
93
+ if (confirmation.loading) {
94
+ details.cancel();
95
+ return;
96
+ }
97
+ confirmation.settle({ confirmed: false });
57
98
  };
58
99
  // A Dialog sizes to its content, so it takes the device decision from JS rather than CSS — and
59
100
  // from the SAME value the Dialog itself used to pick sheet-versus-floating, instead of a second
@@ -68,9 +109,9 @@
68
109
  onAfterClose={() => {
69
110
  confirmations = confirmations.filter((a) => a.id !== confirmation.id);
70
111
  }}
71
- closable={false}
112
+ closeButton={false}
72
113
  closeOnClickOutside={false}
73
- closeOnEscape={false}
114
+ onOpenChange={cancelOnEscape(confirmation)}
74
115
  bind:open={confirmation.isOpen}
75
116
  title={confirmation.title}
76
117
  description={confirmation.description}
@@ -1 +1 @@
1
- export declare const confirmationDescription = "\nThe confirmation function displays a modal dialog that asks the user to confirm or cancel an action. It returns a Promise that resolves with an object indicating whether the user confirmed or cancelled.\n\n**Usage:**\n```typescript\nimport { confirmation } from 'entasis/confirmation';\n\nconst { confirmed, result } = await confirmation({\n title: 'Delete Item',\n description: 'Are you sure you want to delete this item? This action cannot be undone.',\n confirm: 'Delete',\n cancel: 'Cancel',\n onConfirm: async () => {\n // Optional: Async function that runs when user confirms\n await deleteItem();\n return 'Item deleted successfully';\n }\n});\n\nif (confirmed) {\n console.log('User confirmed:', result); // result is the return value of onConfirm, or undefined\n} else {\n console.log('User cancelled');\n}\n```\n\n**Parameters:**\n- `title` (string, required): The title displayed in the confirmation dialog\n- `description` (string, required): The description/message shown in the dialog\n- `confirm` (string | object, required): The confirm button text, or an object with `text` and Button props\n- `cancel` (string | object, required): The cancel button text, or an object with `text` and Button props\n- `onConfirm` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as `result` in the resolved promise\n\n**Returns:**\nA Promise that resolves to:\n- `{ confirmed: true, result: R }` if the user confirmed (where R is the return type of onConfirm, or void)\n- `{ confirmed: false, result: undefined }` if the user cancelled\n\n**Notes:**\n- The dialog is modal and prevents interaction with the rest of the page until the user responds\n- If `onConfirm` is provided, the confirm button shows a loading state while the function executes\n- The dialog cannot be closed by clicking outside or pressing Escape (user must click a button)\n- Requests made before any `<Confirmation />` is mounted are queued and served by the first one that mounts\n- With several mounted, the most recently mounted one serves; when it unmounts the previous one takes over again\n";
1
+ export declare const confirmationDescription = "\nThe confirmation function displays a modal dialog that asks the user to confirm or cancel an action. It returns a Promise that resolves with an object indicating whether the user confirmed or cancelled.\n\n**Usage:**\n```typescript\nimport { confirmation } from 'entasis/confirmation';\n\nconst { confirmed, result } = await confirmation({\n title: 'Delete Item',\n description: 'Are you sure you want to delete this item? This action cannot be undone.',\n confirm: 'Delete',\n cancel: 'Cancel',\n onConfirm: async () => {\n // Optional: Async function that runs when user confirms\n await deleteItem();\n return 'Item deleted successfully';\n }\n});\n\nif (confirmed) {\n console.log('User confirmed:', result); // result is the return value of onConfirm, or undefined\n} else {\n console.log('User cancelled');\n}\n```\n\n**Parameters:**\n- `title` (string, required): The title displayed in the confirmation dialog\n- `description` (string, required): The description/message shown in the dialog\n- `confirm` (string | object, required): The confirm button text, or an object with `text` and Button props\n- `cancel` (string | object, required): The cancel button text, or an object with `text` and Button props\n- `onConfirm` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as `result` in the resolved promise. If it throws or rejects, the loading state ends and the dialog stays open, so the user can retry or cancel; the error still propagates like any event handler error, so handle it inside `onConfirm` (for example with a toast)\n\n**Returns:**\nA Promise that resolves to:\n- `{ confirmed: true, result: R }` if the user confirmed (where R is the return type of onConfirm, or void)\n- `{ confirmed: false, result: undefined }` if the user cancelled, or if the `<Confirmation />` serving the request unmounts before an answer (or while a failed `onConfirm` has left the question open)\n\n**Notes:**\n- The dialog is a modal `role=\"alertdialog\"` named by `title` and described by `description`, and prevents interaction with the rest of the page until the user responds\n- If `onConfirm` is provided, the confirm button shows a loading state while the function executes\n- A press outside the dialog does nothing; Escape (and the Android Back gesture) answers it as Cancel: the promise resolves with `{ confirmed: false }` without running `onConfirm` or the Cancel button's `onclick`. While `onConfirm` is running, Escape is ignored like the buttons are. There is no close button, visible or hidden: the two answers are the only controls\n- Requests made before any `<Confirmation />` is mounted are queued and served by the first one that mounts\n- With several mounted, the most recently mounted one serves; when it unmounts the previous one takes over again\n- When a `<Confirmation />` unmounts, every request the user has not answered resolves as `{ confirmed: false }`, so an `await confirmation()` never hangs. A request whose `onConfirm` is already running (it may be what navigated away) still resolves with `{ confirmed: true, result }` when it finishes, or `{ confirmed: false }` if it fails\n";
@@ -29,17 +29,18 @@ if (confirmed) {
29
29
  - \`description\` (string, required): The description/message shown in the dialog
30
30
  - \`confirm\` (string | object, required): The confirm button text, or an object with \`text\` and Button props
31
31
  - \`cancel\` (string | object, required): The cancel button text, or an object with \`text\` and Button props
32
- - \`onConfirm\` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as \`result\` in the resolved promise
32
+ - \`onConfirm\` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as \`result\` in the resolved promise. If it throws or rejects, the loading state ends and the dialog stays open, so the user can retry or cancel; the error still propagates like any event handler error, so handle it inside \`onConfirm\` (for example with a toast)
33
33
 
34
34
  **Returns:**
35
35
  A Promise that resolves to:
36
36
  - \`{ confirmed: true, result: R }\` if the user confirmed (where R is the return type of onConfirm, or void)
37
- - \`{ confirmed: false, result: undefined }\` if the user cancelled
37
+ - \`{ confirmed: false, result: undefined }\` if the user cancelled, or if the \`<Confirmation />\` serving the request unmounts before an answer (or while a failed \`onConfirm\` has left the question open)
38
38
 
39
39
  **Notes:**
40
- - The dialog is modal and prevents interaction with the rest of the page until the user responds
40
+ - The dialog is a modal \`role="alertdialog"\` named by \`title\` and described by \`description\`, and prevents interaction with the rest of the page until the user responds
41
41
  - If \`onConfirm\` is provided, the confirm button shows a loading state while the function executes
42
- - The dialog cannot be closed by clicking outside or pressing Escape (user must click a button)
42
+ - A press outside the dialog does nothing; Escape (and the Android Back gesture) answers it as Cancel: the promise resolves with \`{ confirmed: false }\` without running \`onConfirm\` or the Cancel button's \`onclick\`. While \`onConfirm\` is running, Escape is ignored like the buttons are. There is no close button, visible or hidden: the two answers are the only controls
43
43
  - Requests made before any \`<Confirmation />\` is mounted are queued and served by the first one that mounts
44
44
  - With several mounted, the most recently mounted one serves; when it unmounts the previous one takes over again
45
+ - When a \`<Confirmation />\` unmounts, every request the user has not answered resolves as \`{ confirmed: false }\`, so an \`await confirmation()\` never hangs. A request whose \`onConfirm\` is already running (it may be what navigated away) still resolves with \`{ confirmed: true, result }\` when it finishes, or \`{ confirmed: false }\` if it fails
45
46
  `;
@@ -1,9 +1,11 @@
1
1
  <script lang="ts">
2
2
  import { createBindableValue } from '../../utils/state.svelte.js';
3
- import { tick } from 'svelte';
3
+ import { onDestroy, tick } from 'svelte';
4
4
  import PopupMenu from '../PopupMenu/PopupMenu.svelte';
5
5
  import type { ContextMenuProps } from './contextMenu.props.js';
6
+ import type { PopupMenuProps } from '../PopupMenu/popupMenu.props.js';
6
7
  import { useContextMenuTheme } from './contextMenu.theme.js';
8
+ import { createOpenChangeDetails, type OpenChangeDetails } from '../../utils/openChange.js';
7
9
 
8
10
  let {
9
11
  items,
@@ -21,6 +23,14 @@
21
23
  ...attachments
22
24
  }: ContextMenuProps = $props();
23
25
  const classes = $derived(useContextMenuTheme(theme));
26
+ // How long a touch holds before it opens the menu, how far the finger may drift meanwhile (and
27
+ // how far from the anchor a second right-click still counts as the same spot), and how long
28
+ // after the finger lifts a native `contextmenu` is still taken for part of that touch.
29
+ const LONG_PRESS_MS = 500;
30
+ const GESTURE_TOLERANCE = 8;
31
+ const TOUCH_GESTURE_MS = 700;
32
+ // How long after the press that closed the menu its `contextmenu` still counts as part of it.
33
+ const SECONDARY_PRESS_MS = 1000;
24
34
  const openState = createBindableValue(
25
35
  () => open,
26
36
  (next) => {
@@ -33,24 +43,92 @@
33
43
  // pointer rather than the target element.
34
44
  let reference = $state<{ getBoundingClientRect: () => DOMRect } | null>(null);
35
45
 
36
- function setOpen(nextOpen: boolean) {
46
+ // Below and after the pointer unless `popup.position` says otherwise. A responsive record keeps
47
+ // that default below its first breakpoint, where Popover would otherwise fall back to `top`.
48
+ const position = $derived.by((): PopupMenuProps['position'] => {
49
+ const requested = popup?.position;
50
+ if (typeof requested !== 'object' || requested === null) return requested ?? 'bottom-start';
51
+ return { ...requested, xs: requested.xs ?? 'bottom-start' };
52
+ });
53
+
54
+ // Shifted back into the layout viewport, not the visual one, so the menu stays where it
55
+ // opened while a pinch-zoomed page pans. Submenus keep the default.
56
+ const collisionBoundary = $derived(popup?.collisionBoundary ?? 'layoutViewport');
57
+
58
+ // Also the PopupMenu's `onOpenChange`: its details (reason, event, `cancel()`) pass through.
59
+ function setOpen(nextOpen: boolean, details: OpenChangeDetails) {
37
60
  if (openState.value === nextOpen) return;
61
+ onOpenChange?.(nextOpen, details);
62
+ if (details.isCanceled) return;
63
+ if (!nextOpen) noteSecondaryPress(details);
38
64
  openState.value = nextOpen;
39
- onOpenChange?.(nextOpen);
40
65
  }
41
66
 
42
- async function openAt(x: number, y: number) {
67
+ // A right-click on the open menu's anchor reaches the page as a `pointerdown` first, which the
68
+ // layer stack takes for an outside press and closes the menu with, before `contextmenu` fires.
69
+ // That close is remembered so the `contextmenu` that follows is read as the second right-click.
70
+ let secondaryDismissal: { x: number; y: number; at: number } | null = null;
71
+ function noteSecondaryPress({ reason, event }: OpenChangeDetails) {
72
+ secondaryDismissal = null;
73
+ if (reason !== 'outside-press' || !event) return;
74
+ const press = event as Partial<PointerEvent>;
75
+ if (press.pointerType === 'touch' || (press.button !== 2 && !press.ctrlKey)) return;
76
+ if (press.clientX === undefined || press.clientY === undefined) return;
77
+ secondaryDismissal = { x: press.clientX, y: press.clientY, at: event.timeStamp };
78
+ }
79
+ // Whether this `contextmenu` follows the press that just closed the menu at the same spot.
80
+ function followsDismissal(event: MouseEvent) {
81
+ const dismissal = secondaryDismissal;
82
+ secondaryDismissal = null;
83
+ return (
84
+ dismissal !== null &&
85
+ event.timeStamp - dismissal.at <= SECONDARY_PRESS_MS &&
86
+ Math.hypot(event.clientX - dismissal.x, event.clientY - dismissal.y) <= GESTURE_TOLERANCE
87
+ );
88
+ }
89
+
90
+ // The point the open menu is anchored to, so a second right-click near it closes the menu.
91
+ let anchorPoint: { x: number; y: number } | null = null;
92
+ // Whether the open in progress came from the keyboard. The PopupMenu receives `open` as a
93
+ // controlled prop, so it sees every open as one made from code and cannot read the key itself:
94
+ // a keyboard open asks for the first row, a pointer open leaves the menu container focused.
95
+ let keyboardOpen = $state(false);
96
+
97
+ async function openAt(x: number, y: number, event: Event) {
43
98
  // Close first so a second request re-mounts the menu at the new point.
44
- setOpen(false);
99
+ setOpen(false, createOpenChangeDetails({ reason: 'trigger-press', event }));
45
100
  await tick();
101
+ anchorPoint = { x, y };
102
+ keyboardOpen = event instanceof KeyboardEvent;
46
103
  reference = { getBoundingClientRect: () => new DOMRect(x, y, 0, 0) };
47
- setOpen(true);
104
+ setOpen(true, createOpenChangeDetails({ reason: 'trigger-press', event }));
48
105
  }
49
106
 
107
+ // A press this close to where the open menu was anchored is the same spot again.
108
+ const sameSpot = (x: number, y: number) =>
109
+ anchorPoint !== null && Math.hypot(x - anchorPoint.x, y - anchorPoint.y) <= GESTURE_TOLERANCE;
110
+
50
111
  function handleContextMenu(event: MouseEvent) {
51
112
  if (disabled) return;
52
113
  event.preventDefault();
53
- void openAt(event.clientX, event.clientY);
114
+ // Android Chrome follows a long-press with a native `contextmenu`: the gesture's own timer
115
+ // or this event opens the menu, never both.
116
+ if (touch) {
117
+ if (!touch.opened && !touch.cancelled) {
118
+ touch.opened = true;
119
+ cancelPress();
120
+ void openAt(touch.x, touch.y, event);
121
+ }
122
+ return;
123
+ }
124
+ // A second right-click on the spot the menu is anchored to dismisses it.
125
+ const dismissed = followsDismissal(event);
126
+ if (dismissed && sameSpot(event.clientX, event.clientY)) return;
127
+ if (openState.value && sameSpot(event.clientX, event.clientY)) {
128
+ setOpen(false, createOpenChangeDetails({ reason: 'trigger-press', event }));
129
+ return;
130
+ }
131
+ void openAt(event.clientX, event.clientY, event);
54
132
  }
55
133
 
56
134
  // Shift+F10 and the ContextMenu key open the menu anchored to the focused element.
@@ -59,24 +137,54 @@
59
137
  if (event.key !== 'ContextMenu' && !(event.key === 'F10' && event.shiftKey)) return;
60
138
  event.preventDefault();
61
139
  const rect = (event.target as HTMLElement).getBoundingClientRect();
62
- void openAt(rect.left + rect.width / 2, rect.bottom);
140
+ void openAt(rect.left + rect.width / 2, rect.bottom, event);
63
141
  }
64
142
 
65
- // Touch has no right-click: a 500 ms press opens the menu at the finger.
143
+ // Touch has no right-click: a 500 ms press opens the menu at the finger. A finger drifts a
144
+ // little while it presses, so only movement past the tolerance cancels it.
66
145
  let pressTimer: ReturnType<typeof setTimeout> | null = null;
146
+ let touch: { x: number; y: number; opened: boolean; cancelled: boolean } | null = null;
147
+ let touchEnd: ReturnType<typeof setTimeout> | null = null;
67
148
  function cancelPress() {
68
149
  if (pressTimer) clearTimeout(pressTimer);
69
150
  pressTimer = null;
70
151
  }
152
+ function endPress() {
153
+ cancelPress();
154
+ // A native `contextmenu` can arrive just after the finger lifts: the gesture is remembered
155
+ // for a moment so it is not taken for a right-click.
156
+ if (touchEnd) clearTimeout(touchEnd);
157
+ touchEnd = setTimeout(() => {
158
+ touch = null;
159
+ touchEnd = null;
160
+ }, TOUCH_GESTURE_MS);
161
+ }
71
162
  function handlePointerDown(event: PointerEvent) {
72
163
  if (disabled || event.pointerType !== 'touch') return;
73
164
  cancelPress();
165
+ if (touchEnd) clearTimeout(touchEnd);
166
+ touchEnd = null;
74
167
  const { clientX, clientY } = event;
168
+ const gesture = { x: clientX, y: clientY, opened: false, cancelled: false };
169
+ touch = gesture;
75
170
  pressTimer = setTimeout(() => {
76
171
  pressTimer = null;
77
- void openAt(clientX, clientY);
78
- }, 500);
172
+ if (gesture.opened || gesture.cancelled) return;
173
+ gesture.opened = true;
174
+ void openAt(clientX, clientY, event);
175
+ }, LONG_PRESS_MS);
176
+ }
177
+ function handlePointerMove(event: PointerEvent) {
178
+ if (!touch || !pressTimer) return;
179
+ if (Math.hypot(event.clientX - touch.x, event.clientY - touch.y) <= GESTURE_TOLERANCE) return;
180
+ touch.cancelled = true;
181
+ cancelPress();
79
182
  }
183
+
184
+ onDestroy(() => {
185
+ cancelPress();
186
+ if (touchEnd) clearTimeout(touchEnd);
187
+ });
80
188
  </script>
81
189
 
82
190
  <div
@@ -84,9 +192,9 @@
84
192
  oncontextmenu={handleContextMenu}
85
193
  onkeydown={handleKeyDown}
86
194
  onpointerdown={handlePointerDown}
87
- onpointerup={cancelPress}
88
- onpointercancel={cancelPress}
89
- onpointermove={cancelPress}
195
+ onpointerup={endPress}
196
+ onpointercancel={endPress}
197
+ onpointermove={handlePointerMove}
90
198
  {...attachments}
91
199
  >
92
200
  {@render children()}
@@ -101,6 +209,8 @@
101
209
  {onAfterOpen}
102
210
  {onAfterClose}
103
211
  ref={reference}
104
- position="bottom-start"
105
- menu={{ items, ...menu }}
212
+ {position}
213
+ {collisionBoundary}
214
+ nativeMenu={false}
215
+ menu={{ items, focusOnMount: keyboardOpen ? true : undefined, ...menu }}
106
216
  />
@@ -1 +1 @@
1
- export declare const contextMenuDescription = "\n# ContextMenu Component\n\nWraps a target and opens a menu anchored at the cursor on right-click. Built on PopupMenu using a\nfloating-ui virtual element, so the menu appears exactly at the pointer (and flips near viewport edges).\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { ContextMenu } from 'entasis/context-menu';\n\timport { copyIcon } from 'entasis/icons/copy';\n\timport { trashIcon } from 'entasis/icons/trash';\n</script>\n\n<ContextMenu\n\titems={[\n\t\t{ type: 'option', prefix: copyIcon, title: 'Copy' },\n\t\t{ type: 'option', title: 'Paste' },\n\t\t{ type: 'separator' },\n\t\t{ type: 'option', prefix: trashIcon, title: 'Delete', color: 'danger' }\n\t]}\n>\n\t<div class=\"rounded border p-10\">Right-click me</div>\n</ContextMenu>\n```\n\n## Props\n\n### Core Props\n- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', or 'submenu'.\n- **children**: Snippet (required) - The right-click target content.\n- **disabled**: boolean (default: false) - When true, right-click is ignored and the native context menu shows.\n\n### Bindable Props\n- **open**: boolean - Open state of the context menu.\n- **defaultOpen**: boolean (default: false) - Initial state when open is not provided.\n- **onOpenChange**: (open: boolean) => void - Called once for each library-requested state change.\n- **onAfterOpen**: (payload) => void - Called after the open transition finishes.\n- **onAfterClose**: (payload) => void - Called after the close transition finishes.\n\n### Advanced Props\n- **menu**: Omit<MenuProps, 'items'> - Overrides forwarded to the underlying Menu (header, footer, theme).\n- **popup**: PopupMenu/Popover overrides (offset, closeOnEscape, ...). position and ref are managed internally.\n- **class**: string - Class on the wrapper around the target content.\n\n## Behavior\n\n- Right-click on the target opens the menu at the cursor via a virtual reference element.\n- Keyboard: Shift+F10 or the ContextMenu key, while focus is inside the target, opens the menu anchored to the focused element.\n- Touch: a 500 ms long-press opens the menu at the finger; moving or lifting the finger earlier cancels it.\n- A second right-click elsewhere re-mounts the menu at the new point.\n- Left-click outside, Escape, or selecting an item closes it.\n- Submenus, keyboard navigation, and highlighting are inherited from Menu.\n\n## Accessibility\n\nThe menu is a role=\"menu\" with role=\"menuitem\" children and full keyboard navigation (arrows, Home/End,\nEnter, Escape, and ArrowRight/Left for submenus), plus type-ahead. Keyboard users open it with\nShift+F10 or the ContextMenu key; touch users with a long-press. The target wrapper is a plain\nelement with contextmenu, keydown, and pointer handlers.\n\n## Notes\n\n- Anchoring uses a floating-ui virtual element (a zero-size DOMRect at clientX/clientY).\n- For a menu flush with the cursor, pass `popup={{ offset: 0 }}`.\n";
1
+ export declare const contextMenuDescription = "\n# ContextMenu Component\n\nWraps a target and opens a menu anchored at the cursor on right-click. Built on PopupMenu using a\nfloating-ui virtual element, so the menu appears exactly at the pointer (and flips near viewport edges).\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { ContextMenu } from 'entasis/context-menu';\n\timport { copyIcon } from 'entasis/icons/copy';\n\timport { trashIcon } from 'entasis/icons/trash';\n</script>\n\n<ContextMenu\n\titems={[\n\t\t{ type: 'option', prefix: copyIcon, title: 'Copy' },\n\t\t{ type: 'option', title: 'Paste' },\n\t\t{ type: 'separator' },\n\t\t{ type: 'option', prefix: trashIcon, title: 'Delete', color: 'danger' }\n\t]}\n>\n\t<div class=\"rounded border p-10\">Right-click me</div>\n</ContextMenu>\n```\n\n## Props\n\n### Core Props\n- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', 'submenu', 'checkbox', 'radio-group' or 'group'.\n- **children**: Snippet (required) - The right-click target content.\n- **disabled**: boolean (default: false) - When true, right-click is ignored and the native context menu shows.\n\n### Bindable Props\n- **open**: boolean - Open state of the context menu.\n- **defaultOpen**: boolean (default: false) - Initial state when open is not provided.\n- **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before each library-requested state change, with `details.reason` (`'trigger-press'` for the right-click, long-press or keyboard request, `'item-press'`, `'escape-key'`, `'outside-press'`), `details.event` and `details.cancel()`.\n- **onAfterOpen**: (payload) => void - Called after the open transition finishes.\n- **onAfterClose**: (payload) => void - Called after the close transition finishes.\n\n### Advanced Props\n- **menu**: Omit<MenuProps, 'items'> - Overrides forwarded to the underlying Menu (header, footer, theme).\n- **popup**: PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick, ...). position places the menu relative to the pointer and defaults to 'bottom-start' (a responsive record keeps that default below its first breakpoint); collisionBoundary defaults to 'layoutViewport', so panning a pinch-zoomed page doesn't drag the menu along (submenus keep the visual viewport); ref is managed internally.\n- **class**: string - Class on the wrapper around the target content.\n\n## Behavior\n\n- Right-click on the target opens the menu at the cursor via a virtual reference element.\n- Keyboard: Shift+F10 or the ContextMenu key, while focus is inside the target, opens the menu anchored to the focused element.\n- Touch: a 500 ms long-press opens the menu at the finger. A finger may drift up to 8 px while it presses; moving further, or lifting earlier, cancels the press. The native `contextmenu` event Android Chrome sends with a long-press (before or just after the finger lifts) is part of the same gesture: the menu opens once, with one `onOpenChange(true)`.\n- A second right-click within 8 px of the point the open menu is anchored to closes it; a right-click elsewhere re-mounts the menu at the new point.\n- The browser's own context menu never opens over the open panel, its padding or its submenus. While the menu is enabled the wrapper sets `-webkit-touch-callout: none`, so iOS Safari's long-press callout does not compete with the long-press that opens the menu.\n- A pointer open (right-click, long-press) focuses the menu itself; Shift+F10 and the ContextMenu key highlight the first row.\n- Left-click outside, Escape, or selecting an item closes it. Selecting an item inside a submenu closes the submenu and the menu together, and focus returns to the element that had it before the menu opened.\n- Submenus, keyboard navigation, and highlighting are inherited from Menu.\n\n## Accessibility\n\nThe menu is a role=\"menu\" with role=\"menuitem\" children and full keyboard navigation (arrows, Home/End,\nEnter, Escape, and ArrowRight/Left for submenus, mirrored in right-to-left text), plus type-ahead. Tab closes the\nmenu and returns focus to the element that had it before the menu opened. Keyboard users open it with\nShift+F10 or the ContextMenu key; touch users with a long-press. The target wrapper is a plain\nelement with contextmenu, keydown, and pointer handlers.\n\n## Notes\n\n- Anchoring uses a floating-ui virtual element (a zero-size DOMRect at clientX/clientY).\n- For a menu flush with the cursor, pass `popup={{ offset: 0 }}`.\n";
@@ -28,35 +28,38 @@ floating-ui virtual element, so the menu appears exactly at the pointer (and fli
28
28
  ## Props
29
29
 
30
30
  ### Core Props
31
- - **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', or 'submenu'.
31
+ - **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', 'submenu', 'checkbox', 'radio-group' or 'group'.
32
32
  - **children**: Snippet (required) - The right-click target content.
33
33
  - **disabled**: boolean (default: false) - When true, right-click is ignored and the native context menu shows.
34
34
 
35
35
  ### Bindable Props
36
36
  - **open**: boolean - Open state of the context menu.
37
37
  - **defaultOpen**: boolean (default: false) - Initial state when open is not provided.
38
- - **onOpenChange**: (open: boolean) => void - Called once for each library-requested state change.
38
+ - **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before each library-requested state change, with \`details.reason\` (\`'trigger-press'\` for the right-click, long-press or keyboard request, \`'item-press'\`, \`'escape-key'\`, \`'outside-press'\`), \`details.event\` and \`details.cancel()\`.
39
39
  - **onAfterOpen**: (payload) => void - Called after the open transition finishes.
40
40
  - **onAfterClose**: (payload) => void - Called after the close transition finishes.
41
41
 
42
42
  ### Advanced Props
43
43
  - **menu**: Omit<MenuProps, 'items'> - Overrides forwarded to the underlying Menu (header, footer, theme).
44
- - **popup**: PopupMenu/Popover overrides (offset, closeOnEscape, ...). position and ref are managed internally.
44
+ - **popup**: PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick, ...). position places the menu relative to the pointer and defaults to 'bottom-start' (a responsive record keeps that default below its first breakpoint); collisionBoundary defaults to 'layoutViewport', so panning a pinch-zoomed page doesn't drag the menu along (submenus keep the visual viewport); ref is managed internally.
45
45
  - **class**: string - Class on the wrapper around the target content.
46
46
 
47
47
  ## Behavior
48
48
 
49
49
  - Right-click on the target opens the menu at the cursor via a virtual reference element.
50
50
  - Keyboard: Shift+F10 or the ContextMenu key, while focus is inside the target, opens the menu anchored to the focused element.
51
- - Touch: a 500 ms long-press opens the menu at the finger; moving or lifting the finger earlier cancels it.
52
- - A second right-click elsewhere re-mounts the menu at the new point.
53
- - Left-click outside, Escape, or selecting an item closes it.
51
+ - Touch: a 500 ms long-press opens the menu at the finger. A finger may drift up to 8 px while it presses; moving further, or lifting earlier, cancels the press. The native \`contextmenu\` event Android Chrome sends with a long-press (before or just after the finger lifts) is part of the same gesture: the menu opens once, with one \`onOpenChange(true)\`.
52
+ - A second right-click within 8 px of the point the open menu is anchored to closes it; a right-click elsewhere re-mounts the menu at the new point.
53
+ - The browser's own context menu never opens over the open panel, its padding or its submenus. While the menu is enabled the wrapper sets \`-webkit-touch-callout: none\`, so iOS Safari's long-press callout does not compete with the long-press that opens the menu.
54
+ - A pointer open (right-click, long-press) focuses the menu itself; Shift+F10 and the ContextMenu key highlight the first row.
55
+ - Left-click outside, Escape, or selecting an item closes it. Selecting an item inside a submenu closes the submenu and the menu together, and focus returns to the element that had it before the menu opened.
54
56
  - Submenus, keyboard navigation, and highlighting are inherited from Menu.
55
57
 
56
58
  ## Accessibility
57
59
 
58
60
  The menu is a role="menu" with role="menuitem" children and full keyboard navigation (arrows, Home/End,
59
- Enter, Escape, and ArrowRight/Left for submenus), plus type-ahead. Keyboard users open it with
61
+ Enter, Escape, and ArrowRight/Left for submenus, mirrored in right-to-left text), plus type-ahead. Tab closes the
62
+ menu and returns focus to the element that had it before the menu opened. Keyboard users open it with
60
63
  Shift+F10 or the ContextMenu key; touch users with a long-press. The target wrapper is a plain
61
64
  element with contextmenu, keydown, and pointer handlers.
62
65
 
@@ -3,9 +3,11 @@ import type { MenuItem, MenuProps } from '../Menu/menu.props.js';
3
3
  import type { PopupMenuProps } from '../PopupMenu/popupMenu.props.js';
4
4
  import type { WithAttachments } from '../../types/props.js';
5
5
  import type { ContextMenuThemeProps } from './contextMenu.theme.js';
6
+ import type { OpenChangeHandler } from '../../utils/openChange.js';
6
7
  export type ContextMenuProps = WithAttachments<{
7
8
  /**
8
- * The menu items shown on right-click (Button, MenuOption, Separator, or submenu).
9
+ * The menu items shown on right-click (Button, MenuOption, Separator, submenu, checkbox, radio
10
+ * group or group).
9
11
  */
10
12
  items: MenuItem[];
11
13
  /**
@@ -29,9 +31,13 @@ export type ContextMenuProps = WithAttachments<{
29
31
  */
30
32
  defaultOpen?: boolean;
31
33
  /**
32
- * Called once when the library requests an open-state change.
34
+ * Called before the menu opens or closes, with the requested state and the change details
35
+ * (`reason`, `event`, `interaction`, `cancel()`): `'trigger-press'` for the right-click,
36
+ * long-press or keyboard request that opened it (or a second right-click on its anchor that
37
+ * closes it), `'item-press'`, `'escape-key'`, `'outside-press'` or `'focus-out'` (Tab) when it
38
+ * closes. `details.cancel()` keeps the menu as it is.
33
39
  */
34
- onOpenChange?: (open: boolean) => void;
40
+ onOpenChange?: OpenChangeHandler;
35
41
  /**
36
42
  * Called after the open transition finishes.
37
43
  */
@@ -49,7 +55,10 @@ export type ContextMenuProps = WithAttachments<{
49
55
  */
50
56
  theme?: ContextMenuThemeProps;
51
57
  /**
52
- * Additional PopupMenu/Popover overrides (position, offset, closeOnEscape, ...).
58
+ * Additional PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick,
59
+ * ...). `position` places the menu relative to the pointer and defaults to `'bottom-start'`;
60
+ * a responsive record keeps that default below its first breakpoint. `collisionBoundary`
61
+ * defaults to `'layoutViewport'`, so panning a pinch-zoomed page doesn't drag the menu along.
53
62
  */
54
63
  popup?: Omit<PopupMenuProps, 'menu' | 'trigger' | 'open' | 'defaultOpen' | 'onOpenChange' | 'onAfterOpen' | 'onAfterClose' | 'ref'>;
55
64
  }>;
@@ -3,7 +3,7 @@ export declare const contextMenuTheme: {
3
3
  root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
4
4
  disabled: {
5
5
  true: string;
6
- false: null;
6
+ false: string;
7
7
  };
8
8
  }> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
9
9
  panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
@@ -14,7 +14,7 @@ export declare const setContextMenuTheme: (theme: InferComponentTheme<{
14
14
  root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
15
15
  disabled: {
16
16
  true: string;
17
- false: null;
17
+ false: string;
18
18
  };
19
19
  }> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
20
20
  panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
@@ -23,7 +23,7 @@ export declare const useContextMenuTheme: import("../../utils/cva/theme.js").Use
23
23
  root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
24
24
  disabled: {
25
25
  true: string;
26
- false: null;
26
+ false: string;
27
27
  };
28
28
  }> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
29
29
  panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
@@ -2,13 +2,14 @@ import { setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
2
2
  import { cva } from '../../utils/cva/index.js';
3
3
  // The wrapper around the right-click target. Layout-neutral by default (the target owns
4
4
  // its own box); `display: contents` is the usual override when the wrapper must disappear
5
- // from a grid or flex parent.
5
+ // from a grid or flex parent. While the menu is enabled iOS Safari's own long-press callout
6
+ // stays off, so the long-press that opens the menu is not met by a second system menu.
6
7
  const defaultContextMenuRoot = cva({
7
8
  base: '',
8
9
  variants: {
9
10
  disabled: {
10
11
  true: '',
11
- false: null
12
+ false: '[-webkit-touch-callout:none]'
12
13
  }
13
14
  },
14
15
  defaultVariants: {
@@ -6,7 +6,6 @@
6
6
  import type { Attachment } from 'svelte/attachments';
7
7
  import Empty from '../Empty/Empty.svelte';
8
8
  import Select from '../Form/Select/Select.svelte';
9
- import NetworkIndicator from '../NetworkIndicator/NetworkIndicator.svelte';
10
9
  import Pagination from '../Pagination/Pagination.svelte';
11
10
  import ScrollArea from '../ScrollArea/ScrollArea.svelte';
12
11
  import Skeleton from '../Skeleton/Skeleton.svelte';
@@ -155,6 +154,9 @@
155
154
  return 40;
156
155
  });
157
156
  const viewportHeight = $derived(typeof height === 'number' ? `${height}px` : height);
157
+ // No request indicator is drawn: the app owns `loading` and the `onCellCommit` promise, so it
158
+ // shows progress however it likes
159
+ // (`api.isSaving` tracks pending commits). Assistive technology still hears that the table is busy.
158
160
  const isSaving = $derived(model.pendingCommitCount > 0);
159
161
  const isBusy = $derived(loading || isSaving);
160
162
  const rowFlip = dataTableRowFlip(() => animateRows);
@@ -500,14 +502,6 @@
500
502
  <DataTableToolbar {model} {classes} revision={modelRevision} {tableApi} />
501
503
 
502
504
  <div class={classes.viewport({ fill: fillsParent })} style:height={viewportHeight}>
503
- <NetworkIndicator
504
- loading={isBusy}
505
- color="primary"
506
- height={2}
507
- theme={{ motion: { duration: 120 } }}
508
- label={isSaving ? t.dataTableSaving : t.dataTableLoading}
509
- class={classes.savingIndicator()}
510
- />
511
505
  <ScrollArea bind:viewportRef class={classes.scrollArea()} type="auto" label={t.dataTableLabel}>
512
506
  <table
513
507
  {@attach dataTableGridNavigation({
@@ -657,6 +651,7 @@
657
651
  <span id={rowsPerPageId} class={classes.summary()}>{t.dataTableRowsPerPage}</span>
658
652
  <Select
659
653
  size="small"
654
+ {density}
660
655
  triggerAttrs={{ 'aria-labelledby': rowsPerPageId }}
661
656
  items={pageSizeItems}
662
657
  value={String(tableState!.pagination.pageSize)}
@@ -40,7 +40,10 @@
40
40
  if (target) {
41
41
  target.tabIndex = 0;
42
42
  target.focus();
43
+ // Pickers open with the editor: the select's list, and the date field's calendar (a click
44
+ // on its input opens it, while focus stays in the input for typing).
43
45
  if (editor?.type === 'select' && target.matches('[role="combobox"]')) target.click();
46
+ if (editor?.type === 'date' && target instanceof HTMLInputElement) target.click();
44
47
  }
45
48
  if (target instanceof HTMLInputElement && target.type !== 'checkbox') target.select();
46
49
  });
@@ -145,6 +148,7 @@
145
148
  placeholder={editor.placeholder}
146
149
  disabled={payload.pending}
147
150
  value={payload.draft == null ? '' : String(payload.draft)}
151
+ inputAttrs={{ 'data-1p-ignore': true }}
148
152
  onValueChange={(value) => payload.setDraft(value ?? '')}
149
153
  />
150
154
  {:else if editor.type === 'number'}
@@ -163,6 +167,7 @@
163
167
  {:else if editor.type === 'select'}
164
168
  <Select
165
169
  size="normal"
170
+ {density}
166
171
  class={classes.editorField()}
167
172
  theme={fieldTheme}
168
173
  label={t.dataTableEditColumn(typeof config?.header === 'string' ? config.header : columnId)}
@@ -105,6 +105,7 @@
105
105
  placeholder={config.filter.placeholder ?? t.filterValues}
106
106
  value={typeof value === 'string' ? value : ''}
107
107
  disabled={model.props.disabled}
108
+ inputAttrs={{ 'data-1p-ignore': true }}
108
109
  onValueChange={(next) => model.setColumnFilter(column.id, next || undefined)}
109
110
  />
110
111
  {:else if config.filter.type === 'number'}
@@ -143,6 +143,7 @@
143
143
  placeholder={searchConfig.placeholder ?? t.dataTableSearchRows}
144
144
  value={searchValue}
145
145
  disabled={model.props.disabled}
146
+ inputAttrs={{ 'data-1p-ignore': true }}
146
147
  onValueChange={(value) => updateSearch(value ?? '')}
147
148
  />
148
149
  {/if}