@flanksource/clicky-ui 0.3.17 → 0.3.19

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 (923) hide show
  1. package/dist/ai.cjs +12 -6
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +10 -4
  4. package/dist/ai.js.map +1 -1
  5. package/dist/chat.cjs +36 -0
  6. package/dist/chat.cjs.map +1 -1
  7. package/dist/chat.js +37 -1
  8. package/dist/chat.js.map +1 -1
  9. package/dist/components/Combobox.cjs +122 -153
  10. package/dist/components/Combobox.cjs.map +1 -1
  11. package/dist/components/Combobox.d.ts.map +1 -1
  12. package/dist/components/Combobox.js +124 -155
  13. package/dist/components/Combobox.js.map +1 -1
  14. package/dist/components/ComboboxControl.cjs +145 -0
  15. package/dist/components/ComboboxControl.cjs.map +1 -0
  16. package/dist/components/ComboboxControl.d.ts +37 -0
  17. package/dist/components/ComboboxControl.d.ts.map +1 -0
  18. package/dist/components/ComboboxControl.js +145 -0
  19. package/dist/components/ComboboxControl.js.map +1 -0
  20. package/dist/components/ComboboxMenu.cjs +35 -14
  21. package/dist/components/ComboboxMenu.cjs.map +1 -1
  22. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  23. package/dist/components/ComboboxMenu.js +35 -14
  24. package/dist/components/ComboboxMenu.js.map +1 -1
  25. package/dist/components/ComboboxTags.cjs +40 -0
  26. package/dist/components/ComboboxTags.cjs.map +1 -0
  27. package/dist/components/ComboboxTags.d.ts +8 -0
  28. package/dist/components/ComboboxTags.d.ts.map +1 -0
  29. package/dist/components/ComboboxTags.js +40 -0
  30. package/dist/components/ComboboxTags.js.map +1 -0
  31. package/dist/components/EndpointSelector.model.cjs +96 -0
  32. package/dist/components/EndpointSelector.model.cjs.map +1 -0
  33. package/dist/components/EndpointSelector.model.d.ts +2 -0
  34. package/dist/components/EndpointSelector.model.d.ts.map +1 -1
  35. package/dist/components/EndpointSelector.model.js +96 -0
  36. package/dist/components/EndpointSelector.model.js.map +1 -0
  37. package/dist/components/ErrorWrapper.cjs +168 -0
  38. package/dist/components/ErrorWrapper.cjs.map +1 -0
  39. package/dist/components/ErrorWrapper.d.ts +19 -0
  40. package/dist/components/ErrorWrapper.d.ts.map +1 -0
  41. package/dist/components/ErrorWrapper.js +168 -0
  42. package/dist/components/ErrorWrapper.js.map +1 -0
  43. package/dist/components/FilterBar.cjs +116 -4
  44. package/dist/components/FilterBar.cjs.map +1 -1
  45. package/dist/components/FilterBar.d.ts +37 -2
  46. package/dist/components/FilterBar.d.ts.map +1 -1
  47. package/dist/components/FilterBar.js +116 -4
  48. package/dist/components/FilterBar.js.map +1 -1
  49. package/dist/components/JSONPathField.cjs +112 -0
  50. package/dist/components/JSONPathField.cjs.map +1 -0
  51. package/dist/components/JSONPathField.d.ts +36 -0
  52. package/dist/components/JSONPathField.d.ts.map +1 -0
  53. package/dist/components/JSONPathField.js +112 -0
  54. package/dist/components/JSONPathField.js.map +1 -0
  55. package/dist/components/JSONPathPlayground.cjs +225 -0
  56. package/dist/components/JSONPathPlayground.cjs.map +1 -0
  57. package/dist/components/JSONPathPlayground.d.ts +59 -0
  58. package/dist/components/JSONPathPlayground.d.ts.map +1 -0
  59. package/dist/components/JSONPathPlayground.js +225 -0
  60. package/dist/components/JSONPathPlayground.js.map +1 -0
  61. package/dist/components/JsonSchemaForm.cjs +8 -4
  62. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  63. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  64. package/dist/components/JsonSchemaForm.js +8 -4
  65. package/dist/components/JsonSchemaForm.js.map +1 -1
  66. package/dist/components/OnePasswordSelector.cjs +178 -0
  67. package/dist/components/OnePasswordSelector.cjs.map +1 -0
  68. package/dist/components/OnePasswordSelector.d.ts +8 -0
  69. package/dist/components/OnePasswordSelector.d.ts.map +1 -0
  70. package/dist/components/OnePasswordSelector.js +178 -0
  71. package/dist/components/OnePasswordSelector.js.map +1 -0
  72. package/dist/components/OnePasswordSelector.model.cjs +31 -0
  73. package/dist/components/OnePasswordSelector.model.cjs.map +1 -0
  74. package/dist/components/OnePasswordSelector.model.d.ts +27 -0
  75. package/dist/components/OnePasswordSelector.model.d.ts.map +1 -0
  76. package/dist/components/OnePasswordSelector.model.js +31 -0
  77. package/dist/components/OnePasswordSelector.model.js.map +1 -0
  78. package/dist/components/SecretFormField.cjs +142 -0
  79. package/dist/components/SecretFormField.cjs.map +1 -0
  80. package/dist/components/SecretFormField.d.ts +9 -0
  81. package/dist/components/SecretFormField.d.ts.map +1 -0
  82. package/dist/components/SecretFormField.js +142 -0
  83. package/dist/components/SecretFormField.js.map +1 -0
  84. package/dist/components/SecretKeySelector.cjs +20 -14
  85. package/dist/components/SecretKeySelector.cjs.map +1 -1
  86. package/dist/components/SecretKeySelector.d.ts +4 -1
  87. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  88. package/dist/components/SecretKeySelector.js +20 -14
  89. package/dist/components/SecretKeySelector.js.map +1 -1
  90. package/dist/components/TreePickerField.cjs +71 -27
  91. package/dist/components/TreePickerField.cjs.map +1 -1
  92. package/dist/components/TreePickerField.d.ts +31 -2
  93. package/dist/components/TreePickerField.d.ts.map +1 -1
  94. package/dist/components/TreePickerField.js +72 -28
  95. package/dist/components/TreePickerField.js.map +1 -1
  96. package/dist/components/TriStateToggle.cjs +53 -0
  97. package/dist/components/TriStateToggle.cjs.map +1 -0
  98. package/dist/components/TriStateToggle.d.ts +27 -0
  99. package/dist/components/TriStateToggle.d.ts.map +1 -0
  100. package/dist/components/TriStateToggle.js +53 -0
  101. package/dist/components/TriStateToggle.js.map +1 -0
  102. package/dist/components/combobox-types.d.ts +25 -1
  103. package/dist/components/combobox-types.d.ts.map +1 -1
  104. package/dist/components/combobox-utils.cjs +26 -0
  105. package/dist/components/combobox-utils.cjs.map +1 -1
  106. package/dist/components/combobox-utils.d.ts +10 -0
  107. package/dist/components/combobox-utils.d.ts.map +1 -1
  108. package/dist/components/combobox-utils.js +26 -0
  109. package/dist/components/combobox-utils.js.map +1 -1
  110. package/dist/components/filter-bar-utils.cjs +12 -0
  111. package/dist/components/filter-bar-utils.cjs.map +1 -1
  112. package/dist/components/filter-bar-utils.d.ts.map +1 -1
  113. package/dist/components/filter-bar-utils.js +12 -0
  114. package/dist/components/filter-bar-utils.js.map +1 -1
  115. package/dist/components/jotai-bindings-core.cjs.map +1 -1
  116. package/dist/components/jotai-bindings-core.d.ts +4 -1
  117. package/dist/components/jotai-bindings-core.d.ts.map +1 -1
  118. package/dist/components/jotai-bindings-core.js.map +1 -1
  119. package/dist/components/json-schema-form-accordion-array.cjs +290 -0
  120. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
  121. package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
  122. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
  123. package/dist/components/json-schema-form-accordion-array.js +290 -0
  124. package/dist/components/json-schema-form-accordion-array.js.map +1 -0
  125. package/dist/components/json-schema-form-array.cjs +99 -110
  126. package/dist/components/json-schema-form-array.cjs.map +1 -1
  127. package/dist/components/json-schema-form-array.d.ts +1 -1
  128. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  129. package/dist/components/json-schema-form-array.js +98 -109
  130. package/dist/components/json-schema-form-array.js.map +1 -1
  131. package/dist/components/json-schema-form-error-display.cjs +4 -2
  132. package/dist/components/json-schema-form-error-display.cjs.map +1 -1
  133. package/dist/components/json-schema-form-error-display.d.ts +4 -2
  134. package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
  135. package/dist/components/json-schema-form-error-display.js +4 -2
  136. package/dist/components/json-schema-form-error-display.js.map +1 -1
  137. package/dist/components/json-schema-form-extensions.cjs +10 -0
  138. package/dist/components/json-schema-form-extensions.cjs.map +1 -0
  139. package/dist/components/json-schema-form-extensions.d.ts +8 -0
  140. package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
  141. package/dist/components/json-schema-form-extensions.js +10 -0
  142. package/dist/components/json-schema-form-extensions.js.map +1 -0
  143. package/dist/components/json-schema-form-fields.cjs +25 -101
  144. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  145. package/dist/components/json-schema-form-fields.d.ts +1 -32
  146. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  147. package/dist/components/json-schema-form-fields.js +28 -104
  148. package/dist/components/json-schema-form-fields.js.map +1 -1
  149. package/dist/components/json-schema-form-item-summary.cjs +131 -0
  150. package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
  151. package/dist/components/json-schema-form-item-summary.d.ts +13 -0
  152. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-item-summary.js +131 -0
  154. package/dist/components/json-schema-form-item-summary.js.map +1 -0
  155. package/dist/components/json-schema-form-layout.cjs +156 -0
  156. package/dist/components/json-schema-form-layout.cjs.map +1 -0
  157. package/dist/components/json-schema-form-layout.d.ts +43 -0
  158. package/dist/components/json-schema-form-layout.d.ts.map +1 -0
  159. package/dist/components/json-schema-form-layout.js +156 -0
  160. package/dist/components/json-schema-form-layout.js.map +1 -0
  161. package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
  162. package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
  163. package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
  164. package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-lookup-tree.js +149 -0
  166. package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
  167. package/dist/components/json-schema-form-object.cjs +11 -4
  168. package/dist/components/json-schema-form-object.cjs.map +1 -1
  169. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  170. package/dist/components/json-schema-form-object.js +11 -4
  171. package/dist/components/json-schema-form-object.js.map +1 -1
  172. package/dist/components/json-schema-form-render.cjs +53 -29
  173. package/dist/components/json-schema-form-render.cjs.map +1 -1
  174. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  175. package/dist/components/json-schema-form-render.js +53 -29
  176. package/dist/components/json-schema-form-render.js.map +1 -1
  177. package/dist/components/json-schema-form-resolve.cjs +62 -13
  178. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  179. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  180. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  181. package/dist/components/json-schema-form-resolve.js +62 -13
  182. package/dist/components/json-schema-form-resolve.js.map +1 -1
  183. package/dist/components/json-schema-form-table-array.cjs +123 -0
  184. package/dist/components/json-schema-form-table-array.cjs.map +1 -0
  185. package/dist/components/json-schema-form-table-array.d.ts +7 -0
  186. package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
  187. package/dist/components/json-schema-form-table-array.js +123 -0
  188. package/dist/components/json-schema-form-table-array.js.map +1 -0
  189. package/dist/components/json-schema-form-tone.cjs +34 -0
  190. package/dist/components/json-schema-form-tone.cjs.map +1 -0
  191. package/dist/components/json-schema-form-tone.d.ts +8 -0
  192. package/dist/components/json-schema-form-tone.d.ts.map +1 -0
  193. package/dist/components/json-schema-form-tone.js +34 -0
  194. package/dist/components/json-schema-form-tone.js.map +1 -0
  195. package/dist/components/json-schema-form-types.d.ts +88 -10
  196. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  197. package/dist/components/json-schema-form-utils.cjs +47 -4
  198. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  199. package/dist/components/json-schema-form-utils.d.ts +19 -4
  200. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  201. package/dist/components/json-schema-form-utils.js +47 -4
  202. package/dist/components/json-schema-form-utils.js.map +1 -1
  203. package/dist/components/jsonPathTree.cjs +189 -0
  204. package/dist/components/jsonPathTree.cjs.map +1 -0
  205. package/dist/components/jsonPathTree.d.ts +92 -0
  206. package/dist/components/jsonPathTree.d.ts.map +1 -0
  207. package/dist/components/jsonPathTree.js +189 -0
  208. package/dist/components/jsonPathTree.js.map +1 -0
  209. package/dist/components/secret-form-extension.cjs +30 -0
  210. package/dist/components/secret-form-extension.cjs.map +1 -0
  211. package/dist/components/secret-form-extension.d.ts +23 -0
  212. package/dist/components/secret-form-extension.d.ts.map +1 -0
  213. package/dist/components/secret-form-extension.js +30 -0
  214. package/dist/components/secret-form-extension.js.map +1 -0
  215. package/dist/components/tri-state.cjs +8 -0
  216. package/dist/components/tri-state.cjs.map +1 -0
  217. package/dist/components/tri-state.d.ts +5 -0
  218. package/dist/components/tri-state.d.ts.map +1 -0
  219. package/dist/components/tri-state.js +8 -0
  220. package/dist/components/tri-state.js.map +1 -0
  221. package/dist/components/useComboboxLayout.cjs +59 -0
  222. package/dist/components/useComboboxLayout.cjs.map +1 -0
  223. package/dist/components/useComboboxLayout.d.ts +5 -0
  224. package/dist/components/useComboboxLayout.d.ts.map +1 -0
  225. package/dist/components/useComboboxLayout.js +59 -0
  226. package/dist/components/useComboboxLayout.js.map +1 -0
  227. package/dist/components.cjs +37 -0
  228. package/dist/components.cjs.map +1 -1
  229. package/dist/components.d.ts +20 -4
  230. package/dist/components.d.ts.map +1 -1
  231. package/dist/components.js +38 -1
  232. package/dist/components.js.map +1 -1
  233. package/dist/data/Clicky.cjs +51 -2
  234. package/dist/data/Clicky.cjs.map +1 -1
  235. package/dist/data/Clicky.d.ts +10 -1
  236. package/dist/data/Clicky.d.ts.map +1 -1
  237. package/dist/data/Clicky.js +51 -2
  238. package/dist/data/Clicky.js.map +1 -1
  239. package/dist/data/DataTable.cjs +185 -53
  240. package/dist/data/DataTable.cjs.map +1 -1
  241. package/dist/data/DataTable.d.ts +63 -3
  242. package/dist/data/DataTable.d.ts.map +1 -1
  243. package/dist/data/DataTable.js +185 -53
  244. package/dist/data/DataTable.js.map +1 -1
  245. package/dist/data/LogsTable.cjs +10 -1
  246. package/dist/data/LogsTable.cjs.map +1 -1
  247. package/dist/data/LogsTable.d.ts +3 -1
  248. package/dist/data/LogsTable.d.ts.map +1 -1
  249. package/dist/data/LogsTable.js +10 -1
  250. package/dist/data/LogsTable.js.map +1 -1
  251. package/dist/data/TaskExecDetails.cjs +40 -0
  252. package/dist/data/TaskExecDetails.cjs.map +1 -0
  253. package/dist/data/TaskExecDetails.d.ts +5 -0
  254. package/dist/data/TaskExecDetails.d.ts.map +1 -0
  255. package/dist/data/TaskExecDetails.js +40 -0
  256. package/dist/data/TaskExecDetails.js.map +1 -0
  257. package/dist/data/TaskManager.cjs +99 -14
  258. package/dist/data/TaskManager.cjs.map +1 -1
  259. package/dist/data/TaskManager.d.ts.map +1 -1
  260. package/dist/data/TaskManager.js +100 -15
  261. package/dist/data/TaskManager.js.map +1 -1
  262. package/dist/data/TaskProgress.cjs +59 -14
  263. package/dist/data/TaskProgress.cjs.map +1 -1
  264. package/dist/data/TaskProgress.d.ts +2 -1
  265. package/dist/data/TaskProgress.d.ts.map +1 -1
  266. package/dist/data/TaskProgress.js +59 -14
  267. package/dist/data/TaskProgress.js.map +1 -1
  268. package/dist/data/TaskSnapshot.cjs.map +1 -1
  269. package/dist/data/TaskSnapshot.d.ts +12 -1
  270. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  271. package/dist/data/TaskSnapshot.js.map +1 -1
  272. package/dist/data/TreeNode.cjs +3 -0
  273. package/dist/data/TreeNode.cjs.map +1 -1
  274. package/dist/data/TreeNode.d.ts.map +1 -1
  275. package/dist/data/TreeNode.js +3 -0
  276. package/dist/data/TreeNode.js.map +1 -1
  277. package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
  278. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
  279. package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
  280. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
  281. package/dist/data/ai/AdvancedChatConfig.js +289 -0
  282. package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
  283. package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
  284. package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
  285. package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
  286. package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
  287. package/dist/data/ai/AdvancedCostsPanel.js +120 -0
  288. package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
  289. package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
  290. package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
  291. package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
  292. package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
  293. package/dist/data/ai/ChatWindow.catalogs.js +74 -0
  294. package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
  295. package/dist/data/ai/ChatWindow.cjs +78 -100
  296. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  297. package/dist/data/ai/ChatWindow.d.ts +1 -1
  298. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  299. package/dist/data/ai/ChatWindow.js +80 -102
  300. package/dist/data/ai/ChatWindow.js.map +1 -1
  301. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  302. package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
  303. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  304. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  305. package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
  306. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
  307. package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
  308. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
  309. package/dist/data/ai/ChatWindow.runtime.js +120 -0
  310. package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
  311. package/dist/data/ai/ChatWindow.thread.cjs +1 -1
  312. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -1
  313. package/dist/data/ai/ChatWindow.thread.js +1 -1
  314. package/dist/data/ai/ChatWindow.thread.js.map +1 -1
  315. package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
  316. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  317. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
  318. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  319. package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
  320. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  321. package/dist/data/ai/ChatWindow.types.d.ts +13 -5
  322. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  323. package/dist/data/ai/ChatWindowManager.cjs +3 -1
  324. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  325. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  326. package/dist/data/ai/ChatWindowManager.js +3 -1
  327. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  328. package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
  329. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  330. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
  331. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  332. package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
  333. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  334. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  335. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  336. package/dist/data/ai/PromptRunEditor/index.d.ts +1 -1
  337. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  338. package/dist/data/ai/PromptRunEditor/index.js +2 -2
  339. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  340. package/dist/data/ai/RuntimeModePicker.cjs +1 -1
  341. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  342. package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
  343. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  344. package/dist/data/ai/RuntimeModePicker.js +1 -1
  345. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  346. package/dist/data/ai/SessionInspector.files.cjs +26 -43
  347. package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
  348. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
  349. package/dist/data/ai/SessionInspector.files.js +26 -43
  350. package/dist/data/ai/SessionInspector.files.js.map +1 -1
  351. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  352. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  353. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  354. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  355. package/dist/data/ai/SessionInspector.model.cjs +1 -1
  356. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  357. package/dist/data/ai/SessionInspector.model.js +1 -1
  358. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  359. package/dist/data/ai/SessionViewer.rows.cjs +4 -16
  360. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  361. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  362. package/dist/data/ai/SessionViewer.rows.js +4 -16
  363. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  364. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
  365. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  366. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
  367. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  368. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
  369. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  371. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  373. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  375. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  376. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
  377. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  378. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  379. package/dist/data/ai/ThreadPicker.cjs +65 -3
  380. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  381. package/dist/data/ai/ThreadPicker.d.ts +11 -5
  382. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  383. package/dist/data/ai/ThreadPicker.js +65 -3
  384. package/dist/data/ai/ThreadPicker.js.map +1 -1
  385. package/dist/data/ai/ToolPreferences.cjs +65 -685
  386. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  387. package/dist/data/ai/ToolPreferences.d.ts +15 -17
  388. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  389. package/dist/data/ai/ToolPreferences.js +64 -683
  390. package/dist/data/ai/ToolPreferences.js.map +1 -1
  391. package/dist/data/ai/ToolPreferences.model.cjs +148 -0
  392. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
  393. package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
  394. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
  395. package/dist/data/ai/ToolPreferences.model.js +148 -0
  396. package/dist/data/ai/ToolPreferences.model.js.map +1 -0
  397. package/dist/data/ai/ToolPreferencesList.cjs +270 -0
  398. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
  399. package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
  400. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
  401. package/dist/data/ai/ToolPreferencesList.js +270 -0
  402. package/dist/data/ai/ToolPreferencesList.js.map +1 -0
  403. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  404. package/dist/data/ai/agent-action-icons.js.map +1 -1
  405. package/dist/data/ai/chat-window-context.cjs +4 -1
  406. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  407. package/dist/data/ai/chat-window-context.d.ts +7 -0
  408. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  409. package/dist/data/ai/chat-window-context.js +4 -1
  410. package/dist/data/ai/chat-window-context.js.map +1 -1
  411. package/dist/data/ai/index.d.ts +6 -3
  412. package/dist/data/ai/index.d.ts.map +1 -1
  413. package/dist/data/ai/session-tones.cjs +67 -0
  414. package/dist/data/ai/session-tones.cjs.map +1 -0
  415. package/dist/data/ai/session-tones.d.ts +34 -0
  416. package/dist/data/ai/session-tones.d.ts.map +1 -0
  417. package/dist/data/ai/session-tones.js +67 -0
  418. package/dist/data/ai/session-tones.js.map +1 -0
  419. package/dist/data/ai/thread-costs.cjs +39 -0
  420. package/dist/data/ai/thread-costs.cjs.map +1 -0
  421. package/dist/data/ai/thread-costs.d.ts +62 -0
  422. package/dist/data/ai/thread-costs.d.ts.map +1 -0
  423. package/dist/data/ai/thread-costs.js +39 -0
  424. package/dist/data/ai/thread-costs.js.map +1 -0
  425. package/dist/data/cells/CellFilterActions.cjs +68 -0
  426. package/dist/data/cells/CellFilterActions.cjs.map +1 -0
  427. package/dist/data/cells/CellFilterActions.d.ts +15 -0
  428. package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
  429. package/dist/data/cells/CellFilterActions.js +68 -0
  430. package/dist/data/cells/CellFilterActions.js.map +1 -0
  431. package/dist/data/chat/Chat.cjs +156 -113
  432. package/dist/data/chat/Chat.cjs.map +1 -1
  433. package/dist/data/chat/Chat.d.ts +24 -7
  434. package/dist/data/chat/Chat.d.ts.map +1 -1
  435. package/dist/data/chat/Chat.fixtures.cjs +48 -3
  436. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  437. package/dist/data/chat/Chat.fixtures.d.ts +1 -1
  438. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
  439. package/dist/data/chat/Chat.fixtures.js +48 -3
  440. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  441. package/dist/data/chat/Chat.js +160 -117
  442. package/dist/data/chat/Chat.js.map +1 -1
  443. package/dist/data/chat/Chat.runtime.cjs +63 -0
  444. package/dist/data/chat/Chat.runtime.cjs.map +1 -0
  445. package/dist/data/chat/Chat.runtime.d.ts +16 -0
  446. package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
  447. package/dist/data/chat/Chat.runtime.js +63 -0
  448. package/dist/data/chat/Chat.runtime.js.map +1 -0
  449. package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
  450. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
  451. package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
  452. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
  453. package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
  454. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
  455. package/dist/data/chat/ToolCall.cjs +86 -24
  456. package/dist/data/chat/ToolCall.cjs.map +1 -1
  457. package/dist/data/chat/ToolCall.d.ts +12 -5
  458. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  459. package/dist/data/chat/ToolCall.js +86 -24
  460. package/dist/data/chat/ToolCall.js.map +1 -1
  461. package/dist/data/chat/approval.cjs +49 -6
  462. package/dist/data/chat/approval.cjs.map +1 -1
  463. package/dist/data/chat/approval.d.ts +11 -4
  464. package/dist/data/chat/approval.d.ts.map +1 -1
  465. package/dist/data/chat/approval.js +49 -6
  466. package/dist/data/chat/approval.js.map +1 -1
  467. package/dist/data/chat/index.d.ts +5 -3
  468. package/dist/data/chat/index.d.ts.map +1 -1
  469. package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
  470. package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
  471. package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
  472. package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
  473. package/dist/data/chat/tool-render/ToolArgs.js +50 -0
  474. package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
  475. package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
  476. package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
  477. package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
  478. package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
  479. package/dist/data/chat/tool-render/ToolParams.js +155 -0
  480. package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
  481. package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
  482. package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
  483. package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
  484. package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
  485. package/dist/data/chat/tool-render/ToolValue.js +140 -0
  486. package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
  487. package/dist/data/chat/tool-render/adapter.cjs +48 -0
  488. package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
  489. package/dist/data/chat/tool-render/adapter.d.ts +57 -0
  490. package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
  491. package/dist/data/chat/tool-render/adapter.js +48 -0
  492. package/dist/data/chat/tool-render/adapter.js.map +1 -0
  493. package/dist/data/chat/tool-render/context.cjs +16 -0
  494. package/dist/data/chat/tool-render/context.cjs.map +1 -0
  495. package/dist/data/chat/tool-render/context.d.ts +6 -0
  496. package/dist/data/chat/tool-render/context.d.ts.map +1 -0
  497. package/dist/data/chat/tool-render/context.js +16 -0
  498. package/dist/data/chat/tool-render/context.js.map +1 -0
  499. package/dist/data/chat/tool-render/defaults.cjs +45 -0
  500. package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
  501. package/dist/data/chat/tool-render/defaults.d.ts +11 -0
  502. package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
  503. package/dist/data/chat/tool-render/defaults.js +45 -0
  504. package/dist/data/chat/tool-render/defaults.js.map +1 -0
  505. package/dist/data/chat/tool-render/index.d.ts +13 -0
  506. package/dist/data/chat/tool-render/index.d.ts.map +1 -0
  507. package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
  508. package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
  509. package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
  510. package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
  511. package/dist/data/chat/tool-render/known-tool-views.js +208 -0
  512. package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
  513. package/dist/data/chat/tool-render/known-tools.cjs +58 -0
  514. package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
  515. package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
  516. package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
  517. package/dist/data/chat/tool-render/known-tools.js +58 -0
  518. package/dist/data/chat/tool-render/known-tools.js.map +1 -0
  519. package/dist/data/chat/tool-render/normalize.cjs +42 -0
  520. package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
  521. package/dist/data/chat/tool-render/normalize.d.ts +13 -0
  522. package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
  523. package/dist/data/chat/tool-render/normalize.js +42 -0
  524. package/dist/data/chat/tool-render/normalize.js.map +1 -0
  525. package/dist/data/chat/tool-render/registry.cjs +14 -0
  526. package/dist/data/chat/tool-render/registry.cjs.map +1 -0
  527. package/dist/data/chat/tool-render/registry.d.ts +7 -0
  528. package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
  529. package/dist/data/chat/tool-render/registry.js +14 -0
  530. package/dist/data/chat/tool-render/registry.js.map +1 -0
  531. package/dist/data/chat/tool-render/schema.cjs +57 -0
  532. package/dist/data/chat/tool-render/schema.cjs.map +1 -0
  533. package/dist/data/chat/tool-render/schema.d.ts +28 -0
  534. package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
  535. package/dist/data/chat/tool-render/schema.js +57 -0
  536. package/dist/data/chat/tool-render/schema.js.map +1 -0
  537. package/dist/data/chat/tool-render/shape.cjs +94 -0
  538. package/dist/data/chat/tool-render/shape.cjs.map +1 -0
  539. package/dist/data/chat/tool-render/shape.d.ts +39 -0
  540. package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
  541. package/dist/data/chat/tool-render/shape.js +94 -0
  542. package/dist/data/chat/tool-render/shape.js.map +1 -0
  543. package/dist/data/chat/tool-render/summary.cjs +34 -0
  544. package/dist/data/chat/tool-render/summary.cjs.map +1 -0
  545. package/dist/data/chat/tool-render/summary.d.ts +8 -0
  546. package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
  547. package/dist/data/chat/tool-render/summary.js +34 -0
  548. package/dist/data/chat/tool-render/summary.js.map +1 -0
  549. package/dist/data/chat/types.cjs.map +1 -1
  550. package/dist/data/chat/types.d.ts +7 -0
  551. package/dist/data/chat/types.d.ts.map +1 -1
  552. package/dist/data/chat/types.js.map +1 -1
  553. package/dist/data/chat/usage-snapshot.cjs +17 -0
  554. package/dist/data/chat/usage-snapshot.cjs.map +1 -0
  555. package/dist/data/chat/usage-snapshot.d.ts +21 -0
  556. package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
  557. package/dist/data/chat/usage-snapshot.js +17 -0
  558. package/dist/data/chat/usage-snapshot.js.map +1 -0
  559. package/dist/data/data-table-filter-values.cjs +103 -0
  560. package/dist/data/data-table-filter-values.cjs.map +1 -0
  561. package/dist/data/data-table-filter-values.d.ts +34 -0
  562. package/dist/data/data-table-filter-values.d.ts.map +1 -0
  563. package/dist/data/data-table-filter-values.js +103 -0
  564. package/dist/data/data-table-filter-values.js.map +1 -0
  565. package/dist/data/data-table-server-filters.cjs +165 -0
  566. package/dist/data/data-table-server-filters.cjs.map +1 -0
  567. package/dist/data/data-table-server-filters.d.ts +128 -0
  568. package/dist/data/data-table-server-filters.d.ts.map +1 -0
  569. package/dist/data/data-table-server-filters.js +165 -0
  570. package/dist/data/data-table-server-filters.js.map +1 -0
  571. package/dist/data/query-browser/QueryBrowser.cjs +204 -155
  572. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  573. package/dist/data/query-browser/QueryBrowser.d.ts +2 -41
  574. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  575. package/dist/data/query-browser/QueryBrowser.editor.cjs +88 -0
  576. package/dist/data/query-browser/QueryBrowser.editor.cjs.map +1 -0
  577. package/dist/data/query-browser/QueryBrowser.editor.d.ts +12 -0
  578. package/dist/data/query-browser/QueryBrowser.editor.d.ts.map +1 -0
  579. package/dist/data/query-browser/QueryBrowser.editor.js +88 -0
  580. package/dist/data/query-browser/QueryBrowser.editor.js.map +1 -0
  581. package/dist/data/query-browser/QueryBrowser.js +205 -156
  582. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  583. package/dist/data/query-browser/QueryBrowser.types.cjs +11 -0
  584. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -0
  585. package/dist/data/query-browser/QueryBrowser.types.d.ts +92 -0
  586. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -0
  587. package/dist/data/query-browser/QueryBrowser.types.js +11 -0
  588. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -0
  589. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs +56 -0
  590. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs.map +1 -0
  591. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts +5 -0
  592. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts.map +1 -0
  593. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js +56 -0
  594. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js.map +1 -0
  595. package/dist/data/query-browser/QueryBrowserResults.cjs +80 -0
  596. package/dist/data/query-browser/QueryBrowserResults.cjs.map +1 -0
  597. package/dist/data/query-browser/QueryBrowserResults.d.ts +16 -0
  598. package/dist/data/query-browser/QueryBrowserResults.d.ts.map +1 -0
  599. package/dist/data/query-browser/QueryBrowserResults.js +80 -0
  600. package/dist/data/query-browser/QueryBrowserResults.js.map +1 -0
  601. package/dist/data/query-browser/index.d.ts +2 -1
  602. package/dist/data/query-browser/index.d.ts.map +1 -1
  603. package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
  604. package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
  605. package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
  606. package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
  607. package/dist/data/runtime/ProviderStatusPanel.js +187 -0
  608. package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
  609. package/dist/data/runtime/RuntimeBar.cjs +147 -0
  610. package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
  611. package/dist/data/{ai → runtime}/RuntimeBar.d.ts +8 -6
  612. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
  613. package/dist/data/runtime/RuntimeBar.js +147 -0
  614. package/dist/data/runtime/RuntimeBar.js.map +1 -0
  615. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
  616. package/dist/data/{ai → runtime}/RuntimeBar.model.d.ts +2 -2
  617. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
  618. package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
  619. package/dist/data/{ai → runtime}/RuntimeBarCombo.cjs +25 -30
  620. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
  621. package/dist/data/{ai → runtime}/RuntimeBarCombo.d.ts +4 -3
  622. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
  623. package/dist/data/{ai → runtime}/RuntimeBarCombo.js +25 -30
  624. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
  625. package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +54 -120
  626. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
  627. package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
  628. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
  629. package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +58 -124
  630. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
  631. package/dist/data/runtime/availability.cjs +11 -0
  632. package/dist/data/runtime/availability.cjs.map +1 -0
  633. package/dist/data/runtime/availability.d.ts +6 -0
  634. package/dist/data/runtime/availability.d.ts.map +1 -0
  635. package/dist/data/runtime/availability.js +11 -0
  636. package/dist/data/runtime/availability.js.map +1 -0
  637. package/dist/data/runtime/model-capabilities.cjs.map +1 -0
  638. package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
  639. package/dist/data/runtime/model-capabilities.js.map +1 -0
  640. package/dist/data/runtime/provider-status.cjs +106 -0
  641. package/dist/data/runtime/provider-status.cjs.map +1 -0
  642. package/dist/data/runtime/provider-status.d.ts +24 -0
  643. package/dist/data/runtime/provider-status.d.ts.map +1 -0
  644. package/dist/data/runtime/provider-status.js +106 -0
  645. package/dist/data/runtime/provider-status.js.map +1 -0
  646. package/dist/data/{ai → runtime}/runtime-mode.cjs +119 -27
  647. package/dist/data/runtime/runtime-mode.cjs.map +1 -0
  648. package/dist/data/{ai → runtime}/runtime-mode.d.ts +7 -1
  649. package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
  650. package/dist/data/{ai → runtime}/runtime-mode.js +120 -28
  651. package/dist/data/runtime/runtime-mode.js.map +1 -0
  652. package/dist/data/task-exec-details.cjs +9 -0
  653. package/dist/data/task-exec-details.cjs.map +1 -0
  654. package/dist/data/task-exec-details.d.ts +3 -0
  655. package/dist/data/task-exec-details.d.ts.map +1 -0
  656. package/dist/data/task-exec-details.js +9 -0
  657. package/dist/data/task-exec-details.js.map +1 -0
  658. package/dist/data/task-query-keys.cjs +26 -0
  659. package/dist/data/task-query-keys.cjs.map +1 -0
  660. package/dist/data/task-query-keys.d.ts +27 -0
  661. package/dist/data/task-query-keys.d.ts.map +1 -0
  662. package/dist/data/task-query-keys.js +26 -0
  663. package/dist/data/task-query-keys.js.map +1 -0
  664. package/dist/data/version-info.cjs +3 -3
  665. package/dist/data/version-info.js +3 -3
  666. package/dist/data.cjs +18 -0
  667. package/dist/data.cjs.map +1 -1
  668. package/dist/data.d.ts +6 -2
  669. package/dist/data.d.ts.map +1 -1
  670. package/dist/data.js +18 -0
  671. package/dist/data.js.map +1 -1
  672. package/dist/hooks/use-hotkey.cjs +6 -1
  673. package/dist/hooks/use-hotkey.cjs.map +1 -1
  674. package/dist/hooks/use-hotkey.d.ts.map +1 -1
  675. package/dist/hooks/use-hotkey.js +6 -1
  676. package/dist/hooks/use-hotkey.js.map +1 -1
  677. package/dist/hooks/use-task-run.cjs +7 -4
  678. package/dist/hooks/use-task-run.cjs.map +1 -1
  679. package/dist/hooks/use-task-run.d.ts +12 -0
  680. package/dist/hooks/use-task-run.d.ts.map +1 -1
  681. package/dist/hooks/use-task-run.js +7 -4
  682. package/dist/hooks/use-task-run.js.map +1 -1
  683. package/dist/icons/index.d.ts +1 -0
  684. package/dist/icons/index.d.ts.map +1 -1
  685. package/dist/icons/registry.cjs +692 -0
  686. package/dist/icons/registry.cjs.map +1 -0
  687. package/dist/icons/registry.d.ts +21 -0
  688. package/dist/icons/registry.d.ts.map +1 -0
  689. package/dist/icons/registry.js +692 -0
  690. package/dist/icons/registry.js.map +1 -0
  691. package/dist/icons.cjs +3 -0
  692. package/dist/icons.cjs.map +1 -1
  693. package/dist/icons.js +4 -1
  694. package/dist/icons.js.map +1 -1
  695. package/dist/index.cjs +65 -0
  696. package/dist/index.cjs.map +1 -1
  697. package/dist/index.js +67 -2
  698. package/dist/index.js.map +1 -1
  699. package/dist/layout/AppShell.cjs +92 -56
  700. package/dist/layout/AppShell.cjs.map +1 -1
  701. package/dist/layout/AppShell.d.ts +49 -1
  702. package/dist/layout/AppShell.d.ts.map +1 -1
  703. package/dist/layout/AppShell.js +92 -56
  704. package/dist/layout/AppShell.js.map +1 -1
  705. package/dist/layout/AppShell.nav.cjs +144 -19
  706. package/dist/layout/AppShell.nav.cjs.map +1 -1
  707. package/dist/layout/AppShell.nav.d.ts +6 -1
  708. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  709. package/dist/layout/AppShell.nav.js +144 -19
  710. package/dist/layout/AppShell.nav.js.map +1 -1
  711. package/dist/layout/SplitPane.cjs +23 -7
  712. package/dist/layout/SplitPane.cjs.map +1 -1
  713. package/dist/layout/SplitPane.d.ts +3 -1
  714. package/dist/layout/SplitPane.d.ts.map +1 -1
  715. package/dist/layout/SplitPane.js +23 -7
  716. package/dist/layout/SplitPane.js.map +1 -1
  717. package/dist/lib/format.cjs +86 -4
  718. package/dist/lib/format.cjs.map +1 -1
  719. package/dist/lib/format.d.ts +69 -0
  720. package/dist/lib/format.d.ts.map +1 -1
  721. package/dist/lib/format.js +86 -4
  722. package/dist/lib/format.js.map +1 -1
  723. package/dist/lib/path-tree.cjs +69 -0
  724. package/dist/lib/path-tree.cjs.map +1 -0
  725. package/dist/lib/path-tree.d.ts +54 -0
  726. package/dist/lib/path-tree.d.ts.map +1 -0
  727. package/dist/lib/path-tree.js +69 -0
  728. package/dist/lib/path-tree.js.map +1 -0
  729. package/dist/monaco.d.ts +1 -0
  730. package/dist/monaco.d.ts.map +1 -1
  731. package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
  732. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  733. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  734. package/dist/overlay/DropdownMenuSubmenu.js +13 -7
  735. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  736. package/dist/overlay/Tour.cjs +173 -0
  737. package/dist/overlay/Tour.cjs.map +1 -0
  738. package/dist/overlay/Tour.d.ts +61 -0
  739. package/dist/overlay/Tour.d.ts.map +1 -0
  740. package/dist/overlay/Tour.js +173 -0
  741. package/dist/overlay/Tour.js.map +1 -0
  742. package/dist/overlay/TourCard.cjs +108 -0
  743. package/dist/overlay/TourCard.cjs.map +1 -0
  744. package/dist/overlay/TourCard.d.ts +23 -0
  745. package/dist/overlay/TourCard.d.ts.map +1 -0
  746. package/dist/overlay/TourCard.js +108 -0
  747. package/dist/overlay/TourCard.js.map +1 -0
  748. package/dist/overlay/TourProvider.cjs +160 -0
  749. package/dist/overlay/TourProvider.cjs.map +1 -0
  750. package/dist/overlay/TourProvider.d.ts +31 -0
  751. package/dist/overlay/TourProvider.d.ts.map +1 -0
  752. package/dist/overlay/TourProvider.js +160 -0
  753. package/dist/overlay/TourProvider.js.map +1 -0
  754. package/dist/overlay/TourSpotlight.cjs +47 -0
  755. package/dist/overlay/TourSpotlight.cjs.map +1 -0
  756. package/dist/overlay/TourSpotlight.d.ts +12 -0
  757. package/dist/overlay/TourSpotlight.d.ts.map +1 -0
  758. package/dist/overlay/TourSpotlight.js +47 -0
  759. package/dist/overlay/TourSpotlight.js.map +1 -0
  760. package/dist/overlay/modalStack.cjs +18 -4
  761. package/dist/overlay/modalStack.cjs.map +1 -1
  762. package/dist/overlay/modalStack.d.ts +10 -2
  763. package/dist/overlay/modalStack.d.ts.map +1 -1
  764. package/dist/overlay/modalStack.js +19 -5
  765. package/dist/overlay/modalStack.js.map +1 -1
  766. package/dist/overlay/tour-anchor.cjs +114 -0
  767. package/dist/overlay/tour-anchor.cjs.map +1 -0
  768. package/dist/overlay/tour-anchor.d.ts +30 -0
  769. package/dist/overlay/tour-anchor.d.ts.map +1 -0
  770. package/dist/overlay/tour-anchor.js +114 -0
  771. package/dist/overlay/tour-anchor.js.map +1 -0
  772. package/dist/overlay/tour-context.cjs +12 -0
  773. package/dist/overlay/tour-context.cjs.map +1 -0
  774. package/dist/overlay/tour-context.d.ts +40 -0
  775. package/dist/overlay/tour-context.d.ts.map +1 -0
  776. package/dist/overlay/tour-context.js +12 -0
  777. package/dist/overlay/tour-context.js.map +1 -0
  778. package/dist/overlay/tour-geometry.cjs +65 -0
  779. package/dist/overlay/tour-geometry.cjs.map +1 -0
  780. package/dist/overlay/tour-geometry.d.ts +47 -0
  781. package/dist/overlay/tour-geometry.d.ts.map +1 -0
  782. package/dist/overlay/tour-geometry.js +65 -0
  783. package/dist/overlay/tour-geometry.js.map +1 -0
  784. package/dist/overlay/tour-model.cjs +79 -0
  785. package/dist/overlay/tour-model.cjs.map +1 -0
  786. package/dist/overlay/tour-model.d.ts +29 -0
  787. package/dist/overlay/tour-model.d.ts.map +1 -0
  788. package/dist/overlay/tour-model.js +79 -0
  789. package/dist/overlay/tour-model.js.map +1 -0
  790. package/dist/overlay/tour-progress.cjs +54 -0
  791. package/dist/overlay/tour-progress.cjs.map +1 -0
  792. package/dist/overlay/tour-progress.d.ts +40 -0
  793. package/dist/overlay/tour-progress.d.ts.map +1 -0
  794. package/dist/overlay/tour-progress.js +54 -0
  795. package/dist/overlay/tour-progress.js.map +1 -0
  796. package/dist/overlay/tour-types.d.ts +144 -0
  797. package/dist/overlay/tour-types.d.ts.map +1 -0
  798. package/dist/overlay/use-tour-anchor.cjs +43 -0
  799. package/dist/overlay/use-tour-anchor.cjs.map +1 -0
  800. package/dist/overlay/use-tour-anchor.d.ts +23 -0
  801. package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
  802. package/dist/overlay/use-tour-anchor.js +43 -0
  803. package/dist/overlay/use-tour-anchor.js.map +1 -0
  804. package/dist/overlay/use-tour-rect.cjs +33 -0
  805. package/dist/overlay/use-tour-rect.cjs.map +1 -0
  806. package/dist/overlay/use-tour-rect.d.ts +12 -0
  807. package/dist/overlay/use-tour-rect.d.ts.map +1 -0
  808. package/dist/overlay/use-tour-rect.js +33 -0
  809. package/dist/overlay/use-tour-rect.js.map +1 -0
  810. package/dist/overlay/use-tour-step.cjs +66 -0
  811. package/dist/overlay/use-tour-step.cjs.map +1 -0
  812. package/dist/overlay/use-tour-step.d.ts +45 -0
  813. package/dist/overlay/use-tour-step.d.ts.map +1 -0
  814. package/dist/overlay/use-tour-step.js +66 -0
  815. package/dist/overlay/use-tour-step.js.map +1 -0
  816. package/dist/overlay/zIndex.cjs +8 -0
  817. package/dist/overlay/zIndex.cjs.map +1 -1
  818. package/dist/overlay/zIndex.d.ts +8 -0
  819. package/dist/overlay/zIndex.d.ts.map +1 -1
  820. package/dist/overlay/zIndex.js +8 -0
  821. package/dist/overlay/zIndex.js.map +1 -1
  822. package/dist/rpc/CommandOutput.cjs +8 -0
  823. package/dist/rpc/CommandOutput.cjs.map +1 -1
  824. package/dist/rpc/CommandOutput.d.ts +4 -1
  825. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  826. package/dist/rpc/CommandOutput.js +8 -0
  827. package/dist/rpc/CommandOutput.js.map +1 -1
  828. package/dist/rpc/EntityExplorerApp.cjs +10 -16
  829. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  830. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  831. package/dist/rpc/EntityExplorerApp.js +10 -16
  832. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  833. package/dist/rpc/FilterForm.cjs +20 -0
  834. package/dist/rpc/FilterForm.cjs.map +1 -1
  835. package/dist/rpc/FilterForm.js +20 -0
  836. package/dist/rpc/FilterForm.js.map +1 -1
  837. package/dist/rpc/OperationActionBar.cjs +1 -1
  838. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  839. package/dist/rpc/OperationActionBar.js +1 -1
  840. package/dist/rpc/OperationActionBar.js.map +1 -1
  841. package/dist/rpc/OperationCatalog.cjs +83 -7
  842. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  843. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  844. package/dist/rpc/OperationCatalog.js +84 -8
  845. package/dist/rpc/OperationCatalog.js.map +1 -1
  846. package/dist/rpc/OperationResultView.cjs +2 -0
  847. package/dist/rpc/OperationResultView.cjs.map +1 -1
  848. package/dist/rpc/OperationResultView.d.ts +6 -0
  849. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  850. package/dist/rpc/OperationResultView.js +2 -0
  851. package/dist/rpc/OperationResultView.js.map +1 -1
  852. package/dist/rpc/SchemaActionForm.cjs +2 -21
  853. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  854. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  855. package/dist/rpc/SchemaActionForm.js +3 -22
  856. package/dist/rpc/SchemaActionForm.js.map +1 -1
  857. package/dist/rpc/apiClient.cjs +16 -2
  858. package/dist/rpc/apiClient.cjs.map +1 -1
  859. package/dist/rpc/apiClient.d.ts.map +1 -1
  860. package/dist/rpc/apiClient.js +16 -2
  861. package/dist/rpc/apiClient.js.map +1 -1
  862. package/dist/rpc/formMetadata.cjs +123 -49
  863. package/dist/rpc/formMetadata.cjs.map +1 -1
  864. package/dist/rpc/formMetadata.d.ts +14 -6
  865. package/dist/rpc/formMetadata.d.ts.map +1 -1
  866. package/dist/rpc/formMetadata.js +121 -47
  867. package/dist/rpc/formMetadata.js.map +1 -1
  868. package/dist/rpc/operationFilterSearch.cjs +23 -0
  869. package/dist/rpc/operationFilterSearch.cjs.map +1 -0
  870. package/dist/rpc/operationFilterSearch.d.ts +22 -0
  871. package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
  872. package/dist/rpc/operationFilterSearch.js +23 -0
  873. package/dist/rpc/operationFilterSearch.js.map +1 -0
  874. package/dist/rpc/operationLookupFetcher.cjs +28 -0
  875. package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
  876. package/dist/rpc/operationLookupFetcher.d.ts +17 -0
  877. package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
  878. package/dist/rpc/operationLookupFetcher.js +28 -0
  879. package/dist/rpc/operationLookupFetcher.js.map +1 -0
  880. package/dist/rpc/surfaceNav.cjs +77 -0
  881. package/dist/rpc/surfaceNav.cjs.map +1 -0
  882. package/dist/rpc/surfaceNav.d.ts +19 -0
  883. package/dist/rpc/surfaceNav.d.ts.map +1 -0
  884. package/dist/rpc/surfaceNav.js +77 -0
  885. package/dist/rpc/surfaceNav.js.map +1 -0
  886. package/dist/rpc/types.cjs.map +1 -1
  887. package/dist/rpc/types.d.ts +21 -2
  888. package/dist/rpc/types.d.ts.map +1 -1
  889. package/dist/rpc/types.js.map +1 -1
  890. package/dist/rpc.cjs +2 -0
  891. package/dist/rpc.cjs.map +1 -1
  892. package/dist/rpc.d.ts +1 -0
  893. package/dist/rpc.d.ts.map +1 -1
  894. package/dist/rpc.js +2 -0
  895. package/dist/rpc.js.map +1 -1
  896. package/dist/styles.css +1 -1
  897. package/dist/utils.cjs +8 -0
  898. package/dist/utils.cjs.map +1 -1
  899. package/dist/utils.d.ts +2 -1
  900. package/dist/utils.d.ts.map +1 -1
  901. package/dist/utils.js +10 -2
  902. package/dist/utils.js.map +1 -1
  903. package/package.json +1 -1
  904. package/dist/data/ai/RuntimeBar.cjs.map +0 -1
  905. package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
  906. package/dist/data/ai/RuntimeBar.js.map +0 -1
  907. package/dist/data/ai/RuntimeBar.model.cjs.map +0 -1
  908. package/dist/data/ai/RuntimeBar.model.d.ts.map +0 -1
  909. package/dist/data/ai/RuntimeBar.model.js.map +0 -1
  910. package/dist/data/ai/RuntimeBarCombo.cjs.map +0 -1
  911. package/dist/data/ai/RuntimeBarCombo.d.ts.map +0 -1
  912. package/dist/data/ai/RuntimeBarCombo.js.map +0 -1
  913. package/dist/data/ai/model-capabilities.cjs.map +0 -1
  914. package/dist/data/ai/model-capabilities.d.ts.map +0 -1
  915. package/dist/data/ai/model-capabilities.js.map +0 -1
  916. package/dist/data/ai/runtime-mode.cjs.map +0 -1
  917. package/dist/data/ai/runtime-mode.d.ts.map +0 -1
  918. package/dist/data/ai/runtime-mode.js.map +0 -1
  919. /package/dist/data/{ai → runtime}/RuntimeBar.model.cjs +0 -0
  920. /package/dist/data/{ai → runtime}/RuntimeBar.model.js +0 -0
  921. /package/dist/data/{ai → runtime}/model-capabilities.cjs +0 -0
  922. /package/dist/data/{ai → runtime}/model-capabilities.d.ts +0 -0
  923. /package/dist/data/{ai → runtime}/model-capabilities.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourProvider.cjs","sources":["../../src/overlay/TourProvider.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Tour, type TourProps } from \"./Tour\";\nimport { TourContext, type TourContextValue, type TourStatus } from \"./tour-context\";\nimport { activeSteps, nextStepIndex, resolveStepIndex, validateTourDefinition } from \"./tour-model\";\nimport {\n isTourFinished,\n localStorageTourStorage,\n type TourCompletion,\n type TourCompletionStatus,\n type TourStorage,\n} from \"./tour-progress\";\nimport type { TourDefinition, TourStepContext } from \"./tour-types\";\n\n/**\n * Registry + running state + completion persistence for guided tours. Renders at\n * most one `<Tour>`; everything else reaches it through `useTour()`.\n */\n\nexport type TourProviderProps = {\n children: ReactNode;\n /** Tours available to `start(id)`. Each is validated on registration. */\n tours: TourDefinition[];\n /** The app's current route. Used only for auto-start eligibility, never for step sequencing. */\n currentRoute?: string | undefined;\n /** Auto-start route matcher. Defaults to exact match with the trailing slash normalised. */\n matchRoute?: ((tourRoute: string, currentRoute: string) => boolean) | undefined;\n /** Navigation callback threaded into every tour. Required for multi-route tours. */\n onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;\n /** Completion persistence. Defaults to `localStorageTourStorage()`. */\n storage?: TourStorage | undefined;\n /** Fired when a tour ends, either way. */\n onFinish?:\n | ((result: { tourId: string; status: TourCompletionStatus; index: number }) => void)\n | undefined;\n /** Defaults shared by every tour; an explicit `<Tour>` prop still wins. */\n defaults?:\n | Pick<\n TourProps,\n | \"anchorRoot\"\n | \"portalContainer\"\n | \"missingAnchor\"\n | \"anchorTimeoutMs\"\n | \"navigateTimeoutMs\"\n | \"padding\"\n | \"interaction\"\n | \"keyboard\"\n | \"closeOnEsc\"\n | \"scrollIntoView\"\n | \"labels\"\n | \"onStepError\"\n | \"backdropClassName\"\n >\n | undefined;\n};\n\nfunction normalizeRoute(route: string): string {\n return route.length > 1 && route.endsWith(\"/\") ? route.slice(0, -1) : route;\n}\n\nfunction defaultMatchRoute(tourRoute: string, currentRoute: string): boolean {\n return normalizeRoute(tourRoute) === normalizeRoute(currentRoute);\n}\n\ntype Running = { tourId: string; index: number };\n\nexport function TourProvider(props: TourProviderProps) {\n const {\n children,\n tours,\n currentRoute,\n matchRoute = defaultMatchRoute,\n onNavigate,\n onFinish,\n defaults,\n } = props;\n\n const storage = useMemo(() => props.storage ?? localStorageTourStorage(), [props.storage]);\n const [completions, setCompletions] = useState<TourCompletion[] | null>(null);\n const [running, setRunning] = useState<Running | null>(null);\n const [status, setStatus] = useState<TourStatus>(\"idle\");\n\n for (const definition of tours) validateTourDefinition(definition);\n\n // Auto-start is gated behind this read so a first-run tour never flashes before\n // we know it was already seen.\n useEffect(() => {\n let cancelled = false;\n void Promise.resolve(storage.read()).then((entries) => {\n if (!cancelled) setCompletions(entries);\n });\n return () => {\n cancelled = true;\n };\n }, [storage]);\n\n const definitionOf = useCallback(\n (tourId: string): TourDefinition => {\n const found = tours.find((tour) => tour.id === tourId);\n if (!found) throw new Error(`Unknown tour \"${tourId}\"`);\n return found;\n },\n [tours],\n );\n\n const isFinished = useCallback(\n (tourId: string) => isTourFinished(completions ?? [], definitionOf(tourId)),\n [completions, definitionOf],\n );\n\n const start = useCallback<TourContextValue[\"start\"]>(\n (tourId, options = {}) => {\n const definition = definitionOf(tourId);\n if (!options.force && isTourFinished(completions ?? [], definition)) return;\n const index = options.at === undefined ? 0 : resolveStepIndex(definition.steps, options.at);\n setRunning({ tourId, index });\n setStatus(\"waiting\");\n },\n [completions, definitionOf],\n );\n\n const runningRef = useRef(running);\n runningRef.current = running;\n\n const finish = useCallback<TourContextValue[\"finish\"]>(\n (completionStatus = \"dismissed\") => {\n const current = runningRef.current;\n if (!current) return;\n const definition = definitionOf(current.tourId);\n const entry: TourCompletion = {\n tourId: current.tourId,\n status: completionStatus,\n version: definition.version ?? 1,\n at: new Date().toISOString(),\n };\n void storage.write(entry);\n setCompletions((prev) => [...(prev ?? []).filter((e) => e.tourId !== entry.tourId), entry]);\n setRunning(null);\n setStatus(\"idle\");\n onFinish?.({ tourId: current.tourId, status: completionStatus, index: current.index });\n },\n [definitionOf, onFinish, storage],\n );\n\n const reset = useCallback<TourContextValue[\"reset\"]>(\n (tourId) => {\n void storage.clear(tourId);\n setCompletions((prev) => (tourId ? (prev ?? []).filter((e) => e.tourId !== tourId) : []));\n },\n [storage],\n );\n\n // Honours `enabled()` so a programmatic next/back lands where the card's own\n // buttons would, rather than on a step the tour is skipping.\n const step = useCallback(\n (direction: \"next\" | \"back\") => {\n const current = runningRef.current;\n if (!current) return;\n const target = nextStepIndex(definitionOf(current.tourId).steps, current.index, direction);\n if (target === null) {\n if (direction === \"next\") finish(\"completed\");\n return;\n }\n setRunning({ ...current, index: target });\n },\n [definitionOf, finish],\n );\n\n const goTo = useCallback<TourContextValue[\"goTo\"]>(\n (step) => {\n setRunning((current) => {\n if (!current) return current;\n return { ...current, index: resolveStepIndex(definitionOf(current.tourId).steps, step) };\n });\n },\n [definitionOf],\n );\n\n // Auto-start: only on the declared route, only once the completions are known.\n useEffect(() => {\n if (completions === null || running || currentRoute === undefined) return;\n for (const definition of tours) {\n if (!definition.autoStart) continue;\n const route = definition.autoStartRoute ?? definition.steps[0]?.route;\n if (route === undefined || !matchRoute(route, currentRoute)) continue;\n if (isTourFinished(completions, definition)) continue;\n setRunning({ tourId: definition.id, index: 0 });\n setStatus(\"waiting\");\n return;\n }\n }, [completions, running, currentRoute, tours, matchRoute]);\n\n const definition = running ? definitionOf(running.tourId) : null;\n\n const value = useMemo<TourContextValue>(\n () => ({\n tourId: running?.tourId ?? null,\n index: running?.index ?? 0,\n total: definition ? activeSteps(definition.steps).length : 0,\n status,\n start,\n next: () => step(\"next\"),\n back: () => step(\"back\"),\n goTo,\n finish,\n isFinished,\n reset,\n tours,\n }),\n [running, definition, status, start, step, goTo, finish, isFinished, reset, tours],\n );\n\n return (\n <TourContext.Provider value={value}>\n {children}\n {definition && running ? (\n <Tour\n {...defaults}\n definition={definition}\n index={running.index}\n onIndexChange={(index) => setRunning({ tourId: running.tourId, index })}\n onComplete={() => finish(\"completed\")}\n onDismiss={() => finish(\"dismissed\")}\n onStatusChange={setStatus}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ) : null}\n </TourContext.Provider>\n );\n}\n"],"names":["useMemo","localStorageTourStorage","useState","definition","validateTourDefinition","useEffect","useCallback","isTourFinished","resolveStepIndex","useRef","nextStepIndex","step","activeSteps","jsxs","TourContext","jsx","Tour"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { ReactNode } from 'react';
2
+ import { TourProps } from './Tour';
3
+ import { TourCompletionStatus, TourStorage } from './tour-progress';
4
+ import { TourDefinition, TourStepContext } from './tour-types';
5
+ /**
6
+ * Registry + running state + completion persistence for guided tours. Renders at
7
+ * most one `<Tour>`; everything else reaches it through `useTour()`.
8
+ */
9
+ export type TourProviderProps = {
10
+ children: ReactNode;
11
+ /** Tours available to `start(id)`. Each is validated on registration. */
12
+ tours: TourDefinition[];
13
+ /** The app's current route. Used only for auto-start eligibility, never for step sequencing. */
14
+ currentRoute?: string | undefined;
15
+ /** Auto-start route matcher. Defaults to exact match with the trailing slash normalised. */
16
+ matchRoute?: ((tourRoute: string, currentRoute: string) => boolean) | undefined;
17
+ /** Navigation callback threaded into every tour. Required for multi-route tours. */
18
+ onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;
19
+ /** Completion persistence. Defaults to `localStorageTourStorage()`. */
20
+ storage?: TourStorage | undefined;
21
+ /** Fired when a tour ends, either way. */
22
+ onFinish?: ((result: {
23
+ tourId: string;
24
+ status: TourCompletionStatus;
25
+ index: number;
26
+ }) => void) | undefined;
27
+ /** Defaults shared by every tour; an explicit `<Tour>` prop still wins. */
28
+ defaults?: Pick<TourProps, "anchorRoot" | "portalContainer" | "missingAnchor" | "anchorTimeoutMs" | "navigateTimeoutMs" | "padding" | "interaction" | "keyboard" | "closeOnEsc" | "scrollIntoView" | "labels" | "onStepError" | "backdropClassName"> | undefined;
29
+ };
30
+ export declare function TourProvider(props: TourProviderProps): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=TourProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourProvider.d.ts","sourceRoot":"","sources":["../../src/overlay/TourProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpE;;;GAGG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAChF,oFAAoF;IACpF,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACzF,uEAAuE;IACvE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,EACL,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,oBAAoB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GACnF,SAAS,CAAC;IACd,2EAA2E;IAC3E,QAAQ,CAAC,EACL,IAAI,CACF,SAAS,EACP,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,mBAAmB,GACnB,SAAS,GACT,aAAa,GACb,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,QAAQ,GACR,aAAa,GACb,mBAAmB,CACtB,GACD,SAAS,CAAC;CACf,CAAC;AAYF,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAmKpD"}
@@ -0,0 +1,160 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useMemo, useState, useEffect, useCallback, useRef } from "react";
3
+ import { Tour } from "./Tour.js";
4
+ import { TourContext } from "./tour-context.js";
5
+ import { validateTourDefinition, resolveStepIndex, nextStepIndex, activeSteps } from "./tour-model.js";
6
+ import { localStorageTourStorage, isTourFinished } from "./tour-progress.js";
7
+ function normalizeRoute(route) {
8
+ return route.length > 1 && route.endsWith("/") ? route.slice(0, -1) : route;
9
+ }
10
+ function defaultMatchRoute(tourRoute, currentRoute) {
11
+ return normalizeRoute(tourRoute) === normalizeRoute(currentRoute);
12
+ }
13
+ function TourProvider(props) {
14
+ const {
15
+ children,
16
+ tours,
17
+ currentRoute,
18
+ matchRoute = defaultMatchRoute,
19
+ onNavigate,
20
+ onFinish,
21
+ defaults
22
+ } = props;
23
+ const storage = useMemo(() => props.storage ?? localStorageTourStorage(), [props.storage]);
24
+ const [completions, setCompletions] = useState(null);
25
+ const [running, setRunning] = useState(null);
26
+ const [status, setStatus] = useState("idle");
27
+ for (const definition2 of tours) validateTourDefinition(definition2);
28
+ useEffect(() => {
29
+ let cancelled = false;
30
+ void Promise.resolve(storage.read()).then((entries) => {
31
+ if (!cancelled) setCompletions(entries);
32
+ });
33
+ return () => {
34
+ cancelled = true;
35
+ };
36
+ }, [storage]);
37
+ const definitionOf = useCallback(
38
+ (tourId) => {
39
+ const found = tours.find((tour) => tour.id === tourId);
40
+ if (!found) throw new Error(`Unknown tour "${tourId}"`);
41
+ return found;
42
+ },
43
+ [tours]
44
+ );
45
+ const isFinished = useCallback(
46
+ (tourId) => isTourFinished(completions ?? [], definitionOf(tourId)),
47
+ [completions, definitionOf]
48
+ );
49
+ const start = useCallback(
50
+ (tourId, options = {}) => {
51
+ const definition2 = definitionOf(tourId);
52
+ if (!options.force && isTourFinished(completions ?? [], definition2)) return;
53
+ const index = options.at === void 0 ? 0 : resolveStepIndex(definition2.steps, options.at);
54
+ setRunning({ tourId, index });
55
+ setStatus("waiting");
56
+ },
57
+ [completions, definitionOf]
58
+ );
59
+ const runningRef = useRef(running);
60
+ runningRef.current = running;
61
+ const finish = useCallback(
62
+ (completionStatus = "dismissed") => {
63
+ const current = runningRef.current;
64
+ if (!current) return;
65
+ const definition2 = definitionOf(current.tourId);
66
+ const entry = {
67
+ tourId: current.tourId,
68
+ status: completionStatus,
69
+ version: definition2.version ?? 1,
70
+ at: (/* @__PURE__ */ new Date()).toISOString()
71
+ };
72
+ void storage.write(entry);
73
+ setCompletions((prev) => [...(prev ?? []).filter((e) => e.tourId !== entry.tourId), entry]);
74
+ setRunning(null);
75
+ setStatus("idle");
76
+ onFinish == null ? void 0 : onFinish({ tourId: current.tourId, status: completionStatus, index: current.index });
77
+ },
78
+ [definitionOf, onFinish, storage]
79
+ );
80
+ const reset = useCallback(
81
+ (tourId) => {
82
+ void storage.clear(tourId);
83
+ setCompletions((prev) => tourId ? (prev ?? []).filter((e) => e.tourId !== tourId) : []);
84
+ },
85
+ [storage]
86
+ );
87
+ const step = useCallback(
88
+ (direction) => {
89
+ const current = runningRef.current;
90
+ if (!current) return;
91
+ const target = nextStepIndex(definitionOf(current.tourId).steps, current.index, direction);
92
+ if (target === null) {
93
+ if (direction === "next") finish("completed");
94
+ return;
95
+ }
96
+ setRunning({ ...current, index: target });
97
+ },
98
+ [definitionOf, finish]
99
+ );
100
+ const goTo = useCallback(
101
+ (step2) => {
102
+ setRunning((current) => {
103
+ if (!current) return current;
104
+ return { ...current, index: resolveStepIndex(definitionOf(current.tourId).steps, step2) };
105
+ });
106
+ },
107
+ [definitionOf]
108
+ );
109
+ useEffect(() => {
110
+ var _a;
111
+ if (completions === null || running || currentRoute === void 0) return;
112
+ for (const definition2 of tours) {
113
+ if (!definition2.autoStart) continue;
114
+ const route = definition2.autoStartRoute ?? ((_a = definition2.steps[0]) == null ? void 0 : _a.route);
115
+ if (route === void 0 || !matchRoute(route, currentRoute)) continue;
116
+ if (isTourFinished(completions, definition2)) continue;
117
+ setRunning({ tourId: definition2.id, index: 0 });
118
+ setStatus("waiting");
119
+ return;
120
+ }
121
+ }, [completions, running, currentRoute, tours, matchRoute]);
122
+ const definition = running ? definitionOf(running.tourId) : null;
123
+ const value = useMemo(
124
+ () => ({
125
+ tourId: (running == null ? void 0 : running.tourId) ?? null,
126
+ index: (running == null ? void 0 : running.index) ?? 0,
127
+ total: definition ? activeSteps(definition.steps).length : 0,
128
+ status,
129
+ start,
130
+ next: () => step("next"),
131
+ back: () => step("back"),
132
+ goTo,
133
+ finish,
134
+ isFinished,
135
+ reset,
136
+ tours
137
+ }),
138
+ [running, definition, status, start, step, goTo, finish, isFinished, reset, tours]
139
+ );
140
+ return /* @__PURE__ */ jsxs(TourContext.Provider, { value, children: [
141
+ children,
142
+ definition && running ? /* @__PURE__ */ jsx(
143
+ Tour,
144
+ {
145
+ ...defaults,
146
+ definition,
147
+ index: running.index,
148
+ onIndexChange: (index) => setRunning({ tourId: running.tourId, index }),
149
+ onComplete: () => finish("completed"),
150
+ onDismiss: () => finish("dismissed"),
151
+ onStatusChange: setStatus,
152
+ ...onNavigate ? { onNavigate } : {}
153
+ }
154
+ ) : null
155
+ ] });
156
+ }
157
+ export {
158
+ TourProvider
159
+ };
160
+ //# sourceMappingURL=TourProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourProvider.js","sources":["../../src/overlay/TourProvider.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Tour, type TourProps } from \"./Tour\";\nimport { TourContext, type TourContextValue, type TourStatus } from \"./tour-context\";\nimport { activeSteps, nextStepIndex, resolveStepIndex, validateTourDefinition } from \"./tour-model\";\nimport {\n isTourFinished,\n localStorageTourStorage,\n type TourCompletion,\n type TourCompletionStatus,\n type TourStorage,\n} from \"./tour-progress\";\nimport type { TourDefinition, TourStepContext } from \"./tour-types\";\n\n/**\n * Registry + running state + completion persistence for guided tours. Renders at\n * most one `<Tour>`; everything else reaches it through `useTour()`.\n */\n\nexport type TourProviderProps = {\n children: ReactNode;\n /** Tours available to `start(id)`. Each is validated on registration. */\n tours: TourDefinition[];\n /** The app's current route. Used only for auto-start eligibility, never for step sequencing. */\n currentRoute?: string | undefined;\n /** Auto-start route matcher. Defaults to exact match with the trailing slash normalised. */\n matchRoute?: ((tourRoute: string, currentRoute: string) => boolean) | undefined;\n /** Navigation callback threaded into every tour. Required for multi-route tours. */\n onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;\n /** Completion persistence. Defaults to `localStorageTourStorage()`. */\n storage?: TourStorage | undefined;\n /** Fired when a tour ends, either way. */\n onFinish?:\n | ((result: { tourId: string; status: TourCompletionStatus; index: number }) => void)\n | undefined;\n /** Defaults shared by every tour; an explicit `<Tour>` prop still wins. */\n defaults?:\n | Pick<\n TourProps,\n | \"anchorRoot\"\n | \"portalContainer\"\n | \"missingAnchor\"\n | \"anchorTimeoutMs\"\n | \"navigateTimeoutMs\"\n | \"padding\"\n | \"interaction\"\n | \"keyboard\"\n | \"closeOnEsc\"\n | \"scrollIntoView\"\n | \"labels\"\n | \"onStepError\"\n | \"backdropClassName\"\n >\n | undefined;\n};\n\nfunction normalizeRoute(route: string): string {\n return route.length > 1 && route.endsWith(\"/\") ? route.slice(0, -1) : route;\n}\n\nfunction defaultMatchRoute(tourRoute: string, currentRoute: string): boolean {\n return normalizeRoute(tourRoute) === normalizeRoute(currentRoute);\n}\n\ntype Running = { tourId: string; index: number };\n\nexport function TourProvider(props: TourProviderProps) {\n const {\n children,\n tours,\n currentRoute,\n matchRoute = defaultMatchRoute,\n onNavigate,\n onFinish,\n defaults,\n } = props;\n\n const storage = useMemo(() => props.storage ?? localStorageTourStorage(), [props.storage]);\n const [completions, setCompletions] = useState<TourCompletion[] | null>(null);\n const [running, setRunning] = useState<Running | null>(null);\n const [status, setStatus] = useState<TourStatus>(\"idle\");\n\n for (const definition of tours) validateTourDefinition(definition);\n\n // Auto-start is gated behind this read so a first-run tour never flashes before\n // we know it was already seen.\n useEffect(() => {\n let cancelled = false;\n void Promise.resolve(storage.read()).then((entries) => {\n if (!cancelled) setCompletions(entries);\n });\n return () => {\n cancelled = true;\n };\n }, [storage]);\n\n const definitionOf = useCallback(\n (tourId: string): TourDefinition => {\n const found = tours.find((tour) => tour.id === tourId);\n if (!found) throw new Error(`Unknown tour \"${tourId}\"`);\n return found;\n },\n [tours],\n );\n\n const isFinished = useCallback(\n (tourId: string) => isTourFinished(completions ?? [], definitionOf(tourId)),\n [completions, definitionOf],\n );\n\n const start = useCallback<TourContextValue[\"start\"]>(\n (tourId, options = {}) => {\n const definition = definitionOf(tourId);\n if (!options.force && isTourFinished(completions ?? [], definition)) return;\n const index = options.at === undefined ? 0 : resolveStepIndex(definition.steps, options.at);\n setRunning({ tourId, index });\n setStatus(\"waiting\");\n },\n [completions, definitionOf],\n );\n\n const runningRef = useRef(running);\n runningRef.current = running;\n\n const finish = useCallback<TourContextValue[\"finish\"]>(\n (completionStatus = \"dismissed\") => {\n const current = runningRef.current;\n if (!current) return;\n const definition = definitionOf(current.tourId);\n const entry: TourCompletion = {\n tourId: current.tourId,\n status: completionStatus,\n version: definition.version ?? 1,\n at: new Date().toISOString(),\n };\n void storage.write(entry);\n setCompletions((prev) => [...(prev ?? []).filter((e) => e.tourId !== entry.tourId), entry]);\n setRunning(null);\n setStatus(\"idle\");\n onFinish?.({ tourId: current.tourId, status: completionStatus, index: current.index });\n },\n [definitionOf, onFinish, storage],\n );\n\n const reset = useCallback<TourContextValue[\"reset\"]>(\n (tourId) => {\n void storage.clear(tourId);\n setCompletions((prev) => (tourId ? (prev ?? []).filter((e) => e.tourId !== tourId) : []));\n },\n [storage],\n );\n\n // Honours `enabled()` so a programmatic next/back lands where the card's own\n // buttons would, rather than on a step the tour is skipping.\n const step = useCallback(\n (direction: \"next\" | \"back\") => {\n const current = runningRef.current;\n if (!current) return;\n const target = nextStepIndex(definitionOf(current.tourId).steps, current.index, direction);\n if (target === null) {\n if (direction === \"next\") finish(\"completed\");\n return;\n }\n setRunning({ ...current, index: target });\n },\n [definitionOf, finish],\n );\n\n const goTo = useCallback<TourContextValue[\"goTo\"]>(\n (step) => {\n setRunning((current) => {\n if (!current) return current;\n return { ...current, index: resolveStepIndex(definitionOf(current.tourId).steps, step) };\n });\n },\n [definitionOf],\n );\n\n // Auto-start: only on the declared route, only once the completions are known.\n useEffect(() => {\n if (completions === null || running || currentRoute === undefined) return;\n for (const definition of tours) {\n if (!definition.autoStart) continue;\n const route = definition.autoStartRoute ?? definition.steps[0]?.route;\n if (route === undefined || !matchRoute(route, currentRoute)) continue;\n if (isTourFinished(completions, definition)) continue;\n setRunning({ tourId: definition.id, index: 0 });\n setStatus(\"waiting\");\n return;\n }\n }, [completions, running, currentRoute, tours, matchRoute]);\n\n const definition = running ? definitionOf(running.tourId) : null;\n\n const value = useMemo<TourContextValue>(\n () => ({\n tourId: running?.tourId ?? null,\n index: running?.index ?? 0,\n total: definition ? activeSteps(definition.steps).length : 0,\n status,\n start,\n next: () => step(\"next\"),\n back: () => step(\"back\"),\n goTo,\n finish,\n isFinished,\n reset,\n tours,\n }),\n [running, definition, status, start, step, goTo, finish, isFinished, reset, tours],\n );\n\n return (\n <TourContext.Provider value={value}>\n {children}\n {definition && running ? (\n <Tour\n {...defaults}\n definition={definition}\n index={running.index}\n onIndexChange={(index) => setRunning({ tourId: running.tourId, index })}\n onComplete={() => finish(\"completed\")}\n onDismiss={() => finish(\"dismissed\")}\n onStatusChange={setStatus}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ) : null}\n </TourContext.Provider>\n );\n}\n"],"names":["definition","step"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../lib/utils.cjs");
5
+ const tourGeometry = require("./tour-geometry.cjs");
6
+ const zIndex = require("./zIndex.cjs");
7
+ const SUPPORTS_CLIP_PATH = typeof CSS !== "undefined" && typeof CSS.supports === "function" ? CSS.supports("clip-path", "path('M0 0')") : false;
8
+ function TourSpotlight({
9
+ cutout,
10
+ viewport,
11
+ interaction,
12
+ className
13
+ }) {
14
+ if (!SUPPORTS_CLIP_PATH) return null;
15
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16
+ /* @__PURE__ */ jsxRuntime.jsx(
17
+ "div",
18
+ {
19
+ "aria-hidden": "true",
20
+ "data-tour-spotlight": "",
21
+ className: utils.cn(
22
+ "fixed inset-0 bg-black/40 transition-[clip-path] duration-200 motion-reduce:transition-none",
23
+ interaction === "allow-all" ? "pointer-events-none" : "pointer-events-auto",
24
+ className
25
+ ),
26
+ style: {
27
+ zIndex: zIndex.zIndex.tour,
28
+ clipPath: tourGeometry.spotlightClipPath({ viewport, cutout })
29
+ }
30
+ }
31
+ ),
32
+ interaction === "block-all" && cutout ? (
33
+ // The cutout is a hole in the dim, so blocking the anchor too needs a
34
+ // second, unclipped layer above it.
35
+ /* @__PURE__ */ jsxRuntime.jsx(
36
+ "div",
37
+ {
38
+ "aria-hidden": "true",
39
+ className: "fixed inset-0",
40
+ style: { zIndex: zIndex.zIndex.tour + 1 }
41
+ }
42
+ )
43
+ ) : null
44
+ ] });
45
+ }
46
+ exports.TourSpotlight = TourSpotlight;
47
+ //# sourceMappingURL=TourSpotlight.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourSpotlight.cjs","sources":["../../src/overlay/TourSpotlight.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { spotlightClipPath, type SpotlightRect } from \"./tour-geometry\";\nimport type { TourInteraction } from \"./tour-types\";\nimport { zIndex } from \"./zIndex\";\n\n/**\n * The dim layer. One element clipped with `clip-path: path(evenodd, ...)`: the\n * clipped-away hole does not hit-test, so the dim swallows clicks while the\n * anchor underneath stays clickable and typable, with no extra blocker element\n * and no inverted pointer semantics.\n */\n\n// A browser that cannot clip would paint an uncut opaque sheet over the whole\n// app, which is far worse than simply having no dim.\nconst SUPPORTS_CLIP_PATH =\n typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\"\n ? CSS.supports(\"clip-path\", \"path('M0 0')\")\n : false;\n\nexport function TourSpotlight({\n cutout,\n viewport,\n interaction,\n className,\n}: {\n cutout: SpotlightRect | null;\n viewport: { width: number; height: number };\n interaction: TourInteraction;\n className?: string | undefined;\n}) {\n if (!SUPPORTS_CLIP_PATH) return null;\n\n return (\n <>\n <div\n aria-hidden=\"true\"\n data-tour-spotlight=\"\"\n className={cn(\n \"fixed inset-0 bg-black/40 transition-[clip-path] duration-200 motion-reduce:transition-none\",\n interaction === \"allow-all\" ? \"pointer-events-none\" : \"pointer-events-auto\",\n className,\n )}\n style={{\n zIndex: zIndex.tour,\n clipPath: spotlightClipPath({ viewport, cutout }),\n }}\n />\n {interaction === \"block-all\" && cutout ? (\n // The cutout is a hole in the dim, so blocking the anchor too needs a\n // second, unclipped layer above it.\n <div\n aria-hidden=\"true\"\n className=\"fixed inset-0\"\n style={{ zIndex: zIndex.tour + 1 }}\n />\n ) : null}\n </>\n );\n}\n"],"names":["jsxs","Fragment","jsx","cn","zIndex","spotlightClipPath"],"mappings":";;;;;;AAcA,MAAM,qBACJ,OAAO,QAAQ,eAAe,OAAO,IAAI,aAAa,aAClD,IAAI,SAAS,aAAa,cAAc,IACxC;AAEC,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,CAAC,mBAAoB,QAAO;AAEhC,SACEA,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,uBAAoB;AAAA,QACpB,WAAWC,MAAAA;AAAAA,UACT;AAAA,UACA,gBAAgB,cAAc,wBAAwB;AAAA,UACtD;AAAA,QAAA;AAAA,QAEF,OAAO;AAAA,UACL,QAAQC,OAAAA,OAAO;AAAA,UACf,UAAUC,aAAAA,kBAAkB,EAAE,UAAU,QAAQ;AAAA,QAAA;AAAA,MAClD;AAAA,IAAA;AAAA,IAED,gBAAgB,eAAe;AAAA;AAAA;AAAA,MAG9BH,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,UACV,OAAO,EAAE,QAAQE,OAAAA,OAAO,OAAO,EAAA;AAAA,QAAE;AAAA,MAAA;AAAA,QAEjC;AAAA,EAAA,GACN;AAEJ;;"}
@@ -0,0 +1,12 @@
1
+ import { SpotlightRect } from './tour-geometry';
2
+ import { TourInteraction } from './tour-types';
3
+ export declare function TourSpotlight({ cutout, viewport, interaction, className, }: {
4
+ cutout: SpotlightRect | null;
5
+ viewport: {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ interaction: TourInteraction;
10
+ className?: string | undefined;
11
+ }): import("react/jsx-runtime").JSX.Element | null;
12
+ //# sourceMappingURL=TourSpotlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourSpotlight.d.ts","sourceRoot":"","sources":["../../src/overlay/TourSpotlight.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAiBpD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE;IACD,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,kDA6BA"}
@@ -0,0 +1,47 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ import { spotlightClipPath } from "./tour-geometry.js";
4
+ import { zIndex } from "./zIndex.js";
5
+ const SUPPORTS_CLIP_PATH = typeof CSS !== "undefined" && typeof CSS.supports === "function" ? CSS.supports("clip-path", "path('M0 0')") : false;
6
+ function TourSpotlight({
7
+ cutout,
8
+ viewport,
9
+ interaction,
10
+ className
11
+ }) {
12
+ if (!SUPPORTS_CLIP_PATH) return null;
13
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
14
+ /* @__PURE__ */ jsx(
15
+ "div",
16
+ {
17
+ "aria-hidden": "true",
18
+ "data-tour-spotlight": "",
19
+ className: cn(
20
+ "fixed inset-0 bg-black/40 transition-[clip-path] duration-200 motion-reduce:transition-none",
21
+ interaction === "allow-all" ? "pointer-events-none" : "pointer-events-auto",
22
+ className
23
+ ),
24
+ style: {
25
+ zIndex: zIndex.tour,
26
+ clipPath: spotlightClipPath({ viewport, cutout })
27
+ }
28
+ }
29
+ ),
30
+ interaction === "block-all" && cutout ? (
31
+ // The cutout is a hole in the dim, so blocking the anchor too needs a
32
+ // second, unclipped layer above it.
33
+ /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ "aria-hidden": "true",
37
+ className: "fixed inset-0",
38
+ style: { zIndex: zIndex.tour + 1 }
39
+ }
40
+ )
41
+ ) : null
42
+ ] });
43
+ }
44
+ export {
45
+ TourSpotlight
46
+ };
47
+ //# sourceMappingURL=TourSpotlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourSpotlight.js","sources":["../../src/overlay/TourSpotlight.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { spotlightClipPath, type SpotlightRect } from \"./tour-geometry\";\nimport type { TourInteraction } from \"./tour-types\";\nimport { zIndex } from \"./zIndex\";\n\n/**\n * The dim layer. One element clipped with `clip-path: path(evenodd, ...)`: the\n * clipped-away hole does not hit-test, so the dim swallows clicks while the\n * anchor underneath stays clickable and typable, with no extra blocker element\n * and no inverted pointer semantics.\n */\n\n// A browser that cannot clip would paint an uncut opaque sheet over the whole\n// app, which is far worse than simply having no dim.\nconst SUPPORTS_CLIP_PATH =\n typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\"\n ? CSS.supports(\"clip-path\", \"path('M0 0')\")\n : false;\n\nexport function TourSpotlight({\n cutout,\n viewport,\n interaction,\n className,\n}: {\n cutout: SpotlightRect | null;\n viewport: { width: number; height: number };\n interaction: TourInteraction;\n className?: string | undefined;\n}) {\n if (!SUPPORTS_CLIP_PATH) return null;\n\n return (\n <>\n <div\n aria-hidden=\"true\"\n data-tour-spotlight=\"\"\n className={cn(\n \"fixed inset-0 bg-black/40 transition-[clip-path] duration-200 motion-reduce:transition-none\",\n interaction === \"allow-all\" ? \"pointer-events-none\" : \"pointer-events-auto\",\n className,\n )}\n style={{\n zIndex: zIndex.tour,\n clipPath: spotlightClipPath({ viewport, cutout }),\n }}\n />\n {interaction === \"block-all\" && cutout ? (\n // The cutout is a hole in the dim, so blocking the anchor too needs a\n // second, unclipped layer above it.\n <div\n aria-hidden=\"true\"\n className=\"fixed inset-0\"\n style={{ zIndex: zIndex.tour + 1 }}\n />\n ) : null}\n </>\n );\n}\n"],"names":[],"mappings":";;;;AAcA,MAAM,qBACJ,OAAO,QAAQ,eAAe,OAAO,IAAI,aAAa,aAClD,IAAI,SAAS,aAAa,cAAc,IACxC;AAEC,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,CAAC,mBAAoB,QAAO;AAEhC,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,uBAAoB;AAAA,QACpB,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,cAAc,wBAAwB;AAAA,UACtD;AAAA,QAAA;AAAA,QAEF,OAAO;AAAA,UACL,QAAQ,OAAO;AAAA,UACf,UAAU,kBAAkB,EAAE,UAAU,QAAQ;AAAA,QAAA;AAAA,MAClD;AAAA,IAAA;AAAA,IAED,gBAAgB,eAAe;AAAA;AAAA;AAAA,MAG9B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,UACV,OAAO,EAAE,QAAQ,OAAO,OAAO,EAAA;AAAA,QAAE;AAAA,MAAA;AAAA,QAEjC;AAAA,EAAA,GACN;AAEJ;"}
@@ -6,6 +6,7 @@ const stack = [];
6
6
  const listeners = /* @__PURE__ */ new Set();
7
7
  const escapeStack = [];
8
8
  let escapeDocument = null;
9
+ let tourLayers = 0;
9
10
  function emit() {
10
11
  for (const listener of listeners) listener();
11
12
  }
@@ -16,7 +17,7 @@ function subscribe(listener) {
16
17
  };
17
18
  }
18
19
  function getSnapshot() {
19
- return stack.join("\0");
20
+ return `${tourLayers}:` + stack.join("\0");
20
21
  }
21
22
  function onEscapeKeyDown(event) {
22
23
  if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
@@ -75,13 +76,26 @@ function useEscapeLayer(open, onEscape, enabled = true) {
75
76
  return () => removeEscapeLayer(id);
76
77
  }, [enabled, id, open]);
77
78
  }
79
+ function useTourLayer(active) {
80
+ react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
81
+ react.useEffect(() => {
82
+ if (!active) return;
83
+ tourLayers += 1;
84
+ emit();
85
+ return () => {
86
+ tourLayers -= 1;
87
+ emit();
88
+ };
89
+ }, [active]);
90
+ }
78
91
  function useFloatingZIndex() {
79
92
  react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
80
- if (stack.length === 0) return zIndex.zIndex.popover;
81
- const topModalZ = zIndex.zIndex.modal + (stack.length - 1) * zIndex.zIndex.modalStep;
82
- return topModalZ + zIndex.zIndex.popoverOverModalOffset;
93
+ const base = stack.length === 0 ? zIndex.zIndex.popover : zIndex.zIndex.modal + (stack.length - 1) * zIndex.zIndex.modalStep + zIndex.zIndex.popoverOverModalOffset;
94
+ if (tourLayers === 0) return base;
95
+ return Math.max(base, zIndex.zIndex.tour + zIndex.zIndex.tourCardOffset + zIndex.zIndex.popoverOverModalOffset);
83
96
  }
84
97
  exports.useEscapeLayer = useEscapeLayer;
85
98
  exports.useFloatingZIndex = useFloatingZIndex;
86
99
  exports.useModalStack = useModalStack;
100
+ exports.useTourLayer = useTourLayer;
87
101
  //# sourceMappingURL=modalStack.cjs.map
@@ -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\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; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return 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 * 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. Subscribes to the modal stack so the\n * value tracks modals opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (stack.length === 0) return zIndex.popover;\n const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;\n return topModalZ + zIndex.popoverOverModalOffset;\n}\n"],"names":["useId","useSyncExternalStore","useEffect","useRef","zIndex"],"mappings":";;;;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAEtC,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;AAIA,SAAS,cAAc;AACrB,SAAO,MAAM,KAAK,IAAQ;AAC5B;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,KAAKA,MAAAA,MAAA;AACXC,6BAAqB,WAAW,aAAa,WAAW;AAExDC,QAAAA,UAAU,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,KAAKF,MAAAA,MAAA;AACX,QAAM,cAAcG,MAAAA,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtBD,QAAAA,UAAU,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;AAQO,SAAS,oBAA4B;AAC1CD,6BAAqB,WAAW,aAAa,WAAW;AACxD,MAAI,MAAM,WAAW,EAAG,QAAOG,OAAAA,OAAO;AACtC,QAAM,YAAYA,OAAAA,OAAO,SAAS,MAAM,SAAS,KAAKA,OAAAA,OAAO;AAC7D,SAAO,YAAYA,OAAAA,OAAO;AAC5B;;;;"}
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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"}
@@ -15,11 +15,19 @@ export declare function useModalStack(open: boolean): ModalStackPosition;
15
15
  * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.
16
16
  */
17
17
  export declare function useEscapeLayer(open: boolean, onEscape: () => void, enabled?: boolean): void;
18
+ /**
19
+ * Registers a running guided tour while `active`, so floating layers lift above
20
+ * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the
21
+ * tour overlay does not nest.
22
+ */
23
+ export declare function useTourLayer(active: boolean): void;
18
24
  /**
19
25
  * z-index a floating layer (dropdown / combobox / tooltip / popover) should use
20
26
  * so it renders above any open modal — and below the next nested modal — or at
21
- * the popover floor when no modal is open. Subscribes to the modal stack so the
22
- * value tracks modals opening and closing.
27
+ * the popover floor when no modal is open. While a guided tour runs, the value
28
+ * also clears the tour's dim and step card, so a step that says "open this menu"
29
+ * shows the menu rather than hiding it under the overlay. Subscribes to the
30
+ * modal stack so the value tracks modals and tours opening and closing.
23
31
  */
24
32
  export declare function useFloatingZIndex(): number;
25
33
  //# sourceMappingURL=modalStack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"AAgEA,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;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
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"}
@@ -4,6 +4,7 @@ const stack = [];
4
4
  const listeners = /* @__PURE__ */ new Set();
5
5
  const escapeStack = [];
6
6
  let escapeDocument = null;
7
+ let tourLayers = 0;
7
8
  function emit() {
8
9
  for (const listener of listeners) listener();
9
10
  }
@@ -14,7 +15,7 @@ function subscribe(listener) {
14
15
  };
15
16
  }
16
17
  function getSnapshot() {
17
- return stack.join("\0");
18
+ return `${tourLayers}:` + stack.join("\0");
18
19
  }
19
20
  function onEscapeKeyDown(event) {
20
21
  if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
@@ -73,15 +74,28 @@ function useEscapeLayer(open, onEscape, enabled = true) {
73
74
  return () => removeEscapeLayer(id);
74
75
  }, [enabled, id, open]);
75
76
  }
77
+ function useTourLayer(active) {
78
+ useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
79
+ useEffect(() => {
80
+ if (!active) return;
81
+ tourLayers += 1;
82
+ emit();
83
+ return () => {
84
+ tourLayers -= 1;
85
+ emit();
86
+ };
87
+ }, [active]);
88
+ }
76
89
  function useFloatingZIndex() {
77
90
  useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
78
- if (stack.length === 0) return zIndex.popover;
79
- const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;
80
- return topModalZ + zIndex.popoverOverModalOffset;
91
+ const base = stack.length === 0 ? zIndex.popover : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;
92
+ if (tourLayers === 0) return base;
93
+ return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);
81
94
  }
82
95
  export {
83
96
  useEscapeLayer,
84
97
  useFloatingZIndex,
85
- useModalStack
98
+ useModalStack,
99
+ useTourLayer
86
100
  };
87
101
  //# sourceMappingURL=modalStack.js.map
@@ -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\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; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return 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 * 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. Subscribes to the modal stack so the\n * value tracks modals opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (stack.length === 0) return zIndex.popover;\n const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;\n return topModalZ + zIndex.popoverOverModalOffset;\n}\n"],"names":[],"mappings":";;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAEtC,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;AAIA,SAAS,cAAc;AACrB,SAAO,MAAM,KAAK,IAAQ;AAC5B;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;AAQO,SAAS,oBAA4B;AAC1C,uBAAqB,WAAW,aAAa,WAAW;AACxD,MAAI,MAAM,WAAW,EAAG,QAAO,OAAO;AACtC,QAAM,YAAY,OAAO,SAAS,MAAM,SAAS,KAAK,OAAO;AAC7D,SAAO,YAAY,OAAO;AAC5B;"}
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;"}