@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,360 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // Inspector — view + edit panel for selected node (Unity-style inspector)
3
+ // Shell only: delegates rendering to registered views, provides generic edit UI
4
+ import { Render, RenderContext } from '#context';
5
+ import { getActions, getActionSchema, getComponents, getPlainFields, getSchema, getViewContexts, pickDefaultContext, } from '#mods/editor-ui/node-utils';
6
+ import { resolve, resolveExact } from '@treenity/core/core';
7
+ import { createElement, useEffect, useRef, useState } from 'react';
8
+ import { AclEditor } from './AclEditor';
9
+ import * as cache from './cache';
10
+ import { set, usePath } from './hooks';
11
+ import { useSchema } from './schema-loader';
12
+ import { trpc } from './trpc';
13
+ // Breadcrumb from path
14
+ function Breadcrumb({ path, onSelect }) {
15
+ if (path === '/')
16
+ return (_jsx("div", { className: "editor-breadcrumb", children: _jsx("span", { children: "/" }) }));
17
+ const parts = path.split('/').filter(Boolean);
18
+ const crumbs = [{ label: '/', path: '/' }];
19
+ let cur = '';
20
+ for (const p of parts) {
21
+ cur += '/' + p;
22
+ crumbs.push({ label: p, path: cur });
23
+ }
24
+ return (_jsx("div", { className: "editor-breadcrumb", children: crumbs.map((c, i) => (_jsxs("span", { children: [i > 0 && _jsx("span", { className: "sep", children: "/" }), _jsx("span", { onClick: () => onSelect(c.path), children: c.label === '/' ? 'root' : c.label })] }, c.path))) }));
25
+ }
26
+ // Pretty-print action result value
27
+ function ResultView({ value }) {
28
+ if (value === undefined || value === null)
29
+ return null;
30
+ if (typeof value !== 'object')
31
+ return _jsx("span", { className: "font-mono text-[11px]", children: String(value) });
32
+ // Object/array with typed $type → render via Render
33
+ if ('$type' in value) {
34
+ return _jsx(Render, { value: value });
35
+ }
36
+ // Plain object — key/value pairs
37
+ const entries = Object.entries(value);
38
+ if (entries.length === 0)
39
+ return _jsx("span", { className: "text-muted-foreground text-[11px]", children: "empty" });
40
+ return (_jsx("div", { className: "flex flex-col gap-0.5", children: entries.map(([k, v]) => (_jsxs("div", { className: "flex gap-2 text-[11px]", children: [_jsx("span", { className: "text-muted-foreground shrink-0", children: k }), _jsx("span", { className: "font-mono text-foreground/80 truncate", children: typeof v === 'object' && v !== null ? JSON.stringify(v) : String(v ?? '') })] }, k))) }));
41
+ }
42
+ // Action pills — compact action buttons that expand on click
43
+ function ActionCardList({ path, componentName, compType, toast, onActionComplete, }) {
44
+ const schema = useSchema(compType);
45
+ const [expanded, setExpanded] = useState(null);
46
+ const [paramsText, setParamsText] = useState({});
47
+ const [schemaData, setSchemaData] = useState({});
48
+ const [running, setRunning] = useState(null);
49
+ const [results, setResults] = useState({});
50
+ const [resultMode, setResultMode] = useState({});
51
+ if (schema === undefined)
52
+ return null;
53
+ const actions = getActions(compType, schema);
54
+ if (actions.length === 0)
55
+ return null;
56
+ async function run(a) {
57
+ setRunning(a);
58
+ try {
59
+ const actionSchema = getActionSchema(compType, a);
60
+ let data = {};
61
+ if (actionSchema) {
62
+ data = schemaData[a] ?? {};
63
+ }
64
+ else {
65
+ const raw = (paramsText[a] ?? '').trim();
66
+ if (raw && raw !== '{}') {
67
+ try {
68
+ data = JSON.parse(raw);
69
+ }
70
+ catch {
71
+ toast('Invalid JSON params');
72
+ setRunning(null);
73
+ return;
74
+ }
75
+ }
76
+ }
77
+ const result = await trpc.execute.mutate({ path, key: componentName, action: a, data });
78
+ const fresh = (await trpc.get.query({ path, watch: true }));
79
+ if (fresh)
80
+ cache.put(fresh);
81
+ onActionComplete?.();
82
+ setResults((prev) => ({ ...prev, [a]: { ok: true, value: result } }));
83
+ setExpanded(a);
84
+ }
85
+ catch (e) {
86
+ setResults((prev) => ({
87
+ ...prev,
88
+ [a]: { ok: false, value: e instanceof Error ? e.message : String(e) },
89
+ }));
90
+ setExpanded(a);
91
+ }
92
+ finally {
93
+ setRunning(null);
94
+ }
95
+ }
96
+ return (_jsxs("div", { className: "action-pills", children: [_jsx("div", { className: "flex flex-wrap gap-1.5", children: actions.map((a) => (_jsxs("button", { className: `action-pill${expanded === a ? ' active' : ''}${running === a ? ' running' : ''}`, onClick: () => setExpanded(expanded === a ? null : a), children: [running === a ? '...' : a, results[a] && !results[a].ok && expanded !== a && (_jsx("span", { className: "ml-1 text-destructive", children: "!" })), results[a]?.ok && expanded !== a && (_jsx("span", { className: "ml-1 text-primary/60", children: "\u2713" }))] }, a))) }), expanded && (() => {
97
+ const a = expanded;
98
+ const actionSchema = getActionSchema(compType, a);
99
+ const hasParams = actionSchema !== null && Object.keys(actionSchema.properties).length > 0;
100
+ const noParams = actionSchema !== null && Object.keys(actionSchema.properties).length === 0;
101
+ const result = results[a];
102
+ const mode = resultMode[a] ?? 'pretty';
103
+ return (_jsxs("div", { className: "action-detail", children: [hasParams && (_jsx("div", { className: "flex flex-col gap-1.5 mb-2", children: Object.entries(actionSchema.properties).map(([field, prop]) => {
104
+ const p = prop;
105
+ const val = (schemaData[a] ?? {})[field];
106
+ const setField = (v) => setSchemaData((prev) => ({
107
+ ...prev,
108
+ [a]: { ...(prev[a] ?? {}), [field]: v },
109
+ }));
110
+ return (_jsxs("div", { className: "action-detail-field", children: [_jsx("label", { children: p.title ?? field }), p.type === 'number' || p.format === 'number' ? (_jsx("input", { type: "number", value: String(val ?? 0), onChange: (e) => setField(Number(e.target.value)) })) : p.type === 'boolean' ? (_jsxs("label", { className: "flex items-center gap-1.5 cursor-pointer", children: [_jsx("input", { type: "checkbox", checked: !!val, className: "w-auto", onChange: (e) => setField(e.target.checked) }), _jsx("span", { className: "text-[11px]", children: val ? 'true' : 'false' })] })) : (_jsx("input", { value: String(val ?? ''), onChange: (e) => setField(e.target.value) }))] }, field));
111
+ }) })), !hasParams && !noParams && (_jsx("textarea", { className: "action-params-input mb-2", value: paramsText[a] ?? '{}', onChange: (e) => setParamsText((prev) => ({ ...prev, [a]: e.target.value })), spellCheck: false, rows: 2 })), _jsxs("button", { className: "action-run-btn", disabled: running !== null, onClick: () => run(a), children: [running === a ? '...' : '▶', " ", a] }), result && (_jsx("div", { className: `action-result-box${result.ok ? '' : ' error'}`, children: !result.ok ? (_jsx("span", { className: "text-destructive font-mono text-[11px]", children: String(result.value) })) : result.value === undefined || result.value === null ? (_jsx("span", { className: "text-primary text-[11px]", children: "\u2713 done" })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("span", { className: "text-[10px] text-muted-foreground uppercase tracking-wider", children: "Result" }), typeof result.value === 'object' && (_jsxs("div", { className: "flex gap-0.5", children: [_jsx("button", { className: `action-mode-btn${mode === 'pretty' ? ' active' : ''}`, onClick: () => setResultMode((p) => ({ ...p, [a]: 'pretty' })), children: "View" }), _jsx("button", { className: `action-mode-btn${mode === 'json' ? ' active' : ''}`, onClick: () => setResultMode((p) => ({ ...p, [a]: 'json' })), children: "JSON" })] }))] }), mode === 'json' ? (_jsx("pre", { className: "text-[11px] font-mono text-foreground/60 whitespace-pre-wrap break-all leading-relaxed", children: JSON.stringify(result.value, null, 2) })) : (_jsx(ResultView, { value: result.value }))] })) }))] }));
112
+ })()] }));
113
+ }
114
+ function renderField(name, fieldSchema, plainData, setPlainData) {
115
+ const ctx = fieldSchema.readOnly ? 'react' : 'react:form';
116
+ const handler = resolveExact(fieldSchema.type, ctx) ?? resolveExact('string', ctx);
117
+ if (!handler)
118
+ return (_jsxs("div", { className: "text-[--danger] text-xs", children: ["No form handler: ", fieldSchema.type] }, name));
119
+ const fieldData = {
120
+ $type: fieldSchema.type,
121
+ value: plainData[name],
122
+ label: fieldSchema.label,
123
+ placeholder: fieldSchema.placeholder,
124
+ };
125
+ if (fieldSchema.items)
126
+ fieldData.items = fieldSchema.items;
127
+ if (fieldSchema.enum)
128
+ fieldData.enum = fieldSchema.enum;
129
+ if (fieldSchema.refType)
130
+ fieldData.refType = fieldSchema.refType;
131
+ const isComplex = fieldSchema.type === 'object' || fieldSchema.type === 'array';
132
+ return (_jsxs("div", { className: isComplex ? 'field stack' : 'field', children: [fieldSchema.type !== 'boolean' && _jsx("label", { children: fieldSchema.label }), createElement(handler, {
133
+ value: fieldData,
134
+ onChange: fieldSchema.readOnly
135
+ ? undefined
136
+ : (next) => setPlainData((prev) => ({ ...prev, [name]: next.value })),
137
+ })] }, name));
138
+ }
139
+ // Inline string-array editor for raw component fields without schema
140
+ function StringArrayField({ value, onChange, }) {
141
+ const [input, setInput] = useState('');
142
+ const isStrings = value.every((v) => typeof v === 'string');
143
+ if (!isStrings) {
144
+ return (_jsx("textarea", { value: JSON.stringify(value, null, 2), onChange: (e) => {
145
+ try {
146
+ onChange(JSON.parse(e.target.value));
147
+ }
148
+ catch {
149
+ /* typing */
150
+ }
151
+ } }));
152
+ }
153
+ const tags = value;
154
+ return (_jsxs("div", { className: "flex-1 space-y-1", children: [_jsx("div", { className: "flex flex-wrap gap-1", children: tags.map((tag, i) => (_jsxs("span", { className: "inline-flex items-center gap-0.5 text-[11px] font-mono bg-muted text-foreground/70 px-1.5 py-0.5 rounded", children: [tag, _jsx("button", { type: "button", className: "ml-0.5 border-0 bg-transparent p-0 text-muted-foreground/40 hover:text-foreground leading-none cursor-pointer", onClick: () => onChange(tags.filter((_, j) => j !== i)), children: "\u00D7" })] }, i))) }), _jsx("input", { className: "text-xs w-full", placeholder: "Add item...", value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => {
155
+ if (e.key !== 'Enter')
156
+ return;
157
+ e.preventDefault();
158
+ const t = input.trim();
159
+ if (t && !tags.includes(t))
160
+ onChange([...tags, t]);
161
+ setInput('');
162
+ } })] }));
163
+ }
164
+ function NodeCard({ path, type, onChangeType, }) {
165
+ const [open, setOpen] = useState(false);
166
+ return (_jsxs("div", { className: "card", children: [_jsxs("div", { className: "card-header cursor-pointer select-none", onClick: () => setOpen((v) => !v), children: [_jsx("span", { children: "Node" }), _jsxs("span", { className: "flex items-center gap-2 normal-case tracking-normal font-normal text-[11px] font-mono text-foreground/50", children: [path, _jsx("span", { className: "text-primary", children: type }), open ? (_jsx("svg", { className: "h-3 w-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "m6 9 6 6 6-6" }) })) : (_jsx("svg", { className: "h-3 w-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "m9 18 6-6-6-6" }) }))] })] }), open && (_jsxs("div", { className: "card-body", children: [_jsxs("div", { className: "field", children: [_jsx("label", { children: "$path" }), _jsx("input", { value: path, readOnly: true })] }), _jsxs("div", { className: "field", children: [_jsx("label", { children: "$type" }), _jsx("input", { value: type, onChange: (e) => onChangeType(e.target.value) })] })] }))] }));
167
+ }
168
+ function ComponentBody({ ctype, cdata, setCD, path, componentName, toast, onActionComplete, }) {
169
+ const cschema = useSchema(ctype);
170
+ if (cschema === undefined)
171
+ return null;
172
+ return (_jsxs("div", { className: "card-body", children: [cschema && Object.keys(cschema.properties).length > 0 ? (Object.entries(cschema.properties).map(([field, prop]) => {
173
+ const p = prop;
174
+ return renderField(field, {
175
+ type: p.format ?? p.type, label: p.title ?? field, placeholder: p.description,
176
+ readOnly: p.readOnly, enum: p.enum, items: p.items, refType: p.refType,
177
+ }, cdata, setCD);
178
+ })) : Object.keys(cdata).length > 0 ? (Object.entries(cdata).map(([k, v]) => (_jsxs("div", { className: `field${Array.isArray(v) || (typeof v === 'object' && v !== null) ? ' stack' : ''}`, children: [_jsx("label", { children: k }), typeof v === 'boolean' ? (_jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [_jsx("input", { type: "checkbox", checked: !!cdata[k], className: "w-auto", onChange: (e) => setCD((prev) => ({ ...prev, [k]: e.target.checked })) }), cdata[k] ? 'true' : 'false'] })) : typeof v === 'number' ? (_jsx("input", { type: "number", value: String(cdata[k] ?? 0), onChange: (e) => setCD((prev) => ({ ...prev, [k]: Number(e.target.value) })) })) : Array.isArray(v) ? (_jsx(StringArrayField, { value: cdata[k], onChange: (next) => setCD((prev) => ({ ...prev, [k]: next })) })) : typeof v === 'object' ? ((() => {
179
+ const h = resolve('object', 'react:form');
180
+ return h
181
+ ? createElement(h, {
182
+ value: { $type: 'object', value: cdata[k] },
183
+ onChange: (next) => setCD((prev) => ({ ...prev, [k]: next.value })),
184
+ })
185
+ : _jsx("pre", { className: "text-[11px] font-mono text-foreground/60", children: JSON.stringify(cdata[k], null, 2) });
186
+ })()) : (_jsx("input", { value: String(cdata[k] ?? ''), onChange: (e) => setCD((prev) => ({ ...prev, [k]: e.target.value })) }))] }, k)))) : (_jsx("pre", { className: "text-[11px] font-mono text-foreground/60 bg-muted/30 rounded p-2 whitespace-pre-wrap", children: JSON.stringify(cdata, null, 2) })), _jsx(ActionCardList, { path: path, componentName: componentName, compType: ctype, compData: cdata, toast: toast, onActionComplete: onActionComplete })] }));
187
+ }
188
+ export function Inspector({ path, currentUserId, onDelete, onAddComponent, onSelect, onSetRoot, toast }) {
189
+ const node = usePath(path);
190
+ const [context, setContext] = useState('react');
191
+ const [editing, setEditing] = useState(false);
192
+ const [nodeType, setNodeType] = useState('');
193
+ const [compTexts, setCompTexts] = useState({});
194
+ const [compData, setCompData] = useState({});
195
+ const [plainData, setPlainData] = useState({});
196
+ const [tab, setTab] = useState('properties');
197
+ const [jsonText, setJsonText] = useState('');
198
+ const [collapsed, setCollapsed] = useState(new Set());
199
+ const [aclOwner, setAclOwner] = useState('');
200
+ const [aclRules, setAclRules] = useState([]);
201
+ const [dirty, setDirty] = useState(false);
202
+ const [stale, setStale] = useState(false);
203
+ const syncedPathRef = useRef(null);
204
+ const syncedRevRef = useRef(null);
205
+ function syncFromNode(n) {
206
+ setNodeType(n.$type);
207
+ setAclOwner(n.$owner ?? '');
208
+ setAclRules(n.$acl ? [...n.$acl] : []);
209
+ const texts = {};
210
+ const cdata = {};
211
+ for (const [name, comp] of getComponents(n)) {
212
+ texts[name] = JSON.stringify(comp, null, 2);
213
+ const d = {};
214
+ for (const [k, v] of Object.entries(comp)) {
215
+ if (!k.startsWith('$'))
216
+ d[k] = v;
217
+ }
218
+ cdata[name] = d;
219
+ }
220
+ setCompTexts(texts);
221
+ setCompData(cdata);
222
+ setPlainData(getPlainFields(n));
223
+ setJsonText(JSON.stringify(n, null, 2));
224
+ setTab('properties');
225
+ }
226
+ useEffect(() => {
227
+ if (!node)
228
+ return;
229
+ const pathChanged = node.$path !== syncedPathRef.current;
230
+ if (pathChanged) {
231
+ setContext(pickDefaultContext(node.$type));
232
+ syncFromNode(node);
233
+ syncedPathRef.current = node.$path;
234
+ syncedRevRef.current = node.$rev;
235
+ setDirty(false);
236
+ setStale(false);
237
+ return;
238
+ }
239
+ if (node.$rev !== syncedRevRef.current) {
240
+ if (dirty) {
241
+ setStale(true);
242
+ }
243
+ else {
244
+ syncFromNode(node);
245
+ syncedRevRef.current = node.$rev;
246
+ }
247
+ }
248
+ }, [node?.$path, node?.$rev]);
249
+ // Dirty-tracking wrappers — mark form as edited on any user change
250
+ const dSetNodeType = (v) => { setNodeType(v); setDirty(true); };
251
+ const dSetCompData = (v) => { setCompData(v); setDirty(true); };
252
+ const dSetPlainData = (v) => { setPlainData(v); setDirty(true); };
253
+ const dSetJsonText = (v) => { setJsonText(v); setDirty(true); };
254
+ const dSetAclOwner = (v) => { setAclOwner(v); setDirty(true); };
255
+ const dSetAclRules = (v) => { setAclRules(v); setDirty(true); };
256
+ function handleReset() {
257
+ if (!node)
258
+ return;
259
+ const current = cache.get(node.$path) ?? node;
260
+ syncFromNode(current);
261
+ syncedRevRef.current = current.$rev;
262
+ setDirty(false);
263
+ setStale(false);
264
+ }
265
+ if (!node) {
266
+ return (_jsx("div", { className: "editor", children: _jsxs("div", { className: "editor-empty", children: [_jsx("div", { className: "icon", children: "\u260D" }), _jsx("p", { children: "Select a node to inspect" })] }) }));
267
+ }
268
+ const nodeName = node.$path === '/' ? '/' : node.$path.slice(node.$path.lastIndexOf('/') + 1);
269
+ const components = getComponents(node);
270
+ const viewContexts = getViewContexts(node.$type, node);
271
+ const schemaHandler = resolve(node.$type, 'schema');
272
+ const schema = schemaHandler ? schemaHandler() : null;
273
+ // Main component: when the node IS the component (its $type has a registered class).
274
+ // Show the class's fields (with defaults as fallback for unset fields).
275
+ const mainCompCls = resolve(node.$type, 'class');
276
+ const mainCompDefaults = mainCompCls ? new mainCompCls() : null;
277
+ async function handleSave() {
278
+ if (!node)
279
+ return;
280
+ let toSave;
281
+ if (tab === 'json') {
282
+ try {
283
+ toSave = JSON.parse(jsonText);
284
+ }
285
+ catch {
286
+ toast('Invalid JSON');
287
+ return;
288
+ }
289
+ }
290
+ else {
291
+ toSave = { $path: node.$path, $type: nodeType, ...plainData };
292
+ if (aclOwner)
293
+ toSave.$owner = aclOwner;
294
+ if (aclRules.length > 0)
295
+ toSave.$acl = aclRules;
296
+ for (const [name, comp] of components) {
297
+ const ctype = comp.$type;
298
+ const cschema = getSchema(ctype);
299
+ const cd = compData[name];
300
+ if ((cschema || (cd && Object.keys(cd).length > 0)) && cd) {
301
+ toSave[name] = { $type: ctype, ...cd };
302
+ }
303
+ else {
304
+ const text = compTexts[name];
305
+ if (text === undefined)
306
+ continue;
307
+ try {
308
+ toSave[name] = JSON.parse(text);
309
+ }
310
+ catch {
311
+ toast(`Invalid JSON in component: ${name}`);
312
+ return;
313
+ }
314
+ }
315
+ }
316
+ }
317
+ await set(toSave);
318
+ const fresh = cache.get(node.$path);
319
+ if (fresh) {
320
+ syncFromNode(fresh);
321
+ syncedRevRef.current = fresh.$rev;
322
+ }
323
+ setDirty(false);
324
+ setStale(false);
325
+ toast('Saved');
326
+ }
327
+ function handleAdd() {
328
+ if (!node)
329
+ return;
330
+ onAddComponent(node.$path);
331
+ }
332
+ function handleRemoveComponent(name) {
333
+ if (!node)
334
+ return;
335
+ const next = { ...node };
336
+ delete next[name];
337
+ set(next);
338
+ }
339
+ function toggleCollapse(name) {
340
+ setCollapsed((prev) => {
341
+ const next = new Set(prev);
342
+ if (next.has(name))
343
+ next.delete(name);
344
+ else
345
+ next.add(name);
346
+ return next;
347
+ });
348
+ }
349
+ return (_jsxs("div", { className: "editor", children: [_jsxs("div", { className: "editor-header", children: [_jsx(Breadcrumb, { path: node.$path, onSelect: onSelect }), _jsxs("div", { className: "editor-title", children: [_jsx("h2", { children: nodeName }), _jsx("span", { className: "editor-type-badge", children: node.$type }), _jsx("a", { href: node.$path, target: "_blank", rel: "noopener", className: "text-[11px] text-[--text-3] hover:text-[--accent] no-underline", children: "View \u2197" }), onSetRoot && (_jsx("button", { className: "sm ghost text-[11px]", onClick: () => onSetRoot(node.$path), title: "Focus subtree", children: "\u2302" })), viewContexts.length > 1 && (_jsx("span", { className: "context-buttons", children: viewContexts.map((c) => (_jsx("button", { className: `sm context-btn${context === c ? ' active' : ''}`, onClick: () => setContext(c), children: c }, c))) })), _jsx("span", { className: "spacer" }), _jsx("button", { className: editing ? 'sm' : 'sm primary', onClick: () => setEditing(!editing), children: editing ? 'Close' : 'Edit' }), _jsx("button", { className: "sm danger", onClick: () => {
350
+ if (confirm(`Delete ${node.$path}?`))
351
+ onDelete(node.$path);
352
+ }, children: "Delete" })] })] }), _jsx("div", { className: "editor-body", children: _jsx(RenderContext, { name: context, children: _jsx("div", { className: "node-view", children: _jsx(Render, { value: node }) }) }) }), _jsxs("div", { className: `edit-panel${editing ? ' open' : ''}`, children: [_jsxs("div", { className: "edit-panel-header", children: [_jsxs("span", { children: ["Edit ", nodeName] }), _jsx("button", { className: "sm ghost", onClick: () => setEditing(false), children: "\u2715" })] }), _jsxs("div", { className: "edit-panel-tabs", children: [_jsx("button", { className: `editor-tab${tab === 'properties' ? ' active' : ''}`, onClick: () => setTab('properties'), children: "Properties" }), _jsx("button", { className: `editor-tab${tab === 'json' ? ' active' : ''}`, onClick: () => {
353
+ setTab('json');
354
+ setJsonText(JSON.stringify({ ...node, ...plainData }, null, 2));
355
+ }, children: "JSON" })] }), _jsx("div", { className: "edit-panel-body", children: tab === 'properties' ? (_jsxs(_Fragment, { children: [_jsx(NodeCard, { path: node.$path, type: nodeType, onChangeType: dSetNodeType }), _jsx(AclEditor, { path: node.$path, owner: aclOwner, rules: aclRules, currentUserId: currentUserId, onChange: (o, r) => {
356
+ dSetAclOwner(o);
357
+ dSetAclRules(r);
358
+ } }), (mainCompCls || schema) && (_jsxs("div", { className: "card", children: [_jsx("div", { className: "card-header", children: node.$type }), _jsx(ComponentBody, { ctype: node.$type, cdata: plainData, setCD: (fn) => dSetPlainData(fn), path: node.$path, componentName: "", toast: toast, onActionComplete: handleReset })] })), components.map(([name, comp]) => (_jsxs("div", { className: "card", children: [_jsxs("div", { className: "card-header cursor-pointer select-none", onClick: () => toggleCollapse(name), children: [_jsx("span", { className: "font-mono text-[12px]", children: name }), _jsxs("span", { className: "flex items-center gap-2", children: [_jsx("span", { className: "component-type", children: comp.$type }), _jsx("button", { className: "sm danger", onClick: (e) => { e.stopPropagation(); handleRemoveComponent(name); }, children: "Remove" })] })] }), !collapsed.has(name) && (_jsx(ComponentBody, { ctype: comp.$type, cdata: compData[name] ?? {}, setCD: (fn) => dSetCompData((prev) => ({ ...prev, [name]: fn(prev[name] ?? {}) })), path: node.$path, componentName: name, toast: toast, onActionComplete: handleReset }))] }, name))), !schema && !mainCompDefaults && Object.keys(plainData).length > 0 && (_jsxs("div", { className: "card", children: [_jsx("div", { className: "card-header", children: "Data" }), _jsx("div", { className: "card-body", children: Object.entries(plainData).map(([k, v]) => (_jsxs("div", { className: "field", children: [_jsx("label", { children: k }), _jsx("input", { value: typeof v === 'string' ? v : JSON.stringify(v), onChange: (e) => dSetPlainData((prev) => ({ ...prev, [k]: e.target.value })) })] }, k))) })] }))] })) : (_jsx("div", { className: "json-view", children: _jsx("textarea", { value: jsonText, onChange: (e) => dSetJsonText(e.target.value), spellCheck: false }) })) }), _jsxs("div", { className: "edit-panel-actions", children: [stale && (_jsx("button", { className: "ghost", onClick: handleReset, title: "Node updated externally", children: "Reset" })), _jsx("button", { className: "primary", onClick: handleSave, children: "Save" }), tab === 'properties' && (_jsx("button", { onClick: handleAdd, children: "+ Component" }))] })] })] }));
359
+ }
360
+ //# sourceMappingURL=Inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../src/Inspector.tsx"],"names":[],"mappings":"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"}
package/dist/Tree.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ type TreeProps = {
2
+ roots: string[];
3
+ expanded: Set<string>;
4
+ loaded: Set<string>;
5
+ selected: string | null;
6
+ filter: string;
7
+ showHidden: boolean;
8
+ onSelect: (path: string) => void;
9
+ onExpand: (path: string) => void;
10
+ onCreateChild: (parentPath: string) => void;
11
+ onDelete?: (path: string) => void;
12
+ onMove?: (fromPath: string, toPath: string) => void;
13
+ };
14
+ export declare function Tree(props: TreeProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=Tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../src/Tree.tsx"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD,CAAC;AAqNF,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAQpC"}
package/dist/Tree.js ADDED
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
3
+ import * as cache from './cache';
4
+ function nodeName(p) {
5
+ return p.slice(p.lastIndexOf('/') + 1) || '/';
6
+ }
7
+ function matchesFilter(name, type, filter) {
8
+ if (!filter)
9
+ return true;
10
+ const lf = filter.toLowerCase();
11
+ return name.toLowerCase().includes(lf) || type.toLowerCase().includes(lf);
12
+ }
13
+ function hasMatchingDescendant(path, filter) {
14
+ const nodes = cache.raw();
15
+ const prefix = path === '/' ? '/' : path + '/';
16
+ for (const [k, v] of nodes) {
17
+ if (k.startsWith(prefix) && matchesFilter(nodeName(k), v.$type, filter))
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ function BadgeMenu({ path, typeLabel, fullType, onCreateChild, onDelete, }) {
23
+ const [open, setOpen] = useState(false);
24
+ const ref = useRef(null);
25
+ useEffect(() => {
26
+ if (!open)
27
+ return;
28
+ const close = (e) => {
29
+ if (ref.current && !ref.current.contains(e.target))
30
+ setOpen(false);
31
+ };
32
+ document.addEventListener('mousedown', close);
33
+ return () => document.removeEventListener('mousedown', close);
34
+ }, [open]);
35
+ return (_jsxs("div", { ref: ref, className: "tree-badge-wrap", children: [_jsx("span", { className: "tree-badge", title: fullType, onClick: (e) => {
36
+ e.stopPropagation();
37
+ setOpen(!open);
38
+ }, children: typeLabel }), open && (_jsxs("div", { className: "tree-menu", children: [_jsx("button", { className: "tree-menu-item", onClick: (e) => {
39
+ e.stopPropagation();
40
+ setOpen(false);
41
+ onCreateChild(path);
42
+ }, children: "+ Add child" }), onDelete && (_jsx("button", { className: "tree-menu-item danger", onClick: (e) => {
43
+ e.stopPropagation();
44
+ setOpen(false);
45
+ if (confirm(`Delete ${path}?`))
46
+ onDelete(path);
47
+ }, children: "\u00D7 Delete" }))] }))] }));
48
+ }
49
+ function TreeNode({ path, expanded, loaded = new Set(), selected, filter, showHidden, depth, onSelect, onExpand, onCreateChild, onDelete, onMove, }) {
50
+ // Granular subscriptions — only re-render when THIS node or ITS children change
51
+ const node = useSyncExternalStore(useCallback((cb) => cache.subscribePath(path, cb), [path]), useCallback(() => cache.get(path), [path]));
52
+ const childrenNodes = useSyncExternalStore(useCallback((cb) => cache.subscribeChildren(path, cb), [path]), useCallback(() => cache.getChildren(path), [path]));
53
+ const rowRef = useRef(null);
54
+ const [dragOver, setDragOver] = useState(null);
55
+ if (!node)
56
+ return null;
57
+ const name = nodeName(path);
58
+ const isExp = expanded.has(path);
59
+ const allChildren = childrenNodes.map(n => n.$path).filter(p => p !== path);
60
+ const knownChildren = showHidden
61
+ ? allChildren
62
+ : allChildren.filter(p => !nodeName(p).startsWith('_'));
63
+ const showChildren = filter ? knownChildren : isExp ? knownChildren : [];
64
+ const filteredChildren = filter
65
+ ? showChildren.filter((c) => {
66
+ const cn = cache.get(c);
67
+ if (!cn)
68
+ return false;
69
+ return matchesFilter(nodeName(c), cn.$type, filter) || hasMatchingDescendant(c, filter);
70
+ })
71
+ : showChildren;
72
+ if (filter && !matchesFilter(name, node.$type, filter) && filteredChildren.length === 0) {
73
+ return null;
74
+ }
75
+ const indent = depth * 12 + 4;
76
+ const typeLabel = node.$type.includes('.') ? node.$type.slice(node.$type.lastIndexOf('.') + 1) : node.$type;
77
+ return (_jsxs("div", { className: "tree-node", children: [_jsxs("div", { ref: rowRef, className: `tree-row${selected === path ? ' selected' : ''}${dragOver === 'above' ? ' tree-drop-above' : ''}${dragOver === 'below' ? ' tree-drop-below' : ''}`, style: { paddingLeft: indent }, onClick: () => onSelect(path), draggable: true, onDragStart: (e) => {
78
+ e.dataTransfer.setData('text/plain', path);
79
+ e.dataTransfer.setData('application/treenity-path', path);
80
+ e.dataTransfer.effectAllowed = 'all';
81
+ }, onDragOver: (e) => {
82
+ e.preventDefault();
83
+ const rect = rowRef.current.getBoundingClientRect();
84
+ const y = e.clientY - rect.top;
85
+ setDragOver(y < rect.height / 2 ? 'above' : 'below');
86
+ }, onDragLeave: () => setDragOver(null), onDrop: (e) => {
87
+ e.preventDefault();
88
+ setDragOver(null);
89
+ const from = e.dataTransfer.getData('text/plain');
90
+ if (from && from !== path && onMove)
91
+ onMove(from, path);
92
+ }, children: [knownChildren.length > 0 || !loaded.has(path) ? (_jsx("span", { className: "tree-toggle", onClick: (e) => {
93
+ e.stopPropagation();
94
+ onExpand(path);
95
+ }, children: isExp ? '\u25BE' : '\u25B8' })) : (_jsx("span", { className: "tree-toggle" })), _jsx("span", { className: "tree-label", children: name }), _jsx(BadgeMenu, { path: path, typeLabel: typeLabel, fullType: node.$type, onCreateChild: onCreateChild, onDelete: onDelete })] }), (isExp || filter) && filteredChildren.length > 0 && (_jsx("div", { className: "tree-children", children: filteredChildren.map((c) => (_jsx(TreeNode, { path: c, depth: depth + 1, expanded: expanded, loaded: loaded, selected: selected, filter: filter, showHidden: showHidden, onSelect: onSelect, onExpand: onExpand, onCreateChild: onCreateChild, onDelete: onDelete, onMove: onMove }, c))) }))] }));
96
+ }
97
+ export function Tree(props) {
98
+ return (_jsx("div", { children: props.roots.map((r) => (_jsx(TreeNode, { path: r, depth: 0, ...props }, r))) }));
99
+ }
100
+ //# sourceMappingURL=Tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tree.js","sourceRoot":"","sources":["../src/Tree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function ViewPage({ path, editorLink }: {
2
+ path: string;
3
+ editorLink?: boolean;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=ViewPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewPage.d.ts","sourceRoot":"","sources":["../src/ViewPage.tsx"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,2CAuCpF"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // ViewPage — standalone read-only node view at /{path}
3
+ import { Render, RenderContext } from '#context';
4
+ import { usePath } from './hooks';
5
+ export function ViewPage({ path, editorLink }) {
6
+ const node = usePath(path);
7
+ const name = path === '/' ? '/' : path.slice(path.lastIndexOf('/') + 1);
8
+ if (!node) {
9
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center h-screen gap-4 text-[--text-3]", children: [_jsx("div", { className: "text-4xl", children: "404" }), _jsxs("p", { children: ["Node not found: ", _jsx("span", { className: "font-mono", children: path })] }), editorLink && _jsx("a", { href: `/t${path}`, className: "text-[--accent] hover:underline", children: "Open in editor" })] }));
10
+ }
11
+ return (_jsxs("div", { className: "flex flex-col h-screen", children: [editorLink && (_jsxs("div", { className: "flex items-center gap-3 px-4 py-2 border-b border-[--border] bg-[--bg-2]", children: [_jsx("span", { className: "font-semibold text-sm", children: name }), _jsx("span", { className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-[--accent]/10 text-[--accent]", children: node.$type }), _jsx("span", { className: "flex-1" }), _jsx("a", { href: `/t${path}`, className: "text-xs text-[--text-3] hover:text-[--text-1] no-underline", children: "Open in editor" })] })), _jsx("div", { className: "flex-1 overflow-auto p-4 has-[.view-full]:p-0", children: _jsx(RenderContext, { name: "react", children: _jsx(Render, { value: node }) }) })] }));
12
+ }
13
+ //# sourceMappingURL=ViewPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewPage.js","sourceRoot":"","sources":["../src/ViewPage.tsx"],"names":[],"mappings":";AAAA,uDAAuD;AAEvD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAA0C;IACnF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAExE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,eAAK,SAAS,EAAC,0EAA0E,aACvF,cAAK,SAAS,EAAC,UAAU,oBAAU,EACnC,4CAAmB,eAAM,SAAS,EAAC,WAAW,YAAE,IAAI,GAAQ,IAAI,EAC/D,UAAU,IAAI,YAAG,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,SAAS,EAAC,iCAAiC,+BAAmB,IAC/F,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACpC,UAAU,IAAI,CACb,eAAK,SAAS,EAAC,0EAA0E,aACvF,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,GAAQ,EACrD,eAAM,SAAS,EAAC,8EAA8E,YAC3F,IAAI,CAAC,KAAK,GACN,EACP,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,YACE,IAAI,EAAE,KAAK,IAAI,EAAE,EACjB,SAAS,EAAC,4DAA4D,+BAGpE,IACA,CACP,EACD,cAAK,SAAS,EAAC,+CAA+C,YAC5D,KAAC,aAAa,IAAC,IAAI,EAAC,OAAO,YACzB,KAAC,MAAM,IAAC,KAAK,EAAE,IAAI,GAAI,GACT,GACZ,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ type Sub = () => void;
2
+ export declare function getComputed(path: string): Record<string, unknown> | undefined;
3
+ /** Get the raw valtio proxy — for useSnapshot in hooks */
4
+ export declare function getComputedProxy(path: string): Record<string, unknown> | undefined;
5
+ export declare function setComputed(path: string, field: string, value: unknown): void;
6
+ export declare function clearComputed(path: string): void;
7
+ export declare function subscribeComputed(path: string, cb: Sub): () => void;
8
+ export {};
9
+ //# sourceMappingURL=computed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/bind/computed.ts"],"names":[],"mappings":"AAOA,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAmBtB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAI7E;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAElF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAK7E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOhD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,MAAM,IAAI,CAUnE"}