@treenity/mods 3.0.1

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 (486) hide show
  1. package/board/board.test.ts +212 -0
  2. package/board/client.ts +1 -0
  3. package/board/seed.ts +26 -0
  4. package/board/server.ts +5 -0
  5. package/board/types.ts +87 -0
  6. package/board/view.tsx +574 -0
  7. package/brahman/CLAUDE.md +18 -0
  8. package/brahman/brahman.test.ts +855 -0
  9. package/brahman/client.ts +2 -0
  10. package/brahman/helpers.ts +374 -0
  11. package/brahman/server.ts +2 -0
  12. package/brahman/service.ts +328 -0
  13. package/brahman/types.ts +727 -0
  14. package/brahman/view.tsx +73 -0
  15. package/brahman/views/action-cards.tsx +615 -0
  16. package/brahman/views/bot-view.tsx +76 -0
  17. package/brahman/views/chat-editor.tsx +782 -0
  18. package/brahman/views/chat-preview.tsx +266 -0
  19. package/brahman/views/menu-editor.tsx +451 -0
  20. package/brahman/views/page-layout.tsx +285 -0
  21. package/brahman/views/tstring-input.tsx +84 -0
  22. package/cafe/CLAUDE.md +7 -0
  23. package/cafe/seed.ts +8 -0
  24. package/cafe/server.ts +2 -0
  25. package/cafe/types.ts +32 -0
  26. package/canary/seed.ts +8 -0
  27. package/canary/server.ts +3 -0
  28. package/canary/service.ts +101 -0
  29. package/canary/types.ts +16 -0
  30. package/dist/board/client.d.ts +2 -0
  31. package/dist/board/client.d.ts.map +1 -0
  32. package/dist/board/client.js +2 -0
  33. package/dist/board/client.js.map +1 -0
  34. package/dist/board/seed.d.ts +2 -0
  35. package/dist/board/seed.d.ts.map +1 -0
  36. package/dist/board/seed.js +23 -0
  37. package/dist/board/seed.js.map +1 -0
  38. package/dist/board/server.d.ts +3 -0
  39. package/dist/board/server.d.ts.map +1 -0
  40. package/dist/board/server.js +5 -0
  41. package/dist/board/server.js.map +1 -0
  42. package/dist/board/types.d.ts +45 -0
  43. package/dist/board/types.d.ts.map +1 -0
  44. package/dist/board/types.js +82 -0
  45. package/dist/board/types.js.map +1 -0
  46. package/dist/board/view.d.ts +2 -0
  47. package/dist/board/view.d.ts.map +1 -0
  48. package/dist/board/view.js +254 -0
  49. package/dist/board/view.js.map +1 -0
  50. package/dist/brahman/client.d.ts +3 -0
  51. package/dist/brahman/client.d.ts.map +1 -0
  52. package/dist/brahman/client.js +3 -0
  53. package/dist/brahman/client.js.map +1 -0
  54. package/dist/brahman/helpers.d.ts +51 -0
  55. package/dist/brahman/helpers.d.ts.map +1 -0
  56. package/dist/brahman/helpers.js +321 -0
  57. package/dist/brahman/helpers.js.map +1 -0
  58. package/dist/brahman/server.d.ts +3 -0
  59. package/dist/brahman/server.d.ts.map +1 -0
  60. package/dist/brahman/server.js +3 -0
  61. package/dist/brahman/server.js.map +1 -0
  62. package/dist/brahman/service.d.ts +2 -0
  63. package/dist/brahman/service.d.ts.map +1 -0
  64. package/dist/brahman/service.js +310 -0
  65. package/dist/brahman/service.js.map +1 -0
  66. package/dist/brahman/types.d.ts +335 -0
  67. package/dist/brahman/types.d.ts.map +1 -0
  68. package/dist/brahman/types.js +633 -0
  69. package/dist/brahman/types.js.map +1 -0
  70. package/dist/brahman/view.d.ts +2 -0
  71. package/dist/brahman/view.d.ts.map +1 -0
  72. package/dist/brahman/view.js +47 -0
  73. package/dist/brahman/view.js.map +1 -0
  74. package/dist/brahman/views/action-cards.d.ts +60 -0
  75. package/dist/brahman/views/action-cards.d.ts.map +1 -0
  76. package/dist/brahman/views/action-cards.js +283 -0
  77. package/dist/brahman/views/action-cards.js.map +1 -0
  78. package/dist/brahman/views/bot-view.d.ts +5 -0
  79. package/dist/brahman/views/bot-view.d.ts.map +1 -0
  80. package/dist/brahman/views/bot-view.js +14 -0
  81. package/dist/brahman/views/bot-view.js.map +1 -0
  82. package/dist/brahman/views/chat-editor.d.ts +5 -0
  83. package/dist/brahman/views/chat-editor.d.ts.map +1 -0
  84. package/dist/brahman/views/chat-editor.js +306 -0
  85. package/dist/brahman/views/chat-editor.js.map +1 -0
  86. package/dist/brahman/views/chat-preview.d.ts +5 -0
  87. package/dist/brahman/views/chat-preview.d.ts.map +1 -0
  88. package/dist/brahman/views/chat-preview.js +145 -0
  89. package/dist/brahman/views/chat-preview.js.map +1 -0
  90. package/dist/brahman/views/menu-editor.d.ts +11 -0
  91. package/dist/brahman/views/menu-editor.d.ts.map +1 -0
  92. package/dist/brahman/views/menu-editor.js +171 -0
  93. package/dist/brahman/views/menu-editor.js.map +1 -0
  94. package/dist/brahman/views/page-layout.d.ts +5 -0
  95. package/dist/brahman/views/page-layout.d.ts.map +1 -0
  96. package/dist/brahman/views/page-layout.js +114 -0
  97. package/dist/brahman/views/page-layout.js.map +1 -0
  98. package/dist/brahman/views/tstring-input.d.ts +15 -0
  99. package/dist/brahman/views/tstring-input.d.ts.map +1 -0
  100. package/dist/brahman/views/tstring-input.js +23 -0
  101. package/dist/brahman/views/tstring-input.js.map +1 -0
  102. package/dist/cafe/seed.d.ts +2 -0
  103. package/dist/cafe/seed.d.ts.map +1 -0
  104. package/dist/cafe/seed.js +7 -0
  105. package/dist/cafe/seed.js.map +1 -0
  106. package/dist/cafe/server.d.ts +3 -0
  107. package/dist/cafe/server.d.ts.map +1 -0
  108. package/dist/cafe/server.js +3 -0
  109. package/dist/cafe/server.js.map +1 -0
  110. package/dist/cafe/types.d.ts +2 -0
  111. package/dist/cafe/types.d.ts.map +1 -0
  112. package/dist/cafe/types.js +31 -0
  113. package/dist/cafe/types.js.map +1 -0
  114. package/dist/canary/seed.d.ts +2 -0
  115. package/dist/canary/seed.d.ts.map +1 -0
  116. package/dist/canary/seed.js +7 -0
  117. package/dist/canary/seed.js.map +1 -0
  118. package/dist/canary/server.d.ts +4 -0
  119. package/dist/canary/server.d.ts.map +1 -0
  120. package/dist/canary/server.js +4 -0
  121. package/dist/canary/server.js.map +1 -0
  122. package/dist/canary/service.d.ts +2 -0
  123. package/dist/canary/service.d.ts.map +1 -0
  124. package/dist/canary/service.js +101 -0
  125. package/dist/canary/service.js.map +1 -0
  126. package/dist/canary/types.d.ts +9 -0
  127. package/dist/canary/types.d.ts.map +1 -0
  128. package/dist/canary/types.js +13 -0
  129. package/dist/canary/types.js.map +1 -0
  130. package/dist/doc/client.d.ts +3 -0
  131. package/dist/doc/client.d.ts.map +1 -0
  132. package/dist/doc/client.js +5 -0
  133. package/dist/doc/client.js.map +1 -0
  134. package/dist/doc/fs-codec.d.ts +2 -0
  135. package/dist/doc/fs-codec.d.ts.map +1 -0
  136. package/dist/doc/fs-codec.js +44 -0
  137. package/dist/doc/fs-codec.js.map +1 -0
  138. package/dist/doc/markdown.d.ts +13 -0
  139. package/dist/doc/markdown.d.ts.map +1 -0
  140. package/dist/doc/markdown.js +250 -0
  141. package/dist/doc/markdown.js.map +1 -0
  142. package/dist/doc/prefab.d.ts +2 -0
  143. package/dist/doc/prefab.d.ts.map +1 -0
  144. package/dist/doc/prefab.js +23 -0
  145. package/dist/doc/prefab.js.map +1 -0
  146. package/dist/doc/renderers.d.ts +2 -0
  147. package/dist/doc/renderers.d.ts.map +1 -0
  148. package/dist/doc/renderers.js +94 -0
  149. package/dist/doc/renderers.js.map +1 -0
  150. package/dist/doc/seed.d.ts +2 -0
  151. package/dist/doc/seed.d.ts.map +1 -0
  152. package/dist/doc/seed.js +9 -0
  153. package/dist/doc/seed.js.map +1 -0
  154. package/dist/doc/server.d.ts +6 -0
  155. package/dist/doc/server.d.ts.map +1 -0
  156. package/dist/doc/server.js +6 -0
  157. package/dist/doc/server.js.map +1 -0
  158. package/dist/doc/slash-command.d.ts +3 -0
  159. package/dist/doc/slash-command.d.ts.map +1 -0
  160. package/dist/doc/slash-command.js +123 -0
  161. package/dist/doc/slash-command.js.map +1 -0
  162. package/dist/doc/slash-menu.d.ts +15 -0
  163. package/dist/doc/slash-menu.d.ts.map +1 -0
  164. package/dist/doc/slash-menu.js +54 -0
  165. package/dist/doc/slash-menu.js.map +1 -0
  166. package/dist/doc/text.d.ts +2 -0
  167. package/dist/doc/text.d.ts.map +1 -0
  168. package/dist/doc/text.js +22 -0
  169. package/dist/doc/text.js.map +1 -0
  170. package/dist/doc/toolbar.d.ts +5 -0
  171. package/dist/doc/toolbar.d.ts.map +1 -0
  172. package/dist/doc/toolbar.js +15 -0
  173. package/dist/doc/toolbar.js.map +1 -0
  174. package/dist/doc/treenity-block-view.d.ts +2 -0
  175. package/dist/doc/treenity-block-view.d.ts.map +1 -0
  176. package/dist/doc/treenity-block-view.js +37 -0
  177. package/dist/doc/treenity-block-view.js.map +1 -0
  178. package/dist/doc/treenity-block.d.ts +3 -0
  179. package/dist/doc/treenity-block.d.ts.map +1 -0
  180. package/dist/doc/treenity-block.js +27 -0
  181. package/dist/doc/treenity-block.js.map +1 -0
  182. package/dist/doc/types.d.ts +2 -0
  183. package/dist/doc/types.d.ts.map +1 -0
  184. package/dist/doc/types.js +10 -0
  185. package/dist/doc/types.js.map +1 -0
  186. package/dist/launcher/client.d.ts +5 -0
  187. package/dist/launcher/client.d.ts.map +1 -0
  188. package/dist/launcher/client.js +5 -0
  189. package/dist/launcher/client.js.map +1 -0
  190. package/dist/launcher/icons.d.ts +2 -0
  191. package/dist/launcher/icons.d.ts.map +1 -0
  192. package/dist/launcher/icons.js +57 -0
  193. package/dist/launcher/icons.js.map +1 -0
  194. package/dist/launcher/seed.d.ts +2 -0
  195. package/dist/launcher/seed.d.ts.map +1 -0
  196. package/dist/launcher/seed.js +36 -0
  197. package/dist/launcher/seed.js.map +1 -0
  198. package/dist/launcher/server.d.ts +3 -0
  199. package/dist/launcher/server.d.ts.map +1 -0
  200. package/dist/launcher/server.js +3 -0
  201. package/dist/launcher/server.js.map +1 -0
  202. package/dist/launcher/types.d.ts +21 -0
  203. package/dist/launcher/types.d.ts.map +1 -0
  204. package/dist/launcher/types.js +47 -0
  205. package/dist/launcher/types.js.map +1 -0
  206. package/dist/launcher/view.d.ts +2 -0
  207. package/dist/launcher/view.d.ts.map +1 -0
  208. package/dist/launcher/view.js +187 -0
  209. package/dist/launcher/view.js.map +1 -0
  210. package/dist/launcher/widgets.d.ts +2 -0
  211. package/dist/launcher/widgets.d.ts.map +1 -0
  212. package/dist/launcher/widgets.js +73 -0
  213. package/dist/launcher/widgets.js.map +1 -0
  214. package/dist/mindmap/branch.d.ts +17 -0
  215. package/dist/mindmap/branch.d.ts.map +1 -0
  216. package/dist/mindmap/branch.js +47 -0
  217. package/dist/mindmap/branch.js.map +1 -0
  218. package/dist/mindmap/client.d.ts +3 -0
  219. package/dist/mindmap/client.d.ts.map +1 -0
  220. package/dist/mindmap/client.js +3 -0
  221. package/dist/mindmap/client.js.map +1 -0
  222. package/dist/mindmap/radial-tree.d.ts +14 -0
  223. package/dist/mindmap/radial-tree.d.ts.map +1 -0
  224. package/dist/mindmap/radial-tree.js +184 -0
  225. package/dist/mindmap/radial-tree.js.map +1 -0
  226. package/dist/mindmap/sidebar.d.ts +8 -0
  227. package/dist/mindmap/sidebar.d.ts.map +1 -0
  228. package/dist/mindmap/sidebar.js +24 -0
  229. package/dist/mindmap/sidebar.js.map +1 -0
  230. package/dist/mindmap/types.d.ts +8 -0
  231. package/dist/mindmap/types.d.ts.map +1 -0
  232. package/dist/mindmap/types.js +10 -0
  233. package/dist/mindmap/types.js.map +1 -0
  234. package/dist/mindmap/use-tree-data.d.ts +14 -0
  235. package/dist/mindmap/use-tree-data.d.ts.map +1 -0
  236. package/dist/mindmap/use-tree-data.js +95 -0
  237. package/dist/mindmap/use-tree-data.js.map +1 -0
  238. package/dist/mindmap/view.d.ts +3 -0
  239. package/dist/mindmap/view.d.ts.map +1 -0
  240. package/dist/mindmap/view.js +141 -0
  241. package/dist/mindmap/view.js.map +1 -0
  242. package/dist/sensor-demo/client.d.ts +2 -0
  243. package/dist/sensor-demo/client.d.ts.map +1 -0
  244. package/dist/sensor-demo/client.js +2 -0
  245. package/dist/sensor-demo/client.js.map +1 -0
  246. package/dist/sensor-demo/server.d.ts +2 -0
  247. package/dist/sensor-demo/server.d.ts.map +1 -0
  248. package/dist/sensor-demo/server.js +2 -0
  249. package/dist/sensor-demo/server.js.map +1 -0
  250. package/dist/sensor-demo/service.d.ts +2 -0
  251. package/dist/sensor-demo/service.d.ts.map +1 -0
  252. package/dist/sensor-demo/service.js +27 -0
  253. package/dist/sensor-demo/service.js.map +1 -0
  254. package/dist/sensor-demo/types.d.ts +15 -0
  255. package/dist/sensor-demo/types.d.ts.map +1 -0
  256. package/dist/sensor-demo/types.js +18 -0
  257. package/dist/sensor-demo/types.js.map +1 -0
  258. package/dist/sensor-demo/view.d.ts +2 -0
  259. package/dist/sensor-demo/view.d.ts.map +1 -0
  260. package/dist/sensor-demo/view.js +33 -0
  261. package/dist/sensor-demo/view.js.map +1 -0
  262. package/dist/sensor-generator/action.d.ts +2 -0
  263. package/dist/sensor-generator/action.d.ts.map +1 -0
  264. package/dist/sensor-generator/action.js +23 -0
  265. package/dist/sensor-generator/action.js.map +1 -0
  266. package/dist/sensor-generator/client.d.ts +2 -0
  267. package/dist/sensor-generator/client.d.ts.map +1 -0
  268. package/dist/sensor-generator/client.js +2 -0
  269. package/dist/sensor-generator/client.js.map +1 -0
  270. package/dist/sensor-generator/server.d.ts +2 -0
  271. package/dist/sensor-generator/server.d.ts.map +1 -0
  272. package/dist/sensor-generator/server.js +2 -0
  273. package/dist/sensor-generator/server.js.map +1 -0
  274. package/dist/sensor-generator/view.d.ts +2 -0
  275. package/dist/sensor-generator/view.d.ts.map +1 -0
  276. package/dist/sensor-generator/view.js +64 -0
  277. package/dist/sensor-generator/view.js.map +1 -0
  278. package/dist/sim/client.d.ts +2 -0
  279. package/dist/sim/client.d.ts.map +1 -0
  280. package/dist/sim/client.js +2 -0
  281. package/dist/sim/client.js.map +1 -0
  282. package/dist/sim/seed.d.ts +2 -0
  283. package/dist/sim/seed.d.ts.map +1 -0
  284. package/dist/sim/seed.js +50 -0
  285. package/dist/sim/seed.js.map +1 -0
  286. package/dist/sim/server.d.ts +3 -0
  287. package/dist/sim/server.d.ts.map +1 -0
  288. package/dist/sim/server.js +3 -0
  289. package/dist/sim/server.js.map +1 -0
  290. package/dist/sim/service.d.ts +4 -0
  291. package/dist/sim/service.d.ts.map +1 -0
  292. package/dist/sim/service.js +528 -0
  293. package/dist/sim/service.js.map +1 -0
  294. package/dist/sim/types.d.ts +63 -0
  295. package/dist/sim/types.d.ts.map +1 -0
  296. package/dist/sim/types.js +57 -0
  297. package/dist/sim/types.js.map +1 -0
  298. package/dist/sim/view.d.ts +2 -0
  299. package/dist/sim/view.d.ts.map +1 -0
  300. package/dist/sim/view.js +205 -0
  301. package/dist/sim/view.js.map +1 -0
  302. package/dist/table/client.d.ts +4 -0
  303. package/dist/table/client.d.ts.map +1 -0
  304. package/dist/table/client.js +4 -0
  305. package/dist/table/client.js.map +1 -0
  306. package/dist/table/edit.d.ts +2 -0
  307. package/dist/table/edit.d.ts.map +1 -0
  308. package/dist/table/edit.js +115 -0
  309. package/dist/table/edit.js.map +1 -0
  310. package/dist/table/server.d.ts +2 -0
  311. package/dist/table/server.d.ts.map +1 -0
  312. package/dist/table/server.js +2 -0
  313. package/dist/table/server.js.map +1 -0
  314. package/dist/table/types.d.ts +18 -0
  315. package/dist/table/types.d.ts.map +1 -0
  316. package/dist/table/types.js +13 -0
  317. package/dist/table/types.js.map +1 -0
  318. package/dist/table/use-debounced-sync.d.ts +8 -0
  319. package/dist/table/use-debounced-sync.d.ts.map +1 -0
  320. package/dist/table/use-debounced-sync.js +56 -0
  321. package/dist/table/use-debounced-sync.js.map +1 -0
  322. package/dist/table/view.d.ts +2 -0
  323. package/dist/table/view.d.ts.map +1 -0
  324. package/dist/table/view.js +199 -0
  325. package/dist/table/view.js.map +1 -0
  326. package/dist/tasks/server.d.ts +2 -0
  327. package/dist/tasks/server.d.ts.map +1 -0
  328. package/dist/tasks/server.js +2 -0
  329. package/dist/tasks/server.js.map +1 -0
  330. package/dist/tasks/types.d.ts +22 -0
  331. package/dist/tasks/types.d.ts.map +1 -0
  332. package/dist/tasks/types.js +34 -0
  333. package/dist/tasks/types.js.map +1 -0
  334. package/dist/three/client.d.ts +2 -0
  335. package/dist/three/client.d.ts.map +1 -0
  336. package/dist/three/client.js +2 -0
  337. package/dist/three/client.js.map +1 -0
  338. package/dist/three/seed.d.ts +2 -0
  339. package/dist/three/seed.d.ts.map +1 -0
  340. package/dist/three/seed.js +45 -0
  341. package/dist/three/seed.js.map +1 -0
  342. package/dist/three/server.d.ts +3 -0
  343. package/dist/three/server.d.ts.map +1 -0
  344. package/dist/three/server.js +3 -0
  345. package/dist/three/server.js.map +1 -0
  346. package/dist/three/types.d.ts +178 -0
  347. package/dist/three/types.d.ts.map +1 -0
  348. package/dist/three/types.js +209 -0
  349. package/dist/three/types.js.map +1 -0
  350. package/dist/three/view.d.ts +2 -0
  351. package/dist/three/view.d.ts.map +1 -0
  352. package/dist/three/view.js +307 -0
  353. package/dist/three/view.js.map +1 -0
  354. package/dist/todo/client.d.ts +3 -0
  355. package/dist/todo/client.d.ts.map +1 -0
  356. package/dist/todo/client.js +3 -0
  357. package/dist/todo/client.js.map +1 -0
  358. package/dist/todo/seed.d.ts +2 -0
  359. package/dist/todo/seed.d.ts.map +1 -0
  360. package/dist/todo/seed.js +8 -0
  361. package/dist/todo/seed.js.map +1 -0
  362. package/dist/todo/server.d.ts +3 -0
  363. package/dist/todo/server.d.ts.map +1 -0
  364. package/dist/todo/server.js +3 -0
  365. package/dist/todo/server.js.map +1 -0
  366. package/dist/todo/types.d.ts +15 -0
  367. package/dist/todo/types.d.ts.map +1 -0
  368. package/dist/todo/types.js +29 -0
  369. package/dist/todo/types.js.map +1 -0
  370. package/dist/todo/view.d.ts +2 -0
  371. package/dist/todo/view.d.ts.map +1 -0
  372. package/dist/todo/view.js +27 -0
  373. package/dist/todo/view.js.map +1 -0
  374. package/dist/whisper/client.d.ts +2 -0
  375. package/dist/whisper/client.d.ts.map +1 -0
  376. package/dist/whisper/client.js +2 -0
  377. package/dist/whisper/client.js.map +1 -0
  378. package/dist/whisper/inbox.d.ts +2 -0
  379. package/dist/whisper/inbox.d.ts.map +1 -0
  380. package/dist/whisper/inbox.js +50 -0
  381. package/dist/whisper/inbox.js.map +1 -0
  382. package/dist/whisper/route.d.ts +10 -0
  383. package/dist/whisper/route.d.ts.map +1 -0
  384. package/dist/whisper/route.js +154 -0
  385. package/dist/whisper/route.js.map +1 -0
  386. package/dist/whisper/seed.d.ts +2 -0
  387. package/dist/whisper/seed.d.ts.map +1 -0
  388. package/dist/whisper/seed.js +14 -0
  389. package/dist/whisper/seed.js.map +1 -0
  390. package/dist/whisper/server.d.ts +5 -0
  391. package/dist/whisper/server.d.ts.map +1 -0
  392. package/dist/whisper/server.js +5 -0
  393. package/dist/whisper/server.js.map +1 -0
  394. package/dist/whisper/service.d.ts +2 -0
  395. package/dist/whisper/service.d.ts.map +1 -0
  396. package/dist/whisper/service.js +26 -0
  397. package/dist/whisper/service.js.map +1 -0
  398. package/dist/whisper/types.d.ts +38 -0
  399. package/dist/whisper/types.d.ts.map +1 -0
  400. package/dist/whisper/types.js +45 -0
  401. package/dist/whisper/types.js.map +1 -0
  402. package/dist/whisper/view.d.ts +2 -0
  403. package/dist/whisper/view.d.ts.map +1 -0
  404. package/dist/whisper/view.js +40 -0
  405. package/dist/whisper/view.js.map +1 -0
  406. package/doc/CLAUDE.md +49 -0
  407. package/doc/client.ts +5 -0
  408. package/doc/editor.css +283 -0
  409. package/doc/fs-codec.test.ts +119 -0
  410. package/doc/fs-codec.ts +50 -0
  411. package/doc/markdown.test.ts +152 -0
  412. package/doc/markdown.ts +284 -0
  413. package/doc/prefab.ts +26 -0
  414. package/doc/renderers.tsx +126 -0
  415. package/doc/seed.ts +10 -0
  416. package/doc/server.ts +5 -0
  417. package/doc/slash-command.ts +136 -0
  418. package/doc/slash-menu.tsx +91 -0
  419. package/doc/text.ts +20 -0
  420. package/doc/toolbar.tsx +86 -0
  421. package/doc/treenity-block-view.tsx +116 -0
  422. package/doc/treenity-block.ts +31 -0
  423. package/doc/types.ts +10 -0
  424. package/launcher/client.ts +4 -0
  425. package/launcher/icons.tsx +234 -0
  426. package/launcher/launcher.css +64 -0
  427. package/launcher/seed.ts +41 -0
  428. package/launcher/server.ts +2 -0
  429. package/launcher/types.ts +53 -0
  430. package/launcher/view.tsx +401 -0
  431. package/launcher/widgets.tsx +171 -0
  432. package/mindmap/branch.tsx +163 -0
  433. package/mindmap/client.ts +2 -0
  434. package/mindmap/mindmap.css +243 -0
  435. package/mindmap/sidebar.tsx +127 -0
  436. package/mindmap/types.ts +10 -0
  437. package/mindmap/view.tsx +247 -0
  438. package/package.json +75 -0
  439. package/sensor-demo/CLAUDE.md +3 -0
  440. package/sensor-demo/client.ts +1 -0
  441. package/sensor-demo/server.ts +1 -0
  442. package/sensor-demo/service.ts +27 -0
  443. package/sensor-demo/types.ts +20 -0
  444. package/sensor-demo/view.tsx +64 -0
  445. package/sensor-generator/CLAUDE.md +3 -0
  446. package/sensor-generator/action.ts +28 -0
  447. package/sensor-generator/client.ts +1 -0
  448. package/sensor-generator/server.ts +1 -0
  449. package/sensor-generator/view.tsx +107 -0
  450. package/sim/CLAUDE.md +16 -0
  451. package/sim/client.ts +1 -0
  452. package/sim/seed.ts +55 -0
  453. package/sim/server.ts +2 -0
  454. package/sim/service.ts +594 -0
  455. package/sim/sim.test.ts +282 -0
  456. package/sim/types.ts +87 -0
  457. package/sim/view.tsx +446 -0
  458. package/table/client.ts +3 -0
  459. package/table/edit.tsx +241 -0
  460. package/table/server.ts +1 -0
  461. package/table/types.ts +22 -0
  462. package/table/use-debounced-sync.ts +67 -0
  463. package/table/view.tsx +339 -0
  464. package/tasks/CLAUDE.md +6 -0
  465. package/tasks/server.ts +1 -0
  466. package/tasks/types.ts +36 -0
  467. package/three/CLAUDE.md +6 -0
  468. package/three/client.ts +1 -0
  469. package/three/seed.ts +54 -0
  470. package/three/server.ts +2 -0
  471. package/three/types.ts +238 -0
  472. package/three/view.tsx +453 -0
  473. package/todo/client.ts +2 -0
  474. package/todo/seed.ts +9 -0
  475. package/todo/server.ts +2 -0
  476. package/todo/types.ts +32 -0
  477. package/todo/view.tsx +67 -0
  478. package/whisper/CLAUDE.md +16 -0
  479. package/whisper/client.ts +1 -0
  480. package/whisper/inbox.ts +54 -0
  481. package/whisper/route.ts +182 -0
  482. package/whisper/seed.ts +15 -0
  483. package/whisper/server.ts +4 -0
  484. package/whisper/service.ts +29 -0
  485. package/whisper/types.ts +51 -0
  486. package/whisper/view.tsx +81 -0
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useChildren } from '@treenity/react/hooks';
3
+ import { createContext, useContext } from 'react';
4
+ export const MindMapCtx = createContext(null);
5
+ const LEVEL_W = 200;
6
+ const SPACING = 36;
7
+ function basename(path) {
8
+ if (path === '/')
9
+ return '/';
10
+ const i = path.lastIndexOf('/');
11
+ return i < 0 ? path : path.slice(i + 1);
12
+ }
13
+ function shortType(type) {
14
+ const parts = type.split('.');
15
+ return parts.length > 1 ? parts.pop() : '';
16
+ }
17
+ function sCurve(dx, dy) {
18
+ const cx = dx * 0.5;
19
+ return `M0,0 C${cx},0 ${cx},${dy} ${dx},${dy}`;
20
+ }
21
+ export function MindMapBranch({ node, side, color, depth }) {
22
+ const { expanded, selectedPath, onToggle, onSelect } = useContext(MindMapCtx);
23
+ const isExpanded = expanded.has(node.$path);
24
+ const isLeft = side === 'left';
25
+ const isSelected = selectedPath === node.$path;
26
+ const name = basename(node.$path);
27
+ const type = shortType(node.$type);
28
+ const strokeW = Math.max(1.5, 3 - depth * 0.4);
29
+ return (_jsxs("g", { children: [_jsxs("g", { className: `mm-node${isSelected ? ' mm-node-selected' : ''}`, onClick: () => onToggle(node.$path), onContextMenu: e => { e.preventDefault(); onSelect(node.$path); }, children: [_jsx("circle", { r: isSelected ? 5 : 3.5, fill: color, className: "mm-dot" }), _jsx("text", { x: isLeft ? -12 : 12, textAnchor: isLeft ? 'end' : 'start', dominantBaseline: "central", className: "mm-label", fill: color, children: name }), type && depth <= 2 && (_jsx("text", { x: isLeft ? -12 - name.length * 7.5 - 8 : 12 + name.length * 7.5 + 8, textAnchor: isLeft ? 'end' : 'start', dominantBaseline: "central", className: "mm-type-tag", fill: color, children: type })), _jsx("rect", { x: isLeft ? -12 - name.length * 8 : -6, y: -14, width: name.length * 8 + 20, height: 28, fill: "transparent" })] }), isExpanded && (_jsx(BranchChildren, { path: node.$path, side: side, color: color, depth: depth, strokeW: strokeW }))] }));
30
+ }
31
+ function BranchChildren({ path, side, color, depth, strokeW }) {
32
+ const children = useChildren(path, { watch: true, watchNew: true });
33
+ if (children.length === 0)
34
+ return null;
35
+ const isLeft = side === 'left';
36
+ const dx = isLeft ? -LEVEL_W : LEVEL_W;
37
+ const totalH = (children.length - 1) * SPACING;
38
+ const startY = -totalH / 2;
39
+ return (_jsxs(_Fragment, { children: [children.map((child, i) => {
40
+ const cy = startY + i * SPACING;
41
+ return (_jsx("path", { d: sCurve(dx, cy), fill: "none", stroke: color, strokeWidth: strokeW, strokeOpacity: 0.55, strokeLinecap: "round", className: "mm-link" }, `link-${child.$path}`));
42
+ }), children.map((child, i) => {
43
+ const cy = startY + i * SPACING;
44
+ return (_jsx("g", { transform: `translate(${dx},${cy})`, children: _jsx(MindMapBranch, { node: child, side: side, color: color, depth: depth + 1 }) }, child.$path));
45
+ })] }));
46
+ }
47
+ //# sourceMappingURL=branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../mindmap/branch.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import './types';
2
+ import './view';
3
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../mindmap/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import './types';
2
+ import './view';
3
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../mindmap/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import 'd3-transition';
2
+ import type { TreeItem } from './use-tree-data';
3
+ type Props = {
4
+ data: TreeItem;
5
+ selectedPath: string | null;
6
+ onSelect: (path: string) => void;
7
+ onToggle: (path: string) => void;
8
+ branchColors: Map<string, string>;
9
+ width: number;
10
+ height: number;
11
+ };
12
+ export declare function MindMapTree({ data, selectedPath, onSelect, onToggle, branchColors, width, height }: Props): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=radial-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radial-tree.d.ts","sourceRoot":"","sources":["../../mindmap/radial-tree.tsx"],"names":[],"mappings":"AAKA,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAkGF,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,2CA6QzG"}
@@ -0,0 +1,184 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Miro-style mind map — horizontal balanced tree with organic bezier curves
3
+ // Pure SVG: text labels + colored branches, no foreignObject
4
+ import { hierarchy, tree as d3tree } from 'd3-hierarchy';
5
+ import { select } from 'd3-selection';
6
+ import 'd3-transition';
7
+ import { zoom as d3zoom, zoomIdentity } from 'd3-zoom';
8
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
9
+ // Type → icon mapping (simple SVG paths)
10
+ const TYPE_ICONS = {
11
+ dir: 'M2 4h5l2 2h9v12H2V4z',
12
+ ref: 'M10 2a8 8 0 100 16 8 8 0 000-16zm1 4v4l3.5 2.1-.8 1.3L9 11V6h2z',
13
+ user: 'M12 4a4 4 0 110 8 4 4 0 010-8zM12 14c-4.42 0-8 1.79-8 4v2h16v-2c0-2.21-3.58-4-8-4z',
14
+ root: 'M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z',
15
+ };
16
+ function getIcon(type) {
17
+ if (TYPE_ICONS[type])
18
+ return TYPE_ICONS[type];
19
+ const base = type.split('.')[0];
20
+ return TYPE_ICONS[base] ?? null;
21
+ }
22
+ // Measure text width roughly (8px per char at 13px font, 6.5px at 11px)
23
+ function textWidth(str, fontSize) {
24
+ return str.length * fontSize * 0.62;
25
+ }
26
+ function splitTree(root) {
27
+ const left = [];
28
+ const right = [];
29
+ root.children.forEach((child, i) => {
30
+ const tagged = { ...child, _side: (i % 2 === 0 ? 'right' : 'left') };
31
+ if (i % 2 === 0)
32
+ right.push(tagged);
33
+ else
34
+ left.push(tagged);
35
+ });
36
+ return { ...root, children: [...right, ...left] };
37
+ }
38
+ function tagSide(item, side) {
39
+ return {
40
+ ...item,
41
+ _side: item._side ?? side,
42
+ children: item.children.map(c => tagSide(c, side)),
43
+ };
44
+ }
45
+ function buildSide(root, children, side) {
46
+ return {
47
+ ...root,
48
+ _side: undefined,
49
+ children: children.map(c => tagSide(c, side)),
50
+ };
51
+ }
52
+ // Organic cubic bezier — Miro-style smooth S-curve
53
+ function linkPath(sx, sy, tx, ty) {
54
+ const dx = tx - sx;
55
+ const cp = Math.abs(dx) * 0.5;
56
+ return `M${sx},${sy} C${sx + (dx > 0 ? cp : -cp)},${sy} ${tx - (dx > 0 ? cp : -cp)},${ty} ${tx},${ty}`;
57
+ }
58
+ function layoutHalf(root, children, side, height) {
59
+ if (children.length === 0)
60
+ return null;
61
+ const subtree = buildSide(root, children, side);
62
+ const h = hierarchy(subtree, d => d.children);
63
+ const nodeCount = h.descendants().length;
64
+ const treeHeight = Math.max(height * 0.8, nodeCount * 32);
65
+ const layout = d3tree()
66
+ .size([treeHeight, 220 * Math.max(1, h.height)])
67
+ .separation((a, b) => (a.parent === b.parent ? 1 : 1.5));
68
+ layout(h);
69
+ // Convert: d3tree gives vertical layout (x=vertical, y=horizontal)
70
+ // We flip and mirror for left side
71
+ for (const node of h.descendants()) {
72
+ const lNode = node;
73
+ if (side === 'left') {
74
+ lNode._rx = -lNode.y;
75
+ lNode._ry = lNode.x - treeHeight / 2;
76
+ }
77
+ else {
78
+ lNode._rx = lNode.y;
79
+ lNode._ry = lNode.x - treeHeight / 2;
80
+ }
81
+ }
82
+ return h;
83
+ }
84
+ export function MindMapTree({ data, selectedPath, onSelect, onToggle, branchColors, width, height }) {
85
+ const svgRef = useRef(null);
86
+ const gRef = useRef(null);
87
+ const zoomRef = useRef(null);
88
+ // Split into left/right halves
89
+ const { leftNodes, rightNodes } = useMemo(() => {
90
+ const split = splitTree(data);
91
+ const leftChildren = [];
92
+ const rightChildren = [];
93
+ for (const c of split.children) {
94
+ if (c._side === 'left')
95
+ leftChildren.push(c);
96
+ else
97
+ rightChildren.push(c);
98
+ }
99
+ const left = layoutHalf(data, leftChildren, 'left', height);
100
+ const right = layoutHalf(data, rightChildren, 'right', height);
101
+ return {
102
+ leftNodes: left ? left.descendants().slice(1) : [],
103
+ rightNodes: right ? right.descendants().slice(1) : [],
104
+ };
105
+ }, [data, height]);
106
+ const allNodes = useMemo(() => [...leftNodes, ...rightNodes], [leftNodes, rightNodes]);
107
+ // Build links from parent→child coords
108
+ const links = useMemo(() => {
109
+ const result = [];
110
+ for (const node of allNodes) {
111
+ const parent = node.parent;
112
+ if (!parent)
113
+ continue;
114
+ const sx = parent.depth === 0 ? 0 : parent._rx;
115
+ const sy = parent.depth === 0 ? 0 : parent._ry;
116
+ const tx = node._rx;
117
+ const ty = node._ry;
118
+ const color = branchColors.get(node.data.path) ?? 'var(--text-3)';
119
+ const strokeWidth = Math.max(1.5, 3.5 - node.depth * 0.6);
120
+ result.push({
121
+ key: `${parent.data.path}->${node.data.path}`,
122
+ path: linkPath(sx, sy, tx, ty),
123
+ color,
124
+ width: strokeWidth,
125
+ source: parent,
126
+ target: node,
127
+ });
128
+ }
129
+ return result;
130
+ }, [allNodes, branchColors]);
131
+ // Zoom
132
+ useEffect(() => {
133
+ if (!svgRef.current || !gRef.current)
134
+ return;
135
+ const svg = select(svgRef.current);
136
+ const g = select(gRef.current);
137
+ const zoomBehavior = d3zoom()
138
+ .scaleExtent([0.1, 4])
139
+ .on('zoom', event => {
140
+ g.attr('transform', event.transform.toString());
141
+ });
142
+ svg.call(zoomBehavior);
143
+ const initialTransform = zoomIdentity.translate(width / 2, height / 2).scale(0.85);
144
+ svg.call(zoomBehavior.transform, initialTransform);
145
+ zoomRef.current = zoomBehavior;
146
+ return () => { svg.on('.zoom', null); };
147
+ }, [width, height]);
148
+ // Fit view
149
+ const fitView = useCallback(() => {
150
+ if (!svgRef.current || !zoomRef.current || !gRef.current)
151
+ return;
152
+ const svg = select(svgRef.current);
153
+ const bounds = gRef.current.getBBox();
154
+ if (!bounds.width || !bounds.height)
155
+ return;
156
+ const pad = 60;
157
+ const scale = Math.min((width - pad * 2) / bounds.width, (height - pad * 2) / bounds.height, 1.5);
158
+ const tx = width / 2 - (bounds.x + bounds.width / 2) * scale;
159
+ const ty = height / 2 - (bounds.y + bounds.height / 2) * scale;
160
+ svg.transition().duration(400).call(zoomRef.current.transform, zoomIdentity.translate(tx, ty).scale(scale));
161
+ }, [width, height]);
162
+ // Auto-fit on data change
163
+ useEffect(() => {
164
+ const t = setTimeout(fitView, 80);
165
+ return () => clearTimeout(t);
166
+ }, [data, fitView]);
167
+ const rootName = data.name === '/' ? '/' : data.name;
168
+ const rootColor = branchColors.get(data.path) ?? 'var(--text)';
169
+ return (_jsxs("div", { className: "mm-tree-wrap", children: [_jsx("div", { className: "mm-toolbar", children: _jsx("button", { className: "mm-btn", onClick: fitView, title: "Fit view", children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7" }) }) }) }), _jsx("svg", { ref: svgRef, width: width, height: height, className: "mm-svg", children: _jsxs("g", { ref: gRef, children: [links.map(l => (_jsx("path", { d: l.path, fill: "none", stroke: l.color, strokeWidth: l.width, strokeOpacity: 0.7, strokeLinecap: "round", className: "mm-link" }, l.key))), _jsxs("g", { className: `mm-node mm-root${selectedPath === data.path ? ' mm-node-selected' : ''}`, onClick: () => onSelect(data.path), onDoubleClick: () => onToggle(data.path), children: [_jsx("rect", { x: -textWidth(rootName, 16) / 2 - 24, y: -20, width: textWidth(rootName, 16) + 48, height: 40, rx: 20, className: "mm-root-bg" }), _jsx("text", { textAnchor: "middle", dominantBaseline: "central", className: "mm-root-label", children: rootName })] }), allNodes.map(node => {
170
+ const d = node.data;
171
+ const x = node._rx;
172
+ const y = node._ry;
173
+ const color = branchColors.get(d.path) ?? 'var(--text-2)';
174
+ const isLeft = d._side === 'left';
175
+ const isSelected = selectedPath === d.path;
176
+ const icon = getIcon(d.type);
177
+ const hasChildren = d.childCount > 0;
178
+ const label = d.name;
179
+ // Type badge (short)
180
+ const shortType = d.type.includes('.') ? d.type.split('.').pop() : '';
181
+ return (_jsxs("g", { transform: `translate(${x},${y})`, className: `mm-node${isSelected ? ' mm-node-selected' : ''}`, onClick: () => onSelect(d.path), onDoubleClick: () => onToggle(d.path), children: [_jsx("rect", { x: isLeft ? -textWidth(label, 13) - 30 : -10, y: -14, width: textWidth(label, 13) + 50, height: 28, fill: "transparent", className: "mm-hit" }), isSelected && (_jsx("rect", { x: isLeft ? -textWidth(label, 13) - 26 : -6, y: -12, width: textWidth(label, 13) + 42, height: 24, rx: 12, className: "mm-select-bg", fill: color, fillOpacity: 0.1 })), _jsx("circle", { cx: 0, cy: 0, r: hasChildren && !d.expanded ? 4 : 3, fill: color, className: "mm-dot" }), icon && (_jsx("g", { transform: `translate(${isLeft ? -22 : 8}, -8) scale(0.7)`, children: _jsx("path", { d: icon, fill: color, fillOpacity: 0.6 }) })), _jsx("text", { x: isLeft ? -12 : (icon ? 24 : 12), textAnchor: isLeft ? 'end' : 'start', dominantBaseline: "central", className: "mm-label", fill: color, children: label }), shortType && node.depth <= 2 && (_jsx("text", { x: isLeft ? -12 - textWidth(label, 13) - 8 : (icon ? 24 : 12) + textWidth(label, 13) + 8, textAnchor: isLeft ? 'end' : 'start', dominantBaseline: "central", className: "mm-type-tag", fill: color, children: shortType })), hasChildren && !d.expanded && (_jsxs("g", { transform: `translate(${isLeft ? 8 : -8 + (icon ? 24 : 12) + textWidth(label, 13) + (shortType && node.depth <= 2 ? textWidth(shortType, 10) + 16 : 8)}, 0)`, className: "mm-count-badge", onClick: e => { e.stopPropagation(); onToggle(d.path); }, children: [_jsx("circle", { r: 8, fill: color, fillOpacity: 0.15 }), _jsx("text", { textAnchor: "middle", dominantBaseline: "central", fill: color, fontSize: "9", fontWeight: "600", children: d.childCount })] }))] }, d.path));
182
+ })] }) })] }));
183
+ }
184
+ //# sourceMappingURL=radial-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radial-tree.js","sourceRoot":"","sources":["../../mindmap/radial-tree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type Props = {
2
+ path: string;
3
+ onClose: () => void;
4
+ onNavigate: (path: string) => void;
5
+ };
6
+ export declare function MindMapSidebar({ path, onClose, onNavigate }: Props): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../mindmap/sidebar.tsx"],"names":[],"mappings":"AAMA,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAOF,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,2CA6GlE"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Mind map sidebar — shows selected node details
3
+ // Lightweight panel: path, type, components, fields, actions
4
+ import { execute, usePath } from '@treenity/react/hooks';
5
+ import { getActions, getComponents, getPlainFields, getSchema } from '@treenity/react/mods/editor-ui/node-utils';
6
+ function shortType(type) {
7
+ const parts = type.split('.');
8
+ return parts.length > 1 ? parts.slice(-1)[0] : type;
9
+ }
10
+ export function MindMapSidebar({ path, onClose, onNavigate }) {
11
+ const node = usePath(path);
12
+ if (!node) {
13
+ return (_jsx("div", { className: "mm-sidebar", children: _jsxs("div", { className: "mm-sidebar-header", children: [_jsx("span", { className: "text-[var(--text-3)]", children: "Loading..." }), _jsx("button", { className: "mm-btn", onClick: onClose, children: "\u00D7" })] }) }));
14
+ }
15
+ const components = getComponents(node);
16
+ const fields = getPlainFields(node);
17
+ const schema = getSchema(node.$type);
18
+ const actions = getActions(node.$type, schema);
19
+ return (_jsxs("div", { className: "mm-sidebar", children: [_jsxs("div", { className: "mm-sidebar-header", children: [_jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [_jsx("span", { className: "text-[13px] font-semibold truncate cursor-pointer hover:underline", onClick: () => onNavigate(path), title: "Open in Inspector", children: path.split('/').at(-1) || '/' }), _jsx("span", { className: "text-[11px] text-[var(--text-3)] truncate", children: path })] }), _jsx("button", { className: "mm-btn shrink-0", onClick: onClose, children: "\u00D7" })] }), _jsxs("div", { className: "mm-sidebar-body", children: [_jsxs("div", { className: "mm-section", children: [_jsx("div", { className: "mm-section-label", children: "Type" }), _jsx("span", { className: "mm-type-badge", children: node.$type })] }), Object.keys(fields).length > 0 && (_jsxs("div", { className: "mm-section", children: [_jsx("div", { className: "mm-section-label", children: "Fields" }), _jsx("div", { className: "flex flex-col gap-1", children: Object.entries(fields).map(([k, v]) => (_jsxs("div", { className: "mm-field-row", children: [_jsx("span", { className: "mm-field-key", children: k }), _jsx("span", { className: "mm-field-val", children: typeof v === 'object' ? JSON.stringify(v) : String(v ?? '') })] }, k))) })] })), components.length > 0 && (_jsxs("div", { className: "mm-section", children: [_jsxs("div", { className: "mm-section-label", children: ["Components (", components.length, ")"] }), _jsx("div", { className: "flex flex-col gap-1.5", children: components.map(([key, comp]) => (_jsxs("div", { className: "mm-comp-card", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-[12px] font-medium", children: key }), _jsx("span", { className: "mm-comp-type", children: shortType(comp.$type) })] }), _jsx("div", { className: "flex flex-col gap-0.5 mt-1", children: Object.entries(comp)
20
+ .filter(([k]) => !k.startsWith('$'))
21
+ .slice(0, 5)
22
+ .map(([k, v]) => (_jsxs("div", { className: "mm-field-row", children: [_jsx("span", { className: "mm-field-key", children: k }), _jsx("span", { className: "mm-field-val", children: typeof v === 'object' ? JSON.stringify(v) : String(v ?? '') })] }, k))) })] }, key))) })] })), actions.length > 0 && (_jsxs("div", { className: "mm-section", children: [_jsx("div", { className: "mm-section-label", children: "Actions" }), _jsx("div", { className: "flex flex-wrap gap-1", children: actions.map(a => (_jsx("button", { className: "mm-action-btn", onClick: () => execute(path, a).catch(console.error), children: a }, a))) })] }))] })] }));
23
+ }
24
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../mindmap/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** @description Mind map visualization — radial tree of Treenity nodes */
2
+ export declare class MindMapConfig {
3
+ /** Root path to visualize (empty = this node's path) */
4
+ root: string;
5
+ /** Max children per expanded level */
6
+ maxChildren: number;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../mindmap/types.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,qBAAa,aAAa;IACxB,wDAAwD;IACxD,IAAI,SAAM;IACV,sCAAsC;IACtC,WAAW,SAAM;CAClB"}
@@ -0,0 +1,10 @@
1
+ import { registerType } from '@treenity/core/comp';
2
+ /** @description Mind map visualization — radial tree of Treenity nodes */
3
+ export class MindMapConfig {
4
+ /** Root path to visualize (empty = this node's path) */
5
+ root = '';
6
+ /** Max children per expanded level */
7
+ maxChildren = 50;
8
+ }
9
+ registerType('mindmap.map', MindMapConfig);
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../mindmap/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,0EAA0E;AAC1E,MAAM,OAAO,aAAa;IACxB,wDAAwD;IACxD,IAAI,GAAG,EAAE,CAAC;IACV,sCAAsC;IACtC,WAAW,GAAG,EAAE,CAAC;CAClB;AACD,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { NodeData } from '@treenity/core';
2
+ export type TreeItem = {
3
+ path: string;
4
+ name: string;
5
+ type: string;
6
+ node: NodeData;
7
+ components: [string, Record<string, unknown>][];
8
+ childCount: number;
9
+ children: TreeItem[];
10
+ expanded: boolean;
11
+ depth: number;
12
+ };
13
+ export declare function useTreeData(rootPath: string, expanded: Set<string>, maxChildren?: number): TreeItem | null;
14
+ //# sourceMappingURL=use-tree-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tree-data.d.ts","sourceRoot":"","sources":["../../mindmap/use-tree-data.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA8DF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,SAAK,mBA4CpF"}
@@ -0,0 +1,95 @@
1
+ // useTreeData — bridge between Treenity cache and D3 hierarchy
2
+ // Lazily loads children for expanded paths, builds nested tree structure
3
+ import * as cache from '@treenity/react/cache';
4
+ import { getComponents } from '@treenity/react/mods/editor-ui/node-utils';
5
+ import { trpc } from '@treenity/react/trpc';
6
+ import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
7
+ // Fetch children for a path if not already in cache
8
+ function ensureChildren(path) {
9
+ const existing = cache.getChildren(path);
10
+ if (existing.length)
11
+ return;
12
+ trpc.getChildren
13
+ .query({ path, watch: true, watchNew: true })
14
+ .then((r) => cache.putMany(r.items, path));
15
+ }
16
+ function basename(path) {
17
+ if (path === '/')
18
+ return '/';
19
+ const i = path.lastIndexOf('/');
20
+ return i < 0 ? path : path.slice(i + 1);
21
+ }
22
+ function buildTree(rootNode, expanded, depth, maxChildren) {
23
+ const children = cache.getChildren(rootNode.$path);
24
+ const isExpanded = expanded.has(rootNode.$path);
25
+ const comps = getComponents(rootNode);
26
+ const childItems = [];
27
+ if (isExpanded) {
28
+ const limited = children.slice(0, maxChildren);
29
+ for (const child of limited) {
30
+ childItems.push(buildTree(child, expanded, depth + 1, maxChildren));
31
+ }
32
+ // Overflow indicator
33
+ if (children.length > maxChildren) {
34
+ childItems.push({
35
+ path: rootNode.$path + '/__more__',
36
+ name: `+${children.length - maxChildren} more`,
37
+ type: '__overflow__',
38
+ node: rootNode,
39
+ components: [],
40
+ childCount: 0,
41
+ children: [],
42
+ expanded: false,
43
+ depth: depth + 1,
44
+ });
45
+ }
46
+ }
47
+ return {
48
+ path: rootNode.$path,
49
+ name: basename(rootNode.$path),
50
+ type: rootNode.$type,
51
+ node: rootNode,
52
+ components: comps,
53
+ childCount: children.length,
54
+ children: childItems,
55
+ expanded: isExpanded,
56
+ depth,
57
+ };
58
+ }
59
+ export function useTreeData(rootPath, expanded, maxChildren = 50) {
60
+ const [version, setVersion] = useState(0);
61
+ const loadedRef = useRef(null);
62
+ // Initial fetch for root's children
63
+ useEffect(() => {
64
+ if (loadedRef.current === rootPath)
65
+ return;
66
+ loadedRef.current = rootPath;
67
+ ensureChildren(rootPath);
68
+ }, [rootPath]);
69
+ // Fetch children for newly expanded paths
70
+ useEffect(() => {
71
+ for (const p of expanded)
72
+ ensureChildren(p);
73
+ }, [expanded]);
74
+ // Subscribe to children changes for root + all expanded paths
75
+ useEffect(() => {
76
+ const paths = [rootPath, ...expanded];
77
+ const unsubs = paths.map(p => cache.subscribeChildren(p, () => setVersion(v => v + 1)));
78
+ return () => unsubs.forEach(u => u());
79
+ }, [rootPath, [...expanded].join(',')]);
80
+ // Subscribe to root node changes
81
+ useEffect(() => {
82
+ return cache.subscribePath(rootPath, () => setVersion(v => v + 1));
83
+ }, [rootPath]);
84
+ // Get root node from cache
85
+ const rootNode = useSyncExternalStore(useCallback((cb) => cache.subscribePath(rootPath, cb), [rootPath]), useCallback(() => cache.get(rootPath), [rootPath]));
86
+ // Build hierarchy from cache data
87
+ const tree = useMemo(() => {
88
+ if (!rootNode)
89
+ return null;
90
+ return buildTree(rootNode, expanded, 0, maxChildren);
91
+ // eslint-disable-next-line react-hooks/exhaustive-deps
92
+ }, [rootNode, expanded, version, maxChildren]);
93
+ return tree;
94
+ }
95
+ //# sourceMappingURL=use-tree-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tree-data.js","sourceRoot":"","sources":["../../mindmap/use-tree-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import 'd3-transition';
2
+ import './mindmap.css';
3
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../mindmap/view.tsx"],"names":[],"mappings":"AAOA,OAAO,eAAe,CAAC;AAMvB,OAAO,eAAe,CAAC"}