@treenity/react 3.0.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 (297) hide show
  1. package/dist/AclEditor.d.ts +11 -0
  2. package/dist/AclEditor.d.ts.map +1 -0
  3. package/dist/AclEditor.js +152 -0
  4. package/dist/AclEditor.js.map +1 -0
  5. package/dist/App.d.ts +2 -0
  6. package/dist/App.d.ts.map +1 -0
  7. package/dist/App.js +521 -0
  8. package/dist/App.js.map +1 -0
  9. package/dist/Inspector.d.ts +12 -0
  10. package/dist/Inspector.d.ts.map +1 -0
  11. package/dist/Inspector.js +360 -0
  12. package/dist/Inspector.js.map +1 -0
  13. package/dist/Tree.d.ts +16 -0
  14. package/dist/Tree.d.ts.map +1 -0
  15. package/dist/Tree.js +100 -0
  16. package/dist/Tree.js.map +1 -0
  17. package/dist/ViewPage.d.ts +5 -0
  18. package/dist/ViewPage.d.ts.map +1 -0
  19. package/dist/ViewPage.js +13 -0
  20. package/dist/ViewPage.js.map +1 -0
  21. package/dist/bind/computed.d.ts +9 -0
  22. package/dist/bind/computed.d.ts.map +1 -0
  23. package/dist/bind/computed.js +61 -0
  24. package/dist/bind/computed.js.map +1 -0
  25. package/dist/bind/engine.d.ts +3 -0
  26. package/dist/bind/engine.d.ts.map +1 -0
  27. package/dist/bind/engine.js +184 -0
  28. package/dist/bind/engine.js.map +1 -0
  29. package/dist/bind/eval.d.ts +13 -0
  30. package/dist/bind/eval.d.ts.map +1 -0
  31. package/dist/bind/eval.js +97 -0
  32. package/dist/bind/eval.js.map +1 -0
  33. package/dist/bind/hook.d.ts +8 -0
  34. package/dist/bind/hook.d.ts.map +1 -0
  35. package/dist/bind/hook.js +99 -0
  36. package/dist/bind/hook.js.map +1 -0
  37. package/dist/bind/parse.d.ts +19 -0
  38. package/dist/bind/parse.d.ts.map +1 -0
  39. package/dist/bind/parse.js +86 -0
  40. package/dist/bind/parse.js.map +1 -0
  41. package/dist/bind/pipes.d.ts +4 -0
  42. package/dist/bind/pipes.d.ts.map +1 -0
  43. package/dist/bind/pipes.js +43 -0
  44. package/dist/bind/pipes.js.map +1 -0
  45. package/dist/cache.d.ts +27 -0
  46. package/dist/cache.d.ts.map +1 -0
  47. package/dist/cache.js +236 -0
  48. package/dist/cache.js.map +1 -0
  49. package/dist/client-tree.d.ts +9 -0
  50. package/dist/client-tree.d.ts.map +1 -0
  51. package/dist/client-tree.js +14 -0
  52. package/dist/client-tree.js.map +1 -0
  53. package/dist/client.d.ts +2 -0
  54. package/dist/client.d.ts.map +1 -0
  55. package/dist/client.js +10 -0
  56. package/dist/client.js.map +1 -0
  57. package/dist/components/ui/accordion.d.ts +8 -0
  58. package/dist/components/ui/accordion.d.ts.map +1 -0
  59. package/dist/components/ui/accordion.js +18 -0
  60. package/dist/components/ui/accordion.js.map +1 -0
  61. package/dist/components/ui/badge.d.ts +10 -0
  62. package/dist/components/ui/badge.d.ts.map +1 -0
  63. package/dist/components/ui/badge.js +19 -0
  64. package/dist/components/ui/badge.js.map +1 -0
  65. package/dist/components/ui/button.d.ts +11 -0
  66. package/dist/components/ui/button.d.ts.map +1 -0
  67. package/dist/components/ui/button.js +31 -0
  68. package/dist/components/ui/button.js.map +1 -0
  69. package/dist/components/ui/checkbox.d.ts +4 -0
  70. package/dist/components/ui/checkbox.d.ts.map +1 -0
  71. package/dist/components/ui/checkbox.js +7 -0
  72. package/dist/components/ui/checkbox.js.map +1 -0
  73. package/dist/components/ui/dialog.d.ts +18 -0
  74. package/dist/components/ui/dialog.d.ts.map +1 -0
  75. package/dist/components/ui/dialog.js +37 -0
  76. package/dist/components/ui/dialog.js.map +1 -0
  77. package/dist/components/ui/drawer.d.ts +14 -0
  78. package/dist/components/ui/drawer.d.ts.map +1 -0
  79. package/dist/components/ui/drawer.js +35 -0
  80. package/dist/components/ui/drawer.js.map +1 -0
  81. package/dist/components/ui/input.d.ts +4 -0
  82. package/dist/components/ui/input.d.ts.map +1 -0
  83. package/dist/components/ui/input.js +7 -0
  84. package/dist/components/ui/input.js.map +1 -0
  85. package/dist/components/ui/label.d.ts +5 -0
  86. package/dist/components/ui/label.d.ts.map +1 -0
  87. package/dist/components/ui/label.js +8 -0
  88. package/dist/components/ui/label.js.map +1 -0
  89. package/dist/components/ui/popover.d.ts +11 -0
  90. package/dist/components/ui/popover.d.ts.map +1 -0
  91. package/dist/components/ui/popover.js +26 -0
  92. package/dist/components/ui/popover.js.map +1 -0
  93. package/dist/components/ui/progress.d.ts +5 -0
  94. package/dist/components/ui/progress.d.ts.map +1 -0
  95. package/dist/components/ui/progress.js +9 -0
  96. package/dist/components/ui/progress.js.map +1 -0
  97. package/dist/components/ui/select.d.ts +16 -0
  98. package/dist/components/ui/select.d.ts.map +1 -0
  99. package/dist/components/ui/select.js +39 -0
  100. package/dist/components/ui/select.js.map +1 -0
  101. package/dist/components/ui/slider.d.ts +5 -0
  102. package/dist/components/ui/slider.d.ts.map +1 -0
  103. package/dist/components/ui/slider.js +15 -0
  104. package/dist/components/ui/slider.js.map +1 -0
  105. package/dist/components/ui/sonner.d.ts +4 -0
  106. package/dist/components/ui/sonner.d.ts.map +1 -0
  107. package/dist/components/ui/sonner.js +21 -0
  108. package/dist/components/ui/sonner.js.map +1 -0
  109. package/dist/components/ui/switch.d.ts +7 -0
  110. package/dist/components/ui/switch.d.ts.map +1 -0
  111. package/dist/components/ui/switch.js +9 -0
  112. package/dist/components/ui/switch.js.map +1 -0
  113. package/dist/components/ui/textarea.d.ts +4 -0
  114. package/dist/components/ui/textarea.d.ts.map +1 -0
  115. package/dist/components/ui/textarea.js +7 -0
  116. package/dist/components/ui/textarea.js.map +1 -0
  117. package/dist/components/ui/tooltip.d.ts +8 -0
  118. package/dist/components/ui/tooltip.d.ts.map +1 -0
  119. package/dist/components/ui/tooltip.js +18 -0
  120. package/dist/components/ui/tooltip.js.map +1 -0
  121. package/dist/context/index.d.ts +31 -0
  122. package/dist/context/index.d.ts.map +1 -0
  123. package/dist/context/index.js +98 -0
  124. package/dist/context/index.js.map +1 -0
  125. package/dist/context.d.ts +2 -0
  126. package/dist/context.d.ts.map +1 -0
  127. package/dist/context.js +2 -0
  128. package/dist/context.js.map +1 -0
  129. package/dist/hooks.d.ts +21 -0
  130. package/dist/hooks.d.ts.map +1 -0
  131. package/dist/hooks.js +156 -0
  132. package/dist/hooks.js.map +1 -0
  133. package/dist/idb.d.ts +13 -0
  134. package/dist/idb.d.ts.map +1 -0
  135. package/dist/idb.js +67 -0
  136. package/dist/idb.js.map +1 -0
  137. package/dist/lib/minimd.d.ts +3 -0
  138. package/dist/lib/minimd.d.ts.map +1 -0
  139. package/dist/lib/minimd.js +97 -0
  140. package/dist/lib/minimd.js.map +1 -0
  141. package/dist/lib/utils.d.ts +3 -0
  142. package/dist/lib/utils.d.ts.map +1 -0
  143. package/dist/lib/utils.js +6 -0
  144. package/dist/lib/utils.js.map +1 -0
  145. package/dist/load-client.d.ts +2 -0
  146. package/dist/load-client.d.ts.map +1 -0
  147. package/dist/load-client.js +6 -0
  148. package/dist/load-client.js.map +1 -0
  149. package/dist/main.d.ts +4 -0
  150. package/dist/main.d.ts.map +1 -0
  151. package/dist/main.js +16 -0
  152. package/dist/main.js.map +1 -0
  153. package/dist/mods/editor-ui/client.d.ts +6 -0
  154. package/dist/mods/editor-ui/client.d.ts.map +1 -0
  155. package/dist/mods/editor-ui/client.js +8 -0
  156. package/dist/mods/editor-ui/client.js.map +1 -0
  157. package/dist/mods/editor-ui/default-view.d.ts +2 -0
  158. package/dist/mods/editor-ui/default-view.d.ts.map +1 -0
  159. package/dist/mods/editor-ui/default-view.js +71 -0
  160. package/dist/mods/editor-ui/default-view.js.map +1 -0
  161. package/dist/mods/editor-ui/dir-view.d.ts +2 -0
  162. package/dist/mods/editor-ui/dir-view.d.ts.map +1 -0
  163. package/dist/mods/editor-ui/dir-view.js +42 -0
  164. package/dist/mods/editor-ui/dir-view.js.map +1 -0
  165. package/dist/mods/editor-ui/form-fields.d.ts +6 -0
  166. package/dist/mods/editor-ui/form-fields.d.ts.map +1 -0
  167. package/dist/mods/editor-ui/form-fields.js +401 -0
  168. package/dist/mods/editor-ui/form-fields.js.map +1 -0
  169. package/dist/mods/editor-ui/layout-view.d.ts +2 -0
  170. package/dist/mods/editor-ui/layout-view.d.ts.map +1 -0
  171. package/dist/mods/editor-ui/layout-view.js +22 -0
  172. package/dist/mods/editor-ui/layout-view.js.map +1 -0
  173. package/dist/mods/editor-ui/list-items.d.ts +2 -0
  174. package/dist/mods/editor-ui/list-items.d.ts.map +1 -0
  175. package/dist/mods/editor-ui/list-items.js +38 -0
  176. package/dist/mods/editor-ui/list-items.js.map +1 -0
  177. package/dist/mods/editor-ui/node-utils.d.ts +10 -0
  178. package/dist/mods/editor-ui/node-utils.d.ts.map +1 -0
  179. package/dist/mods/editor-ui/node-utils.js +76 -0
  180. package/dist/mods/editor-ui/node-utils.js.map +1 -0
  181. package/dist/mods/editor-ui/user-view.d.ts +2 -0
  182. package/dist/mods/editor-ui/user-view.d.ts.map +1 -0
  183. package/dist/mods/editor-ui/user-view.js +47 -0
  184. package/dist/mods/editor-ui/user-view.js.map +1 -0
  185. package/dist/mods/treenity/client.d.ts +4 -0
  186. package/dist/mods/treenity/client.d.ts.map +1 -0
  187. package/dist/mods/treenity/client.js +6 -0
  188. package/dist/mods/treenity/client.js.map +1 -0
  189. package/dist/mods/treenity/groups/index.d.ts +2 -0
  190. package/dist/mods/treenity/groups/index.d.ts.map +1 -0
  191. package/dist/mods/treenity/groups/index.js +27 -0
  192. package/dist/mods/treenity/groups/index.js.map +1 -0
  193. package/dist/mods/treenity/preview.d.ts +6 -0
  194. package/dist/mods/treenity/preview.d.ts.map +1 -0
  195. package/dist/mods/treenity/preview.js +95 -0
  196. package/dist/mods/treenity/preview.js.map +1 -0
  197. package/dist/mods/treenity/ref-view.d.ts +2 -0
  198. package/dist/mods/treenity/ref-view.d.ts.map +1 -0
  199. package/dist/mods/treenity/ref-view.js +29 -0
  200. package/dist/mods/treenity/ref-view.js.map +1 -0
  201. package/dist/mods/treenity/schema-form.d.ts +2 -0
  202. package/dist/mods/treenity/schema-form.d.ts.map +1 -0
  203. package/dist/mods/treenity/schema-form.js +38 -0
  204. package/dist/mods/treenity/schema-form.js.map +1 -0
  205. package/dist/mods/treenity/seed.d.ts +2 -0
  206. package/dist/mods/treenity/seed.d.ts.map +1 -0
  207. package/dist/mods/treenity/seed.js +53 -0
  208. package/dist/mods/treenity/seed.js.map +1 -0
  209. package/dist/mods/treenity/server.d.ts +2 -0
  210. package/dist/mods/treenity/server.d.ts.map +1 -0
  211. package/dist/mods/treenity/server.js +2 -0
  212. package/dist/mods/treenity/server.js.map +1 -0
  213. package/dist/mods/treenity/type-view.d.ts +2 -0
  214. package/dist/mods/treenity/type-view.d.ts.map +1 -0
  215. package/dist/mods/treenity/type-view.js +36 -0
  216. package/dist/mods/treenity/type-view.js.map +1 -0
  217. package/dist/remote-tree.d.ts +6 -0
  218. package/dist/remote-tree.d.ts.map +1 -0
  219. package/dist/remote-tree.js +18 -0
  220. package/dist/remote-tree.js.map +1 -0
  221. package/dist/schema-loader.d.ts +19 -0
  222. package/dist/schema-loader.d.ts.map +1 -0
  223. package/dist/schema-loader.js +63 -0
  224. package/dist/schema-loader.js.map +1 -0
  225. package/dist/trpc.d.ts +187 -0
  226. package/dist/trpc.d.ts.map +1 -0
  227. package/dist/trpc.js +21 -0
  228. package/dist/trpc.js.map +1 -0
  229. package/package.json +88 -0
  230. package/src/AclEditor.tsx +330 -0
  231. package/src/App.tsx +775 -0
  232. package/src/CLAUDE.md +16 -0
  233. package/src/Inspector.tsx +857 -0
  234. package/src/Tree.tsx +237 -0
  235. package/src/ViewPage.tsx +45 -0
  236. package/src/bind/bind.test.ts +316 -0
  237. package/src/bind/computed.ts +64 -0
  238. package/src/bind/engine.ts +198 -0
  239. package/src/bind/eval.ts +108 -0
  240. package/src/bind/hook.ts +112 -0
  241. package/src/bind/parse.ts +104 -0
  242. package/src/bind/pipes.ts +71 -0
  243. package/src/cache.test.ts +139 -0
  244. package/src/cache.ts +244 -0
  245. package/src/client-tree.test.ts +116 -0
  246. package/src/client-tree.ts +24 -0
  247. package/src/client.ts +11 -0
  248. package/src/components/ui/accordion.tsx +63 -0
  249. package/src/components/ui/badge.tsx +27 -0
  250. package/src/components/ui/button.tsx +44 -0
  251. package/src/components/ui/checkbox.tsx +19 -0
  252. package/src/components/ui/dialog.tsx +156 -0
  253. package/src/components/ui/drawer.tsx +132 -0
  254. package/src/components/ui/input.tsx +19 -0
  255. package/src/components/ui/label.tsx +21 -0
  256. package/src/components/ui/popover.tsx +86 -0
  257. package/src/components/ui/progress.tsx +30 -0
  258. package/src/components/ui/select.tsx +189 -0
  259. package/src/components/ui/slider.tsx +62 -0
  260. package/src/components/ui/sonner.tsx +32 -0
  261. package/src/components/ui/switch.tsx +34 -0
  262. package/src/components/ui/textarea.tsx +17 -0
  263. package/src/components/ui/tooltip.tsx +56 -0
  264. package/src/context/index.tsx +131 -0
  265. package/src/context.ts +1 -0
  266. package/src/hooks.ts +208 -0
  267. package/src/idb.ts +80 -0
  268. package/src/index.html +14 -0
  269. package/src/lib/minimd.css +28 -0
  270. package/src/lib/minimd.ts +95 -0
  271. package/src/lib/utils.ts +6 -0
  272. package/src/load-client.ts +5 -0
  273. package/src/main.tsx +22 -0
  274. package/src/mods/editor-ui/CLAUDE.md +3 -0
  275. package/src/mods/editor-ui/client.ts +8 -0
  276. package/src/mods/editor-ui/default-view.tsx +148 -0
  277. package/src/mods/editor-ui/dir-view.tsx +91 -0
  278. package/src/mods/editor-ui/form-fields.tsx +861 -0
  279. package/src/mods/editor-ui/layout-view.tsx +62 -0
  280. package/src/mods/editor-ui/list-items.tsx +63 -0
  281. package/src/mods/editor-ui/node-utils.ts +84 -0
  282. package/src/mods/editor-ui/user-view.tsx +101 -0
  283. package/src/mods/treenity/CLAUDE.md +7 -0
  284. package/src/mods/treenity/client.ts +6 -0
  285. package/src/mods/treenity/groups/index.tsx +65 -0
  286. package/src/mods/treenity/preview.tsx +133 -0
  287. package/src/mods/treenity/ref-view.tsx +87 -0
  288. package/src/mods/treenity/schema-form.tsx +65 -0
  289. package/src/mods/treenity/seed.ts +56 -0
  290. package/src/mods/treenity/server.ts +1 -0
  291. package/src/mods/treenity/type-view.tsx +116 -0
  292. package/src/remote-tree.test.ts +142 -0
  293. package/src/remote-tree.ts +25 -0
  294. package/src/schema-loader.ts +84 -0
  295. package/src/style.css +1269 -0
  296. package/src/trpc.ts +27 -0
  297. package/src/vite-env.d.ts +3 -0
@@ -0,0 +1,6 @@
1
+ import type { Tree } from '@treenity/core/tree';
2
+ import type { trpc } from './trpc';
3
+ type TrpcClient = typeof trpc;
4
+ export declare function createRemoteTree(client: TrpcClient): Tree;
5
+ export {};
6
+ //# sourceMappingURL=remote-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-tree.d.ts","sourceRoot":"","sources":["../src/remote-tree.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,KAAK,UAAU,GAAG,OAAO,IAAI,CAAC;AAE9B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAYzD"}
@@ -0,0 +1,18 @@
1
+ // Remote Tree — Tree adapter over tRPC client.
2
+ // Maps the 4 Tree methods to tRPC query/mutation calls.
3
+ // Enables client to use the same combinators as server:
4
+ // withSubscriptions(withCache(createRemoteTree(trpc)))
5
+ import { defaultPatch } from '@treenity/core/tree/patch';
6
+ export function createRemoteTree(client) {
7
+ const get = (path) => client.get.query({ path });
8
+ const set = (node) => client.set.mutate({ node: node });
9
+ return {
10
+ get,
11
+ getChildren: (path, opts) => client.getChildren.query({ path, ...opts }),
12
+ set,
13
+ remove: (path) => client.remove.mutate({ path }).then(() => true),
14
+ // TODO: add tRPC patch endpoint for single-RPC atomic patch
15
+ patch: (path, ops) => defaultPatch(get, set, path, ops),
16
+ };
17
+ }
18
+ //# sourceMappingURL=remote-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-tree.js","sourceRoot":"","sources":["../src/remote-tree.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,wDAAwD;AACxD,wDAAwD;AACxD,yDAAyD;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAkC,CAAC;IAC1F,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAA+B,EAAE,CAAC,CAAC;IAE7F,OAAO;QACL,GAAG;QACH,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACxE,GAAG;QACH,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACjE,4DAA4D;QAC5D,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type ContextHandlers } from '@treenity/core/core';
2
+ import type { TypeSchema } from '@treenity/core/schema/types';
3
+ /** Fetch /sys/types/{type} and register its contexts into the core registry. */
4
+ export declare function ensureType(type: string): Promise<void>;
5
+ /**
6
+ * Lazy registry hook — returns the handler itself, not its result.
7
+ * undefined = loading, null = not found, Handler = ready.
8
+ *
9
+ * Calling convention is context-specific:
10
+ * 'react' — handler IS the component: useReg(type, 'react') → FC
11
+ * 'schema' — handler is a thunk: useReg(type, 'schema')?.() → TypeSchema
12
+ *
13
+ * Use useSchema() for the ergonomic schema shortcut.
14
+ */
15
+ export declare function useReg<K extends keyof ContextHandlers>(type: string | null | undefined, context: K): ContextHandlers[K] | null | undefined;
16
+ export declare function useReg<T extends (...args: any[]) => any>(type: string | null | undefined, context: string): T | null | undefined;
17
+ /** undefined = loading, null = no schema, TypeSchema = ready */
18
+ export declare function useSchema(type: string | null | undefined): TypeSchema | null | undefined;
19
+ //# sourceMappingURL=schema-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../src/schema-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAS9D,gFAAgF;AAChF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D;AAID;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,eAAe,EACpD,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,OAAO,EAAE,CAAC,GACT,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AACzC,wBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAyBxB,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAIxF"}
@@ -0,0 +1,63 @@
1
+ // Lazy registry loader — fetches type nodes from /sys/types on demand
2
+ import { register, resolve } from '@treenity/core/core';
3
+ import { useEffect, useState } from 'react';
4
+ import { trpc } from './trpc';
5
+ // ── Fetcher ──────────────────────────────────────────────────────────────────
6
+ const fetched = new Set();
7
+ const inflight = new Map();
8
+ /** Fetch /sys/types/{type} and register its contexts into the core registry. */
9
+ export async function ensureType(type) {
10
+ if (fetched.has(type))
11
+ return;
12
+ if (inflight.has(type))
13
+ return inflight.get(type);
14
+ const promise = trpc.get
15
+ .query({ path: `/sys/types/${type.replace(/\./g, '/')}` })
16
+ .then((node) => {
17
+ const schema = node?.schema;
18
+ if (schema?.$id && !resolve(schema.$id, 'schema')) {
19
+ register(schema.$id, 'schema', () => schema);
20
+ }
21
+ })
22
+ .catch(() => { }) // type may have no schema — not an error
23
+ .finally(() => {
24
+ fetched.add(type);
25
+ inflight.delete(type);
26
+ });
27
+ inflight.set(type, promise);
28
+ return promise;
29
+ }
30
+ export function useReg(type, context) {
31
+ const get = () => {
32
+ if (!type)
33
+ return null;
34
+ return resolve(type, context) ?? undefined;
35
+ };
36
+ const [handler, setHandler] = useState(get);
37
+ useEffect(() => {
38
+ if (!type) {
39
+ setHandler(null);
40
+ return;
41
+ }
42
+ const h = resolve(type, context);
43
+ if (h) {
44
+ setHandler(() => h);
45
+ return;
46
+ }
47
+ setHandler(undefined);
48
+ ensureType(type).then(() => {
49
+ const h2 = resolve(type, context);
50
+ setHandler(h2 ? () => h2 : null);
51
+ });
52
+ }, [type, context]);
53
+ return handler;
54
+ }
55
+ // ── Schema convenience ────────────────────────────────────────────────────────
56
+ /** undefined = loading, null = no schema, TypeSchema = ready */
57
+ export function useSchema(type) {
58
+ const getter = useReg(type, 'schema');
59
+ if (getter === undefined)
60
+ return undefined;
61
+ return getter?.() ?? null;
62
+ }
63
+ //# sourceMappingURL=schema-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../src/schema-loader.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAwB,QAAQ,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,gFAAgF;AAEhF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAElD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG;SACrB,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;SACzD,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC5B,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,yCAAyC;SACzD,OAAO,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAsBD,MAAM,UAAU,MAAM,CAAC,IAA+B,EAAE,OAAe;IACrE,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC;YAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACvC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACzB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iFAAiF;AAEjF,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,IAA+B;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAQ,MAAoC,EAAE,EAAE,IAAI,IAAI,CAAC;AAC3D,CAAC"}
package/dist/trpc.d.ts ADDED
@@ -0,0 +1,187 @@
1
+ export declare function getToken(): string | null;
2
+ export declare function setToken(token: string): void;
3
+ export declare function clearToken(): void;
4
+ export declare const AUTH_EXPIRED_EVENT = "trpc:auth-expired";
5
+ export declare const trpc: import("@trpc/client").TRPCClient<import("@trpc/server").TRPCBuiltRouter<{
6
+ ctx: import("@treenity/core/server/trpc").TrpcContext;
7
+ meta: object;
8
+ errorShape: import("@trpc/server").TRPCDefaultErrorShape;
9
+ transformer: false;
10
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
11
+ get: import("@trpc/server").TRPCQueryProcedure<{
12
+ input: {
13
+ path: string;
14
+ watch?: boolean | undefined;
15
+ };
16
+ output: import("@treenity/core/core").NodeData | undefined;
17
+ meta: object;
18
+ }>;
19
+ getChildren: import("@trpc/server").TRPCQueryProcedure<{
20
+ input: {
21
+ path: string;
22
+ limit?: number | undefined;
23
+ offset?: number | undefined;
24
+ depth?: number | undefined;
25
+ watch?: boolean | undefined;
26
+ watchNew?: boolean | undefined;
27
+ };
28
+ output: import("@treenity/core/tree").Page<import("@treenity/core/core").NodeData>;
29
+ meta: object;
30
+ }>;
31
+ set: import("@trpc/server").TRPCMutationProcedure<{
32
+ input: {
33
+ node: Record<string, unknown>;
34
+ };
35
+ output: void;
36
+ meta: object;
37
+ }>;
38
+ setComponent: import("@trpc/server").TRPCMutationProcedure<{
39
+ input: {
40
+ path: string;
41
+ name: string;
42
+ data: Record<string, unknown>;
43
+ rev?: number | undefined;
44
+ };
45
+ output: void;
46
+ meta: object;
47
+ }>;
48
+ remove: import("@trpc/server").TRPCMutationProcedure<{
49
+ input: {
50
+ path: string;
51
+ };
52
+ output: boolean;
53
+ meta: object;
54
+ }>;
55
+ execute: import("@trpc/server").TRPCMutationProcedure<{
56
+ input: {
57
+ path: string;
58
+ action: string;
59
+ type?: string | undefined;
60
+ key?: string | undefined;
61
+ data?: unknown;
62
+ watch?: boolean | undefined;
63
+ };
64
+ output: unknown;
65
+ meta: object;
66
+ }>;
67
+ getTemplates: import("@trpc/server").TRPCQueryProcedure<{
68
+ input: void;
69
+ output: import("@treenity/core/core").NodeData[];
70
+ meta: object;
71
+ }>;
72
+ applyTemplate: import("@trpc/server").TRPCMutationProcedure<{
73
+ input: {
74
+ templatePath: string;
75
+ targetPath: string;
76
+ };
77
+ output: {
78
+ applied: string;
79
+ blocks: number;
80
+ };
81
+ meta: object;
82
+ }>;
83
+ deployPrefab: import("@trpc/server").TRPCMutationProcedure<{
84
+ input: {
85
+ source: string;
86
+ target: string;
87
+ allowAbsolute?: boolean | undefined;
88
+ params?: any;
89
+ };
90
+ output: {
91
+ deployed: number;
92
+ skipped: number;
93
+ };
94
+ meta: object;
95
+ }>;
96
+ register: import("@trpc/server").TRPCMutationProcedure<{
97
+ input: {
98
+ userId: string;
99
+ password: string;
100
+ };
101
+ output: {
102
+ token: string;
103
+ userId: string;
104
+ };
105
+ meta: object;
106
+ }>;
107
+ login: import("@trpc/server").TRPCMutationProcedure<{
108
+ input: {
109
+ userId: string;
110
+ password: string;
111
+ };
112
+ output: {
113
+ token: string;
114
+ userId: string;
115
+ };
116
+ meta: object;
117
+ }>;
118
+ me: import("@trpc/server").TRPCQueryProcedure<{
119
+ input: void;
120
+ output: {
121
+ userId: string;
122
+ } | null;
123
+ meta: object;
124
+ }>;
125
+ logout: import("@trpc/server").TRPCMutationProcedure<{
126
+ input: void;
127
+ output: {
128
+ ok: boolean;
129
+ };
130
+ meta: object;
131
+ }>;
132
+ agentConnect: import("@trpc/server").TRPCMutationProcedure<{
133
+ input: {
134
+ path: string;
135
+ key: string;
136
+ };
137
+ output: {
138
+ status: "pending";
139
+ token?: undefined;
140
+ userId?: undefined;
141
+ } | {
142
+ status: "approved";
143
+ token: string;
144
+ userId: string;
145
+ };
146
+ meta: object;
147
+ }>;
148
+ unwatch: import("@trpc/server").TRPCMutationProcedure<{
149
+ input: {
150
+ paths: string[];
151
+ };
152
+ output: void;
153
+ meta: object;
154
+ }>;
155
+ unwatchChildren: import("@trpc/server").TRPCMutationProcedure<{
156
+ input: {
157
+ paths: string[];
158
+ };
159
+ output: void;
160
+ meta: object;
161
+ }>;
162
+ anonLogin: import("@trpc/server").TRPCMutationProcedure<{
163
+ input: void;
164
+ output: {
165
+ token: string;
166
+ userId: string;
167
+ };
168
+ meta: object;
169
+ }>;
170
+ streamAction: import("@trpc/server/unstable-core-do-not-import").LegacyObservableSubscriptionProcedure<{
171
+ input: {
172
+ path: string;
173
+ action: string;
174
+ type?: string | undefined;
175
+ key?: string | undefined;
176
+ data?: unknown;
177
+ };
178
+ output: unknown;
179
+ meta: object;
180
+ }>;
181
+ events: import("@trpc/server/unstable-core-do-not-import").LegacyObservableSubscriptionProcedure<{
182
+ input: void;
183
+ output: import("@treenity/core/server/sub").NodeEvent;
184
+ meta: object;
185
+ }>;
186
+ }>>>;
187
+ //# sourceMappingURL=trpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.d.ts","sourceRoot":"","sources":["../src/trpc.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QAErC;AAED,wBAAgB,UAAU,SAEzB;AAED,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAUtD,eAAO,MAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAiE,CAAC"}
package/dist/trpc.js ADDED
@@ -0,0 +1,21 @@
1
+ import { createTrpcTransport } from '@treenity/core/client';
2
+ const TOKEN_KEY = 'treenity_token';
3
+ export function getToken() {
4
+ return localStorage.getItem(TOKEN_KEY);
5
+ }
6
+ export function setToken(token) {
7
+ localStorage.setItem(TOKEN_KEY, token);
8
+ }
9
+ export function clearToken() {
10
+ localStorage.removeItem(TOKEN_KEY);
11
+ }
12
+ export const AUTH_EXPIRED_EVENT = 'trpc:auth-expired';
13
+ const authFetch = async (url, opts) => {
14
+ const res = await fetch(url, opts);
15
+ if (res.status === 401) {
16
+ window.dispatchEvent(new Event(AUTH_EXPIRED_EVENT));
17
+ }
18
+ return res;
19
+ };
20
+ export const { trpc } = createTrpcTransport({ url: '', getToken, fetch: authFetch });
21
+ //# sourceMappingURL=trpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.js","sourceRoot":"","sources":["../src/trpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEnC,MAAM,UAAU,QAAQ;IACtB,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,SAAS,GAAG,KAAK,EAAE,GAAQ,EAAE,IAAS,EAAqB,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@treenity/react",
3
+ "version": "3.0.0",
4
+ "type": "module",
5
+ "imports": {
6
+ "#*": { "development": ["./src/*.ts", "./src/*.tsx"], "default": ["./dist/*.js", "./dist/*.jsx"] }
7
+ },
8
+ "exports": {
9
+ ".": { "development": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" },
10
+ "./ui/*": { "development": ["./src/components/ui/*.ts", "./src/components/ui/*.tsx"], "types": "./dist/components/ui/*.d.ts", "default": "./dist/components/ui/*.js" },
11
+ "./*": { "development": ["./src/*.ts", "./src/*.tsx"], "types": ["./dist/*.d.ts"], "default": ["./dist/*.js"] }
12
+ },
13
+ "files": ["dist", "src"],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.build.json",
16
+ "prepack": "npm run build",
17
+ "test": "tsx --conditions development --test src/**/*.test.ts",
18
+ "dev": "vite"
19
+ },
20
+ "peerDependencies": {
21
+ "@treenity/core": "^3.0.0",
22
+ "react": "^19.0.0",
23
+ "react-dom": "^19.0.0"
24
+ },
25
+ "dependencies": {
26
+ "@dnd-kit/core": "^6.3.1",
27
+ "@dnd-kit/sortable": "^10.0.0",
28
+ "@dnd-kit/utilities": "^3.2.2",
29
+ "@flowgram.ai/free-layout-editor": "^1.0.7",
30
+ "@tanstack/react-query": "^5.90.21",
31
+ "@tiptap/extension-code-block-lowlight": "^3.20.0",
32
+ "@tiptap/extension-table": "^3.20.0",
33
+ "@tiptap/extension-table-cell": "^3.20.0",
34
+ "@tiptap/extension-table-header": "^3.20.0",
35
+ "@tiptap/extension-table-row": "^3.20.0",
36
+ "@tiptap/extension-task-item": "^3.20.0",
37
+ "@tiptap/extension-task-list": "^3.20.0",
38
+ "@tiptap/pm": "^3.20.0",
39
+ "@tiptap/react": "^3.20.0",
40
+ "@tiptap/starter-kit": "^3.20.0",
41
+ "@tiptap/suggestion": "^3.20.0",
42
+ "@trpc/client": "^11.9.0",
43
+ "class-variance-authority": "^0.7.1",
44
+ "clsx": "^2.1.1",
45
+ "d3-hierarchy": "^3.1.2",
46
+ "d3-selection": "^3.0.0",
47
+ "d3-zoom": "^3.0.0",
48
+ "dayjs": "^1.11.19",
49
+ "embla-carousel-react": "^8.6.0",
50
+ "fast-json-patch": "^3.1.1",
51
+ "immer": "^11.1.4",
52
+ "lowlight": "^3.3.0",
53
+ "lucide-react": "^0.563.0",
54
+ "motion": "^12.34.3",
55
+ "next-themes": "^0.4.6",
56
+ "overlayscrollbars": "^2.14.0",
57
+ "overlayscrollbars-react": "^0.5.6",
58
+ "qrcode.react": "^4.2.0",
59
+ "radix-ui": "^1.4.3",
60
+ "react-easy-crop": "^5.5.6",
61
+ "react-grid-layout": "^2.2.2",
62
+ "sonner": "^2.0.7",
63
+ "swiper": "^12.1.2",
64
+ "tailwind-merge": "^3.4.0",
65
+ "valtio": "^2.1.2",
66
+ "vaul": "^1.1.2"
67
+ },
68
+ "devDependencies": {
69
+ "@react-three/drei": "^10.7.7",
70
+ "@react-three/fiber": "^9.5.0",
71
+ "@tailwindcss/vite": "^4.1.18",
72
+ "@types/d3-hierarchy": "^3.1.7",
73
+ "@types/d3-selection": "^3.0.11",
74
+ "@types/d3-transition": "^3.0.9",
75
+ "@types/d3-zoom": "^3.0.8",
76
+ "@types/react": "^19.2.13",
77
+ "@types/react-dom": "^19.2.3",
78
+ "@types/three": "^0.183.1",
79
+ "@vitejs/plugin-react": "^5.1.3",
80
+ "babel-plugin-react-compiler": "^1.0.0",
81
+ "tailwindcss": "^4.1.18",
82
+ "three": "^0.183.2",
83
+ "tsx": "^4.21.0",
84
+ "typescript": "^5.9.3",
85
+ "vite": "^7.3.1",
86
+ "vite-tsconfig-paths": "^6.1.0"
87
+ }
88
+ }