@flanksource/clicky-ui 0.3.17 → 0.3.18

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 (822) 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 +31 -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 +31 -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/ErrorWrapper.cjs +168 -0
  32. package/dist/components/ErrorWrapper.cjs.map +1 -0
  33. package/dist/components/ErrorWrapper.d.ts +19 -0
  34. package/dist/components/ErrorWrapper.d.ts.map +1 -0
  35. package/dist/components/ErrorWrapper.js +168 -0
  36. package/dist/components/ErrorWrapper.js.map +1 -0
  37. package/dist/components/FilterBar.cjs +64 -2
  38. package/dist/components/FilterBar.cjs.map +1 -1
  39. package/dist/components/FilterBar.d.ts +18 -1
  40. package/dist/components/FilterBar.d.ts.map +1 -1
  41. package/dist/components/FilterBar.js +64 -2
  42. package/dist/components/FilterBar.js.map +1 -1
  43. package/dist/components/JSONPathField.cjs +91 -0
  44. package/dist/components/JSONPathField.cjs.map +1 -0
  45. package/dist/components/JSONPathField.d.ts +19 -0
  46. package/dist/components/JSONPathField.d.ts.map +1 -0
  47. package/dist/components/JSONPathField.js +91 -0
  48. package/dist/components/JSONPathField.js.map +1 -0
  49. package/dist/components/JsonSchemaForm.cjs +8 -4
  50. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +8 -4
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/TreePickerField.cjs +22 -4
  55. package/dist/components/TreePickerField.cjs.map +1 -1
  56. package/dist/components/TreePickerField.d.ts +22 -2
  57. package/dist/components/TreePickerField.d.ts.map +1 -1
  58. package/dist/components/TreePickerField.js +22 -4
  59. package/dist/components/TreePickerField.js.map +1 -1
  60. package/dist/components/TriStateToggle.cjs +53 -0
  61. package/dist/components/TriStateToggle.cjs.map +1 -0
  62. package/dist/components/TriStateToggle.d.ts +27 -0
  63. package/dist/components/TriStateToggle.d.ts.map +1 -0
  64. package/dist/components/TriStateToggle.js +53 -0
  65. package/dist/components/TriStateToggle.js.map +1 -0
  66. package/dist/components/combobox-types.d.ts +16 -1
  67. package/dist/components/combobox-types.d.ts.map +1 -1
  68. package/dist/components/combobox-utils.cjs +26 -0
  69. package/dist/components/combobox-utils.cjs.map +1 -1
  70. package/dist/components/combobox-utils.d.ts +10 -0
  71. package/dist/components/combobox-utils.d.ts.map +1 -1
  72. package/dist/components/combobox-utils.js +26 -0
  73. package/dist/components/combobox-utils.js.map +1 -1
  74. package/dist/components/filter-bar-utils.cjs +5 -0
  75. package/dist/components/filter-bar-utils.cjs.map +1 -1
  76. package/dist/components/filter-bar-utils.d.ts.map +1 -1
  77. package/dist/components/filter-bar-utils.js +5 -0
  78. package/dist/components/filter-bar-utils.js.map +1 -1
  79. package/dist/components/json-schema-form-accordion-array.cjs +290 -0
  80. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
  81. package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
  82. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
  83. package/dist/components/json-schema-form-accordion-array.js +290 -0
  84. package/dist/components/json-schema-form-accordion-array.js.map +1 -0
  85. package/dist/components/json-schema-form-array.cjs +99 -110
  86. package/dist/components/json-schema-form-array.cjs.map +1 -1
  87. package/dist/components/json-schema-form-array.d.ts +1 -1
  88. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  89. package/dist/components/json-schema-form-array.js +98 -109
  90. package/dist/components/json-schema-form-array.js.map +1 -1
  91. package/dist/components/json-schema-form-error-display.cjs +4 -2
  92. package/dist/components/json-schema-form-error-display.cjs.map +1 -1
  93. package/dist/components/json-schema-form-error-display.d.ts +4 -2
  94. package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
  95. package/dist/components/json-schema-form-error-display.js +4 -2
  96. package/dist/components/json-schema-form-error-display.js.map +1 -1
  97. package/dist/components/json-schema-form-extensions.cjs +10 -0
  98. package/dist/components/json-schema-form-extensions.cjs.map +1 -0
  99. package/dist/components/json-schema-form-extensions.d.ts +8 -0
  100. package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
  101. package/dist/components/json-schema-form-extensions.js +10 -0
  102. package/dist/components/json-schema-form-extensions.js.map +1 -0
  103. package/dist/components/json-schema-form-fields.cjs +25 -101
  104. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  105. package/dist/components/json-schema-form-fields.d.ts +1 -32
  106. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-fields.js +28 -104
  108. package/dist/components/json-schema-form-fields.js.map +1 -1
  109. package/dist/components/json-schema-form-item-summary.cjs +131 -0
  110. package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
  111. package/dist/components/json-schema-form-item-summary.d.ts +13 -0
  112. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
  113. package/dist/components/json-schema-form-item-summary.js +131 -0
  114. package/dist/components/json-schema-form-item-summary.js.map +1 -0
  115. package/dist/components/json-schema-form-layout.cjs +156 -0
  116. package/dist/components/json-schema-form-layout.cjs.map +1 -0
  117. package/dist/components/json-schema-form-layout.d.ts +43 -0
  118. package/dist/components/json-schema-form-layout.d.ts.map +1 -0
  119. package/dist/components/json-schema-form-layout.js +156 -0
  120. package/dist/components/json-schema-form-layout.js.map +1 -0
  121. package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
  122. package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
  123. package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
  124. package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
  125. package/dist/components/json-schema-form-lookup-tree.js +149 -0
  126. package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
  127. package/dist/components/json-schema-form-object.cjs +11 -4
  128. package/dist/components/json-schema-form-object.cjs.map +1 -1
  129. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  130. package/dist/components/json-schema-form-object.js +11 -4
  131. package/dist/components/json-schema-form-object.js.map +1 -1
  132. package/dist/components/json-schema-form-render.cjs +51 -28
  133. package/dist/components/json-schema-form-render.cjs.map +1 -1
  134. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  135. package/dist/components/json-schema-form-render.js +51 -28
  136. package/dist/components/json-schema-form-render.js.map +1 -1
  137. package/dist/components/json-schema-form-resolve.cjs +62 -13
  138. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  139. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  140. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  141. package/dist/components/json-schema-form-resolve.js +62 -13
  142. package/dist/components/json-schema-form-resolve.js.map +1 -1
  143. package/dist/components/json-schema-form-table-array.cjs +123 -0
  144. package/dist/components/json-schema-form-table-array.cjs.map +1 -0
  145. package/dist/components/json-schema-form-table-array.d.ts +7 -0
  146. package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-table-array.js +123 -0
  148. package/dist/components/json-schema-form-table-array.js.map +1 -0
  149. package/dist/components/json-schema-form-tone.cjs +34 -0
  150. package/dist/components/json-schema-form-tone.cjs.map +1 -0
  151. package/dist/components/json-schema-form-tone.d.ts +8 -0
  152. package/dist/components/json-schema-form-tone.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-tone.js +34 -0
  154. package/dist/components/json-schema-form-tone.js.map +1 -0
  155. package/dist/components/json-schema-form-types.d.ts +79 -10
  156. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  157. package/dist/components/json-schema-form-utils.cjs +47 -4
  158. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  159. package/dist/components/json-schema-form-utils.d.ts +19 -4
  160. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  161. package/dist/components/json-schema-form-utils.js +47 -4
  162. package/dist/components/json-schema-form-utils.js.map +1 -1
  163. package/dist/components/tri-state.cjs +8 -0
  164. package/dist/components/tri-state.cjs.map +1 -0
  165. package/dist/components/tri-state.d.ts +5 -0
  166. package/dist/components/tri-state.d.ts.map +1 -0
  167. package/dist/components/tri-state.js +8 -0
  168. package/dist/components/tri-state.js.map +1 -0
  169. package/dist/components/useComboboxLayout.cjs +59 -0
  170. package/dist/components/useComboboxLayout.cjs.map +1 -0
  171. package/dist/components/useComboboxLayout.d.ts +5 -0
  172. package/dist/components/useComboboxLayout.d.ts.map +1 -0
  173. package/dist/components/useComboboxLayout.js +59 -0
  174. package/dist/components/useComboboxLayout.js.map +1 -0
  175. package/dist/components.cjs +21 -0
  176. package/dist/components.cjs.map +1 -1
  177. package/dist/components.d.ts +14 -4
  178. package/dist/components.d.ts.map +1 -1
  179. package/dist/components.js +22 -1
  180. package/dist/components.js.map +1 -1
  181. package/dist/data/Clicky.cjs +51 -2
  182. package/dist/data/Clicky.cjs.map +1 -1
  183. package/dist/data/Clicky.d.ts +10 -1
  184. package/dist/data/Clicky.d.ts.map +1 -1
  185. package/dist/data/Clicky.js +51 -2
  186. package/dist/data/Clicky.js.map +1 -1
  187. package/dist/data/DataTable.cjs +185 -53
  188. package/dist/data/DataTable.cjs.map +1 -1
  189. package/dist/data/DataTable.d.ts +63 -3
  190. package/dist/data/DataTable.d.ts.map +1 -1
  191. package/dist/data/DataTable.js +185 -53
  192. package/dist/data/DataTable.js.map +1 -1
  193. package/dist/data/LogsTable.cjs +10 -1
  194. package/dist/data/LogsTable.cjs.map +1 -1
  195. package/dist/data/LogsTable.d.ts +3 -1
  196. package/dist/data/LogsTable.d.ts.map +1 -1
  197. package/dist/data/LogsTable.js +10 -1
  198. package/dist/data/LogsTable.js.map +1 -1
  199. package/dist/data/TaskManager.cjs +99 -14
  200. package/dist/data/TaskManager.cjs.map +1 -1
  201. package/dist/data/TaskManager.d.ts.map +1 -1
  202. package/dist/data/TaskManager.js +100 -15
  203. package/dist/data/TaskManager.js.map +1 -1
  204. package/dist/data/TaskProgress.cjs +50 -11
  205. package/dist/data/TaskProgress.cjs.map +1 -1
  206. package/dist/data/TaskProgress.d.ts +2 -1
  207. package/dist/data/TaskProgress.d.ts.map +1 -1
  208. package/dist/data/TaskProgress.js +50 -11
  209. package/dist/data/TaskProgress.js.map +1 -1
  210. package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
  211. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
  212. package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
  213. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
  214. package/dist/data/ai/AdvancedChatConfig.js +289 -0
  215. package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
  216. package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
  217. package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
  218. package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
  219. package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
  220. package/dist/data/ai/AdvancedCostsPanel.js +120 -0
  221. package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
  222. package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
  223. package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
  224. package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
  225. package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
  226. package/dist/data/ai/ChatWindow.catalogs.js +74 -0
  227. package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
  228. package/dist/data/ai/ChatWindow.cjs +78 -100
  229. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  230. package/dist/data/ai/ChatWindow.d.ts +1 -1
  231. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  232. package/dist/data/ai/ChatWindow.js +80 -102
  233. package/dist/data/ai/ChatWindow.js.map +1 -1
  234. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  235. package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
  236. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  237. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  238. package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
  239. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
  240. package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
  241. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
  242. package/dist/data/ai/ChatWindow.runtime.js +120 -0
  243. package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
  244. package/dist/data/ai/ChatWindow.thread.cjs +1 -1
  245. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -1
  246. package/dist/data/ai/ChatWindow.thread.js +1 -1
  247. package/dist/data/ai/ChatWindow.thread.js.map +1 -1
  248. package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
  249. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  250. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
  251. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  252. package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
  253. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  254. package/dist/data/ai/ChatWindow.types.d.ts +13 -5
  255. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  256. package/dist/data/ai/ChatWindowManager.cjs +3 -1
  257. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  258. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  259. package/dist/data/ai/ChatWindowManager.js +3 -1
  260. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  261. package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
  262. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  263. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
  264. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  265. package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
  266. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  267. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  268. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  269. package/dist/data/ai/PromptRunEditor/index.d.ts +1 -1
  270. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  271. package/dist/data/ai/PromptRunEditor/index.js +2 -2
  272. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  273. package/dist/data/ai/RuntimeModePicker.cjs +1 -1
  274. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  275. package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
  276. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  277. package/dist/data/ai/RuntimeModePicker.js +1 -1
  278. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  279. package/dist/data/ai/SessionInspector.files.cjs +26 -43
  280. package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
  281. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
  282. package/dist/data/ai/SessionInspector.files.js +26 -43
  283. package/dist/data/ai/SessionInspector.files.js.map +1 -1
  284. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  285. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  286. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  287. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  288. package/dist/data/ai/SessionInspector.model.cjs +1 -1
  289. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  290. package/dist/data/ai/SessionInspector.model.js +1 -1
  291. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  292. package/dist/data/ai/SessionViewer.rows.cjs +4 -16
  293. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  294. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  295. package/dist/data/ai/SessionViewer.rows.js +4 -16
  296. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  297. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
  298. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  299. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
  300. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  301. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
  302. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  303. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  304. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
  305. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  306. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  307. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  308. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  309. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
  310. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  311. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  312. package/dist/data/ai/ThreadPicker.cjs +65 -3
  313. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  314. package/dist/data/ai/ThreadPicker.d.ts +11 -5
  315. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  316. package/dist/data/ai/ThreadPicker.js +65 -3
  317. package/dist/data/ai/ThreadPicker.js.map +1 -1
  318. package/dist/data/ai/ToolPreferences.cjs +65 -685
  319. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  320. package/dist/data/ai/ToolPreferences.d.ts +15 -17
  321. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  322. package/dist/data/ai/ToolPreferences.js +64 -683
  323. package/dist/data/ai/ToolPreferences.js.map +1 -1
  324. package/dist/data/ai/ToolPreferences.model.cjs +148 -0
  325. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
  326. package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
  327. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
  328. package/dist/data/ai/ToolPreferences.model.js +148 -0
  329. package/dist/data/ai/ToolPreferences.model.js.map +1 -0
  330. package/dist/data/ai/ToolPreferencesList.cjs +270 -0
  331. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
  332. package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
  333. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
  334. package/dist/data/ai/ToolPreferencesList.js +270 -0
  335. package/dist/data/ai/ToolPreferencesList.js.map +1 -0
  336. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  337. package/dist/data/ai/agent-action-icons.js.map +1 -1
  338. package/dist/data/ai/chat-window-context.cjs +4 -1
  339. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  340. package/dist/data/ai/chat-window-context.d.ts +7 -0
  341. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  342. package/dist/data/ai/chat-window-context.js +4 -1
  343. package/dist/data/ai/chat-window-context.js.map +1 -1
  344. package/dist/data/ai/index.d.ts +6 -3
  345. package/dist/data/ai/index.d.ts.map +1 -1
  346. package/dist/data/ai/session-tones.cjs +67 -0
  347. package/dist/data/ai/session-tones.cjs.map +1 -0
  348. package/dist/data/ai/session-tones.d.ts +34 -0
  349. package/dist/data/ai/session-tones.d.ts.map +1 -0
  350. package/dist/data/ai/session-tones.js +67 -0
  351. package/dist/data/ai/session-tones.js.map +1 -0
  352. package/dist/data/ai/thread-costs.cjs +39 -0
  353. package/dist/data/ai/thread-costs.cjs.map +1 -0
  354. package/dist/data/ai/thread-costs.d.ts +62 -0
  355. package/dist/data/ai/thread-costs.d.ts.map +1 -0
  356. package/dist/data/ai/thread-costs.js +39 -0
  357. package/dist/data/ai/thread-costs.js.map +1 -0
  358. package/dist/data/cells/CellFilterActions.cjs +68 -0
  359. package/dist/data/cells/CellFilterActions.cjs.map +1 -0
  360. package/dist/data/cells/CellFilterActions.d.ts +15 -0
  361. package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
  362. package/dist/data/cells/CellFilterActions.js +68 -0
  363. package/dist/data/cells/CellFilterActions.js.map +1 -0
  364. package/dist/data/chat/Chat.cjs +156 -113
  365. package/dist/data/chat/Chat.cjs.map +1 -1
  366. package/dist/data/chat/Chat.d.ts +24 -7
  367. package/dist/data/chat/Chat.d.ts.map +1 -1
  368. package/dist/data/chat/Chat.fixtures.cjs +48 -3
  369. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  370. package/dist/data/chat/Chat.fixtures.d.ts +1 -1
  371. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
  372. package/dist/data/chat/Chat.fixtures.js +48 -3
  373. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  374. package/dist/data/chat/Chat.js +160 -117
  375. package/dist/data/chat/Chat.js.map +1 -1
  376. package/dist/data/chat/Chat.runtime.cjs +63 -0
  377. package/dist/data/chat/Chat.runtime.cjs.map +1 -0
  378. package/dist/data/chat/Chat.runtime.d.ts +16 -0
  379. package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
  380. package/dist/data/chat/Chat.runtime.js +63 -0
  381. package/dist/data/chat/Chat.runtime.js.map +1 -0
  382. package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
  383. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
  384. package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
  385. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
  386. package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
  387. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
  388. package/dist/data/chat/ToolCall.cjs +86 -24
  389. package/dist/data/chat/ToolCall.cjs.map +1 -1
  390. package/dist/data/chat/ToolCall.d.ts +12 -5
  391. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  392. package/dist/data/chat/ToolCall.js +86 -24
  393. package/dist/data/chat/ToolCall.js.map +1 -1
  394. package/dist/data/chat/approval.cjs +49 -6
  395. package/dist/data/chat/approval.cjs.map +1 -1
  396. package/dist/data/chat/approval.d.ts +11 -4
  397. package/dist/data/chat/approval.d.ts.map +1 -1
  398. package/dist/data/chat/approval.js +49 -6
  399. package/dist/data/chat/approval.js.map +1 -1
  400. package/dist/data/chat/index.d.ts +5 -3
  401. package/dist/data/chat/index.d.ts.map +1 -1
  402. package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
  403. package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
  404. package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
  405. package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
  406. package/dist/data/chat/tool-render/ToolArgs.js +50 -0
  407. package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
  408. package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
  409. package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
  410. package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
  411. package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
  412. package/dist/data/chat/tool-render/ToolParams.js +155 -0
  413. package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
  414. package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
  415. package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
  416. package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
  417. package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
  418. package/dist/data/chat/tool-render/ToolValue.js +140 -0
  419. package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
  420. package/dist/data/chat/tool-render/adapter.cjs +48 -0
  421. package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
  422. package/dist/data/chat/tool-render/adapter.d.ts +57 -0
  423. package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
  424. package/dist/data/chat/tool-render/adapter.js +48 -0
  425. package/dist/data/chat/tool-render/adapter.js.map +1 -0
  426. package/dist/data/chat/tool-render/context.cjs +16 -0
  427. package/dist/data/chat/tool-render/context.cjs.map +1 -0
  428. package/dist/data/chat/tool-render/context.d.ts +6 -0
  429. package/dist/data/chat/tool-render/context.d.ts.map +1 -0
  430. package/dist/data/chat/tool-render/context.js +16 -0
  431. package/dist/data/chat/tool-render/context.js.map +1 -0
  432. package/dist/data/chat/tool-render/defaults.cjs +45 -0
  433. package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
  434. package/dist/data/chat/tool-render/defaults.d.ts +11 -0
  435. package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
  436. package/dist/data/chat/tool-render/defaults.js +45 -0
  437. package/dist/data/chat/tool-render/defaults.js.map +1 -0
  438. package/dist/data/chat/tool-render/index.d.ts +13 -0
  439. package/dist/data/chat/tool-render/index.d.ts.map +1 -0
  440. package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
  441. package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
  442. package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
  443. package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
  444. package/dist/data/chat/tool-render/known-tool-views.js +208 -0
  445. package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
  446. package/dist/data/chat/tool-render/known-tools.cjs +58 -0
  447. package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
  448. package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
  449. package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
  450. package/dist/data/chat/tool-render/known-tools.js +58 -0
  451. package/dist/data/chat/tool-render/known-tools.js.map +1 -0
  452. package/dist/data/chat/tool-render/normalize.cjs +42 -0
  453. package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
  454. package/dist/data/chat/tool-render/normalize.d.ts +13 -0
  455. package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
  456. package/dist/data/chat/tool-render/normalize.js +42 -0
  457. package/dist/data/chat/tool-render/normalize.js.map +1 -0
  458. package/dist/data/chat/tool-render/registry.cjs +14 -0
  459. package/dist/data/chat/tool-render/registry.cjs.map +1 -0
  460. package/dist/data/chat/tool-render/registry.d.ts +7 -0
  461. package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
  462. package/dist/data/chat/tool-render/registry.js +14 -0
  463. package/dist/data/chat/tool-render/registry.js.map +1 -0
  464. package/dist/data/chat/tool-render/schema.cjs +57 -0
  465. package/dist/data/chat/tool-render/schema.cjs.map +1 -0
  466. package/dist/data/chat/tool-render/schema.d.ts +28 -0
  467. package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
  468. package/dist/data/chat/tool-render/schema.js +57 -0
  469. package/dist/data/chat/tool-render/schema.js.map +1 -0
  470. package/dist/data/chat/tool-render/shape.cjs +94 -0
  471. package/dist/data/chat/tool-render/shape.cjs.map +1 -0
  472. package/dist/data/chat/tool-render/shape.d.ts +39 -0
  473. package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
  474. package/dist/data/chat/tool-render/shape.js +94 -0
  475. package/dist/data/chat/tool-render/shape.js.map +1 -0
  476. package/dist/data/chat/tool-render/summary.cjs +34 -0
  477. package/dist/data/chat/tool-render/summary.cjs.map +1 -0
  478. package/dist/data/chat/tool-render/summary.d.ts +8 -0
  479. package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
  480. package/dist/data/chat/tool-render/summary.js +34 -0
  481. package/dist/data/chat/tool-render/summary.js.map +1 -0
  482. package/dist/data/chat/types.cjs.map +1 -1
  483. package/dist/data/chat/types.d.ts +7 -0
  484. package/dist/data/chat/types.d.ts.map +1 -1
  485. package/dist/data/chat/types.js.map +1 -1
  486. package/dist/data/chat/usage-snapshot.cjs +17 -0
  487. package/dist/data/chat/usage-snapshot.cjs.map +1 -0
  488. package/dist/data/chat/usage-snapshot.d.ts +21 -0
  489. package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
  490. package/dist/data/chat/usage-snapshot.js +17 -0
  491. package/dist/data/chat/usage-snapshot.js.map +1 -0
  492. package/dist/data/data-table-filter-values.cjs +83 -0
  493. package/dist/data/data-table-filter-values.cjs.map +1 -0
  494. package/dist/data/data-table-filter-values.d.ts +18 -0
  495. package/dist/data/data-table-filter-values.d.ts.map +1 -0
  496. package/dist/data/data-table-filter-values.js +83 -0
  497. package/dist/data/data-table-filter-values.js.map +1 -0
  498. package/dist/data/data-table-server-filters.cjs +171 -0
  499. package/dist/data/data-table-server-filters.cjs.map +1 -0
  500. package/dist/data/data-table-server-filters.d.ts +128 -0
  501. package/dist/data/data-table-server-filters.d.ts.map +1 -0
  502. package/dist/data/data-table-server-filters.js +171 -0
  503. package/dist/data/data-table-server-filters.js.map +1 -0
  504. package/dist/data/query-browser/QueryBrowser.cjs +96 -19
  505. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  506. package/dist/data/query-browser/QueryBrowser.d.ts +37 -6
  507. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  508. package/dist/data/query-browser/QueryBrowser.js +96 -19
  509. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  510. package/dist/data/query-browser/index.d.ts +1 -1
  511. package/dist/data/query-browser/index.d.ts.map +1 -1
  512. package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
  513. package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
  514. package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
  515. package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
  516. package/dist/data/runtime/ProviderStatusPanel.js +187 -0
  517. package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
  518. package/dist/data/runtime/RuntimeBar.cjs +147 -0
  519. package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
  520. package/dist/data/{ai → runtime}/RuntimeBar.d.ts +8 -6
  521. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
  522. package/dist/data/runtime/RuntimeBar.js +147 -0
  523. package/dist/data/runtime/RuntimeBar.js.map +1 -0
  524. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
  525. package/dist/data/{ai → runtime}/RuntimeBar.model.d.ts +2 -2
  526. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
  527. package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
  528. package/dist/data/{ai → runtime}/RuntimeBarCombo.cjs +25 -30
  529. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
  530. package/dist/data/{ai → runtime}/RuntimeBarCombo.d.ts +4 -3
  531. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
  532. package/dist/data/{ai → runtime}/RuntimeBarCombo.js +25 -30
  533. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
  534. package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +54 -120
  535. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
  536. package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
  537. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
  538. package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +58 -124
  539. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
  540. package/dist/data/runtime/availability.cjs +11 -0
  541. package/dist/data/runtime/availability.cjs.map +1 -0
  542. package/dist/data/runtime/availability.d.ts +6 -0
  543. package/dist/data/runtime/availability.d.ts.map +1 -0
  544. package/dist/data/runtime/availability.js +11 -0
  545. package/dist/data/runtime/availability.js.map +1 -0
  546. package/dist/data/runtime/model-capabilities.cjs.map +1 -0
  547. package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
  548. package/dist/data/runtime/model-capabilities.js.map +1 -0
  549. package/dist/data/runtime/provider-status.cjs +106 -0
  550. package/dist/data/runtime/provider-status.cjs.map +1 -0
  551. package/dist/data/runtime/provider-status.d.ts +24 -0
  552. package/dist/data/runtime/provider-status.d.ts.map +1 -0
  553. package/dist/data/runtime/provider-status.js +106 -0
  554. package/dist/data/runtime/provider-status.js.map +1 -0
  555. package/dist/data/{ai → runtime}/runtime-mode.cjs +119 -27
  556. package/dist/data/runtime/runtime-mode.cjs.map +1 -0
  557. package/dist/data/{ai → runtime}/runtime-mode.d.ts +7 -1
  558. package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
  559. package/dist/data/{ai → runtime}/runtime-mode.js +120 -28
  560. package/dist/data/runtime/runtime-mode.js.map +1 -0
  561. package/dist/data/task-query-keys.cjs +26 -0
  562. package/dist/data/task-query-keys.cjs.map +1 -0
  563. package/dist/data/task-query-keys.d.ts +27 -0
  564. package/dist/data/task-query-keys.d.ts.map +1 -0
  565. package/dist/data/task-query-keys.js +26 -0
  566. package/dist/data/task-query-keys.js.map +1 -0
  567. package/dist/data/version-info.cjs +3 -3
  568. package/dist/data/version-info.js +3 -3
  569. package/dist/data.cjs +16 -0
  570. package/dist/data.cjs.map +1 -1
  571. package/dist/data.d.ts +6 -2
  572. package/dist/data.d.ts.map +1 -1
  573. package/dist/data.js +16 -0
  574. package/dist/data.js.map +1 -1
  575. package/dist/hooks/use-hotkey.cjs +6 -1
  576. package/dist/hooks/use-hotkey.cjs.map +1 -1
  577. package/dist/hooks/use-hotkey.d.ts.map +1 -1
  578. package/dist/hooks/use-hotkey.js +6 -1
  579. package/dist/hooks/use-hotkey.js.map +1 -1
  580. package/dist/hooks/use-task-run.cjs +7 -4
  581. package/dist/hooks/use-task-run.cjs.map +1 -1
  582. package/dist/hooks/use-task-run.d.ts +12 -0
  583. package/dist/hooks/use-task-run.d.ts.map +1 -1
  584. package/dist/hooks/use-task-run.js +7 -4
  585. package/dist/hooks/use-task-run.js.map +1 -1
  586. package/dist/icons/index.d.ts +1 -0
  587. package/dist/icons/index.d.ts.map +1 -1
  588. package/dist/icons/registry.cjs +692 -0
  589. package/dist/icons/registry.cjs.map +1 -0
  590. package/dist/icons/registry.d.ts +21 -0
  591. package/dist/icons/registry.d.ts.map +1 -0
  592. package/dist/icons/registry.js +692 -0
  593. package/dist/icons/registry.js.map +1 -0
  594. package/dist/icons.cjs +3 -0
  595. package/dist/icons.cjs.map +1 -1
  596. package/dist/icons.js +4 -1
  597. package/dist/icons.js.map +1 -1
  598. package/dist/index.cjs +47 -0
  599. package/dist/index.cjs.map +1 -1
  600. package/dist/index.js +49 -2
  601. package/dist/index.js.map +1 -1
  602. package/dist/layout/AppShell.cjs +92 -56
  603. package/dist/layout/AppShell.cjs.map +1 -1
  604. package/dist/layout/AppShell.d.ts +49 -1
  605. package/dist/layout/AppShell.d.ts.map +1 -1
  606. package/dist/layout/AppShell.js +92 -56
  607. package/dist/layout/AppShell.js.map +1 -1
  608. package/dist/layout/AppShell.nav.cjs +144 -19
  609. package/dist/layout/AppShell.nav.cjs.map +1 -1
  610. package/dist/layout/AppShell.nav.d.ts +6 -1
  611. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  612. package/dist/layout/AppShell.nav.js +144 -19
  613. package/dist/layout/AppShell.nav.js.map +1 -1
  614. package/dist/layout/SplitPane.cjs +23 -7
  615. package/dist/layout/SplitPane.cjs.map +1 -1
  616. package/dist/layout/SplitPane.d.ts +3 -1
  617. package/dist/layout/SplitPane.d.ts.map +1 -1
  618. package/dist/layout/SplitPane.js +23 -7
  619. package/dist/layout/SplitPane.js.map +1 -1
  620. package/dist/lib/format.cjs +86 -4
  621. package/dist/lib/format.cjs.map +1 -1
  622. package/dist/lib/format.d.ts +69 -0
  623. package/dist/lib/format.d.ts.map +1 -1
  624. package/dist/lib/format.js +86 -4
  625. package/dist/lib/format.js.map +1 -1
  626. package/dist/lib/path-tree.cjs +69 -0
  627. package/dist/lib/path-tree.cjs.map +1 -0
  628. package/dist/lib/path-tree.d.ts +54 -0
  629. package/dist/lib/path-tree.d.ts.map +1 -0
  630. package/dist/lib/path-tree.js +69 -0
  631. package/dist/lib/path-tree.js.map +1 -0
  632. package/dist/monaco.d.ts +1 -0
  633. package/dist/monaco.d.ts.map +1 -1
  634. package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
  635. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  636. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  637. package/dist/overlay/DropdownMenuSubmenu.js +13 -7
  638. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  639. package/dist/overlay/Tour.cjs +173 -0
  640. package/dist/overlay/Tour.cjs.map +1 -0
  641. package/dist/overlay/Tour.d.ts +61 -0
  642. package/dist/overlay/Tour.d.ts.map +1 -0
  643. package/dist/overlay/Tour.js +173 -0
  644. package/dist/overlay/Tour.js.map +1 -0
  645. package/dist/overlay/TourCard.cjs +108 -0
  646. package/dist/overlay/TourCard.cjs.map +1 -0
  647. package/dist/overlay/TourCard.d.ts +23 -0
  648. package/dist/overlay/TourCard.d.ts.map +1 -0
  649. package/dist/overlay/TourCard.js +108 -0
  650. package/dist/overlay/TourCard.js.map +1 -0
  651. package/dist/overlay/TourProvider.cjs +160 -0
  652. package/dist/overlay/TourProvider.cjs.map +1 -0
  653. package/dist/overlay/TourProvider.d.ts +31 -0
  654. package/dist/overlay/TourProvider.d.ts.map +1 -0
  655. package/dist/overlay/TourProvider.js +160 -0
  656. package/dist/overlay/TourProvider.js.map +1 -0
  657. package/dist/overlay/TourSpotlight.cjs +47 -0
  658. package/dist/overlay/TourSpotlight.cjs.map +1 -0
  659. package/dist/overlay/TourSpotlight.d.ts +12 -0
  660. package/dist/overlay/TourSpotlight.d.ts.map +1 -0
  661. package/dist/overlay/TourSpotlight.js +47 -0
  662. package/dist/overlay/TourSpotlight.js.map +1 -0
  663. package/dist/overlay/modalStack.cjs +18 -4
  664. package/dist/overlay/modalStack.cjs.map +1 -1
  665. package/dist/overlay/modalStack.d.ts +10 -2
  666. package/dist/overlay/modalStack.d.ts.map +1 -1
  667. package/dist/overlay/modalStack.js +19 -5
  668. package/dist/overlay/modalStack.js.map +1 -1
  669. package/dist/overlay/tour-anchor.cjs +114 -0
  670. package/dist/overlay/tour-anchor.cjs.map +1 -0
  671. package/dist/overlay/tour-anchor.d.ts +30 -0
  672. package/dist/overlay/tour-anchor.d.ts.map +1 -0
  673. package/dist/overlay/tour-anchor.js +114 -0
  674. package/dist/overlay/tour-anchor.js.map +1 -0
  675. package/dist/overlay/tour-context.cjs +12 -0
  676. package/dist/overlay/tour-context.cjs.map +1 -0
  677. package/dist/overlay/tour-context.d.ts +40 -0
  678. package/dist/overlay/tour-context.d.ts.map +1 -0
  679. package/dist/overlay/tour-context.js +12 -0
  680. package/dist/overlay/tour-context.js.map +1 -0
  681. package/dist/overlay/tour-geometry.cjs +65 -0
  682. package/dist/overlay/tour-geometry.cjs.map +1 -0
  683. package/dist/overlay/tour-geometry.d.ts +47 -0
  684. package/dist/overlay/tour-geometry.d.ts.map +1 -0
  685. package/dist/overlay/tour-geometry.js +65 -0
  686. package/dist/overlay/tour-geometry.js.map +1 -0
  687. package/dist/overlay/tour-model.cjs +79 -0
  688. package/dist/overlay/tour-model.cjs.map +1 -0
  689. package/dist/overlay/tour-model.d.ts +29 -0
  690. package/dist/overlay/tour-model.d.ts.map +1 -0
  691. package/dist/overlay/tour-model.js +79 -0
  692. package/dist/overlay/tour-model.js.map +1 -0
  693. package/dist/overlay/tour-progress.cjs +54 -0
  694. package/dist/overlay/tour-progress.cjs.map +1 -0
  695. package/dist/overlay/tour-progress.d.ts +40 -0
  696. package/dist/overlay/tour-progress.d.ts.map +1 -0
  697. package/dist/overlay/tour-progress.js +54 -0
  698. package/dist/overlay/tour-progress.js.map +1 -0
  699. package/dist/overlay/tour-types.d.ts +144 -0
  700. package/dist/overlay/tour-types.d.ts.map +1 -0
  701. package/dist/overlay/use-tour-anchor.cjs +43 -0
  702. package/dist/overlay/use-tour-anchor.cjs.map +1 -0
  703. package/dist/overlay/use-tour-anchor.d.ts +23 -0
  704. package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
  705. package/dist/overlay/use-tour-anchor.js +43 -0
  706. package/dist/overlay/use-tour-anchor.js.map +1 -0
  707. package/dist/overlay/use-tour-rect.cjs +33 -0
  708. package/dist/overlay/use-tour-rect.cjs.map +1 -0
  709. package/dist/overlay/use-tour-rect.d.ts +12 -0
  710. package/dist/overlay/use-tour-rect.d.ts.map +1 -0
  711. package/dist/overlay/use-tour-rect.js +33 -0
  712. package/dist/overlay/use-tour-rect.js.map +1 -0
  713. package/dist/overlay/use-tour-step.cjs +66 -0
  714. package/dist/overlay/use-tour-step.cjs.map +1 -0
  715. package/dist/overlay/use-tour-step.d.ts +45 -0
  716. package/dist/overlay/use-tour-step.d.ts.map +1 -0
  717. package/dist/overlay/use-tour-step.js +66 -0
  718. package/dist/overlay/use-tour-step.js.map +1 -0
  719. package/dist/overlay/zIndex.cjs +8 -0
  720. package/dist/overlay/zIndex.cjs.map +1 -1
  721. package/dist/overlay/zIndex.d.ts +8 -0
  722. package/dist/overlay/zIndex.d.ts.map +1 -1
  723. package/dist/overlay/zIndex.js +8 -0
  724. package/dist/overlay/zIndex.js.map +1 -1
  725. package/dist/rpc/CommandOutput.cjs +8 -0
  726. package/dist/rpc/CommandOutput.cjs.map +1 -1
  727. package/dist/rpc/CommandOutput.d.ts +4 -1
  728. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  729. package/dist/rpc/CommandOutput.js +8 -0
  730. package/dist/rpc/CommandOutput.js.map +1 -1
  731. package/dist/rpc/EntityExplorerApp.cjs +10 -16
  732. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  733. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  734. package/dist/rpc/EntityExplorerApp.js +10 -16
  735. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  736. package/dist/rpc/OperationActionBar.cjs +1 -1
  737. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  738. package/dist/rpc/OperationActionBar.js +1 -1
  739. package/dist/rpc/OperationActionBar.js.map +1 -1
  740. package/dist/rpc/OperationCatalog.cjs +83 -7
  741. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  742. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  743. package/dist/rpc/OperationCatalog.js +84 -8
  744. package/dist/rpc/OperationCatalog.js.map +1 -1
  745. package/dist/rpc/OperationResultView.cjs +2 -0
  746. package/dist/rpc/OperationResultView.cjs.map +1 -1
  747. package/dist/rpc/OperationResultView.d.ts +6 -0
  748. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  749. package/dist/rpc/OperationResultView.js +2 -0
  750. package/dist/rpc/OperationResultView.js.map +1 -1
  751. package/dist/rpc/SchemaActionForm.cjs +2 -21
  752. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  753. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  754. package/dist/rpc/SchemaActionForm.js +3 -22
  755. package/dist/rpc/SchemaActionForm.js.map +1 -1
  756. package/dist/rpc/apiClient.cjs +16 -2
  757. package/dist/rpc/apiClient.cjs.map +1 -1
  758. package/dist/rpc/apiClient.d.ts.map +1 -1
  759. package/dist/rpc/apiClient.js +16 -2
  760. package/dist/rpc/apiClient.js.map +1 -1
  761. package/dist/rpc/formMetadata.cjs +89 -49
  762. package/dist/rpc/formMetadata.cjs.map +1 -1
  763. package/dist/rpc/formMetadata.d.ts +14 -6
  764. package/dist/rpc/formMetadata.d.ts.map +1 -1
  765. package/dist/rpc/formMetadata.js +87 -47
  766. package/dist/rpc/formMetadata.js.map +1 -1
  767. package/dist/rpc/operationFilterSearch.cjs +23 -0
  768. package/dist/rpc/operationFilterSearch.cjs.map +1 -0
  769. package/dist/rpc/operationFilterSearch.d.ts +22 -0
  770. package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
  771. package/dist/rpc/operationFilterSearch.js +23 -0
  772. package/dist/rpc/operationFilterSearch.js.map +1 -0
  773. package/dist/rpc/operationLookupFetcher.cjs +28 -0
  774. package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
  775. package/dist/rpc/operationLookupFetcher.d.ts +17 -0
  776. package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
  777. package/dist/rpc/operationLookupFetcher.js +28 -0
  778. package/dist/rpc/operationLookupFetcher.js.map +1 -0
  779. package/dist/rpc/surfaceNav.cjs +77 -0
  780. package/dist/rpc/surfaceNav.cjs.map +1 -0
  781. package/dist/rpc/surfaceNav.d.ts +19 -0
  782. package/dist/rpc/surfaceNav.d.ts.map +1 -0
  783. package/dist/rpc/surfaceNav.js +77 -0
  784. package/dist/rpc/surfaceNav.js.map +1 -0
  785. package/dist/rpc/types.cjs.map +1 -1
  786. package/dist/rpc/types.d.ts +12 -1
  787. package/dist/rpc/types.d.ts.map +1 -1
  788. package/dist/rpc/types.js.map +1 -1
  789. package/dist/rpc.cjs +2 -0
  790. package/dist/rpc.cjs.map +1 -1
  791. package/dist/rpc.d.ts +1 -0
  792. package/dist/rpc.d.ts.map +1 -1
  793. package/dist/rpc.js +2 -0
  794. package/dist/rpc.js.map +1 -1
  795. package/dist/styles.css +1 -1
  796. package/dist/utils.cjs +8 -0
  797. package/dist/utils.cjs.map +1 -1
  798. package/dist/utils.d.ts +2 -1
  799. package/dist/utils.d.ts.map +1 -1
  800. package/dist/utils.js +10 -2
  801. package/dist/utils.js.map +1 -1
  802. package/package.json +1 -1
  803. package/dist/data/ai/RuntimeBar.cjs.map +0 -1
  804. package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
  805. package/dist/data/ai/RuntimeBar.js.map +0 -1
  806. package/dist/data/ai/RuntimeBar.model.cjs.map +0 -1
  807. package/dist/data/ai/RuntimeBar.model.d.ts.map +0 -1
  808. package/dist/data/ai/RuntimeBar.model.js.map +0 -1
  809. package/dist/data/ai/RuntimeBarCombo.cjs.map +0 -1
  810. package/dist/data/ai/RuntimeBarCombo.d.ts.map +0 -1
  811. package/dist/data/ai/RuntimeBarCombo.js.map +0 -1
  812. package/dist/data/ai/model-capabilities.cjs.map +0 -1
  813. package/dist/data/ai/model-capabilities.d.ts.map +0 -1
  814. package/dist/data/ai/model-capabilities.js.map +0 -1
  815. package/dist/data/ai/runtime-mode.cjs.map +0 -1
  816. package/dist/data/ai/runtime-mode.d.ts.map +0 -1
  817. package/dist/data/ai/runtime-mode.js.map +0 -1
  818. /package/dist/data/{ai → runtime}/RuntimeBar.model.cjs +0 -0
  819. /package/dist/data/{ai → runtime}/RuntimeBar.model.js +0 -0
  820. /package/dist/data/{ai → runtime}/model-capabilities.cjs +0 -0
  821. /package/dist/data/{ai → runtime}/model-capabilities.d.ts +0 -0
  822. /package/dist/data/{ai → runtime}/model-capabilities.js +0 -0
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const react$1 = require("@floating-ui/react");
6
+ const useHotkey = require("../hooks/use-hotkey.cjs");
7
+ const modalStack = require("./modalStack.cjs");
8
+ const TourCard = require("./TourCard.cjs");
9
+ const TourSpotlight = require("./TourSpotlight.cjs");
10
+ const tourModel = require("./tour-model.cjs");
11
+ const useTourAnchor = require("./use-tour-anchor.cjs");
12
+ const useTourRect = require("./use-tour-rect.cjs");
13
+ const useTourStep = require("./use-tour-step.cjs");
14
+ const DEFAULT_ANCHOR_TIMEOUT_MS = 3e3;
15
+ const DEFAULT_NAVIGATE_TIMEOUT_MS = 8e3;
16
+ const DEFAULT_PADDING = 8;
17
+ function viewOf(source) {
18
+ var _a;
19
+ const root = (typeof source === "function" ? source() : source) ?? null;
20
+ if (!root) return null;
21
+ if (root instanceof Document) return root.defaultView;
22
+ return ((_a = root.ownerDocument) == null ? void 0 : _a.defaultView) ?? null;
23
+ }
24
+ function useViewport(root) {
25
+ const [size, setSize] = react.useState({ width: 0, height: 0 });
26
+ react.useEffect(() => {
27
+ const view = viewOf(root);
28
+ if (!view) return;
29
+ const measure = () => setSize({ width: view.innerWidth, height: view.innerHeight });
30
+ measure();
31
+ view.addEventListener("resize", measure);
32
+ return () => view.removeEventListener("resize", measure);
33
+ }, [root]);
34
+ return size;
35
+ }
36
+ function Tour(props) {
37
+ const {
38
+ definition,
39
+ index,
40
+ onIndexChange,
41
+ onComplete,
42
+ onDismiss,
43
+ onNavigate,
44
+ portalContainer,
45
+ missingAnchor = "center",
46
+ anchorTimeoutMs = DEFAULT_ANCHOR_TIMEOUT_MS,
47
+ navigateTimeoutMs = DEFAULT_NAVIGATE_TIMEOUT_MS,
48
+ padding = DEFAULT_PADDING,
49
+ interaction = "allow-anchor",
50
+ keyboard = true,
51
+ closeOnEsc = true,
52
+ scrollIntoView = true,
53
+ onStepError
54
+ } = props;
55
+ const anchorRoot = react.useMemo(
56
+ () => props.anchorRoot ?? (() => typeof document === "undefined" ? null : document),
57
+ [props.anchorRoot]
58
+ );
59
+ const validated = react.useRef(null);
60
+ if (validated.current !== definition.id) {
61
+ tourModel.validateTourDefinition(definition);
62
+ validated.current = definition.id;
63
+ }
64
+ const labels = react.useMemo(
65
+ () => ({ ...tourModel.DEFAULT_TOUR_LABELS, ...props.labels }),
66
+ [props.labels]
67
+ );
68
+ const steps = definition.steps;
69
+ const step = steps[index];
70
+ const total = tourModel.activeSteps(steps).length;
71
+ const viewport = useViewport(anchorRoot);
72
+ const contextSeed = react.useMemo(
73
+ () => step ? { step, index, total, anchor: null, direction: "jump" } : null,
74
+ [step, index, total]
75
+ );
76
+ const { navigating, pendingRoute } = useTourStep.useStepRoute({ step, context: contextSeed, onNavigate });
77
+ const anchorState = useTourAnchor.useTourAnchor({
78
+ root: anchorRoot,
79
+ target: step == null ? void 0 : step.target,
80
+ timeoutMs: pendingRoute || navigating ? navigateTimeoutMs : (step == null ? void 0 : step.timeoutMs) ?? anchorTimeoutMs,
81
+ scrollIntoView,
82
+ key: `${definition.id}:${(step == null ? void 0 : step.id) ?? ""}`
83
+ });
84
+ const context = react.useMemo(
85
+ () => step ? { step, index, total, anchor: anchorState.anchor, direction: "jump" } : null,
86
+ [step, index, total, anchorState.anchor]
87
+ );
88
+ const backIndex = tourModel.nextStepIndex(steps, index, "back");
89
+ const forwardIndex = tourModel.nextStepIndex(steps, index, "next");
90
+ const missing = anchorState.state === "missing";
91
+ const policy = (step == null ? void 0 : step.onMissing) ?? missingAnchor;
92
+ const waiting = missing && (step == null ? void 0 : step.hint) !== void 0 && step.hintOptional !== true;
93
+ const isLast = forwardIndex === null;
94
+ const blocked = waiting && !isLast;
95
+ const goNext = () => {
96
+ if (blocked) return;
97
+ if (forwardIndex === null) onComplete();
98
+ else onIndexChange(forwardIndex, "next");
99
+ };
100
+ const goBack = () => {
101
+ if (backIndex !== null) onIndexChange(backIndex, "back");
102
+ };
103
+ useTourStep.useMissingAnchorPolicy({
104
+ definition,
105
+ step,
106
+ index,
107
+ missing,
108
+ policy,
109
+ onStepError,
110
+ onSkip: (next) => next === null ? onComplete() : onIndexChange(next, "next")
111
+ });
112
+ useTourStep.useActiveAnchorMarker(anchorState.anchor);
113
+ useTourStep.useStepLifecycle({ step, context, settled: anchorState.state !== "waiting" });
114
+ modalStack.useTourLayer(true);
115
+ modalStack.useEscapeLayer(true, onDismiss, closeOnEsc);
116
+ useHotkey.useHotkey("arrowright", goNext, { enabled: keyboard, priority: 10 });
117
+ useHotkey.useHotkey("arrowleft", goBack, { enabled: keyboard, priority: 10 });
118
+ const anchored = anchorState.state === "found" ? anchorState.anchor : null;
119
+ const cutout = useTourRect.useTourRect(anchored, {
120
+ padding: (step == null ? void 0 : step.padding) ?? padding,
121
+ radius: step == null ? void 0 : step.radius
122
+ });
123
+ const liveStatus = navigating ? "navigating" : anchorState.state === "waiting" ? "waiting" : "active";
124
+ const { onStatusChange } = props;
125
+ react.useEffect(() => onStatusChange == null ? void 0 : onStatusChange(liveStatus), [liveStatus, onStatusChange]);
126
+ if (!step) return null;
127
+ if (missing && policy === "skip") return null;
128
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.FloatingPortal, { ...portalContainer ? { root: portalContainer } : {}, children: /* @__PURE__ */ jsxRuntime.jsxs(
129
+ "div",
130
+ {
131
+ "data-tour-id": definition.id,
132
+ "data-tour-step": step.id,
133
+ "data-tour-state": navigating ? "navigating" : anchorState.state,
134
+ children: [
135
+ /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: labels.announce(
136
+ tourModel.displayPosition(steps, index),
137
+ total,
138
+ typeof step.title === "string" ? step.title : step.id
139
+ ) }),
140
+ anchored ? /* @__PURE__ */ jsxRuntime.jsx(
141
+ TourSpotlight.TourSpotlight,
142
+ {
143
+ cutout,
144
+ viewport,
145
+ interaction,
146
+ className: props.backdropClassName
147
+ }
148
+ ) : null,
149
+ /* @__PURE__ */ jsxRuntime.jsx(
150
+ TourCard.TourCard,
151
+ {
152
+ step,
153
+ anchor: anchored,
154
+ current: tourModel.displayPosition(steps, index),
155
+ total,
156
+ labels,
157
+ blockedHint: missing ? step.hint ?? null : null,
158
+ canGoBack: backIndex !== null,
159
+ canGoNext: !blocked,
160
+ isLast,
161
+ ...definition.footer ? { footer: definition.footer } : {},
162
+ onBack: goBack,
163
+ onNext: goNext,
164
+ onDismiss,
165
+ className: props.className
166
+ }
167
+ )
168
+ ]
169
+ }
170
+ ) });
171
+ }
172
+ exports.Tour = Tour;
173
+ //# sourceMappingURL=Tour.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tour.cjs","sources":["../../src/overlay/Tour.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { FloatingPortal } from \"@floating-ui/react\";\nimport { useHotkey } from \"../hooks/use-hotkey\";\nimport { useEscapeLayer, useTourLayer } from \"./modalStack\";\nimport { TourCard } from \"./TourCard\";\nimport { TourSpotlight } from \"./TourSpotlight\";\nimport {\n activeSteps,\n DEFAULT_TOUR_LABELS,\n displayPosition,\n nextStepIndex,\n validateTourDefinition,\n} from \"./tour-model\";\nimport type { TourStatus } from \"./tour-context\";\nimport { useTourAnchor } from \"./use-tour-anchor\";\nimport { useTourRect } from \"./use-tour-rect\";\nimport {\n useActiveAnchorMarker,\n useMissingAnchorPolicy,\n useStepLifecycle,\n useStepRoute,\n} from \"./use-tour-step\";\nimport type {\n TourDefinition,\n TourDirection,\n TourInteraction,\n TourLabels,\n TourMissingAnchor,\n TourRoot,\n TourRootSource,\n TourStepContext,\n TourStepErrorInfo,\n} from \"./tour-types\";\n\n/**\n * Controlled renderer for one running tour: spotlight + step card + the step\n * lifecycle (exit -> navigate -> wait for anchor -> enter).\n *\n * It contains no `document` lookup of its own — every anchor query goes through\n * tour-anchor.ts against a configurable root, which is what lets the same steps\n * run over a mocked UI inside a shadow root.\n */\n\nconst DEFAULT_ANCHOR_TIMEOUT_MS = 3_000;\nconst DEFAULT_NAVIGATE_TIMEOUT_MS = 8_000;\nconst DEFAULT_PADDING = 8;\n\nexport type TourProps = {\n /** The tour to render. Validated on first mount. */\n definition: TourDefinition;\n /** Zero-based index of the visible step, into `definition.steps`. */\n index: number;\n /** Requests a different step; the owner clamps and commits it. */\n onIndexChange: (index: number, direction: TourDirection) => void;\n /** The user reached the end. */\n onComplete: () => void;\n /** The user left early (Skip, Escape, close). */\n onDismiss: () => void;\n /**\n * Called when the entered step's `route` differs from the route the tour is\n * already on. The library never imports a router.\n */\n onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;\n /** Where anchors are queried. Defaults to `document`. */\n anchorRoot?: TourRootSource | undefined;\n /**\n * Element the overlay portals into. Defaults to `document.body`. Pass a node\n * inside your shadow tree so the overlay is shadow-styled and scoped —\n * `FloatingPortal` takes an HTMLElement, not a ShadowRoot, which is why this is\n * a separate prop from `anchorRoot`. Note `position: fixed` resolves against a\n * transformed ancestor, so a transformed container scopes the dim to itself\n * (wanted for an embedded demo, surprising in an app).\n */\n portalContainer?: HTMLElement | null | undefined;\n /** Policy when an anchor never appears. Defaults to `\"center\"`. */\n missingAnchor?: TourMissingAnchor | undefined;\n /** Anchor wait budget for a same-route step, in ms. */\n anchorTimeoutMs?: number | undefined;\n /** Anchor wait budget after `onNavigate`, in ms. */\n navigateTimeoutMs?: number | undefined;\n /** Default spotlight padding in px. */\n padding?: number | undefined;\n /** Pointer behaviour of the dim layer. */\n interaction?: TourInteraction | undefined;\n /**\n * Bind arrow keys to Back/Next. Defaults to true. This preempts arrow-key page\n * scrolling while the tour runs; set false to keep it.\n */\n keyboard?: boolean | undefined;\n /** Dismiss on Escape. Defaults to true. */\n closeOnEsc?: boolean | undefined;\n /** Scroll each anchor into view on entry. Defaults to true. */\n scrollIntoView?: boolean | undefined;\n /** Copy overrides; unset keys fall back to `DEFAULT_TOUR_LABELS`. */\n labels?: Partial<TourLabels> | undefined;\n /** Reported on every anchor timeout, alongside a console warning. */\n onStepError?: ((info: TourStepErrorInfo) => void) | undefined;\n /** Reports the live step state, so a provider can expose it through `useTour()`. */\n onStatusChange?: ((status: TourStatus) => void) | undefined;\n /** Classes applied to the step card. */\n className?: string | undefined;\n /** Classes applied to the dim layer, e.g. `bg-black/60`. */\n backdropClassName?: string | undefined;\n};\n\nfunction viewOf(source: TourRootSource): Window | null {\n const root: TourRoot | null = (typeof source === \"function\" ? source() : source) ?? null;\n if (!root) return null;\n if (root instanceof Document) return root.defaultView;\n return root.ownerDocument?.defaultView ?? null;\n}\n\nfunction useViewport(root: TourRootSource): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useEffect(() => {\n const view = viewOf(root);\n if (!view) return;\n const measure = () => setSize({ width: view.innerWidth, height: view.innerHeight });\n measure();\n view.addEventListener(\"resize\", measure);\n return () => view.removeEventListener(\"resize\", measure);\n }, [root]);\n\n return size;\n}\n\nexport function Tour(props: TourProps) {\n const {\n definition,\n index,\n onIndexChange,\n onComplete,\n onDismiss,\n onNavigate,\n portalContainer,\n missingAnchor = \"center\",\n anchorTimeoutMs = DEFAULT_ANCHOR_TIMEOUT_MS,\n navigateTimeoutMs = DEFAULT_NAVIGATE_TIMEOUT_MS,\n padding = DEFAULT_PADDING,\n interaction = \"allow-anchor\",\n keyboard = true,\n closeOnEsc = true,\n scrollIntoView = true,\n onStepError,\n } = props;\n\n // A getter rather than `document` directly, so the default is also safe under\n // SSR where there is no document to reference at render time.\n const anchorRoot: TourRootSource = useMemo(\n () => props.anchorRoot ?? (() => (typeof document === \"undefined\" ? null : document)),\n [props.anchorRoot],\n );\n\n const validated = useRef<string | null>(null);\n if (validated.current !== definition.id) {\n validateTourDefinition(definition);\n validated.current = definition.id;\n }\n\n const labels: TourLabels = useMemo(\n () => ({ ...DEFAULT_TOUR_LABELS, ...props.labels }),\n [props.labels],\n );\n\n const steps = definition.steps;\n const step = steps[index];\n const total = activeSteps(steps).length;\n const viewport = useViewport(anchorRoot);\n\n const contextSeed = useMemo<TourStepContext | null>(\n () => (step ? { step, index, total, anchor: null, direction: \"jump\" } : null),\n [step, index, total],\n );\n const { navigating, pendingRoute } = useStepRoute({ step, context: contextSeed, onNavigate });\n\n const anchorState = useTourAnchor({\n root: anchorRoot,\n target: step?.target,\n timeoutMs:\n pendingRoute || navigating ? navigateTimeoutMs : (step?.timeoutMs ?? anchorTimeoutMs),\n scrollIntoView,\n key: `${definition.id}:${step?.id ?? \"\"}`,\n });\n\n const context = useMemo<TourStepContext | null>(\n () => (step ? { step, index, total, anchor: anchorState.anchor, direction: \"jump\" } : null),\n [step, index, total, anchorState.anchor],\n );\n\n const backIndex = nextStepIndex(steps, index, \"back\");\n const forwardIndex = nextStepIndex(steps, index, \"next\");\n const missing = anchorState.state === \"missing\";\n const policy = step?.onMissing ?? missingAnchor;\n\n // A step that names what the operator must do is waiting on THEM, so Next stays\n // shut until its anchor resolves. Advancing anyway would narrate a stop they\n // never reached.\n //\n // The LAST step is exempt: there its button is Done, which ends the tour rather\n // than moving to an unreachable stop. Blocking it would leave the only exit as\n // abandoning a tour the operator has otherwise finished — so a tour ending on a\n // waiting step could never be completed at all.\n const waiting = missing && step?.hint !== undefined && step.hintOptional !== true;\n const isLast = forwardIndex === null;\n const blocked = waiting && !isLast;\n\n const goNext = () => {\n if (blocked) return;\n if (forwardIndex === null) onComplete();\n else onIndexChange(forwardIndex, \"next\");\n };\n const goBack = () => {\n if (backIndex !== null) onIndexChange(backIndex, \"back\");\n };\n\n useMissingAnchorPolicy({\n definition,\n step,\n index,\n missing,\n policy,\n onStepError,\n onSkip: (next) => (next === null ? onComplete() : onIndexChange(next, \"next\")),\n });\n useActiveAnchorMarker(anchorState.anchor);\n useStepLifecycle({ step, context, settled: anchorState.state !== \"waiting\" });\n\n useTourLayer(true);\n useEscapeLayer(true, onDismiss, closeOnEsc);\n // Lower-case combos: use-hotkey matches against `event.key.toLowerCase()`.\n useHotkey(\"arrowright\", goNext, { enabled: keyboard, priority: 10 });\n useHotkey(\"arrowleft\", goBack, { enabled: keyboard, priority: 10 });\n\n const anchored = anchorState.state === \"found\" ? anchorState.anchor : null;\n const cutout = useTourRect(anchored, {\n padding: step?.padding ?? padding,\n radius: step?.radius,\n });\n\n // \"missing\" still shows a card (centred), so it reads as active rather than\n // leaving the provider stuck reporting a wait that already gave up.\n const liveStatus: TourStatus = navigating\n ? \"navigating\"\n : anchorState.state === \"waiting\"\n ? \"waiting\"\n : \"active\";\n const { onStatusChange } = props;\n useEffect(() => onStatusChange?.(liveStatus), [liveStatus, onStatusChange]);\n\n if (!step) return null;\n if (missing && policy === \"skip\") return null;\n\n return (\n <FloatingPortal {...(portalContainer ? { root: portalContainer } : {})}>\n <div\n data-tour-id={definition.id}\n data-tour-step={step.id}\n data-tour-state={navigating ? \"navigating\" : anchorState.state}\n >\n <span role=\"status\" aria-live=\"polite\" className=\"sr-only\">\n {labels.announce(\n displayPosition(steps, index),\n total,\n typeof step.title === \"string\" ? step.title : step.id,\n )}\n </span>\n\n {anchored ? (\n <TourSpotlight\n cutout={cutout}\n viewport={viewport}\n interaction={interaction}\n className={props.backdropClassName}\n />\n ) : null}\n\n <TourCard\n step={step}\n anchor={anchored}\n current={displayPosition(steps, index)}\n total={total}\n labels={labels}\n blockedHint={missing ? (step.hint ?? null) : null}\n canGoBack={backIndex !== null}\n canGoNext={!blocked}\n isLast={isLast}\n {...(definition.footer ? { footer: definition.footer } : {})}\n onBack={goBack}\n onNext={goNext}\n onDismiss={onDismiss}\n className={props.className}\n />\n </div>\n </FloatingPortal>\n );\n}\n"],"names":["useState","useEffect","useMemo","useRef","validateTourDefinition","DEFAULT_TOUR_LABELS","activeSteps","useStepRoute","useTourAnchor","nextStepIndex","useMissingAnchorPolicy","useActiveAnchorMarker","useStepLifecycle","useTourLayer","useEscapeLayer","useHotkey","useTourRect","jsx","FloatingPortal","jsxs","displayPosition","TourSpotlight","TourCard"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { TourStatus } from './tour-context';
2
+ import { TourDefinition, TourDirection, TourInteraction, TourLabels, TourMissingAnchor, TourRootSource, TourStepContext, TourStepErrorInfo } from './tour-types';
3
+ export type TourProps = {
4
+ /** The tour to render. Validated on first mount. */
5
+ definition: TourDefinition;
6
+ /** Zero-based index of the visible step, into `definition.steps`. */
7
+ index: number;
8
+ /** Requests a different step; the owner clamps and commits it. */
9
+ onIndexChange: (index: number, direction: TourDirection) => void;
10
+ /** The user reached the end. */
11
+ onComplete: () => void;
12
+ /** The user left early (Skip, Escape, close). */
13
+ onDismiss: () => void;
14
+ /**
15
+ * Called when the entered step's `route` differs from the route the tour is
16
+ * already on. The library never imports a router.
17
+ */
18
+ onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;
19
+ /** Where anchors are queried. Defaults to `document`. */
20
+ anchorRoot?: TourRootSource | undefined;
21
+ /**
22
+ * Element the overlay portals into. Defaults to `document.body`. Pass a node
23
+ * inside your shadow tree so the overlay is shadow-styled and scoped —
24
+ * `FloatingPortal` takes an HTMLElement, not a ShadowRoot, which is why this is
25
+ * a separate prop from `anchorRoot`. Note `position: fixed` resolves against a
26
+ * transformed ancestor, so a transformed container scopes the dim to itself
27
+ * (wanted for an embedded demo, surprising in an app).
28
+ */
29
+ portalContainer?: HTMLElement | null | undefined;
30
+ /** Policy when an anchor never appears. Defaults to `"center"`. */
31
+ missingAnchor?: TourMissingAnchor | undefined;
32
+ /** Anchor wait budget for a same-route step, in ms. */
33
+ anchorTimeoutMs?: number | undefined;
34
+ /** Anchor wait budget after `onNavigate`, in ms. */
35
+ navigateTimeoutMs?: number | undefined;
36
+ /** Default spotlight padding in px. */
37
+ padding?: number | undefined;
38
+ /** Pointer behaviour of the dim layer. */
39
+ interaction?: TourInteraction | undefined;
40
+ /**
41
+ * Bind arrow keys to Back/Next. Defaults to true. This preempts arrow-key page
42
+ * scrolling while the tour runs; set false to keep it.
43
+ */
44
+ keyboard?: boolean | undefined;
45
+ /** Dismiss on Escape. Defaults to true. */
46
+ closeOnEsc?: boolean | undefined;
47
+ /** Scroll each anchor into view on entry. Defaults to true. */
48
+ scrollIntoView?: boolean | undefined;
49
+ /** Copy overrides; unset keys fall back to `DEFAULT_TOUR_LABELS`. */
50
+ labels?: Partial<TourLabels> | undefined;
51
+ /** Reported on every anchor timeout, alongside a console warning. */
52
+ onStepError?: ((info: TourStepErrorInfo) => void) | undefined;
53
+ /** Reports the live step state, so a provider can expose it through `useTour()`. */
54
+ onStatusChange?: ((status: TourStatus) => void) | undefined;
55
+ /** Classes applied to the step card. */
56
+ className?: string | undefined;
57
+ /** Classes applied to the dim layer, e.g. `bg-black/60`. */
58
+ backdropClassName?: string | undefined;
59
+ };
60
+ export declare function Tour(props: TourProps): import("react/jsx-runtime").JSX.Element | null;
61
+ //# sourceMappingURL=Tour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tour.d.ts","sourceRoot":"","sources":["../../src/overlay/Tour.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AASjD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,iBAAiB,EAEjB,cAAc,EACd,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAetB,MAAM,MAAM,SAAS,GAAG;IACtB,oDAAoD;IACpD,UAAU,EAAE,cAAc,CAAC;IAC3B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACjE,gCAAgC;IAChC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,iDAAiD;IACjD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACzF,yDAAyD;IACzD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,mEAAmE;IACnE,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC9C,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACzC,qEAAqE;IACrE,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9D,oFAAoF;IACpF,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,CAAC;AAwBF,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,kDAyKpC"}
@@ -0,0 +1,173 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useEffect, useState } from "react";
3
+ import { FloatingPortal } from "@floating-ui/react";
4
+ import { useHotkey } from "../hooks/use-hotkey.js";
5
+ import { useTourLayer, useEscapeLayer } from "./modalStack.js";
6
+ import { TourCard } from "./TourCard.js";
7
+ import { TourSpotlight } from "./TourSpotlight.js";
8
+ import { validateTourDefinition, DEFAULT_TOUR_LABELS, activeSteps, nextStepIndex, displayPosition } from "./tour-model.js";
9
+ import { useTourAnchor } from "./use-tour-anchor.js";
10
+ import { useTourRect } from "./use-tour-rect.js";
11
+ import { useStepRoute, useMissingAnchorPolicy, useActiveAnchorMarker, useStepLifecycle } from "./use-tour-step.js";
12
+ const DEFAULT_ANCHOR_TIMEOUT_MS = 3e3;
13
+ const DEFAULT_NAVIGATE_TIMEOUT_MS = 8e3;
14
+ const DEFAULT_PADDING = 8;
15
+ function viewOf(source) {
16
+ var _a;
17
+ const root = (typeof source === "function" ? source() : source) ?? null;
18
+ if (!root) return null;
19
+ if (root instanceof Document) return root.defaultView;
20
+ return ((_a = root.ownerDocument) == null ? void 0 : _a.defaultView) ?? null;
21
+ }
22
+ function useViewport(root) {
23
+ const [size, setSize] = useState({ width: 0, height: 0 });
24
+ useEffect(() => {
25
+ const view = viewOf(root);
26
+ if (!view) return;
27
+ const measure = () => setSize({ width: view.innerWidth, height: view.innerHeight });
28
+ measure();
29
+ view.addEventListener("resize", measure);
30
+ return () => view.removeEventListener("resize", measure);
31
+ }, [root]);
32
+ return size;
33
+ }
34
+ function Tour(props) {
35
+ const {
36
+ definition,
37
+ index,
38
+ onIndexChange,
39
+ onComplete,
40
+ onDismiss,
41
+ onNavigate,
42
+ portalContainer,
43
+ missingAnchor = "center",
44
+ anchorTimeoutMs = DEFAULT_ANCHOR_TIMEOUT_MS,
45
+ navigateTimeoutMs = DEFAULT_NAVIGATE_TIMEOUT_MS,
46
+ padding = DEFAULT_PADDING,
47
+ interaction = "allow-anchor",
48
+ keyboard = true,
49
+ closeOnEsc = true,
50
+ scrollIntoView = true,
51
+ onStepError
52
+ } = props;
53
+ const anchorRoot = useMemo(
54
+ () => props.anchorRoot ?? (() => typeof document === "undefined" ? null : document),
55
+ [props.anchorRoot]
56
+ );
57
+ const validated = useRef(null);
58
+ if (validated.current !== definition.id) {
59
+ validateTourDefinition(definition);
60
+ validated.current = definition.id;
61
+ }
62
+ const labels = useMemo(
63
+ () => ({ ...DEFAULT_TOUR_LABELS, ...props.labels }),
64
+ [props.labels]
65
+ );
66
+ const steps = definition.steps;
67
+ const step = steps[index];
68
+ const total = activeSteps(steps).length;
69
+ const viewport = useViewport(anchorRoot);
70
+ const contextSeed = useMemo(
71
+ () => step ? { step, index, total, anchor: null, direction: "jump" } : null,
72
+ [step, index, total]
73
+ );
74
+ const { navigating, pendingRoute } = useStepRoute({ step, context: contextSeed, onNavigate });
75
+ const anchorState = useTourAnchor({
76
+ root: anchorRoot,
77
+ target: step == null ? void 0 : step.target,
78
+ timeoutMs: pendingRoute || navigating ? navigateTimeoutMs : (step == null ? void 0 : step.timeoutMs) ?? anchorTimeoutMs,
79
+ scrollIntoView,
80
+ key: `${definition.id}:${(step == null ? void 0 : step.id) ?? ""}`
81
+ });
82
+ const context = useMemo(
83
+ () => step ? { step, index, total, anchor: anchorState.anchor, direction: "jump" } : null,
84
+ [step, index, total, anchorState.anchor]
85
+ );
86
+ const backIndex = nextStepIndex(steps, index, "back");
87
+ const forwardIndex = nextStepIndex(steps, index, "next");
88
+ const missing = anchorState.state === "missing";
89
+ const policy = (step == null ? void 0 : step.onMissing) ?? missingAnchor;
90
+ const waiting = missing && (step == null ? void 0 : step.hint) !== void 0 && step.hintOptional !== true;
91
+ const isLast = forwardIndex === null;
92
+ const blocked = waiting && !isLast;
93
+ const goNext = () => {
94
+ if (blocked) return;
95
+ if (forwardIndex === null) onComplete();
96
+ else onIndexChange(forwardIndex, "next");
97
+ };
98
+ const goBack = () => {
99
+ if (backIndex !== null) onIndexChange(backIndex, "back");
100
+ };
101
+ useMissingAnchorPolicy({
102
+ definition,
103
+ step,
104
+ index,
105
+ missing,
106
+ policy,
107
+ onStepError,
108
+ onSkip: (next) => next === null ? onComplete() : onIndexChange(next, "next")
109
+ });
110
+ useActiveAnchorMarker(anchorState.anchor);
111
+ useStepLifecycle({ step, context, settled: anchorState.state !== "waiting" });
112
+ useTourLayer(true);
113
+ useEscapeLayer(true, onDismiss, closeOnEsc);
114
+ useHotkey("arrowright", goNext, { enabled: keyboard, priority: 10 });
115
+ useHotkey("arrowleft", goBack, { enabled: keyboard, priority: 10 });
116
+ const anchored = anchorState.state === "found" ? anchorState.anchor : null;
117
+ const cutout = useTourRect(anchored, {
118
+ padding: (step == null ? void 0 : step.padding) ?? padding,
119
+ radius: step == null ? void 0 : step.radius
120
+ });
121
+ const liveStatus = navigating ? "navigating" : anchorState.state === "waiting" ? "waiting" : "active";
122
+ const { onStatusChange } = props;
123
+ useEffect(() => onStatusChange == null ? void 0 : onStatusChange(liveStatus), [liveStatus, onStatusChange]);
124
+ if (!step) return null;
125
+ if (missing && policy === "skip") return null;
126
+ return /* @__PURE__ */ jsx(FloatingPortal, { ...portalContainer ? { root: portalContainer } : {}, children: /* @__PURE__ */ jsxs(
127
+ "div",
128
+ {
129
+ "data-tour-id": definition.id,
130
+ "data-tour-step": step.id,
131
+ "data-tour-state": navigating ? "navigating" : anchorState.state,
132
+ children: [
133
+ /* @__PURE__ */ jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: labels.announce(
134
+ displayPosition(steps, index),
135
+ total,
136
+ typeof step.title === "string" ? step.title : step.id
137
+ ) }),
138
+ anchored ? /* @__PURE__ */ jsx(
139
+ TourSpotlight,
140
+ {
141
+ cutout,
142
+ viewport,
143
+ interaction,
144
+ className: props.backdropClassName
145
+ }
146
+ ) : null,
147
+ /* @__PURE__ */ jsx(
148
+ TourCard,
149
+ {
150
+ step,
151
+ anchor: anchored,
152
+ current: displayPosition(steps, index),
153
+ total,
154
+ labels,
155
+ blockedHint: missing ? step.hint ?? null : null,
156
+ canGoBack: backIndex !== null,
157
+ canGoNext: !blocked,
158
+ isLast,
159
+ ...definition.footer ? { footer: definition.footer } : {},
160
+ onBack: goBack,
161
+ onNext: goNext,
162
+ onDismiss,
163
+ className: props.className
164
+ }
165
+ )
166
+ ]
167
+ }
168
+ ) });
169
+ }
170
+ export {
171
+ Tour
172
+ };
173
+ //# sourceMappingURL=Tour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tour.js","sources":["../../src/overlay/Tour.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { FloatingPortal } from \"@floating-ui/react\";\nimport { useHotkey } from \"../hooks/use-hotkey\";\nimport { useEscapeLayer, useTourLayer } from \"./modalStack\";\nimport { TourCard } from \"./TourCard\";\nimport { TourSpotlight } from \"./TourSpotlight\";\nimport {\n activeSteps,\n DEFAULT_TOUR_LABELS,\n displayPosition,\n nextStepIndex,\n validateTourDefinition,\n} from \"./tour-model\";\nimport type { TourStatus } from \"./tour-context\";\nimport { useTourAnchor } from \"./use-tour-anchor\";\nimport { useTourRect } from \"./use-tour-rect\";\nimport {\n useActiveAnchorMarker,\n useMissingAnchorPolicy,\n useStepLifecycle,\n useStepRoute,\n} from \"./use-tour-step\";\nimport type {\n TourDefinition,\n TourDirection,\n TourInteraction,\n TourLabels,\n TourMissingAnchor,\n TourRoot,\n TourRootSource,\n TourStepContext,\n TourStepErrorInfo,\n} from \"./tour-types\";\n\n/**\n * Controlled renderer for one running tour: spotlight + step card + the step\n * lifecycle (exit -> navigate -> wait for anchor -> enter).\n *\n * It contains no `document` lookup of its own — every anchor query goes through\n * tour-anchor.ts against a configurable root, which is what lets the same steps\n * run over a mocked UI inside a shadow root.\n */\n\nconst DEFAULT_ANCHOR_TIMEOUT_MS = 3_000;\nconst DEFAULT_NAVIGATE_TIMEOUT_MS = 8_000;\nconst DEFAULT_PADDING = 8;\n\nexport type TourProps = {\n /** The tour to render. Validated on first mount. */\n definition: TourDefinition;\n /** Zero-based index of the visible step, into `definition.steps`. */\n index: number;\n /** Requests a different step; the owner clamps and commits it. */\n onIndexChange: (index: number, direction: TourDirection) => void;\n /** The user reached the end. */\n onComplete: () => void;\n /** The user left early (Skip, Escape, close). */\n onDismiss: () => void;\n /**\n * Called when the entered step's `route` differs from the route the tour is\n * already on. The library never imports a router.\n */\n onNavigate?: ((route: string, ctx: TourStepContext) => void | Promise<void>) | undefined;\n /** Where anchors are queried. Defaults to `document`. */\n anchorRoot?: TourRootSource | undefined;\n /**\n * Element the overlay portals into. Defaults to `document.body`. Pass a node\n * inside your shadow tree so the overlay is shadow-styled and scoped —\n * `FloatingPortal` takes an HTMLElement, not a ShadowRoot, which is why this is\n * a separate prop from `anchorRoot`. Note `position: fixed` resolves against a\n * transformed ancestor, so a transformed container scopes the dim to itself\n * (wanted for an embedded demo, surprising in an app).\n */\n portalContainer?: HTMLElement | null | undefined;\n /** Policy when an anchor never appears. Defaults to `\"center\"`. */\n missingAnchor?: TourMissingAnchor | undefined;\n /** Anchor wait budget for a same-route step, in ms. */\n anchorTimeoutMs?: number | undefined;\n /** Anchor wait budget after `onNavigate`, in ms. */\n navigateTimeoutMs?: number | undefined;\n /** Default spotlight padding in px. */\n padding?: number | undefined;\n /** Pointer behaviour of the dim layer. */\n interaction?: TourInteraction | undefined;\n /**\n * Bind arrow keys to Back/Next. Defaults to true. This preempts arrow-key page\n * scrolling while the tour runs; set false to keep it.\n */\n keyboard?: boolean | undefined;\n /** Dismiss on Escape. Defaults to true. */\n closeOnEsc?: boolean | undefined;\n /** Scroll each anchor into view on entry. Defaults to true. */\n scrollIntoView?: boolean | undefined;\n /** Copy overrides; unset keys fall back to `DEFAULT_TOUR_LABELS`. */\n labels?: Partial<TourLabels> | undefined;\n /** Reported on every anchor timeout, alongside a console warning. */\n onStepError?: ((info: TourStepErrorInfo) => void) | undefined;\n /** Reports the live step state, so a provider can expose it through `useTour()`. */\n onStatusChange?: ((status: TourStatus) => void) | undefined;\n /** Classes applied to the step card. */\n className?: string | undefined;\n /** Classes applied to the dim layer, e.g. `bg-black/60`. */\n backdropClassName?: string | undefined;\n};\n\nfunction viewOf(source: TourRootSource): Window | null {\n const root: TourRoot | null = (typeof source === \"function\" ? source() : source) ?? null;\n if (!root) return null;\n if (root instanceof Document) return root.defaultView;\n return root.ownerDocument?.defaultView ?? null;\n}\n\nfunction useViewport(root: TourRootSource): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useEffect(() => {\n const view = viewOf(root);\n if (!view) return;\n const measure = () => setSize({ width: view.innerWidth, height: view.innerHeight });\n measure();\n view.addEventListener(\"resize\", measure);\n return () => view.removeEventListener(\"resize\", measure);\n }, [root]);\n\n return size;\n}\n\nexport function Tour(props: TourProps) {\n const {\n definition,\n index,\n onIndexChange,\n onComplete,\n onDismiss,\n onNavigate,\n portalContainer,\n missingAnchor = \"center\",\n anchorTimeoutMs = DEFAULT_ANCHOR_TIMEOUT_MS,\n navigateTimeoutMs = DEFAULT_NAVIGATE_TIMEOUT_MS,\n padding = DEFAULT_PADDING,\n interaction = \"allow-anchor\",\n keyboard = true,\n closeOnEsc = true,\n scrollIntoView = true,\n onStepError,\n } = props;\n\n // A getter rather than `document` directly, so the default is also safe under\n // SSR where there is no document to reference at render time.\n const anchorRoot: TourRootSource = useMemo(\n () => props.anchorRoot ?? (() => (typeof document === \"undefined\" ? null : document)),\n [props.anchorRoot],\n );\n\n const validated = useRef<string | null>(null);\n if (validated.current !== definition.id) {\n validateTourDefinition(definition);\n validated.current = definition.id;\n }\n\n const labels: TourLabels = useMemo(\n () => ({ ...DEFAULT_TOUR_LABELS, ...props.labels }),\n [props.labels],\n );\n\n const steps = definition.steps;\n const step = steps[index];\n const total = activeSteps(steps).length;\n const viewport = useViewport(anchorRoot);\n\n const contextSeed = useMemo<TourStepContext | null>(\n () => (step ? { step, index, total, anchor: null, direction: \"jump\" } : null),\n [step, index, total],\n );\n const { navigating, pendingRoute } = useStepRoute({ step, context: contextSeed, onNavigate });\n\n const anchorState = useTourAnchor({\n root: anchorRoot,\n target: step?.target,\n timeoutMs:\n pendingRoute || navigating ? navigateTimeoutMs : (step?.timeoutMs ?? anchorTimeoutMs),\n scrollIntoView,\n key: `${definition.id}:${step?.id ?? \"\"}`,\n });\n\n const context = useMemo<TourStepContext | null>(\n () => (step ? { step, index, total, anchor: anchorState.anchor, direction: \"jump\" } : null),\n [step, index, total, anchorState.anchor],\n );\n\n const backIndex = nextStepIndex(steps, index, \"back\");\n const forwardIndex = nextStepIndex(steps, index, \"next\");\n const missing = anchorState.state === \"missing\";\n const policy = step?.onMissing ?? missingAnchor;\n\n // A step that names what the operator must do is waiting on THEM, so Next stays\n // shut until its anchor resolves. Advancing anyway would narrate a stop they\n // never reached.\n //\n // The LAST step is exempt: there its button is Done, which ends the tour rather\n // than moving to an unreachable stop. Blocking it would leave the only exit as\n // abandoning a tour the operator has otherwise finished — so a tour ending on a\n // waiting step could never be completed at all.\n const waiting = missing && step?.hint !== undefined && step.hintOptional !== true;\n const isLast = forwardIndex === null;\n const blocked = waiting && !isLast;\n\n const goNext = () => {\n if (blocked) return;\n if (forwardIndex === null) onComplete();\n else onIndexChange(forwardIndex, \"next\");\n };\n const goBack = () => {\n if (backIndex !== null) onIndexChange(backIndex, \"back\");\n };\n\n useMissingAnchorPolicy({\n definition,\n step,\n index,\n missing,\n policy,\n onStepError,\n onSkip: (next) => (next === null ? onComplete() : onIndexChange(next, \"next\")),\n });\n useActiveAnchorMarker(anchorState.anchor);\n useStepLifecycle({ step, context, settled: anchorState.state !== \"waiting\" });\n\n useTourLayer(true);\n useEscapeLayer(true, onDismiss, closeOnEsc);\n // Lower-case combos: use-hotkey matches against `event.key.toLowerCase()`.\n useHotkey(\"arrowright\", goNext, { enabled: keyboard, priority: 10 });\n useHotkey(\"arrowleft\", goBack, { enabled: keyboard, priority: 10 });\n\n const anchored = anchorState.state === \"found\" ? anchorState.anchor : null;\n const cutout = useTourRect(anchored, {\n padding: step?.padding ?? padding,\n radius: step?.radius,\n });\n\n // \"missing\" still shows a card (centred), so it reads as active rather than\n // leaving the provider stuck reporting a wait that already gave up.\n const liveStatus: TourStatus = navigating\n ? \"navigating\"\n : anchorState.state === \"waiting\"\n ? \"waiting\"\n : \"active\";\n const { onStatusChange } = props;\n useEffect(() => onStatusChange?.(liveStatus), [liveStatus, onStatusChange]);\n\n if (!step) return null;\n if (missing && policy === \"skip\") return null;\n\n return (\n <FloatingPortal {...(portalContainer ? { root: portalContainer } : {})}>\n <div\n data-tour-id={definition.id}\n data-tour-step={step.id}\n data-tour-state={navigating ? \"navigating\" : anchorState.state}\n >\n <span role=\"status\" aria-live=\"polite\" className=\"sr-only\">\n {labels.announce(\n displayPosition(steps, index),\n total,\n typeof step.title === \"string\" ? step.title : step.id,\n )}\n </span>\n\n {anchored ? (\n <TourSpotlight\n cutout={cutout}\n viewport={viewport}\n interaction={interaction}\n className={props.backdropClassName}\n />\n ) : null}\n\n <TourCard\n step={step}\n anchor={anchored}\n current={displayPosition(steps, index)}\n total={total}\n labels={labels}\n blockedHint={missing ? (step.hint ?? null) : null}\n canGoBack={backIndex !== null}\n canGoNext={!blocked}\n isLast={isLast}\n {...(definition.footer ? { footer: definition.footer } : {})}\n onBack={goBack}\n onNext={goNext}\n onDismiss={onDismiss}\n className={props.className}\n />\n </div>\n </FloatingPortal>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const react$1 = require("@floating-ui/react");
6
+ const utils = require("../lib/utils.cjs");
7
+ const button = require("../components/button.cjs");
8
+ const Icon = require("../data/Icon.cjs");
9
+ const zIndex = require("./zIndex.cjs");
10
+ const UiClose = require("../icons/components/UiClose.cjs");
11
+ const UiArrowLeft = require("../icons/components/UiArrowLeft.cjs");
12
+ const UiArrowRight = require("../icons/components/UiArrowRight.cjs");
13
+ const Markdown = react.lazy(
14
+ () => Promise.resolve().then(() => require("../data/Markdown.cjs")).then((module2) => ({ default: module2.Markdown }))
15
+ );
16
+ const CENTERED_STYLE = {
17
+ position: "fixed",
18
+ top: "50%",
19
+ left: "50%",
20
+ transform: "translate(-50%, -50%)"
21
+ };
22
+ function StepBody({ step }) {
23
+ if (step.markdown !== void 0) {
24
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "whitespace-pre-wrap text-sm", children: step.markdown }), children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { text: step.markdown, className: "text-sm" }) });
25
+ }
26
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: step.body });
27
+ }
28
+ function TourCard(props) {
29
+ const { step, anchor, current, total, labels, blockedHint, isLast } = props;
30
+ const titleId = react.useId();
31
+ const bodyId = react.useId();
32
+ const placement = step.placement ?? "bottom";
33
+ const { refs, floatingStyles, context } = react$1.useFloating({
34
+ open: true,
35
+ placement,
36
+ middleware: [react$1.offset(12), react$1.flip(), react$1.shift({ padding: 8 })],
37
+ whileElementsMounted: react$1.autoUpdate
38
+ });
39
+ const { getFloatingProps } = react$1.useInteractions([react$1.useRole(context, { role: "dialog" })]);
40
+ react.useEffect(() => {
41
+ if (anchor) refs.setPositionReference(anchor);
42
+ }, [anchor, refs]);
43
+ const card = /* @__PURE__ */ jsxRuntime.jsxs(
44
+ "div",
45
+ {
46
+ ref: refs.setFloating,
47
+ role: "dialog",
48
+ "aria-labelledby": titleId,
49
+ "aria-describedby": bodyId,
50
+ "data-tour-card": "",
51
+ className: utils.cn(
52
+ "w-[min(22rem,calc(100vw-2rem))] rounded-lg border border-border bg-popover p-density-4 text-popover-foreground shadow-xl",
53
+ props.className,
54
+ step.cardClassName
55
+ ),
56
+ style: {
57
+ ...anchor ? floatingStyles : CENTERED_STYLE,
58
+ zIndex: zIndex.zIndex.tour + zIndex.zIndex.tourCardOffset
59
+ },
60
+ ...getFloatingProps(),
61
+ children: [
62
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-density-2", children: [
63
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { id: titleId, className: "text-sm font-semibold", children: step.title }),
64
+ /* @__PURE__ */ jsxRuntime.jsx(
65
+ button.Button,
66
+ {
67
+ variant: "ghost",
68
+ size: "icon",
69
+ className: "-mr-1 -mt-1 size-7",
70
+ "aria-label": labels.close,
71
+ onClick: props.onDismiss,
72
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClose.UiClose, className: "size-4" })
73
+ }
74
+ )
75
+ ] }),
76
+ /* @__PURE__ */ jsxRuntime.jsx("div", { id: bodyId, className: "mt-density-2", children: /* @__PURE__ */ jsxRuntime.jsx(StepBody, { step }) }),
77
+ blockedHint ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-density-2 rounded-md border border-border bg-muted/50 p-density-2 text-xs text-muted-foreground", children: blockedHint }) : null,
78
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-density-4 flex items-center justify-between gap-density-2", children: [
79
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: labels.counter(current, total) }),
80
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-density-2", children: [
81
+ /* @__PURE__ */ jsxRuntime.jsx(button.Button, { variant: "ghost", size: "sm", onClick: props.onDismiss, children: labels.skip }),
82
+ /* @__PURE__ */ jsxRuntime.jsxs(
83
+ button.Button,
84
+ {
85
+ variant: "outline",
86
+ size: "sm",
87
+ disabled: !props.canGoBack,
88
+ onClick: props.onBack,
89
+ children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiArrowLeft.UiArrowLeft, className: "size-3.5" }),
91
+ labels.back
92
+ ]
93
+ }
94
+ ),
95
+ /* @__PURE__ */ jsxRuntime.jsxs(button.Button, { size: "sm", disabled: !props.canGoNext, onClick: props.onNext, children: [
96
+ isLast ? labels.done : labels.next,
97
+ isLast ? null : /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiArrowRight.UiArrowRight, className: "size-3.5" })
98
+ ] })
99
+ ] })
100
+ ] }),
101
+ props.footer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-density-2 border-t border-border pt-density-2 text-xs text-muted-foreground", children: props.footer }) : null
102
+ ]
103
+ }
104
+ );
105
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.FloatingFocusManager, { context, modal: false, returnFocus: true, initialFocus: -1, children: card });
106
+ }
107
+ exports.TourCard = TourCard;
108
+ //# sourceMappingURL=TourCard.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourCard.cjs","sources":["../../src/overlay/TourCard.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, useId, type ReactNode } from \"react\";\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n offset,\n shift,\n useFloating,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport type { Placement } from \"@floating-ui/react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiArrowLeft, UiArrowRight, UiClose } from \"../icons\";\nimport type { TourLabels, TourStep } from \"./tour-types\";\nimport { zIndex } from \"./zIndex\";\n\n// `Markdown` pulls in CodeBlock -> shiki/marked. A tour card body is a\n// paragraph, so a consumer with no markdown steps should not carry that graph.\nconst Markdown = lazy(() =>\n import(\"../data/Markdown\").then((module) => ({ default: module.Markdown })),\n);\n\n/** Where an anchorless step's card sits — the same slot the spotlight would centre on. */\nconst CENTERED_STYLE = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n} as const;\n\nexport type TourCardProps = {\n step: TourStep;\n anchor: HTMLElement | null;\n /** 1-based position among enabled steps. */\n current: number;\n total: number;\n labels: TourLabels;\n /** Shown instead of the nav hint when the step is waiting on the operator. */\n blockedHint: ReactNode | null;\n canGoBack: boolean;\n canGoNext: boolean;\n isLast: boolean;\n /** Rendered under the nav row; the tour's link back to its written guide. */\n footer?: ReactNode;\n onBack: () => void;\n onNext: () => void;\n onDismiss: () => void;\n className?: string | undefined;\n};\n\nfunction StepBody({ step }: { step: TourStep }) {\n if (step.markdown !== undefined) {\n return (\n <Suspense fallback={<p className=\"whitespace-pre-wrap text-sm\">{step.markdown}</p>}>\n <Markdown text={step.markdown} className=\"text-sm\" />\n </Suspense>\n );\n }\n return <div className=\"text-sm text-muted-foreground\">{step.body}</div>;\n}\n\nexport function TourCard(props: TourCardProps) {\n const { step, anchor, current, total, labels, blockedHint, isLast } = props;\n const titleId = useId();\n const bodyId = useId();\n const placement: Placement = step.placement ?? \"bottom\";\n\n const { refs, floatingStyles, context } = useFloating({\n open: true,\n placement,\n middleware: [offset(12), flip(), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n const { getFloatingProps } = useInteractions([useRole(context, { role: \"dialog\" })]);\n\n // In an effect, not during render: setPositionReference schedules a state\n // update, so calling it inline re-renders forever.\n useEffect(() => {\n if (anchor) refs.setPositionReference(anchor);\n }, [anchor, refs]);\n\n const card = (\n <div\n // Always the floating element so FloatingFocusManager has a node to manage;\n // only an anchored card takes floating-ui's computed position.\n ref={refs.setFloating}\n // No `aria-modal`: it hides the rest of the document from assistive tech,\n // which would hide the very element the step is describing.\n role=\"dialog\"\n aria-labelledby={titleId}\n aria-describedby={bodyId}\n data-tour-card=\"\"\n className={cn(\n \"w-[min(22rem,calc(100vw-2rem))] rounded-lg border border-border bg-popover p-density-4 text-popover-foreground shadow-xl\",\n props.className,\n step.cardClassName,\n )}\n // One element in one tree position whether or not there is an anchor: a\n // structural switch here would unmount and remount the card the moment a\n // waited-for anchor resolves, losing focus and any in-flight transition.\n style={{\n ...(anchor ? floatingStyles : CENTERED_STYLE),\n zIndex: zIndex.tour + zIndex.tourCardOffset,\n }}\n {...getFloatingProps()}\n >\n <div className=\"flex items-start justify-between gap-density-2\">\n <h2 id={titleId} className=\"text-sm font-semibold\">\n {step.title}\n </h2>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"-mr-1 -mt-1 size-7\"\n aria-label={labels.close}\n onClick={props.onDismiss}\n >\n <Icon icon={UiClose} className=\"size-4\" />\n </Button>\n </div>\n\n <div id={bodyId} className=\"mt-density-2\">\n <StepBody step={step} />\n </div>\n\n {blockedHint ? (\n <p className=\"mt-density-2 rounded-md border border-border bg-muted/50 p-density-2 text-xs text-muted-foreground\">\n {blockedHint}\n </p>\n ) : null}\n\n <div className=\"mt-density-4 flex items-center justify-between gap-density-2\">\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {labels.counter(current, total)}\n </span>\n <div className=\"flex items-center gap-density-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={props.onDismiss}>\n {labels.skip}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={!props.canGoBack}\n onClick={props.onBack}\n >\n <Icon icon={UiArrowLeft} className=\"size-3.5\" />\n {labels.back}\n </Button>\n <Button size=\"sm\" disabled={!props.canGoNext} onClick={props.onNext}>\n {isLast ? labels.done : labels.next}\n {isLast ? null : <Icon icon={UiArrowRight} className=\"size-3.5\" />}\n </Button>\n </div>\n </div>\n\n {props.footer ? (\n <div className=\"mt-density-2 border-t border-border pt-density-2 text-xs text-muted-foreground\">\n {props.footer}\n </div>\n ) : null}\n </div>\n );\n\n return (\n <FloatingFocusManager context={context} modal={false} returnFocus initialFocus={-1}>\n {card}\n </FloatingFocusManager>\n );\n}\n"],"names":["lazy","module","Suspense","jsx","useId","useFloating","offset","flip","shift","autoUpdate","useInteractions","useRole","useEffect","jsxs","cn","zIndex","Button","Icon","UiClose","UiArrowLeft","UiArrowRight","FloatingFocusManager"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ReactNode } from 'react';
2
+ import { TourLabels, TourStep } from './tour-types';
3
+ export type TourCardProps = {
4
+ step: TourStep;
5
+ anchor: HTMLElement | null;
6
+ /** 1-based position among enabled steps. */
7
+ current: number;
8
+ total: number;
9
+ labels: TourLabels;
10
+ /** Shown instead of the nav hint when the step is waiting on the operator. */
11
+ blockedHint: ReactNode | null;
12
+ canGoBack: boolean;
13
+ canGoNext: boolean;
14
+ isLast: boolean;
15
+ /** Rendered under the nav row; the tour's link back to its written guide. */
16
+ footer?: ReactNode;
17
+ onBack: () => void;
18
+ onNext: () => void;
19
+ onDismiss: () => void;
20
+ className?: string | undefined;
21
+ };
22
+ export declare function TourCard(props: TourCardProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=TourCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourCard.d.ts","sourceRoot":"","sources":["../../src/overlay/TourCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBzE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiBzD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAaF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CA2G5C"}