@n-dx/web 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (671) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +5 -0
  3. package/build.js +243 -0
  4. package/dist/cli/index.d.ts +8 -0
  5. package/dist/cli/index.js +50 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/landing/index.html +325 -0
  8. package/dist/landing/landing.d.ts +38 -0
  9. package/dist/landing/landing.js +299 -0
  10. package/dist/landing/landing.js.map +1 -0
  11. package/dist/public.d.ts +55 -0
  12. package/dist/public.js +51 -0
  13. package/dist/public.js.map +1 -0
  14. package/dist/schema/features.d.ts +28 -0
  15. package/dist/schema/features.js +9 -0
  16. package/dist/schema/features.js.map +1 -0
  17. package/dist/schema/v1.d.ts +317 -0
  18. package/dist/schema/v1.js +3 -0
  19. package/dist/schema/v1.js.map +1 -0
  20. package/dist/server/aggregation-cache.d.ts +105 -0
  21. package/dist/server/aggregation-cache.js +163 -0
  22. package/dist/server/aggregation-cache.js.map +1 -0
  23. package/dist/server/concurrent-execution-metrics.d.ts +103 -0
  24. package/dist/server/concurrent-execution-metrics.js +253 -0
  25. package/dist/server/concurrent-execution-metrics.js.map +1 -0
  26. package/dist/server/domain-gateway.d.ts +18 -0
  27. package/dist/server/domain-gateway.js +19 -0
  28. package/dist/server/domain-gateway.js.map +1 -0
  29. package/dist/server/incremental-task-usage.d.ts +92 -0
  30. package/dist/server/incremental-task-usage.js +251 -0
  31. package/dist/server/incremental-task-usage.js.map +1 -0
  32. package/dist/server/index.d.ts +39 -0
  33. package/dist/server/index.js +36 -0
  34. package/dist/server/index.js.map +1 -0
  35. package/dist/server/port.d.ts +96 -0
  36. package/dist/server/port.js +134 -0
  37. package/dist/server/port.js.map +1 -0
  38. package/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
  39. package/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
  40. package/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
  41. package/dist/server/prd-io.d.ts +40 -0
  42. package/dist/server/prd-io.js +66 -0
  43. package/dist/server/prd-io.js.map +1 -0
  44. package/dist/server/process-memory-tracker.d.ts +79 -0
  45. package/dist/server/process-memory-tracker.js +194 -0
  46. package/dist/server/process-memory-tracker.js.map +1 -0
  47. package/dist/server/register-scheduler.d.ts +53 -0
  48. package/dist/server/register-scheduler.js +36 -0
  49. package/dist/server/register-scheduler.js.map +1 -0
  50. package/dist/server/rex-gateway.d.ts +39 -0
  51. package/dist/server/rex-gateway.js +47 -0
  52. package/dist/server/rex-gateway.js.map +1 -0
  53. package/dist/server/routes-adaptive.d.ts +21 -0
  54. package/dist/server/routes-adaptive.js +659 -0
  55. package/dist/server/routes-adaptive.js.map +1 -0
  56. package/dist/server/routes-config.d.ts +47 -0
  57. package/dist/server/routes-config.js +222 -0
  58. package/dist/server/routes-config.js.map +1 -0
  59. package/dist/server/routes-data.d.ts +14 -0
  60. package/dist/server/routes-data.js +129 -0
  61. package/dist/server/routes-data.js.map +1 -0
  62. package/dist/server/routes-features.d.ts +14 -0
  63. package/dist/server/routes-features.js +245 -0
  64. package/dist/server/routes-features.js.map +1 -0
  65. package/dist/server/routes-hench.d.ts +116 -0
  66. package/dist/server/routes-hench.js +2016 -0
  67. package/dist/server/routes-hench.js.map +1 -0
  68. package/dist/server/routes-integrations.d.ts +23 -0
  69. package/dist/server/routes-integrations.js +277 -0
  70. package/dist/server/routes-integrations.js.map +1 -0
  71. package/dist/server/routes-mcp.d.ts +31 -0
  72. package/dist/server/routes-mcp.js +175 -0
  73. package/dist/server/routes-mcp.js.map +1 -0
  74. package/dist/server/routes-notion.d.ts +23 -0
  75. package/dist/server/routes-notion.js +723 -0
  76. package/dist/server/routes-notion.js.map +1 -0
  77. package/dist/server/routes-project.d.ts +47 -0
  78. package/dist/server/routes-project.js +128 -0
  79. package/dist/server/routes-project.js.map +1 -0
  80. package/dist/server/routes-rex/analysis.d.ts +11 -0
  81. package/dist/server/routes-rex/analysis.js +583 -0
  82. package/dist/server/routes-rex/analysis.js.map +1 -0
  83. package/dist/server/routes-rex/execution.d.ts +37 -0
  84. package/dist/server/routes-rex/execution.js +355 -0
  85. package/dist/server/routes-rex/execution.js.map +1 -0
  86. package/dist/server/routes-rex/health.d.ts +8 -0
  87. package/dist/server/routes-rex/health.js +136 -0
  88. package/dist/server/routes-rex/health.js.map +1 -0
  89. package/dist/server/routes-rex/index.d.ts +35 -0
  90. package/dist/server/routes-rex/index.js +72 -0
  91. package/dist/server/routes-rex/index.js.map +1 -0
  92. package/dist/server/routes-rex/items.d.ts +8 -0
  93. package/dist/server/routes-rex/items.js +359 -0
  94. package/dist/server/routes-rex/items.js.map +1 -0
  95. package/dist/server/routes-rex/prune.d.ts +11 -0
  96. package/dist/server/routes-rex/prune.js +379 -0
  97. package/dist/server/routes-rex/prune.js.map +1 -0
  98. package/dist/server/routes-rex/reads.d.ts +9 -0
  99. package/dist/server/routes-rex/reads.js +119 -0
  100. package/dist/server/routes-rex/reads.js.map +1 -0
  101. package/dist/server/routes-rex/requirements.d.ts +10 -0
  102. package/dist/server/routes-rex/requirements.js +408 -0
  103. package/dist/server/routes-rex/requirements.js.map +1 -0
  104. package/dist/server/routes-rex/shared.d.ts +37 -0
  105. package/dist/server/routes-rex/shared.js +73 -0
  106. package/dist/server/routes-rex/shared.js.map +1 -0
  107. package/dist/server/routes-search.d.ts +26 -0
  108. package/dist/server/routes-search.js +82 -0
  109. package/dist/server/routes-search.js.map +1 -0
  110. package/dist/server/routes-sourcevision.d.ts +18 -0
  111. package/dist/server/routes-sourcevision.js +444 -0
  112. package/dist/server/routes-sourcevision.js.map +1 -0
  113. package/dist/server/routes-static.d.ts +20 -0
  114. package/dist/server/routes-static.js +168 -0
  115. package/dist/server/routes-static.js.map +1 -0
  116. package/dist/server/routes-status.d.ts +58 -0
  117. package/dist/server/routes-status.js +191 -0
  118. package/dist/server/routes-status.js.map +1 -0
  119. package/dist/server/routes-token-usage.d.ts +63 -0
  120. package/dist/server/routes-token-usage.js +720 -0
  121. package/dist/server/routes-token-usage.js.map +1 -0
  122. package/dist/server/routes-validation.d.ts +10 -0
  123. package/dist/server/routes-validation.js +365 -0
  124. package/dist/server/routes-validation.js.map +1 -0
  125. package/dist/server/routes-workflow.d.ts +15 -0
  126. package/dist/server/routes-workflow.js +498 -0
  127. package/dist/server/routes-workflow.js.map +1 -0
  128. package/dist/server/search-index.d.ts +111 -0
  129. package/dist/server/search-index.js +348 -0
  130. package/dist/server/search-index.js.map +1 -0
  131. package/dist/server/shared-types.d.ts +65 -0
  132. package/dist/server/shared-types.js +31 -0
  133. package/dist/server/shared-types.js.map +1 -0
  134. package/dist/server/start.d.ts +68 -0
  135. package/dist/server/start.js +568 -0
  136. package/dist/server/start.js.map +1 -0
  137. package/dist/server/task-usage.d.ts +17 -0
  138. package/dist/server/task-usage.js +20 -0
  139. package/dist/server/task-usage.js.map +1 -0
  140. package/dist/server/types.d.ts +27 -0
  141. package/dist/server/types.js +26 -0
  142. package/dist/server/types.js.map +1 -0
  143. package/dist/server/usage-cleanup-scheduler.d.ts +107 -0
  144. package/dist/server/usage-cleanup-scheduler.js +232 -0
  145. package/dist/server/usage-cleanup-scheduler.js.map +1 -0
  146. package/dist/server/websocket.d.ts +131 -0
  147. package/dist/server/websocket.js +512 -0
  148. package/dist/server/websocket.js.map +1 -0
  149. package/dist/shared/data-files.d.ts +17 -0
  150. package/dist/shared/data-files.js +18 -0
  151. package/dist/shared/data-files.js.map +1 -0
  152. package/dist/shared/index.d.ts +9 -0
  153. package/dist/shared/index.js +9 -0
  154. package/dist/shared/index.js.map +1 -0
  155. package/dist/shared/view-id.d.ts +8 -0
  156. package/dist/shared/view-id.js +9 -0
  157. package/dist/shared/view-id.js.map +1 -0
  158. package/dist/viewer/Hench-F.png +0 -0
  159. package/dist/viewer/Rex-F.png +0 -0
  160. package/dist/viewer/SourceVision-F.png +0 -0
  161. package/dist/viewer/SourceVision.png +0 -0
  162. package/dist/viewer/api.d.ts +19 -0
  163. package/dist/viewer/api.js +17 -0
  164. package/dist/viewer/api.js.map +1 -0
  165. package/dist/viewer/bootstrap.d.ts +13 -0
  166. package/dist/viewer/bootstrap.js +40 -0
  167. package/dist/viewer/bootstrap.js.map +1 -0
  168. package/dist/viewer/components/active-tasks-panel.d.ts +36 -0
  169. package/dist/viewer/components/active-tasks-panel.js +183 -0
  170. package/dist/viewer/components/active-tasks-panel.js.map +1 -0
  171. package/dist/viewer/components/breadcrumb.d.ts +21 -0
  172. package/dist/viewer/components/breadcrumb.js +117 -0
  173. package/dist/viewer/components/breadcrumb.js.map +1 -0
  174. package/dist/viewer/components/concurrency-panel.d.ts +18 -0
  175. package/dist/viewer/components/concurrency-panel.js +175 -0
  176. package/dist/viewer/components/concurrency-panel.js.map +1 -0
  177. package/dist/viewer/components/config-footer.d.ts +11 -0
  178. package/dist/viewer/components/config-footer.js +132 -0
  179. package/dist/viewer/components/config-footer.js.map +1 -0
  180. package/dist/viewer/components/constants.d.ts +10 -0
  181. package/dist/viewer/components/constants.js +11 -0
  182. package/dist/viewer/components/constants.js.map +1 -0
  183. package/dist/viewer/components/copy-link-button.d.ts +30 -0
  184. package/dist/viewer/components/copy-link-button.js +74 -0
  185. package/dist/viewer/components/copy-link-button.js.map +1 -0
  186. package/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
  187. package/dist/viewer/components/crash-recovery-banner.js +47 -0
  188. package/dist/viewer/components/crash-recovery-banner.js.map +1 -0
  189. package/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
  190. package/dist/viewer/components/data-display/collapsible-section.js +66 -0
  191. package/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
  192. package/dist/viewer/components/data-display/findings-list.d.ts +13 -0
  193. package/dist/viewer/components/data-display/findings-list.js +136 -0
  194. package/dist/viewer/components/data-display/findings-list.js.map +1 -0
  195. package/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
  196. package/dist/viewer/components/data-display/health-gauge.js +62 -0
  197. package/dist/viewer/components/data-display/health-gauge.js.map +1 -0
  198. package/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
  199. package/dist/viewer/components/data-display/mini-charts.js +124 -0
  200. package/dist/viewer/components/data-display/mini-charts.js.map +1 -0
  201. package/dist/viewer/components/data-display/tree-view.d.ts +18 -0
  202. package/dist/viewer/components/data-display/tree-view.js +107 -0
  203. package/dist/viewer/components/data-display/tree-view.js.map +1 -0
  204. package/dist/viewer/components/data-display/zone-map.d.ts +28 -0
  205. package/dist/viewer/components/data-display/zone-map.js +197 -0
  206. package/dist/viewer/components/data-display/zone-map.js.map +1 -0
  207. package/dist/viewer/components/degradation-banner.d.ts +28 -0
  208. package/dist/viewer/components/degradation-banner.js +47 -0
  209. package/dist/viewer/components/degradation-banner.js.map +1 -0
  210. package/dist/viewer/components/detail-panel.d.ts +12 -0
  211. package/dist/viewer/components/detail-panel.js +166 -0
  212. package/dist/viewer/components/detail-panel.js.map +1 -0
  213. package/dist/viewer/components/elapsed-time.d.ts +38 -0
  214. package/dist/viewer/components/elapsed-time.js +35 -0
  215. package/dist/viewer/components/elapsed-time.js.map +1 -0
  216. package/dist/viewer/components/faq.d.ts +12 -0
  217. package/dist/viewer/components/faq.js +237 -0
  218. package/dist/viewer/components/faq.js.map +1 -0
  219. package/dist/viewer/components/favicon.d.ts +30 -0
  220. package/dist/viewer/components/favicon.js +90 -0
  221. package/dist/viewer/components/favicon.js.map +1 -0
  222. package/dist/viewer/components/guide.d.ts +5 -0
  223. package/dist/viewer/components/guide.js +116 -0
  224. package/dist/viewer/components/guide.js.map +1 -0
  225. package/dist/viewer/components/index.d.ts +37 -0
  226. package/dist/viewer/components/index.js +46 -0
  227. package/dist/viewer/components/index.js.map +1 -0
  228. package/dist/viewer/components/logos.d.ts +42 -0
  229. package/dist/viewer/components/logos.js +46 -0
  230. package/dist/viewer/components/logos.js.map +1 -0
  231. package/dist/viewer/components/memory-panel.d.ts +19 -0
  232. package/dist/viewer/components/memory-panel.js +181 -0
  233. package/dist/viewer/components/memory-panel.js.map +1 -0
  234. package/dist/viewer/components/memory-warning.d.ts +23 -0
  235. package/dist/viewer/components/memory-warning.js +42 -0
  236. package/dist/viewer/components/memory-warning.js.map +1 -0
  237. package/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
  238. package/dist/viewer/components/notion-schema-wizard.js +263 -0
  239. package/dist/viewer/components/notion-schema-wizard.js.map +1 -0
  240. package/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
  241. package/dist/viewer/components/polling-suspension-indicator.js +31 -0
  242. package/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
  243. package/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
  244. package/dist/viewer/components/prd-tree/add-item-form.js +231 -0
  245. package/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
  246. package/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
  247. package/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
  248. package/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
  249. package/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
  250. package/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
  251. package/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
  252. package/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
  253. package/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
  254. package/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
  255. package/dist/viewer/components/prd-tree/compute.d.ts +32 -0
  256. package/dist/viewer/components/prd-tree/compute.js +129 -0
  257. package/dist/viewer/components/prd-tree/compute.js.map +1 -0
  258. package/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
  259. package/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
  260. package/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
  261. package/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
  262. package/dist/viewer/components/prd-tree/execution-panel.js +291 -0
  263. package/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
  264. package/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
  265. package/dist/viewer/components/prd-tree/facet-filter.js +188 -0
  266. package/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
  267. package/dist/viewer/components/prd-tree/index.d.ts +24 -0
  268. package/dist/viewer/components/prd-tree/index.js +16 -0
  269. package/dist/viewer/components/prd-tree/index.js.map +1 -0
  270. package/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
  271. package/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
  272. package/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
  273. package/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
  274. package/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
  275. package/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
  276. package/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
  277. package/dist/viewer/components/prd-tree/lazy-children.js +73 -0
  278. package/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
  279. package/dist/viewer/components/prd-tree/levels.d.ts +31 -0
  280. package/dist/viewer/components/prd-tree/levels.js +72 -0
  281. package/dist/viewer/components/prd-tree/levels.js.map +1 -0
  282. package/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
  283. package/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
  284. package/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
  285. package/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
  286. package/dist/viewer/components/prd-tree/merge-preview.js +181 -0
  287. package/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
  288. package/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
  289. package/dist/viewer/components/prd-tree/prd-tree.js +565 -0
  290. package/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
  291. package/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
  292. package/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
  293. package/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
  294. package/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
  295. package/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
  296. package/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
  297. package/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
  298. package/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
  299. package/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
  300. package/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
  301. package/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
  302. package/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
  303. package/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
  304. package/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
  305. package/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
  306. package/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
  307. package/dist/viewer/components/prd-tree/status-filter.js +131 -0
  308. package/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
  309. package/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
  310. package/dist/viewer/components/prd-tree/task-detail.js +1205 -0
  311. package/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
  312. package/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
  313. package/dist/viewer/components/prd-tree/task-utilization.js +25 -0
  314. package/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
  315. package/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
  316. package/dist/viewer/components/prd-tree/tree-differ.js +200 -0
  317. package/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
  318. package/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
  319. package/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
  320. package/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
  321. package/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
  322. package/dist/viewer/components/prd-tree/tree-search.js +178 -0
  323. package/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
  324. package/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
  325. package/dist/viewer/components/prd-tree/tree-utils.js +107 -0
  326. package/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
  327. package/dist/viewer/components/prd-tree/types.d.ts +93 -0
  328. package/dist/viewer/components/prd-tree/types.js +16 -0
  329. package/dist/viewer/components/prd-tree/types.js.map +1 -0
  330. package/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
  331. package/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
  332. package/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
  333. package/dist/viewer/components/progressive-loader.d.ts +114 -0
  334. package/dist/viewer/components/progressive-loader.js +225 -0
  335. package/dist/viewer/components/progressive-loader.js.map +1 -0
  336. package/dist/viewer/components/refresh-queue-status.d.ts +20 -0
  337. package/dist/viewer/components/refresh-queue-status.js +65 -0
  338. package/dist/viewer/components/refresh-queue-status.js.map +1 -0
  339. package/dist/viewer/components/rex-task-link.d.ts +50 -0
  340. package/dist/viewer/components/rex-task-link.js +218 -0
  341. package/dist/viewer/components/rex-task-link.js.map +1 -0
  342. package/dist/viewer/components/search-filter.d.ts +20 -0
  343. package/dist/viewer/components/search-filter.js +28 -0
  344. package/dist/viewer/components/search-filter.js.map +1 -0
  345. package/dist/viewer/components/search-overlay.d.ts +31 -0
  346. package/dist/viewer/components/search-overlay.js +472 -0
  347. package/dist/viewer/components/search-overlay.js.map +1 -0
  348. package/dist/viewer/components/sidebar.d.ts +18 -0
  349. package/dist/viewer/components/sidebar.js +357 -0
  350. package/dist/viewer/components/sidebar.js.map +1 -0
  351. package/dist/viewer/components/status-indicators.d.ts +63 -0
  352. package/dist/viewer/components/status-indicators.js +136 -0
  353. package/dist/viewer/components/status-indicators.js.map +1 -0
  354. package/dist/viewer/components/theme-toggle.d.ts +8 -0
  355. package/dist/viewer/components/theme-toggle.js +28 -0
  356. package/dist/viewer/components/theme-toggle.js.map +1 -0
  357. package/dist/viewer/components/throttle-controls.d.ts +18 -0
  358. package/dist/viewer/components/throttle-controls.js +304 -0
  359. package/dist/viewer/components/throttle-controls.js.map +1 -0
  360. package/dist/viewer/components/ws-health-panel.d.ts +18 -0
  361. package/dist/viewer/components/ws-health-panel.js +250 -0
  362. package/dist/viewer/components/ws-health-panel.js.map +1 -0
  363. package/dist/viewer/components/zone-slideout.d.ts +17 -0
  364. package/dist/viewer/components/zone-slideout.js +162 -0
  365. package/dist/viewer/components/zone-slideout.js.map +1 -0
  366. package/dist/viewer/crash/crash-detector.d.ts +69 -0
  367. package/dist/viewer/crash/crash-detector.js +239 -0
  368. package/dist/viewer/crash/crash-detector.js.map +1 -0
  369. package/dist/viewer/crash/index.d.ts +7 -0
  370. package/dist/viewer/crash/index.js +8 -0
  371. package/dist/viewer/crash/index.js.map +1 -0
  372. package/dist/viewer/deployed-mode.d.ts +37 -0
  373. package/dist/viewer/deployed-mode.js +94 -0
  374. package/dist/viewer/deployed-mode.js.map +1 -0
  375. package/dist/viewer/external.d.ts +17 -0
  376. package/dist/viewer/external.js +17 -0
  377. package/dist/viewer/external.js.map +1 -0
  378. package/dist/viewer/graph/index.d.ts +9 -0
  379. package/dist/viewer/graph/index.js +12 -0
  380. package/dist/viewer/graph/index.js.map +1 -0
  381. package/dist/viewer/graph/physics.d.ts +96 -0
  382. package/dist/viewer/graph/physics.js +366 -0
  383. package/dist/viewer/graph/physics.js.map +1 -0
  384. package/dist/viewer/graph/renderer.d.ts +184 -0
  385. package/dist/viewer/graph/renderer.js +1438 -0
  386. package/dist/viewer/graph/renderer.js.map +1 -0
  387. package/dist/viewer/hooks/index.d.ts +27 -0
  388. package/dist/viewer/hooks/index.js +28 -0
  389. package/dist/viewer/hooks/index.js.map +1 -0
  390. package/dist/viewer/hooks/use-app-data.d.ts +31 -0
  391. package/dist/viewer/hooks/use-app-data.js +152 -0
  392. package/dist/viewer/hooks/use-app-data.js.map +1 -0
  393. package/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
  394. package/dist/viewer/hooks/use-crash-recovery.js +76 -0
  395. package/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
  396. package/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
  397. package/dist/viewer/hooks/use-delete-actions.js +103 -0
  398. package/dist/viewer/hooks/use-delete-actions.js.map +1 -0
  399. package/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
  400. package/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
  401. package/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
  402. package/dist/viewer/hooks/use-facet-state.d.ts +32 -0
  403. package/dist/viewer/hooks/use-facet-state.js +119 -0
  404. package/dist/viewer/hooks/use-facet-state.js.map +1 -0
  405. package/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
  406. package/dist/viewer/hooks/use-feature-toggle.js +57 -0
  407. package/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
  408. package/dist/viewer/hooks/use-file-edges.d.ts +23 -0
  409. package/dist/viewer/hooks/use-file-edges.js +221 -0
  410. package/dist/viewer/hooks/use-file-edges.js.map +1 -0
  411. package/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
  412. package/dist/viewer/hooks/use-graceful-degradation.js +45 -0
  413. package/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
  414. package/dist/viewer/hooks/use-item-selection.d.ts +49 -0
  415. package/dist/viewer/hooks/use-item-selection.js +117 -0
  416. package/dist/viewer/hooks/use-item-selection.js.map +1 -0
  417. package/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
  418. package/dist/viewer/hooks/use-memory-monitor.js +73 -0
  419. package/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
  420. package/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
  421. package/dist/viewer/hooks/use-pan-zoom.js +110 -0
  422. package/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
  423. package/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
  424. package/dist/viewer/hooks/use-persistent-filter.js +37 -0
  425. package/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
  426. package/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
  427. package/dist/viewer/hooks/use-polling-suspension.js +41 -0
  428. package/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
  429. package/dist/viewer/hooks/use-polling.d.ts +39 -0
  430. package/dist/viewer/hooks/use-polling.js +55 -0
  431. package/dist/viewer/hooks/use-polling.js.map +1 -0
  432. package/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
  433. package/dist/viewer/hooks/use-prd-actions.js +250 -0
  434. package/dist/viewer/hooks/use-prd-actions.js.map +1 -0
  435. package/dist/viewer/hooks/use-prd-data.d.ts +45 -0
  436. package/dist/viewer/hooks/use-prd-data.js +159 -0
  437. package/dist/viewer/hooks/use-prd-data.js.map +1 -0
  438. package/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
  439. package/dist/viewer/hooks/use-prd-deep-link.js +60 -0
  440. package/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
  441. package/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
  442. package/dist/viewer/hooks/use-prd-websocket.js +139 -0
  443. package/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
  444. package/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
  445. package/dist/viewer/hooks/use-project-metadata.js +55 -0
  446. package/dist/viewer/hooks/use-project-metadata.js.map +1 -0
  447. package/dist/viewer/hooks/use-project-status.d.ts +60 -0
  448. package/dist/viewer/hooks/use-project-status.js +133 -0
  449. package/dist/viewer/hooks/use-project-status.js.map +1 -0
  450. package/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
  451. package/dist/viewer/hooks/use-refresh-throttle.js +52 -0
  452. package/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
  453. package/dist/viewer/hooks/use-route-state.d.ts +18 -0
  454. package/dist/viewer/hooks/use-route-state.js +115 -0
  455. package/dist/viewer/hooks/use-route-state.js.map +1 -0
  456. package/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
  457. package/dist/viewer/hooks/use-subzone-edges.js +147 -0
  458. package/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
  459. package/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
  460. package/dist/viewer/hooks/use-tab-visibility.js +43 -0
  461. package/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
  462. package/dist/viewer/hooks/use-tick.d.ts +43 -0
  463. package/dist/viewer/hooks/use-tick.js +76 -0
  464. package/dist/viewer/hooks/use-tick.js.map +1 -0
  465. package/dist/viewer/hooks/use-toast.d.ts +24 -0
  466. package/dist/viewer/hooks/use-toast.js +26 -0
  467. package/dist/viewer/hooks/use-toast.js.map +1 -0
  468. package/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
  469. package/dist/viewer/hooks/use-zone-drag.js +60 -0
  470. package/dist/viewer/hooks/use-zone-drag.js.map +1 -0
  471. package/dist/viewer/index.html +36 -0
  472. package/dist/viewer/loader.d.ts +33 -0
  473. package/dist/viewer/loader.js +195 -0
  474. package/dist/viewer/loader.js.map +1 -0
  475. package/dist/viewer/main.d.ts +1 -0
  476. package/dist/viewer/main.js +121 -0
  477. package/dist/viewer/main.js.map +1 -0
  478. package/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
  479. package/dist/viewer/messaging/call-rate-limiter.js +103 -0
  480. package/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
  481. package/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
  482. package/dist/viewer/messaging/fetch-pipeline.js +58 -0
  483. package/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
  484. package/dist/viewer/messaging/index.d.ts +43 -0
  485. package/dist/viewer/messaging/index.js +46 -0
  486. package/dist/viewer/messaging/index.js.map +1 -0
  487. package/dist/viewer/messaging/message-coalescer.d.ts +96 -0
  488. package/dist/viewer/messaging/message-coalescer.js +121 -0
  489. package/dist/viewer/messaging/message-coalescer.js.map +1 -0
  490. package/dist/viewer/messaging/message-throttle.d.ts +95 -0
  491. package/dist/viewer/messaging/message-throttle.js +147 -0
  492. package/dist/viewer/messaging/message-throttle.js.map +1 -0
  493. package/dist/viewer/messaging/request-dedup.d.ts +43 -0
  494. package/dist/viewer/messaging/request-dedup.js +55 -0
  495. package/dist/viewer/messaging/request-dedup.js.map +1 -0
  496. package/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
  497. package/dist/viewer/messaging/ws-pipeline.js +68 -0
  498. package/dist/viewer/messaging/ws-pipeline.js.map +1 -0
  499. package/dist/viewer/n-dx.png +0 -0
  500. package/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
  501. package/dist/viewer/performance/dom-performance-monitor.js +341 -0
  502. package/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
  503. package/dist/viewer/performance/dom-update-gate.d.ts +122 -0
  504. package/dist/viewer/performance/dom-update-gate.js +229 -0
  505. package/dist/viewer/performance/dom-update-gate.js.map +1 -0
  506. package/dist/viewer/performance/graceful-degradation.d.ts +73 -0
  507. package/dist/viewer/performance/graceful-degradation.js +152 -0
  508. package/dist/viewer/performance/graceful-degradation.js.map +1 -0
  509. package/dist/viewer/performance/index.d.ts +14 -0
  510. package/dist/viewer/performance/index.js +20 -0
  511. package/dist/viewer/performance/index.js.map +1 -0
  512. package/dist/viewer/performance/memory-monitor.d.ts +78 -0
  513. package/dist/viewer/performance/memory-monitor.js +218 -0
  514. package/dist/viewer/performance/memory-monitor.js.map +1 -0
  515. package/dist/viewer/performance/refresh-throttle.d.ts +90 -0
  516. package/dist/viewer/performance/refresh-throttle.js +266 -0
  517. package/dist/viewer/performance/refresh-throttle.js.map +1 -0
  518. package/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
  519. package/dist/viewer/performance/response-buffer-gate.js +170 -0
  520. package/dist/viewer/performance/response-buffer-gate.js.map +1 -0
  521. package/dist/viewer/performance/update-batcher.d.ts +79 -0
  522. package/dist/viewer/performance/update-batcher.js +119 -0
  523. package/dist/viewer/performance/update-batcher.js.map +1 -0
  524. package/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
  525. package/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
  526. package/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
  527. package/dist/viewer/polling/index.d.ts +13 -0
  528. package/dist/viewer/polling/index.js +16 -0
  529. package/dist/viewer/polling/index.js.map +1 -0
  530. package/dist/viewer/polling/polling-manager.d.ts +82 -0
  531. package/dist/viewer/polling/polling-manager.js +254 -0
  532. package/dist/viewer/polling/polling-manager.js.map +1 -0
  533. package/dist/viewer/polling/polling-restart.d.ts +45 -0
  534. package/dist/viewer/polling/polling-restart.js +98 -0
  535. package/dist/viewer/polling/polling-restart.js.map +1 -0
  536. package/dist/viewer/polling/polling-state.d.ts +182 -0
  537. package/dist/viewer/polling/polling-state.js +306 -0
  538. package/dist/viewer/polling/polling-state.js.map +1 -0
  539. package/dist/viewer/polling/tab-visibility.d.ts +112 -0
  540. package/dist/viewer/polling/tab-visibility.js +276 -0
  541. package/dist/viewer/polling/tab-visibility.js.map +1 -0
  542. package/dist/viewer/polling/tick-timer.d.ts +70 -0
  543. package/dist/viewer/polling/tick-timer.js +168 -0
  544. package/dist/viewer/polling/tick-timer.js.map +1 -0
  545. package/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
  546. package/dist/viewer/polling/tick-visibility-gate.js +146 -0
  547. package/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
  548. package/dist/viewer/route-state.d.ts +8 -0
  549. package/dist/viewer/route-state.js +77 -0
  550. package/dist/viewer/route-state.js.map +1 -0
  551. package/dist/viewer/schema-compat.d.ts +17 -0
  552. package/dist/viewer/schema-compat.js +49 -0
  553. package/dist/viewer/schema-compat.js.map +1 -0
  554. package/dist/viewer/types.d.ts +66 -0
  555. package/dist/viewer/types.js +2 -0
  556. package/dist/viewer/types.js.map +1 -0
  557. package/dist/viewer/usage/constants.d.ts +14 -0
  558. package/dist/viewer/usage/constants.js +14 -0
  559. package/dist/viewer/usage/constants.js.map +1 -0
  560. package/dist/viewer/usage/index.d.ts +7 -0
  561. package/dist/viewer/usage/index.js +8 -0
  562. package/dist/viewer/usage/index.js.map +1 -0
  563. package/dist/viewer/utils.d.ts +25 -0
  564. package/dist/viewer/utils.js +48 -0
  565. package/dist/viewer/utils.js.map +1 -0
  566. package/dist/viewer/validate.d.ts +23 -0
  567. package/dist/viewer/validate.js +275 -0
  568. package/dist/viewer/validate.js.map +1 -0
  569. package/dist/viewer/views/analysis.d.ts +10 -0
  570. package/dist/viewer/views/analysis.js +109 -0
  571. package/dist/viewer/views/analysis.js.map +1 -0
  572. package/dist/viewer/views/architecture.d.ts +10 -0
  573. package/dist/viewer/views/architecture.js +44 -0
  574. package/dist/viewer/views/architecture.js.map +1 -0
  575. package/dist/viewer/views/domain-hench.d.ts +13 -0
  576. package/dist/viewer/views/domain-hench.js +14 -0
  577. package/dist/viewer/views/domain-hench.js.map +1 -0
  578. package/dist/viewer/views/domain-rex.d.ts +17 -0
  579. package/dist/viewer/views/domain-rex.js +18 -0
  580. package/dist/viewer/views/domain-rex.js.map +1 -0
  581. package/dist/viewer/views/domain-settings.d.ts +12 -0
  582. package/dist/viewer/views/domain-settings.js +13 -0
  583. package/dist/viewer/views/domain-settings.js.map +1 -0
  584. package/dist/viewer/views/domain-sourcevision.d.ts +20 -0
  585. package/dist/viewer/views/domain-sourcevision.js +21 -0
  586. package/dist/viewer/views/domain-sourcevision.js.map +1 -0
  587. package/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
  588. package/dist/viewer/views/enrichment-thresholds.js +12 -0
  589. package/dist/viewer/views/enrichment-thresholds.js.map +1 -0
  590. package/dist/viewer/views/feature-toggles.d.ts +13 -0
  591. package/dist/viewer/views/feature-toggles.js +185 -0
  592. package/dist/viewer/views/feature-toggles.js.map +1 -0
  593. package/dist/viewer/views/files.d.ts +13 -0
  594. package/dist/viewer/views/files.js +174 -0
  595. package/dist/viewer/views/files.js.map +1 -0
  596. package/dist/viewer/views/graph.d.ts +12 -0
  597. package/dist/viewer/views/graph.js +316 -0
  598. package/dist/viewer/views/graph.js.map +1 -0
  599. package/dist/viewer/views/hench-config.d.ts +39 -0
  600. package/dist/viewer/views/hench-config.js +473 -0
  601. package/dist/viewer/views/hench-config.js.map +1 -0
  602. package/dist/viewer/views/hench-runs.d.ts +19 -0
  603. package/dist/viewer/views/hench-runs.js +460 -0
  604. package/dist/viewer/views/hench-runs.js.map +1 -0
  605. package/dist/viewer/views/hench-templates.d.ts +17 -0
  606. package/dist/viewer/views/hench-templates.js +262 -0
  607. package/dist/viewer/views/hench-templates.js.map +1 -0
  608. package/dist/viewer/views/integration-config.d.ts +73 -0
  609. package/dist/viewer/views/integration-config.js +524 -0
  610. package/dist/viewer/views/integration-config.js.map +1 -0
  611. package/dist/viewer/views/notion-config.d.ts +16 -0
  612. package/dist/viewer/views/notion-config.js +357 -0
  613. package/dist/viewer/views/notion-config.js.map +1 -0
  614. package/dist/viewer/views/overview.d.ts +10 -0
  615. package/dist/viewer/views/overview.js +187 -0
  616. package/dist/viewer/views/overview.js.map +1 -0
  617. package/dist/viewer/views/pr-markdown.d.ts +3 -0
  618. package/dist/viewer/views/pr-markdown.js +350 -0
  619. package/dist/viewer/views/pr-markdown.js.map +1 -0
  620. package/dist/viewer/views/prd.d.ts +34 -0
  621. package/dist/viewer/views/prd.js +257 -0
  622. package/dist/viewer/views/prd.js.map +1 -0
  623. package/dist/viewer/views/problems.d.ts +8 -0
  624. package/dist/viewer/views/problems.js +50 -0
  625. package/dist/viewer/views/problems.js.map +1 -0
  626. package/dist/viewer/views/rex-dashboard.d.ts +14 -0
  627. package/dist/viewer/views/rex-dashboard.js +334 -0
  628. package/dist/viewer/views/rex-dashboard.js.map +1 -0
  629. package/dist/viewer/views/routes.d.ts +8 -0
  630. package/dist/viewer/views/routes.js +216 -0
  631. package/dist/viewer/views/routes.js.map +1 -0
  632. package/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
  633. package/dist/viewer/views/sourcevision-tabs.js +14 -0
  634. package/dist/viewer/views/sourcevision-tabs.js.map +1 -0
  635. package/dist/viewer/views/suggestions.d.ts +8 -0
  636. package/dist/viewer/views/suggestions.js +36 -0
  637. package/dist/viewer/views/suggestions.js.map +1 -0
  638. package/dist/viewer/views/task-audit.d.ts +18 -0
  639. package/dist/viewer/views/task-audit.js +413 -0
  640. package/dist/viewer/views/task-audit.js.map +1 -0
  641. package/dist/viewer/views/token-usage.d.ts +10 -0
  642. package/dist/viewer/views/token-usage.js +410 -0
  643. package/dist/viewer/views/token-usage.js.map +1 -0
  644. package/dist/viewer/views/validation.d.ts +11 -0
  645. package/dist/viewer/views/validation.js +475 -0
  646. package/dist/viewer/views/validation.js.map +1 -0
  647. package/dist/viewer/views/view-registry.d.ts +27 -0
  648. package/dist/viewer/views/view-registry.js +70 -0
  649. package/dist/viewer/views/view-registry.js.map +1 -0
  650. package/dist/viewer/views/workflow-optimization.d.ts +12 -0
  651. package/dist/viewer/views/workflow-optimization.js +311 -0
  652. package/dist/viewer/views/workflow-optimization.js.map +1 -0
  653. package/dist/viewer/views/zone-types.d.ts +69 -0
  654. package/dist/viewer/views/zone-types.js +5 -0
  655. package/dist/viewer/views/zone-types.js.map +1 -0
  656. package/dist/viewer/views/zones.d.ts +50 -0
  657. package/dist/viewer/views/zones.js +1438 -0
  658. package/dist/viewer/views/zones.js.map +1 -0
  659. package/dist/viewer/visualization/colors.d.ts +16 -0
  660. package/dist/viewer/visualization/colors.js +31 -0
  661. package/dist/viewer/visualization/colors.js.map +1 -0
  662. package/dist/viewer/visualization/flow.d.ts +54 -0
  663. package/dist/viewer/visualization/flow.js +123 -0
  664. package/dist/viewer/visualization/flow.js.map +1 -0
  665. package/dist/viewer/visualization/index.d.ts +34 -0
  666. package/dist/viewer/visualization/index.js +40 -0
  667. package/dist/viewer/visualization/index.js.map +1 -0
  668. package/dist/viewer/visualization/metrics.d.ts +8 -0
  669. package/dist/viewer/visualization/metrics.js +16 -0
  670. package/dist/viewer/visualization/metrics.js.map +1 -0
  671. package/package.json +54 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * usePanZoom — SVG viewport panning and zooming hook.
3
+ *
4
+ * Handles:
5
+ * - Trackpad/mouse wheel scrolling (pan) and pinch-to-zoom (ctrl+wheel)
6
+ * - Mouse-drag panning on the SVG background
7
+ * - Programmatic zoom-in, zoom-out, and fit-to-content controls
8
+ */
9
+ import { useState, useCallback, useRef, useEffect } from "preact/hooks";
10
+ /**
11
+ * Hook that manages SVG pan/zoom state and interaction handlers.
12
+ *
13
+ * @param fitVB - The "fit to content" viewBox dimensions
14
+ */
15
+ export function usePanZoom(fitVB) {
16
+ const svgRef = useRef(null);
17
+ const [panning, setPanning] = useState(false);
18
+ const panStart = useRef(null);
19
+ const [viewBox, setViewBox] = useState(fitVB);
20
+ useEffect(() => {
21
+ setViewBox(fitVB);
22
+ }, [fitVB]);
23
+ const handleWheel = useCallback((e) => {
24
+ e.preventDefault();
25
+ const svg = svgRef.current;
26
+ if (!svg)
27
+ return;
28
+ const rect = svg.getBoundingClientRect();
29
+ // ctrlKey = pinch-zoom on trackpad (or ctrl+scroll on mouse) → zoom
30
+ if (e.ctrlKey) {
31
+ const fx = (e.clientX - rect.left) / rect.width;
32
+ const fy = (e.clientY - rect.top) / rect.height;
33
+ // Clamp deltaY to reduce sensitivity: ±2px max effect per event
34
+ const clamped = Math.max(-2, Math.min(2, e.deltaY));
35
+ const zoomFactor = 1 + clamped * 0.02;
36
+ setViewBox((vb) => {
37
+ const newW = vb.w * zoomFactor;
38
+ const newH = vb.h * zoomFactor;
39
+ const newX = vb.x + (vb.w - newW) * fx;
40
+ const newY = vb.y + (vb.h - newH) * fy;
41
+ return { x: newX, y: newY, w: newW, h: newH };
42
+ });
43
+ return;
44
+ }
45
+ // Regular scroll / two-finger drag on trackpad → pan
46
+ setViewBox((vb) => {
47
+ const scaleX = vb.w / rect.width;
48
+ const scaleY = vb.h / rect.height;
49
+ return {
50
+ ...vb,
51
+ x: vb.x + e.deltaX * scaleX,
52
+ y: vb.y + e.deltaY * scaleY,
53
+ };
54
+ });
55
+ }, []);
56
+ const startPan = useCallback((e) => {
57
+ setPanning(true);
58
+ panStart.current = { x: e.clientX, y: e.clientY, vbx: viewBox.x, vby: viewBox.y };
59
+ }, [viewBox]);
60
+ const movePan = useCallback((e) => {
61
+ if (!panning || !panStart.current || !svgRef.current)
62
+ return;
63
+ const rect = svgRef.current.getBoundingClientRect();
64
+ const scaleX = viewBox.w / rect.width;
65
+ const scaleY = viewBox.h / rect.height;
66
+ const dx = (e.clientX - panStart.current.x) * scaleX;
67
+ const dy = (e.clientY - panStart.current.y) * scaleY;
68
+ setViewBox((vb) => ({
69
+ ...vb,
70
+ x: panStart.current.vbx - dx,
71
+ y: panStart.current.vby - dy,
72
+ }));
73
+ }, [panning, viewBox.w, viewBox.h]);
74
+ const endPan = useCallback(() => {
75
+ setPanning(false);
76
+ panStart.current = null;
77
+ }, []);
78
+ const handleZoomIn = useCallback(() => {
79
+ setViewBox((vb) => ({
80
+ x: vb.x + vb.w * 0.1,
81
+ y: vb.y + vb.h * 0.1,
82
+ w: vb.w * 0.8,
83
+ h: vb.h * 0.8,
84
+ }));
85
+ }, []);
86
+ const handleZoomOut = useCallback(() => {
87
+ setViewBox((vb) => ({
88
+ x: vb.x - vb.w * 0.125,
89
+ y: vb.y - vb.h * 0.125,
90
+ w: vb.w * 1.25,
91
+ h: vb.h * 1.25,
92
+ }));
93
+ }, []);
94
+ const handleFit = useCallback(() => {
95
+ setViewBox(fitVB);
96
+ }, [fitVB]);
97
+ return {
98
+ viewBox,
99
+ panning,
100
+ svgRef,
101
+ handleWheel,
102
+ startPan,
103
+ movePan,
104
+ endPan,
105
+ handleZoomIn,
106
+ handleZoomOut,
107
+ handleFit,
108
+ };
109
+ }
110
+ //# sourceMappingURL=use-pan-zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-pan-zoom.js","sourceRoot":"","sources":["../../../src/viewer/hooks/use-pan-zoom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Persistent status filter state for the PRD tree.
3
+ *
4
+ * Stores the active status filter selection in a module-level variable
5
+ * so it survives component mount/unmount cycles (e.g. when the user
6
+ * navigates from the PRD tree to the Rex Dashboard and back).
7
+ *
8
+ * The hook returns the current state and a setter, mirroring useState.
9
+ */
10
+ import type { ItemStatus } from "../components/prd-tree/types.js";
11
+ export interface PersistentFilterState {
12
+ /** Currently active (visible) statuses. */
13
+ activeStatuses: Set<ItemStatus>;
14
+ /** Update the active statuses (also persists across remounts). */
15
+ setActiveStatuses: (statuses: Set<ItemStatus>) => void;
16
+ }
17
+ /**
18
+ * Hook that provides filter state which persists across view switches.
19
+ *
20
+ * On first mount (or after a full page reload), the default "Active Work"
21
+ * filter is used. Subsequent mounts within the same page session restore
22
+ * the last selection.
23
+ */
24
+ export declare function usePersistentFilter(): PersistentFilterState;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Persistent status filter state for the PRD tree.
3
+ *
4
+ * Stores the active status filter selection in a module-level variable
5
+ * so it survives component mount/unmount cycles (e.g. when the user
6
+ * navigates from the PRD tree to the Rex Dashboard and back).
7
+ *
8
+ * The hook returns the current state and a setter, mirroring useState.
9
+ */
10
+ import { useState, useCallback } from "preact/hooks";
11
+ import { defaultStatusFilter } from "../components/prd-tree/status-filter.js";
12
+ // ── Module-level persistent state ────────────────────────────────────
13
+ //
14
+ // This variable outlives any single component instance. When the PRD
15
+ // view unmounts (e.g. navigating to the dashboard) and remounts, the
16
+ // hook reads from here instead of resetting to the default.
17
+ let persistedStatuses = null;
18
+ /** Get the persisted filter state, or the default if none has been set. */
19
+ function getPersistedStatuses() {
20
+ return persistedStatuses ?? defaultStatusFilter();
21
+ }
22
+ /**
23
+ * Hook that provides filter state which persists across view switches.
24
+ *
25
+ * On first mount (or after a full page reload), the default "Active Work"
26
+ * filter is used. Subsequent mounts within the same page session restore
27
+ * the last selection.
28
+ */
29
+ export function usePersistentFilter() {
30
+ const [activeStatuses, setActiveStatusesLocal] = useState(getPersistedStatuses);
31
+ const setActiveStatuses = useCallback((statuses) => {
32
+ persistedStatuses = statuses;
33
+ setActiveStatusesLocal(statuses);
34
+ }, []);
35
+ return { activeStatuses, setActiveStatuses };
36
+ }
37
+ //# sourceMappingURL=use-persistent-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-persistent-filter.js","sourceRoot":"","sources":["../../../src/viewer/hooks/use-persistent-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,4DAA4D;AAE5D,IAAI,iBAAiB,GAA2B,IAAI,CAAC;AAErD,2EAA2E;AAC3E,SAAS,oBAAoB;IAC3B,OAAO,iBAAiB,IAAI,mBAAmB,EAAE,CAAC;AACpD,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,cAAc,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CACvD,oBAAoB,CACrB,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAyB,EAAE,EAAE;QAClE,iBAAiB,GAAG,QAAQ,CAAC;QAC7B,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Preact hook for tracking polling suspension state.
3
+ *
4
+ * Provides reactive state about whether polling is globally suspended
5
+ * due to memory pressure. Components use this to display suspension
6
+ * indicators and offer manual refresh options when auto-refresh is
7
+ * disabled.
8
+ */
9
+ export interface UsePollingSuspensionResult {
10
+ /** Whether polling is currently globally suspended. */
11
+ isSuspended: boolean;
12
+ /** Number of sources currently in suspended state. */
13
+ suspendedCount: number;
14
+ /** Total number of registered polling sources. */
15
+ sourceCount: number;
16
+ /** Current generation counter (increments on suspend/resume cycles). */
17
+ generation: number;
18
+ }
19
+ /**
20
+ * Hook that provides real-time polling suspension state.
21
+ *
22
+ * Subscribes to the centralized polling-state manager and re-renders
23
+ * when suspension state changes. Returns `isSuspended: false` when
24
+ * no sources are registered or when polling is running normally.
25
+ *
26
+ * Usage:
27
+ * ```tsx
28
+ * const { isSuspended, suspendedCount } = usePollingSuspension();
29
+ * if (isSuspended) return h(PollingSuspensionIndicator, { ... });
30
+ * ```
31
+ */
32
+ export declare function usePollingSuspension(): UsePollingSuspensionResult;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Preact hook for tracking polling suspension state.
3
+ *
4
+ * Provides reactive state about whether polling is globally suspended
5
+ * due to memory pressure. Components use this to display suspension
6
+ * indicators and offer manual refresh options when auto-refresh is
7
+ * disabled.
8
+ */
9
+ import { useState, useEffect } from "preact/hooks";
10
+ import { onPollingStateChange, getPollingState, } from "../polling/index.js";
11
+ /**
12
+ * Hook that provides real-time polling suspension state.
13
+ *
14
+ * Subscribes to the centralized polling-state manager and re-renders
15
+ * when suspension state changes. Returns `isSuspended: false` when
16
+ * no sources are registered or when polling is running normally.
17
+ *
18
+ * Usage:
19
+ * ```tsx
20
+ * const { isSuspended, suspendedCount } = usePollingSuspension();
21
+ * if (isSuspended) return h(PollingSuspensionIndicator, { ... });
22
+ * ```
23
+ */
24
+ export function usePollingSuspension() {
25
+ const [snapshot, setSnapshot] = useState(getPollingState);
26
+ useEffect(() => {
27
+ const unsubscribe = onPollingStateChange((newSnapshot) => {
28
+ setSnapshot(newSnapshot);
29
+ });
30
+ // Sync with current state in case it changed between render and effect.
31
+ setSnapshot(getPollingState());
32
+ return unsubscribe;
33
+ }, []);
34
+ return {
35
+ isSuspended: snapshot.globalSuspended,
36
+ suspendedCount: snapshot.suspendedCount,
37
+ sourceCount: snapshot.sourceCount,
38
+ generation: snapshot.generation,
39
+ };
40
+ }
41
+ //# sourceMappingURL=use-polling-suspension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-polling-suspension.js","sourceRoot":"","sources":["../../../src/viewer/hooks/use-polling-suspension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAa7B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAuB,eAAe,CAAC,CAAC;IAEhF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,WAAW,EAAE,EAAE;YACvD,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,wEAAwE;QACxE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;QAE/B,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,eAAe;QACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Preact hook for visibility-aware polling.
3
+ *
4
+ * Wraps the polling manager to provide a simple hook interface for
5
+ * components that need periodic data fetching. Pollers registered
6
+ * through this hook are automatically suspended when the tab is
7
+ * backgrounded and resumed when it regains focus.
8
+ *
9
+ * Usage:
10
+ * ```tsx
11
+ * // Replace:
12
+ * // useEffect(() => {
13
+ * // const id = setInterval(fetchData, 5000);
14
+ * // return () => clearInterval(id);
15
+ * // }, []);
16
+ * //
17
+ * // With:
18
+ * usePolling("my-component", fetchData, 5000);
19
+ * ```
20
+ */
21
+ /**
22
+ * Register a visibility-aware polling interval.
23
+ *
24
+ * The callback is called every `intervalMs` milliseconds while the tab
25
+ * is visible. When the tab is backgrounded, the interval is suspended
26
+ * and resumed on reactivation.
27
+ *
28
+ * The callback reference is kept up to date via a ref, so it's safe to
29
+ * pass an inline function or a callback that changes on every render —
30
+ * the interval timer is NOT recreated on callback changes.
31
+ *
32
+ * @param key - Unique identifier for this poller. Must be stable across
33
+ * renders (use a string literal or useMemo).
34
+ * @param callback - Function to call on each tick. May be async.
35
+ * @param intervalMs - Polling interval in milliseconds.
36
+ * @param enabled - Optional flag to conditionally enable/disable polling.
37
+ * Defaults to true. When false, the poller is unregistered.
38
+ */
39
+ export declare function usePolling(key: string, callback: () => void, intervalMs: number, enabled?: boolean): void;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Preact hook for visibility-aware polling.
3
+ *
4
+ * Wraps the polling manager to provide a simple hook interface for
5
+ * components that need periodic data fetching. Pollers registered
6
+ * through this hook are automatically suspended when the tab is
7
+ * backgrounded and resumed when it regains focus.
8
+ *
9
+ * Usage:
10
+ * ```tsx
11
+ * // Replace:
12
+ * // useEffect(() => {
13
+ * // const id = setInterval(fetchData, 5000);
14
+ * // return () => clearInterval(id);
15
+ * // }, []);
16
+ * //
17
+ * // With:
18
+ * usePolling("my-component", fetchData, 5000);
19
+ * ```
20
+ */
21
+ import { useEffect, useRef } from "preact/hooks";
22
+ import { registerPoller, unregisterPoller } from "../polling/index.js";
23
+ /**
24
+ * Register a visibility-aware polling interval.
25
+ *
26
+ * The callback is called every `intervalMs` milliseconds while the tab
27
+ * is visible. When the tab is backgrounded, the interval is suspended
28
+ * and resumed on reactivation.
29
+ *
30
+ * The callback reference is kept up to date via a ref, so it's safe to
31
+ * pass an inline function or a callback that changes on every render —
32
+ * the interval timer is NOT recreated on callback changes.
33
+ *
34
+ * @param key - Unique identifier for this poller. Must be stable across
35
+ * renders (use a string literal or useMemo).
36
+ * @param callback - Function to call on each tick. May be async.
37
+ * @param intervalMs - Polling interval in milliseconds.
38
+ * @param enabled - Optional flag to conditionally enable/disable polling.
39
+ * Defaults to true. When false, the poller is unregistered.
40
+ */
41
+ export function usePolling(key, callback, intervalMs, enabled = true) {
42
+ // Keep the callback ref current so the interval always calls the
43
+ // latest version without needing to recreate the timer.
44
+ const callbackRef = useRef(callback);
45
+ callbackRef.current = callback;
46
+ useEffect(() => {
47
+ if (!enabled) {
48
+ unregisterPoller(key);
49
+ return;
50
+ }
51
+ const unregister = registerPoller(key, () => callbackRef.current(), intervalMs);
52
+ return unregister;
53
+ }, [key, intervalMs, enabled]);
54
+ }
55
+ //# sourceMappingURL=use-polling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-polling.js","sourceRoot":"","sources":["../../../src/viewer/hooks/use-polling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,QAAoB,EACpB,UAAkB,EAClB,UAAmB,IAAI;IAEvB,iEAAiE;IACjE,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAC/B,GAAG,EACH,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAC3B,UAAU,CACX,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * PRD CRUD action hooks — item update, add, delete, merge, and prune.
3
+ *
4
+ * Composes focused sub-hooks for selection and deletion, adding
5
+ * mutation handlers (update, add, execute) and detail panel sync.
6
+ *
7
+ * Each handler follows the optimistic update pattern:
8
+ *
9
+ * 1. Apply the change locally for instant UI feedback
10
+ * 2. Send the request to the server
11
+ * 3. Reconcile with authoritative server state
12
+ * 4. On failure, revert by re-fetching from server
13
+ *
14
+ * @see ./use-item-selection.ts — selection, bulk select, navigation
15
+ * @see ./use-delete-actions.ts — optimistic delete, modal, detail panel remove
16
+ * @see ../components/prd-tree/tree-differ.ts — applyItemUpdate (structural sharing)
17
+ */
18
+ import type { VNode } from "preact";
19
+ import type { PRDDocumentData, PRDItemData } from "../components/prd-tree/types.js";
20
+ import type { TaskUsageSummary, WeeklyBudgetResolution } from "../components/prd-tree/types.js";
21
+ import type { AddItemInput } from "../components/prd-tree/add-item-form.js";
22
+ import type { InlineAddInput } from "../components/prd-tree/inline-add-form.js";
23
+ import type { DetailItem, NavigateTo } from "../types.js";
24
+ /** Active tab in the command bar. */
25
+ export type CommandTab = null | "add" | "merge" | "prune";
26
+ export interface PRDActionsDeps {
27
+ /** Current PRD document data. */
28
+ data: PRDDocumentData | null;
29
+ /** Setter for optimistic local state updates. */
30
+ setData: (updater: PRDDocumentData | null | ((prev: PRDDocumentData | null) => PRDDocumentData | null)) => void;
31
+ /** Fetch/reconcile PRD data from server. */
32
+ fetchPRDData: () => Promise<void>;
33
+ /** Fetch/reconcile task usage data from server. */
34
+ fetchTaskUsage: () => Promise<void>;
35
+ /** Show a toast notification. */
36
+ showToast: (message: string, type?: "success" | "error", duration?: number) => void;
37
+ /** External callback for item selection (parent layout). */
38
+ onSelectItem?: (detail: DetailItem | null) => void;
39
+ /** External callback for detail panel content (parent layout). */
40
+ onDetailContent?: (content: VNode<any> | null) => void;
41
+ /** Per-task usage summaries. */
42
+ taskUsageById: Record<string, TaskUsageSummary>;
43
+ /** Resolved weekly budget. */
44
+ weeklyBudget: WeeklyBudgetResolution | null;
45
+ /** Whether to show token budget UI (budget bar, percentage, limit label). */
46
+ showTokenBudget?: boolean;
47
+ /** Navigation callback for deep-linking to other views (e.g. hench-runs). */
48
+ navigateTo?: NavigateTo;
49
+ }
50
+ export interface PRDActionsState {
51
+ /** Currently selected item ID. */
52
+ selectedItemId: string | null;
53
+ /** Active command bar tab. */
54
+ activeTab: CommandTab;
55
+ /** Set the active command bar tab. */
56
+ setActiveTab: (tab: CommandTab) => void;
57
+ /** Parent ID for the add-item form. */
58
+ addParentId: string | null;
59
+ /** Set the parent ID for the add-item form. */
60
+ setAddParentId: (id: string | null) => void;
61
+ /** Set of item IDs selected for bulk operations. */
62
+ bulkSelectedIds: Set<string>;
63
+ /** Items resolved from bulk selection (for merge preview). */
64
+ selectedItems: PRDItemData[];
65
+ /** Item pending delete confirmation. */
66
+ deleteTarget: PRDItemData | null;
67
+ /** Set the item pending delete confirmation. */
68
+ setDeleteTarget: (item: PRDItemData | null) => void;
69
+ /** ID of item currently being deleted (loading state). */
70
+ deletingItemId: string | null;
71
+ /** Update an item's fields (optimistic + server reconciliation). */
72
+ handleItemUpdate: (id: string, updates: Partial<PRDItemData>) => Promise<void>;
73
+ /** Select an item (opens detail panel). */
74
+ handleSelectItem: (item: PRDItemData) => void;
75
+ /**
76
+ * Multi-select handler for bulk operations.
77
+ * Ctrl/Cmd+click toggles individual items, Shift+click selects a
78
+ * contiguous range from the anchor, plain click selects only that item.
79
+ * `visibleIds` provides the flat ordering of currently visible nodes
80
+ * (needed for shift-range computation).
81
+ */
82
+ handleBulkSelect: (item: PRDItemData, modifiers: {
83
+ ctrlKey: boolean;
84
+ shiftKey: boolean;
85
+ }, visibleIds: string[]) => void;
86
+ /** Clear all bulk-selected items. */
87
+ clearBulkSelection: () => void;
88
+ /** Navigate to an item by ID (from detail panel links). */
89
+ handleNavigateToItem: (id: string) => void;
90
+ /** Add a child item from the detail panel. */
91
+ handleAddChild: (input: {
92
+ title: string;
93
+ parentId: string;
94
+ level: string;
95
+ description?: string;
96
+ priority?: string;
97
+ }) => Promise<void>;
98
+ /** Start a hench execution for a task. */
99
+ handleExecuteTask: (taskId: string) => Promise<void>;
100
+ /** Add an item from the command bar form. */
101
+ handleAddItem: (input: AddItemInput) => Promise<void>;
102
+ /** Add an item from the inline tree form. */
103
+ handleInlineAddItem: (input: InlineAddInput) => Promise<void>;
104
+ /** Remove an item from the tree node (opens modal). */
105
+ handleRemoveItemFromTree: (item: PRDItemData) => void;
106
+ /** Confirm deletion from the modal dialog. */
107
+ handleConfirmDelete: (id: string) => Promise<void>;
108
+ /** Remove an item from the detail panel. */
109
+ handleRemoveFromDetail: (id: string) => Promise<void>;
110
+ /** Called when merge completes successfully. */
111
+ handleMergeComplete: () => void;
112
+ /** Called when prune completes successfully. */
113
+ handlePruneComplete: () => void;
114
+ /** Open the merge preview panel. */
115
+ handleOpenMerge: () => void;
116
+ /** Synchronize the detail panel content with current state. */
117
+ syncDetailContent: () => void;
118
+ }
119
+ /**
120
+ * Hook providing all PRD CRUD action handlers and related UI state.
121
+ *
122
+ * Composes {@link useItemSelection} for selection/navigation and
123
+ * {@link useDeleteActions} for optimistic deletion, then adds
124
+ * mutation handlers and detail panel synchronization.
125
+ */
126
+ export declare function usePRDActions({ data, setData, fetchPRDData, fetchTaskUsage, showToast, onSelectItem, onDetailContent, taskUsageById, weeklyBudget, showTokenBudget, navigateTo, }: PRDActionsDeps): PRDActionsState;