@flanksource/clicky-ui 0.3.44 → 0.3.46

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 (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"modalStack.cjs","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n// Running guided tours. A tour dims the page from `zIndex.tour`, far above the\n// modal band, so floating content opened *during* a tour (the menu a step tells\n// the user to open) has to clear that dim or it renders invisibly underneath.\nlet tourLayers = 0;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity plus the tour-layer count; it only changes\n// when an entry is pushed or popped, so subscribers re-render exactly when their\n// position could have moved.\nfunction getSnapshot() {\n return `${tourLayers}:` + stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack[escapeStack.length - 1];\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n escapeStack.push({\n id,\n onEscape: () => onEscapeRef.current(),\n });\n\n return () => removeEscapeLayer(id);\n }, [enabled, id, open]);\n}\n\n/**\n * Registers a running guided tour while `active`, so floating layers lift above\n * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the\n * tour overlay does not nest.\n */\nexport function useTourLayer(active: boolean): void {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!active) return;\n tourLayers += 1;\n emit();\n return () => {\n tourLayers -= 1;\n emit();\n };\n }, [active]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. While a guided tour runs, the value\n * also clears the tour's dim and step card, so a step that says \"open this menu\"\n * shows the menu rather than hiding it under the overlay. Subscribes to the\n * modal stack so the value tracks modals and tours opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n const base =\n stack.length === 0\n ? zIndex.popover\n : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;\n if (tourLayers === 0) return base;\n return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);\n}\n"],"names":["useId","useSyncExternalStore","useEffect","useRef","zIndex"],"mappings":"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"}
1
+ {"version":3,"file":"modalStack.cjs","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\n// `dismissed` marks a layer whose onEscape already ran but whose close has not\n// committed yet, so a quick second Escape reaches the layer beneath it.\ntype EscapeLayer = { id: string; dismissed: boolean; onEscape: () => void };\nconst escapeStack: EscapeLayer[] = [];\nlet escapeDocument: Document | null = null;\n// Running guided tours. A tour dims the page from `zIndex.tour`, far above the\n// modal band, so floating content opened *during* a tour (the menu a step tells\n// the user to open) has to clear that dim or it renders invisibly underneath.\nlet tourLayers = 0;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity plus the tour-layer count; it only changes\n// when an entry is pushed or popped, so subscribers re-render exactly when their\n// position could have moved.\nfunction getSnapshot() {\n return `${tourLayers}:` + stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack.findLast((entry) => !entry.dismissed);\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.dismissed = true;\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n const entryRef = useRef<EscapeLayer | null>(null);\n\n // A dismissed layer that re-rendered without closing owns Escape again.\n useEffect(() => {\n if (entryRef.current) entryRef.current.dismissed = false;\n });\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n const entry: EscapeLayer = { id, dismissed: false, onEscape: () => onEscapeRef.current() };\n entryRef.current = entry;\n escapeStack.push(entry);\n\n return () => {\n entryRef.current = null;\n removeEscapeLayer(id);\n };\n }, [enabled, id, open]);\n}\n\n/**\n * Registers a running guided tour while `active`, so floating layers lift above\n * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the\n * tour overlay does not nest.\n */\nexport function useTourLayer(active: boolean): void {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!active) return;\n tourLayers += 1;\n emit();\n return () => {\n tourLayers -= 1;\n emit();\n };\n }, [active]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. While a guided tour runs, the value\n * also clears the tour's dim and step card, so a step that says \"open this menu\"\n * shows the menu rather than hiding it under the overlay. Subscribes to the\n * modal stack so the value tracks modals and tours opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n const base =\n stack.length === 0\n ? zIndex.popover\n : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;\n if (tourLayers === 0) return base;\n return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);\n}\n"],"names":["useId","useSyncExternalStore","useEffect","useRef","zIndex"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"AAqEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAoB/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,UAAO,QAgBjF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAYlD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C"}
1
+ {"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"AAyEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAoB/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,UAAO,QAwBjF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAYlD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C"}
@@ -21,11 +21,12 @@ function onEscapeKeyDown(event) {
21
21
  if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
22
22
  return;
23
23
  }
24
- const top = escapeStack[escapeStack.length - 1];
24
+ const top = escapeStack.findLast((entry) => !entry.dismissed);
25
25
  if (!top) return;
26
26
  event.preventDefault();
27
27
  event.stopPropagation();
28
28
  event.stopImmediatePropagation();
29
+ top.dismissed = true;
29
30
  top.onEscape();
30
31
  }
31
32
  function ensureEscapeListener() {
@@ -64,14 +65,20 @@ function useEscapeLayer(open, onEscape, enabled = true) {
64
65
  const id = useId();
65
66
  const onEscapeRef = useRef(onEscape);
66
67
  onEscapeRef.current = onEscape;
68
+ const entryRef = useRef(null);
69
+ useEffect(() => {
70
+ if (entryRef.current) entryRef.current.dismissed = false;
71
+ });
67
72
  useEffect(() => {
68
73
  if (!open || !enabled) return;
69
74
  ensureEscapeListener();
70
- escapeStack.push({
71
- id,
72
- onEscape: () => onEscapeRef.current()
73
- });
74
- return () => removeEscapeLayer(id);
75
+ const entry = { id, dismissed: false, onEscape: () => onEscapeRef.current() };
76
+ entryRef.current = entry;
77
+ escapeStack.push(entry);
78
+ return () => {
79
+ entryRef.current = null;
80
+ removeEscapeLayer(id);
81
+ };
75
82
  }, [enabled, id, open]);
76
83
  }
77
84
  function useTourLayer(active) {
@@ -1 +1 @@
1
- {"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n// Running guided tours. A tour dims the page from `zIndex.tour`, far above the\n// modal band, so floating content opened *during* a tour (the menu a step tells\n// the user to open) has to clear that dim or it renders invisibly underneath.\nlet tourLayers = 0;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity plus the tour-layer count; it only changes\n// when an entry is pushed or popped, so subscribers re-render exactly when their\n// position could have moved.\nfunction getSnapshot() {\n return `${tourLayers}:` + stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack[escapeStack.length - 1];\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n escapeStack.push({\n id,\n onEscape: () => onEscapeRef.current(),\n });\n\n return () => removeEscapeLayer(id);\n }, [enabled, id, open]);\n}\n\n/**\n * Registers a running guided tour while `active`, so floating layers lift above\n * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the\n * tour overlay does not nest.\n */\nexport function useTourLayer(active: boolean): void {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!active) return;\n tourLayers += 1;\n emit();\n return () => {\n tourLayers -= 1;\n emit();\n };\n }, [active]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. While a guided tour runs, the value\n * also clears the tour's dim and step card, so a step that says \"open this menu\"\n * shows the menu rather than hiding it under the overlay. Subscribes to the\n * modal stack so the value tracks modals and tours opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n const base =\n stack.length === 0\n ? zIndex.popover\n : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;\n if (tourLayers === 0) return base;\n return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);\n}\n"],"names":[],"mappings":";;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAItC,IAAI,aAAa;AAEjB,SAAS,OAAO;AACd,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,UAAU,UAAsB;AACvC,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAKA,SAAS,cAAc;AACrB,SAAO,GAAG,UAAU,MAAM,MAAM,KAAK,IAAQ;AAC/C;AAEA,SAAS,gBAAgB,OAAsB;AAC7C,MACE,MAAM,oBACN,MAAM,QAAQ,YACd,MAAM,eACL,MAA+C,YAAY,KAC5D;AACA;AAAA,EACF;AAEA,QAAM,MAAM,YAAY,YAAY,SAAS,CAAC;AAC9C,MAAI,CAAC,IAAK;AAEV,QAAM,eAAA;AACN,QAAM,gBAAA;AACN,QAAM,yBAAA;AACN,MAAI,SAAA;AACN;AAEA,SAAS,uBAAuB;AAC9B,MAAI,kBAAkB,OAAO,aAAa,YAAa;AACvD,mBAAiB;AACjB,iBAAe,iBAAiB,WAAW,eAAe;AAC5D;AAEA,SAAS,kBAAkB,IAAY;AACrC,QAAM,QAAQ,YAAY,UAAU,CAAC,UAAU,MAAM,OAAO,EAAE;AAC9D,MAAI,UAAU,GAAI,aAAY,OAAO,OAAO,CAAC;AAE7C,MAAI,YAAY,WAAW,KAAK,gBAAgB;AAC9C,mBAAe,oBAAoB,WAAW,eAAe;AAC7D,qBAAiB;AAAA,EACnB;AACF;AAcO,SAAS,cAAc,MAAmC;AAC/D,QAAM,KAAK,MAAA;AACX,uBAAqB,WAAW,aAAa,WAAW;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,KAAK,EAAE;AACb,SAAA;AACA,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,UAAI,UAAU,GAAI,OAAM,OAAO,OAAO,CAAC;AACvC,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,EAAE,CAAC;AAEb,QAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,SAAO;AAAA,IACL,OAAO,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAChD,OAAO,UAAU,KAAK,IAAI;AAAA,EAAA;AAE9B;AAMO,SAAS,eAAe,MAAe,UAAsB,UAAU,MAAM;AAClF,QAAM,KAAK,MAAA;AACX,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,QAAS;AAEvB,yBAAA;AACA,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY,QAAA;AAAA,IAAQ,CACrC;AAED,WAAO,MAAM,kBAAkB,EAAE;AAAA,EACnC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;AACxB;AAOO,SAAS,aAAa,QAAuB;AAClD,uBAAqB,WAAW,aAAa,WAAW;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,kBAAc;AACd,SAAA;AACA,WAAO,MAAM;AACX,oBAAc;AACd,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACb;AAUO,SAAS,oBAA4B;AAC1C,uBAAqB,WAAW,aAAa,WAAW;AACxD,QAAM,OACJ,MAAM,WAAW,IACb,OAAO,UACP,OAAO,SAAS,MAAM,SAAS,KAAK,OAAO,YAAY,OAAO;AACpE,MAAI,eAAe,EAAG,QAAO;AAC7B,SAAO,KAAK,IAAI,MAAM,OAAO,OAAO,OAAO,iBAAiB,OAAO,sBAAsB;AAC3F;"}
1
+ {"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\n// `dismissed` marks a layer whose onEscape already ran but whose close has not\n// committed yet, so a quick second Escape reaches the layer beneath it.\ntype EscapeLayer = { id: string; dismissed: boolean; onEscape: () => void };\nconst escapeStack: EscapeLayer[] = [];\nlet escapeDocument: Document | null = null;\n// Running guided tours. A tour dims the page from `zIndex.tour`, far above the\n// modal band, so floating content opened *during* a tour (the menu a step tells\n// the user to open) has to clear that dim or it renders invisibly underneath.\nlet tourLayers = 0;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity plus the tour-layer count; it only changes\n// when an entry is pushed or popped, so subscribers re-render exactly when their\n// position could have moved.\nfunction getSnapshot() {\n return `${tourLayers}:` + stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack.findLast((entry) => !entry.dismissed);\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.dismissed = true;\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n const entryRef = useRef<EscapeLayer | null>(null);\n\n // A dismissed layer that re-rendered without closing owns Escape again.\n useEffect(() => {\n if (entryRef.current) entryRef.current.dismissed = false;\n });\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n const entry: EscapeLayer = { id, dismissed: false, onEscape: () => onEscapeRef.current() };\n entryRef.current = entry;\n escapeStack.push(entry);\n\n return () => {\n entryRef.current = null;\n removeEscapeLayer(id);\n };\n }, [enabled, id, open]);\n}\n\n/**\n * Registers a running guided tour while `active`, so floating layers lift above\n * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the\n * tour overlay does not nest.\n */\nexport function useTourLayer(active: boolean): void {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!active) return;\n tourLayers += 1;\n emit();\n return () => {\n tourLayers -= 1;\n emit();\n };\n }, [active]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. While a guided tour runs, the value\n * also clears the tour's dim and step card, so a step that says \"open this menu\"\n * shows the menu rather than hiding it under the overlay. Subscribes to the\n * modal stack so the value tracks modals and tours opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n const base =\n stack.length === 0\n ? zIndex.popover\n : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;\n if (tourLayers === 0) return base;\n return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);\n}\n"],"names":[],"mappings":"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"}