@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.
- package/board/board.test.ts +212 -0
- package/board/client.ts +1 -0
- package/board/seed.ts +26 -0
- package/board/server.ts +5 -0
- package/board/types.ts +87 -0
- package/board/view.tsx +574 -0
- package/brahman/CLAUDE.md +18 -0
- package/brahman/brahman.test.ts +855 -0
- package/brahman/client.ts +2 -0
- package/brahman/helpers.ts +374 -0
- package/brahman/server.ts +2 -0
- package/brahman/service.ts +328 -0
- package/brahman/types.ts +727 -0
- package/brahman/view.tsx +73 -0
- package/brahman/views/action-cards.tsx +615 -0
- package/brahman/views/bot-view.tsx +76 -0
- package/brahman/views/chat-editor.tsx +782 -0
- package/brahman/views/chat-preview.tsx +266 -0
- package/brahman/views/menu-editor.tsx +451 -0
- package/brahman/views/page-layout.tsx +285 -0
- package/brahman/views/tstring-input.tsx +84 -0
- package/cafe/CLAUDE.md +7 -0
- package/cafe/seed.ts +8 -0
- package/cafe/server.ts +2 -0
- package/cafe/types.ts +32 -0
- package/canary/seed.ts +8 -0
- package/canary/server.ts +3 -0
- package/canary/service.ts +101 -0
- package/canary/types.ts +16 -0
- package/dist/board/client.d.ts +2 -0
- package/dist/board/client.d.ts.map +1 -0
- package/dist/board/client.js +2 -0
- package/dist/board/client.js.map +1 -0
- package/dist/board/seed.d.ts +2 -0
- package/dist/board/seed.d.ts.map +1 -0
- package/dist/board/seed.js +23 -0
- package/dist/board/seed.js.map +1 -0
- package/dist/board/server.d.ts +3 -0
- package/dist/board/server.d.ts.map +1 -0
- package/dist/board/server.js +5 -0
- package/dist/board/server.js.map +1 -0
- package/dist/board/types.d.ts +45 -0
- package/dist/board/types.d.ts.map +1 -0
- package/dist/board/types.js +82 -0
- package/dist/board/types.js.map +1 -0
- package/dist/board/view.d.ts +2 -0
- package/dist/board/view.d.ts.map +1 -0
- package/dist/board/view.js +254 -0
- package/dist/board/view.js.map +1 -0
- package/dist/brahman/client.d.ts +3 -0
- package/dist/brahman/client.d.ts.map +1 -0
- package/dist/brahman/client.js +3 -0
- package/dist/brahman/client.js.map +1 -0
- package/dist/brahman/helpers.d.ts +51 -0
- package/dist/brahman/helpers.d.ts.map +1 -0
- package/dist/brahman/helpers.js +321 -0
- package/dist/brahman/helpers.js.map +1 -0
- package/dist/brahman/server.d.ts +3 -0
- package/dist/brahman/server.d.ts.map +1 -0
- package/dist/brahman/server.js +3 -0
- package/dist/brahman/server.js.map +1 -0
- package/dist/brahman/service.d.ts +2 -0
- package/dist/brahman/service.d.ts.map +1 -0
- package/dist/brahman/service.js +310 -0
- package/dist/brahman/service.js.map +1 -0
- package/dist/brahman/types.d.ts +335 -0
- package/dist/brahman/types.d.ts.map +1 -0
- package/dist/brahman/types.js +633 -0
- package/dist/brahman/types.js.map +1 -0
- package/dist/brahman/view.d.ts +2 -0
- package/dist/brahman/view.d.ts.map +1 -0
- package/dist/brahman/view.js +47 -0
- package/dist/brahman/view.js.map +1 -0
- package/dist/brahman/views/action-cards.d.ts +60 -0
- package/dist/brahman/views/action-cards.d.ts.map +1 -0
- package/dist/brahman/views/action-cards.js +283 -0
- package/dist/brahman/views/action-cards.js.map +1 -0
- package/dist/brahman/views/bot-view.d.ts +5 -0
- package/dist/brahman/views/bot-view.d.ts.map +1 -0
- package/dist/brahman/views/bot-view.js +14 -0
- package/dist/brahman/views/bot-view.js.map +1 -0
- package/dist/brahman/views/chat-editor.d.ts +5 -0
- package/dist/brahman/views/chat-editor.d.ts.map +1 -0
- package/dist/brahman/views/chat-editor.js +306 -0
- package/dist/brahman/views/chat-editor.js.map +1 -0
- package/dist/brahman/views/chat-preview.d.ts +5 -0
- package/dist/brahman/views/chat-preview.d.ts.map +1 -0
- package/dist/brahman/views/chat-preview.js +145 -0
- package/dist/brahman/views/chat-preview.js.map +1 -0
- package/dist/brahman/views/menu-editor.d.ts +11 -0
- package/dist/brahman/views/menu-editor.d.ts.map +1 -0
- package/dist/brahman/views/menu-editor.js +171 -0
- package/dist/brahman/views/menu-editor.js.map +1 -0
- package/dist/brahman/views/page-layout.d.ts +5 -0
- package/dist/brahman/views/page-layout.d.ts.map +1 -0
- package/dist/brahman/views/page-layout.js +114 -0
- package/dist/brahman/views/page-layout.js.map +1 -0
- package/dist/brahman/views/tstring-input.d.ts +15 -0
- package/dist/brahman/views/tstring-input.d.ts.map +1 -0
- package/dist/brahman/views/tstring-input.js +23 -0
- package/dist/brahman/views/tstring-input.js.map +1 -0
- package/dist/cafe/seed.d.ts +2 -0
- package/dist/cafe/seed.d.ts.map +1 -0
- package/dist/cafe/seed.js +7 -0
- package/dist/cafe/seed.js.map +1 -0
- package/dist/cafe/server.d.ts +3 -0
- package/dist/cafe/server.d.ts.map +1 -0
- package/dist/cafe/server.js +3 -0
- package/dist/cafe/server.js.map +1 -0
- package/dist/cafe/types.d.ts +2 -0
- package/dist/cafe/types.d.ts.map +1 -0
- package/dist/cafe/types.js +31 -0
- package/dist/cafe/types.js.map +1 -0
- package/dist/canary/seed.d.ts +2 -0
- package/dist/canary/seed.d.ts.map +1 -0
- package/dist/canary/seed.js +7 -0
- package/dist/canary/seed.js.map +1 -0
- package/dist/canary/server.d.ts +4 -0
- package/dist/canary/server.d.ts.map +1 -0
- package/dist/canary/server.js +4 -0
- package/dist/canary/server.js.map +1 -0
- package/dist/canary/service.d.ts +2 -0
- package/dist/canary/service.d.ts.map +1 -0
- package/dist/canary/service.js +101 -0
- package/dist/canary/service.js.map +1 -0
- package/dist/canary/types.d.ts +9 -0
- package/dist/canary/types.d.ts.map +1 -0
- package/dist/canary/types.js +13 -0
- package/dist/canary/types.js.map +1 -0
- package/dist/doc/client.d.ts +3 -0
- package/dist/doc/client.d.ts.map +1 -0
- package/dist/doc/client.js +5 -0
- package/dist/doc/client.js.map +1 -0
- package/dist/doc/fs-codec.d.ts +2 -0
- package/dist/doc/fs-codec.d.ts.map +1 -0
- package/dist/doc/fs-codec.js +44 -0
- package/dist/doc/fs-codec.js.map +1 -0
- package/dist/doc/markdown.d.ts +13 -0
- package/dist/doc/markdown.d.ts.map +1 -0
- package/dist/doc/markdown.js +250 -0
- package/dist/doc/markdown.js.map +1 -0
- package/dist/doc/prefab.d.ts +2 -0
- package/dist/doc/prefab.d.ts.map +1 -0
- package/dist/doc/prefab.js +23 -0
- package/dist/doc/prefab.js.map +1 -0
- package/dist/doc/renderers.d.ts +2 -0
- package/dist/doc/renderers.d.ts.map +1 -0
- package/dist/doc/renderers.js +94 -0
- package/dist/doc/renderers.js.map +1 -0
- package/dist/doc/seed.d.ts +2 -0
- package/dist/doc/seed.d.ts.map +1 -0
- package/dist/doc/seed.js +9 -0
- package/dist/doc/seed.js.map +1 -0
- package/dist/doc/server.d.ts +6 -0
- package/dist/doc/server.d.ts.map +1 -0
- package/dist/doc/server.js +6 -0
- package/dist/doc/server.js.map +1 -0
- package/dist/doc/slash-command.d.ts +3 -0
- package/dist/doc/slash-command.d.ts.map +1 -0
- package/dist/doc/slash-command.js +123 -0
- package/dist/doc/slash-command.js.map +1 -0
- package/dist/doc/slash-menu.d.ts +15 -0
- package/dist/doc/slash-menu.d.ts.map +1 -0
- package/dist/doc/slash-menu.js +54 -0
- package/dist/doc/slash-menu.js.map +1 -0
- package/dist/doc/text.d.ts +2 -0
- package/dist/doc/text.d.ts.map +1 -0
- package/dist/doc/text.js +22 -0
- package/dist/doc/text.js.map +1 -0
- package/dist/doc/toolbar.d.ts +5 -0
- package/dist/doc/toolbar.d.ts.map +1 -0
- package/dist/doc/toolbar.js +15 -0
- package/dist/doc/toolbar.js.map +1 -0
- package/dist/doc/treenity-block-view.d.ts +2 -0
- package/dist/doc/treenity-block-view.d.ts.map +1 -0
- package/dist/doc/treenity-block-view.js +37 -0
- package/dist/doc/treenity-block-view.js.map +1 -0
- package/dist/doc/treenity-block.d.ts +3 -0
- package/dist/doc/treenity-block.d.ts.map +1 -0
- package/dist/doc/treenity-block.js +27 -0
- package/dist/doc/treenity-block.js.map +1 -0
- package/dist/doc/types.d.ts +2 -0
- package/dist/doc/types.d.ts.map +1 -0
- package/dist/doc/types.js +10 -0
- package/dist/doc/types.js.map +1 -0
- package/dist/launcher/client.d.ts +5 -0
- package/dist/launcher/client.d.ts.map +1 -0
- package/dist/launcher/client.js +5 -0
- package/dist/launcher/client.js.map +1 -0
- package/dist/launcher/icons.d.ts +2 -0
- package/dist/launcher/icons.d.ts.map +1 -0
- package/dist/launcher/icons.js +57 -0
- package/dist/launcher/icons.js.map +1 -0
- package/dist/launcher/seed.d.ts +2 -0
- package/dist/launcher/seed.d.ts.map +1 -0
- package/dist/launcher/seed.js +36 -0
- package/dist/launcher/seed.js.map +1 -0
- package/dist/launcher/server.d.ts +3 -0
- package/dist/launcher/server.d.ts.map +1 -0
- package/dist/launcher/server.js +3 -0
- package/dist/launcher/server.js.map +1 -0
- package/dist/launcher/types.d.ts +21 -0
- package/dist/launcher/types.d.ts.map +1 -0
- package/dist/launcher/types.js +47 -0
- package/dist/launcher/types.js.map +1 -0
- package/dist/launcher/view.d.ts +2 -0
- package/dist/launcher/view.d.ts.map +1 -0
- package/dist/launcher/view.js +187 -0
- package/dist/launcher/view.js.map +1 -0
- package/dist/launcher/widgets.d.ts +2 -0
- package/dist/launcher/widgets.d.ts.map +1 -0
- package/dist/launcher/widgets.js +73 -0
- package/dist/launcher/widgets.js.map +1 -0
- package/dist/mindmap/branch.d.ts +17 -0
- package/dist/mindmap/branch.d.ts.map +1 -0
- package/dist/mindmap/branch.js +47 -0
- package/dist/mindmap/branch.js.map +1 -0
- package/dist/mindmap/client.d.ts +3 -0
- package/dist/mindmap/client.d.ts.map +1 -0
- package/dist/mindmap/client.js +3 -0
- package/dist/mindmap/client.js.map +1 -0
- package/dist/mindmap/radial-tree.d.ts +14 -0
- package/dist/mindmap/radial-tree.d.ts.map +1 -0
- package/dist/mindmap/radial-tree.js +184 -0
- package/dist/mindmap/radial-tree.js.map +1 -0
- package/dist/mindmap/sidebar.d.ts +8 -0
- package/dist/mindmap/sidebar.d.ts.map +1 -0
- package/dist/mindmap/sidebar.js +24 -0
- package/dist/mindmap/sidebar.js.map +1 -0
- package/dist/mindmap/types.d.ts +8 -0
- package/dist/mindmap/types.d.ts.map +1 -0
- package/dist/mindmap/types.js +10 -0
- package/dist/mindmap/types.js.map +1 -0
- package/dist/mindmap/use-tree-data.d.ts +14 -0
- package/dist/mindmap/use-tree-data.d.ts.map +1 -0
- package/dist/mindmap/use-tree-data.js +95 -0
- package/dist/mindmap/use-tree-data.js.map +1 -0
- package/dist/mindmap/view.d.ts +3 -0
- package/dist/mindmap/view.d.ts.map +1 -0
- package/dist/mindmap/view.js +141 -0
- package/dist/mindmap/view.js.map +1 -0
- package/dist/sensor-demo/client.d.ts +2 -0
- package/dist/sensor-demo/client.d.ts.map +1 -0
- package/dist/sensor-demo/client.js +2 -0
- package/dist/sensor-demo/client.js.map +1 -0
- package/dist/sensor-demo/server.d.ts +2 -0
- package/dist/sensor-demo/server.d.ts.map +1 -0
- package/dist/sensor-demo/server.js +2 -0
- package/dist/sensor-demo/server.js.map +1 -0
- package/dist/sensor-demo/service.d.ts +2 -0
- package/dist/sensor-demo/service.d.ts.map +1 -0
- package/dist/sensor-demo/service.js +27 -0
- package/dist/sensor-demo/service.js.map +1 -0
- package/dist/sensor-demo/types.d.ts +15 -0
- package/dist/sensor-demo/types.d.ts.map +1 -0
- package/dist/sensor-demo/types.js +18 -0
- package/dist/sensor-demo/types.js.map +1 -0
- package/dist/sensor-demo/view.d.ts +2 -0
- package/dist/sensor-demo/view.d.ts.map +1 -0
- package/dist/sensor-demo/view.js +33 -0
- package/dist/sensor-demo/view.js.map +1 -0
- package/dist/sensor-generator/action.d.ts +2 -0
- package/dist/sensor-generator/action.d.ts.map +1 -0
- package/dist/sensor-generator/action.js +23 -0
- package/dist/sensor-generator/action.js.map +1 -0
- package/dist/sensor-generator/client.d.ts +2 -0
- package/dist/sensor-generator/client.d.ts.map +1 -0
- package/dist/sensor-generator/client.js +2 -0
- package/dist/sensor-generator/client.js.map +1 -0
- package/dist/sensor-generator/server.d.ts +2 -0
- package/dist/sensor-generator/server.d.ts.map +1 -0
- package/dist/sensor-generator/server.js +2 -0
- package/dist/sensor-generator/server.js.map +1 -0
- package/dist/sensor-generator/view.d.ts +2 -0
- package/dist/sensor-generator/view.d.ts.map +1 -0
- package/dist/sensor-generator/view.js +64 -0
- package/dist/sensor-generator/view.js.map +1 -0
- package/dist/sim/client.d.ts +2 -0
- package/dist/sim/client.d.ts.map +1 -0
- package/dist/sim/client.js +2 -0
- package/dist/sim/client.js.map +1 -0
- package/dist/sim/seed.d.ts +2 -0
- package/dist/sim/seed.d.ts.map +1 -0
- package/dist/sim/seed.js +50 -0
- package/dist/sim/seed.js.map +1 -0
- package/dist/sim/server.d.ts +3 -0
- package/dist/sim/server.d.ts.map +1 -0
- package/dist/sim/server.js +3 -0
- package/dist/sim/server.js.map +1 -0
- package/dist/sim/service.d.ts +4 -0
- package/dist/sim/service.d.ts.map +1 -0
- package/dist/sim/service.js +528 -0
- package/dist/sim/service.js.map +1 -0
- package/dist/sim/types.d.ts +63 -0
- package/dist/sim/types.d.ts.map +1 -0
- package/dist/sim/types.js +57 -0
- package/dist/sim/types.js.map +1 -0
- package/dist/sim/view.d.ts +2 -0
- package/dist/sim/view.d.ts.map +1 -0
- package/dist/sim/view.js +205 -0
- package/dist/sim/view.js.map +1 -0
- package/dist/table/client.d.ts +4 -0
- package/dist/table/client.d.ts.map +1 -0
- package/dist/table/client.js +4 -0
- package/dist/table/client.js.map +1 -0
- package/dist/table/edit.d.ts +2 -0
- package/dist/table/edit.d.ts.map +1 -0
- package/dist/table/edit.js +115 -0
- package/dist/table/edit.js.map +1 -0
- package/dist/table/server.d.ts +2 -0
- package/dist/table/server.d.ts.map +1 -0
- package/dist/table/server.js +2 -0
- package/dist/table/server.js.map +1 -0
- package/dist/table/types.d.ts +18 -0
- package/dist/table/types.d.ts.map +1 -0
- package/dist/table/types.js +13 -0
- package/dist/table/types.js.map +1 -0
- package/dist/table/use-debounced-sync.d.ts +8 -0
- package/dist/table/use-debounced-sync.d.ts.map +1 -0
- package/dist/table/use-debounced-sync.js +56 -0
- package/dist/table/use-debounced-sync.js.map +1 -0
- package/dist/table/view.d.ts +2 -0
- package/dist/table/view.d.ts.map +1 -0
- package/dist/table/view.js +199 -0
- package/dist/table/view.js.map +1 -0
- package/dist/tasks/server.d.ts +2 -0
- package/dist/tasks/server.d.ts.map +1 -0
- package/dist/tasks/server.js +2 -0
- package/dist/tasks/server.js.map +1 -0
- package/dist/tasks/types.d.ts +22 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +34 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/three/client.d.ts +2 -0
- package/dist/three/client.d.ts.map +1 -0
- package/dist/three/client.js +2 -0
- package/dist/three/client.js.map +1 -0
- package/dist/three/seed.d.ts +2 -0
- package/dist/three/seed.d.ts.map +1 -0
- package/dist/three/seed.js +45 -0
- package/dist/three/seed.js.map +1 -0
- package/dist/three/server.d.ts +3 -0
- package/dist/three/server.d.ts.map +1 -0
- package/dist/three/server.js +3 -0
- package/dist/three/server.js.map +1 -0
- package/dist/three/types.d.ts +178 -0
- package/dist/three/types.d.ts.map +1 -0
- package/dist/three/types.js +209 -0
- package/dist/three/types.js.map +1 -0
- package/dist/three/view.d.ts +2 -0
- package/dist/three/view.d.ts.map +1 -0
- package/dist/three/view.js +307 -0
- package/dist/three/view.js.map +1 -0
- package/dist/todo/client.d.ts +3 -0
- package/dist/todo/client.d.ts.map +1 -0
- package/dist/todo/client.js +3 -0
- package/dist/todo/client.js.map +1 -0
- package/dist/todo/seed.d.ts +2 -0
- package/dist/todo/seed.d.ts.map +1 -0
- package/dist/todo/seed.js +8 -0
- package/dist/todo/seed.js.map +1 -0
- package/dist/todo/server.d.ts +3 -0
- package/dist/todo/server.d.ts.map +1 -0
- package/dist/todo/server.js +3 -0
- package/dist/todo/server.js.map +1 -0
- package/dist/todo/types.d.ts +15 -0
- package/dist/todo/types.d.ts.map +1 -0
- package/dist/todo/types.js +29 -0
- package/dist/todo/types.js.map +1 -0
- package/dist/todo/view.d.ts +2 -0
- package/dist/todo/view.d.ts.map +1 -0
- package/dist/todo/view.js +27 -0
- package/dist/todo/view.js.map +1 -0
- package/dist/whisper/client.d.ts +2 -0
- package/dist/whisper/client.d.ts.map +1 -0
- package/dist/whisper/client.js +2 -0
- package/dist/whisper/client.js.map +1 -0
- package/dist/whisper/inbox.d.ts +2 -0
- package/dist/whisper/inbox.d.ts.map +1 -0
- package/dist/whisper/inbox.js +50 -0
- package/dist/whisper/inbox.js.map +1 -0
- package/dist/whisper/route.d.ts +10 -0
- package/dist/whisper/route.d.ts.map +1 -0
- package/dist/whisper/route.js +154 -0
- package/dist/whisper/route.js.map +1 -0
- package/dist/whisper/seed.d.ts +2 -0
- package/dist/whisper/seed.d.ts.map +1 -0
- package/dist/whisper/seed.js +14 -0
- package/dist/whisper/seed.js.map +1 -0
- package/dist/whisper/server.d.ts +5 -0
- package/dist/whisper/server.d.ts.map +1 -0
- package/dist/whisper/server.js +5 -0
- package/dist/whisper/server.js.map +1 -0
- package/dist/whisper/service.d.ts +2 -0
- package/dist/whisper/service.d.ts.map +1 -0
- package/dist/whisper/service.js +26 -0
- package/dist/whisper/service.js.map +1 -0
- package/dist/whisper/types.d.ts +38 -0
- package/dist/whisper/types.d.ts.map +1 -0
- package/dist/whisper/types.js +45 -0
- package/dist/whisper/types.js.map +1 -0
- package/dist/whisper/view.d.ts +2 -0
- package/dist/whisper/view.d.ts.map +1 -0
- package/dist/whisper/view.js +40 -0
- package/dist/whisper/view.js.map +1 -0
- package/doc/CLAUDE.md +49 -0
- package/doc/client.ts +5 -0
- package/doc/editor.css +283 -0
- package/doc/fs-codec.test.ts +119 -0
- package/doc/fs-codec.ts +50 -0
- package/doc/markdown.test.ts +152 -0
- package/doc/markdown.ts +284 -0
- package/doc/prefab.ts +26 -0
- package/doc/renderers.tsx +126 -0
- package/doc/seed.ts +10 -0
- package/doc/server.ts +5 -0
- package/doc/slash-command.ts +136 -0
- package/doc/slash-menu.tsx +91 -0
- package/doc/text.ts +20 -0
- package/doc/toolbar.tsx +86 -0
- package/doc/treenity-block-view.tsx +116 -0
- package/doc/treenity-block.ts +31 -0
- package/doc/types.ts +10 -0
- package/launcher/client.ts +4 -0
- package/launcher/icons.tsx +234 -0
- package/launcher/launcher.css +64 -0
- package/launcher/seed.ts +41 -0
- package/launcher/server.ts +2 -0
- package/launcher/types.ts +53 -0
- package/launcher/view.tsx +401 -0
- package/launcher/widgets.tsx +171 -0
- package/mindmap/branch.tsx +163 -0
- package/mindmap/client.ts +2 -0
- package/mindmap/mindmap.css +243 -0
- package/mindmap/sidebar.tsx +127 -0
- package/mindmap/types.ts +10 -0
- package/mindmap/view.tsx +247 -0
- package/package.json +75 -0
- package/sensor-demo/CLAUDE.md +3 -0
- package/sensor-demo/client.ts +1 -0
- package/sensor-demo/server.ts +1 -0
- package/sensor-demo/service.ts +27 -0
- package/sensor-demo/types.ts +20 -0
- package/sensor-demo/view.tsx +64 -0
- package/sensor-generator/CLAUDE.md +3 -0
- package/sensor-generator/action.ts +28 -0
- package/sensor-generator/client.ts +1 -0
- package/sensor-generator/server.ts +1 -0
- package/sensor-generator/view.tsx +107 -0
- package/sim/CLAUDE.md +16 -0
- package/sim/client.ts +1 -0
- package/sim/seed.ts +55 -0
- package/sim/server.ts +2 -0
- package/sim/service.ts +594 -0
- package/sim/sim.test.ts +282 -0
- package/sim/types.ts +87 -0
- package/sim/view.tsx +446 -0
- package/table/client.ts +3 -0
- package/table/edit.tsx +241 -0
- package/table/server.ts +1 -0
- package/table/types.ts +22 -0
- package/table/use-debounced-sync.ts +67 -0
- package/table/view.tsx +339 -0
- package/tasks/CLAUDE.md +6 -0
- package/tasks/server.ts +1 -0
- package/tasks/types.ts +36 -0
- package/three/CLAUDE.md +6 -0
- package/three/client.ts +1 -0
- package/three/seed.ts +54 -0
- package/three/server.ts +2 -0
- package/three/types.ts +238 -0
- package/three/view.tsx +453 -0
- package/todo/client.ts +2 -0
- package/todo/seed.ts +9 -0
- package/todo/server.ts +2 -0
- package/todo/types.ts +32 -0
- package/todo/view.tsx +67 -0
- package/whisper/CLAUDE.md +16 -0
- package/whisper/client.ts +1 -0
- package/whisper/inbox.ts +54 -0
- package/whisper/route.ts +182 -0
- package/whisper/seed.ts +15 -0
- package/whisper/server.ts +4 -0
- package/whisper/service.ts +29 -0
- package/whisper/types.ts +51 -0
- package/whisper/view.tsx +81 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Menu editor — DnD button/row constructor
|
|
3
|
+
// Per-row horizontal sortable + cross-row drop with indicator
|
|
4
|
+
import { closestCenter, DndContext, DragOverlay, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
5
|
+
import { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable';
|
|
6
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
7
|
+
import { Badge } from '@treenity/react/components/ui/badge';
|
|
8
|
+
import { Button } from '@treenity/react/components/ui/button';
|
|
9
|
+
import { Input } from '@treenity/react/components/ui/input';
|
|
10
|
+
import { trpc } from '@treenity/react/trpc';
|
|
11
|
+
import { ArrowRight, Plus, X } from 'lucide-react';
|
|
12
|
+
import { useRef, useState } from 'react';
|
|
13
|
+
import { createPortal } from 'react-dom';
|
|
14
|
+
import { ACTION_TYPES, MENU_TYPES } from '../types';
|
|
15
|
+
import { TStringLineInput, tstringPreview } from './tstring-input';
|
|
16
|
+
// ── Modal (lightweight, no radix dependency) ──
|
|
17
|
+
function Modal({ open, onClose, title, children }) {
|
|
18
|
+
if (!open)
|
|
19
|
+
return null;
|
|
20
|
+
return createPortal(_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: onClose }), _jsxs("div", { className: "relative bg-background border border-border rounded-lg shadow-lg w-full max-w-md mx-4", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-border", children: [_jsx("h3", { className: "text-sm font-semibold", children: title }), _jsx("button", { type: "button", onClick: onClose, className: "text-muted-foreground hover:text-foreground", children: _jsx(X, { className: "h-4 w-4" }) })] }), _jsx("div", { className: "p-4 space-y-4", children: children })] })] }), document.body);
|
|
21
|
+
}
|
|
22
|
+
// ── Tag editor (for button tags) ──
|
|
23
|
+
function TagEditor({ tags, onChange }) {
|
|
24
|
+
const [input, setInput] = useState('');
|
|
25
|
+
function add() {
|
|
26
|
+
const t = input.trim();
|
|
27
|
+
if (!t || tags.includes(t))
|
|
28
|
+
return;
|
|
29
|
+
onChange([...tags, t]);
|
|
30
|
+
setInput('');
|
|
31
|
+
}
|
|
32
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex flex-wrap gap-1", children: tags.map(tag => (_jsxs(Badge, { variant: "secondary", className: "gap-1 pr-1 text-xs", children: [tag, _jsx("button", { type: "button", onClick: () => onChange(tags.filter(t => t !== tag)), className: "ml-0.5 rounded-full hover:bg-destructive/20 p-0.5", children: _jsx(X, { className: "h-2.5 w-2.5" }) })] }, tag))) }), _jsxs("div", { className: "flex gap-1", children: [_jsx(Input, { className: "flex-1 h-7 text-xs", placeholder: "tag (!exclude)", value: input, onChange: e => setInput(e.target.value), onKeyDown: e => e.key === 'Enter' && (e.preventDefault(), add()) }), _jsx(Button, { variant: "outline", size: "sm", className: "h-7 text-xs", onClick: add, children: "+" })] })] }));
|
|
33
|
+
}
|
|
34
|
+
// ── Button edit modal ──
|
|
35
|
+
function ButtonEditModal({ button, langs, onSave, onDelete, onClose, }) {
|
|
36
|
+
const [draft, setDraft] = useState({ ...button });
|
|
37
|
+
function update(key, val) {
|
|
38
|
+
setDraft(prev => ({ ...prev, [key]: val }));
|
|
39
|
+
}
|
|
40
|
+
return (_jsxs(Modal, { open: true, title: "Edit Button", onClose: onClose, children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Title" }), _jsx(TStringLineInput, { value: draft.title, onChange: t => update('title', t), langs: langs })] }), _jsxs("div", { children: [_jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "URL (optional)" }), _jsx(Input, { className: "h-8 text-sm", placeholder: "https://...", value: draft.url ?? '', onChange: e => update('url', e.target.value || undefined) })] }), _jsxs("div", { children: [_jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Tags" }), _jsx(TagEditor, { tags: draft.tags ?? [], onChange: t => update('tags', t) })] }), _jsxs("div", { children: [_jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Button action" }), _jsxs("select", { className: "w-full h-8 text-sm border border-border rounded-md bg-background px-2", value: draft.action?.type ?? '', onChange: e => {
|
|
41
|
+
if (!e.target.value) {
|
|
42
|
+
update('action', undefined);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
update('action', { type: e.target.value });
|
|
46
|
+
}, children: [_jsx("option", { value: "", children: "No action" }), ACTION_TYPES.map(at => (_jsx("option", { value: at.type, children: at.label }, at.type)))] }), draft.action?.type === 'brahman.action.page' && (_jsx(Input, { className: "h-8 text-sm mt-1", placeholder: "Target page path", value: draft.action.target ?? '', onChange: e => update('action', { ...draft.action, target: e.target.value }) }))] })] }), _jsxs("div", { className: "flex justify-between pt-2", children: [_jsx(Button, { variant: "destructive", size: "sm", onClick: onDelete, children: "Delete" }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", onClick: onClose, children: "Cancel" }), _jsx(Button, { size: "sm", onClick: () => { onSave(draft); onClose(); }, children: "Save" })] })] })] }));
|
|
47
|
+
}
|
|
48
|
+
// ── Sortable button with drop indicator ──
|
|
49
|
+
function SortableButton({ button, totalInRow, onClick, onPageDrop, isOver, isCrossRow, }) {
|
|
50
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
51
|
+
id: `btn-${button.id}`,
|
|
52
|
+
});
|
|
53
|
+
const [treeDragOver, setTreeDragOver] = useState(false);
|
|
54
|
+
const widthPct = `${(100 / totalInRow).toFixed(1)}%`;
|
|
55
|
+
const showIndicator = isOver && isCrossRow;
|
|
56
|
+
const pageTarget = button.action?.type === 'brahman.action.page' ? button.action.target : null;
|
|
57
|
+
return (_jsxs("div", { ref: setNodeRef, style: {
|
|
58
|
+
width: widthPct,
|
|
59
|
+
transform: CSS.Transform.toString(transform),
|
|
60
|
+
transition,
|
|
61
|
+
opacity: isDragging ? 0.3 : 1,
|
|
62
|
+
}, className: `shrink-0 relative ${showIndicator ? 'ml-2' : ''}`, onDragOver: e => {
|
|
63
|
+
if (e.dataTransfer.types.includes('application/treenity-path')) {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
e.dataTransfer.dropEffect = 'link';
|
|
66
|
+
setTreeDragOver(true);
|
|
67
|
+
}
|
|
68
|
+
}, onDragLeave: () => setTreeDragOver(false), onDrop: async (e) => {
|
|
69
|
+
const path = e.dataTransfer.getData('application/treenity-path');
|
|
70
|
+
setTreeDragOver(false);
|
|
71
|
+
if (!path)
|
|
72
|
+
return;
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
const node = await trpc.get.query({ path });
|
|
75
|
+
if (node?.$type === 'brahman.page')
|
|
76
|
+
onPageDrop(path);
|
|
77
|
+
}, children: [showIndicator && (_jsx("div", { className: "absolute -left-2 top-0 bottom-0 flex items-center z-10", children: _jsx("div", { className: "w-1 h-full bg-primary rounded-full" }) })), _jsxs("div", { ...attributes, ...listeners, onClick: onClick, className: `flex flex-wrap items-center justify-center gap-x-1.5 gap-y-0 px-2 py-1.5 border rounded-md
|
|
78
|
+
cursor-pointer text-sm font-medium select-none transition-colors
|
|
79
|
+
${treeDragOver ? 'border-primary bg-primary/10 ring-1 ring-primary/30' : ''}
|
|
80
|
+
${showIndicator ? 'border-primary/50 bg-primary/5' : ''}
|
|
81
|
+
${!treeDragOver && !showIndicator ? 'border-border bg-card hover:bg-accent' : ''}`, children: [_jsx("span", { className: "truncate", children: tstringPreview(button.title, 20) || 'Button' }), (button.tags?.length ?? 0) > 0 && (_jsxs("span", { className: "text-[9px] text-muted-foreground", children: ["(", button.tags.length, ")"] })), pageTarget && (_jsxs("span", { className: "flex items-center gap-0.5 text-[9px] text-primary/70", children: [_jsx(ArrowRight, { className: "h-2.5 w-2.5" }), pageTarget.split('/').at(-1)] }))] })] }));
|
|
82
|
+
}
|
|
83
|
+
// ── Helpers ──
|
|
84
|
+
function findButtonIn(rows, id) {
|
|
85
|
+
const numId = parseInt(id.replace('btn-', ''), 10);
|
|
86
|
+
for (let r = 0; r < rows.length; r++) {
|
|
87
|
+
const bi = rows[r].buttons.findIndex(b => b.id === numId);
|
|
88
|
+
if (bi >= 0)
|
|
89
|
+
return { rowIdx: r, btnIdx: bi };
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
export function MenuEditor({ menuType = 'none', rows = [], langs, onChangeType, onChangeRows }) {
|
|
94
|
+
const [editingButton, setEditingButton] = useState(null);
|
|
95
|
+
const [activeId, setActiveId] = useState(null);
|
|
96
|
+
// Track which button we're hovering over (using ref to avoid re-render storms from @dnd-kit)
|
|
97
|
+
const overIdRef = useRef(null);
|
|
98
|
+
const [overId, setOverId] = useState(null);
|
|
99
|
+
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));
|
|
100
|
+
const showRows = menuType !== 'none' && menuType !== 'remove';
|
|
101
|
+
let nextId = 1;
|
|
102
|
+
for (const row of rows)
|
|
103
|
+
for (const btn of row.buttons)
|
|
104
|
+
if (btn.id >= nextId)
|
|
105
|
+
nextId = btn.id + 1;
|
|
106
|
+
function defaultTitle() {
|
|
107
|
+
return Object.fromEntries(langs.map(l => [l, `Button ${nextId}`]));
|
|
108
|
+
}
|
|
109
|
+
// ── DnD handlers ──
|
|
110
|
+
function handleDragStart(event) {
|
|
111
|
+
setActiveId(String(event.active.id));
|
|
112
|
+
overIdRef.current = null;
|
|
113
|
+
setOverId(null);
|
|
114
|
+
}
|
|
115
|
+
function handleDragEnd(event) {
|
|
116
|
+
const { active, over } = event;
|
|
117
|
+
if (over && active.id !== over.id) {
|
|
118
|
+
const src = findButtonIn(rows, String(active.id));
|
|
119
|
+
const dst = findButtonIn(rows, String(over.id));
|
|
120
|
+
if (src && dst) {
|
|
121
|
+
const newRows = rows.map(r => ({ buttons: [...r.buttons] }));
|
|
122
|
+
if (src.rowIdx === dst.rowIdx) {
|
|
123
|
+
newRows[src.rowIdx].buttons = arrayMove(newRows[src.rowIdx].buttons, src.btnIdx, dst.btnIdx);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const [btn] = newRows[src.rowIdx].buttons.splice(src.btnIdx, 1);
|
|
127
|
+
newRows[dst.rowIdx].buttons.splice(dst.btnIdx, 0, btn);
|
|
128
|
+
}
|
|
129
|
+
onChangeRows(newRows.filter(r => r.buttons.length > 0));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
setActiveId(null);
|
|
133
|
+
overIdRef.current = null;
|
|
134
|
+
setOverId(null);
|
|
135
|
+
}
|
|
136
|
+
// ── CRUD ──
|
|
137
|
+
function addButton(rowIdx) {
|
|
138
|
+
const newRows = rows.map(r => ({ buttons: [...r.buttons] }));
|
|
139
|
+
newRows[rowIdx].buttons.push({ id: nextId, title: defaultTitle(), tags: [] });
|
|
140
|
+
onChangeRows(newRows);
|
|
141
|
+
}
|
|
142
|
+
function addRow() {
|
|
143
|
+
onChangeRows([...rows, { buttons: [{ id: nextId, title: defaultTitle(), tags: [] }] }]);
|
|
144
|
+
}
|
|
145
|
+
function updateButton(rowIdx, btnIdx, btn) {
|
|
146
|
+
const newRows = rows.map(r => ({ buttons: [...r.buttons] }));
|
|
147
|
+
newRows[rowIdx].buttons[btnIdx] = btn;
|
|
148
|
+
onChangeRows(newRows);
|
|
149
|
+
}
|
|
150
|
+
function deleteButton(rowIdx, btnIdx) {
|
|
151
|
+
const newRows = rows.map(r => ({ buttons: [...r.buttons] }));
|
|
152
|
+
newRows[rowIdx].buttons.splice(btnIdx, 1);
|
|
153
|
+
onChangeRows(newRows.filter(r => r.buttons.length > 0));
|
|
154
|
+
setEditingButton(null);
|
|
155
|
+
}
|
|
156
|
+
// Determine if active and over are in different rows
|
|
157
|
+
const activePos = activeId ? findButtonIn(rows, activeId) : null;
|
|
158
|
+
const overPos = overId ? findButtonIn(rows, overId) : null;
|
|
159
|
+
const isCrossRow = !!(activePos && overPos && activePos.rowIdx !== overPos.rowIdx);
|
|
160
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("label", { className: "text-xs font-medium text-muted-foreground w-20", children: "Menu type" }), _jsx("select", { className: "flex-1 h-8 text-sm border border-border rounded-md bg-background px-2", value: menuType, onChange: e => onChangeType(e.target.value), children: MENU_TYPES.map(mt => (_jsx("option", { value: mt.value, children: mt.label }, mt.value))) })] }), showRows && (_jsxs("div", { className: "space-y-2", children: [_jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragMove: ({ over }) => {
|
|
161
|
+
const id = over ? String(over.id) : null;
|
|
162
|
+
if (id !== overIdRef.current) {
|
|
163
|
+
overIdRef.current = id;
|
|
164
|
+
setOverId(id);
|
|
165
|
+
}
|
|
166
|
+
}, onDragEnd: handleDragEnd, onDragCancel: () => { setActiveId(null); overIdRef.current = null; setOverId(null); }, children: [rows.map((row, ri) => (_jsx("div", { className: "space-y-1", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { className: "text-[10px] text-muted-foreground w-4", children: ri + 1 }), _jsx(SortableContext, { items: row.buttons.map(b => `btn-${b.id}`), strategy: horizontalListSortingStrategy, children: _jsx("div", { className: "flex-1 flex gap-1", children: row.buttons.map((btn, bi) => (_jsx(SortableButton, { button: btn, totalInRow: row.buttons.length, onClick: () => setEditingButton({ rowIdx: ri, btnIdx: bi }), onPageDrop: path => updateButton(ri, bi, {
|
|
167
|
+
...btn,
|
|
168
|
+
action: { type: 'brahman.action.page', target: path },
|
|
169
|
+
}), isOver: overId === `btn-${btn.id}`, isCrossRow: isCrossRow }, btn.id))) }) }), _jsx("button", { type: "button", onClick: () => addButton(ri), className: "p-1 text-muted-foreground hover:text-foreground", title: "Add button to row", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })] }) }, ri))), _jsx(DragOverlay, { children: activeId && activePos ? (_jsx("div", { className: "px-2 py-1.5 border border-primary rounded-md bg-card shadow-lg text-xs font-medium opacity-85", children: tstringPreview(rows[activePos.rowIdx].buttons[activePos.btnIdx].title, 12) || 'Button' })) : null })] }), _jsxs(Button, { variant: "outline", size: "sm", className: "text-xs", onClick: addRow, children: [_jsx(Plus, { className: "h-3 w-3 mr-1" }), " Add row"] })] })), editingButton && rows[editingButton.rowIdx]?.buttons[editingButton.btnIdx] && (_jsx(ButtonEditModal, { button: rows[editingButton.rowIdx].buttons[editingButton.btnIdx], langs: langs, onSave: btn => updateButton(editingButton.rowIdx, editingButton.btnIdx, btn), onDelete: () => deleteButton(editingButton.rowIdx, editingButton.btnIdx), onClose: () => setEditingButton(null) }))] }));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=menu-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-editor.js","sourceRoot":"","sources":["../../../brahman/views/menu-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-layout.d.ts","sourceRoot":"","sources":["../../../brahman/views/page-layout.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA0H/C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,2CA4I5D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Page layout — DnD sortable list of actions
|
|
3
|
+
// Data model: command & positions are TOP-LEVEL node fields (not in a component).
|
|
4
|
+
// getComponent(node, PageConfig) returns the node itself when node.$type === 'brahman.page',
|
|
5
|
+
// so data must be on the node, not nested in node.page.
|
|
6
|
+
import { closestCenter, DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
7
|
+
import { arrayMove, SortableContext, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable';
|
|
8
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
9
|
+
import { getDefaults } from '@treenity/core/comp';
|
|
10
|
+
import { Button } from '@treenity/react/components/ui/button';
|
|
11
|
+
import { Input } from '@treenity/react/components/ui/input';
|
|
12
|
+
import { Render } from '@treenity/react/context';
|
|
13
|
+
import { set, useChildren, useNavigate, usePath } from '@treenity/react/hooks';
|
|
14
|
+
import { trpc } from '@treenity/react/trpc';
|
|
15
|
+
import { ChevronDown, ChevronRight, GripVertical, Plus, Trash2 } from 'lucide-react';
|
|
16
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
17
|
+
import { ACTION_TYPES } from '../types';
|
|
18
|
+
import { actionIcon, actionSummary } from './action-cards';
|
|
19
|
+
// ── Action palette dropdown ──
|
|
20
|
+
function ActionPalette({ onSelect }) {
|
|
21
|
+
const [open, setOpen] = useState(false);
|
|
22
|
+
const ref = useRef(null);
|
|
23
|
+
return (_jsxs("div", { className: "relative", ref: ref, children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: () => setOpen(!open), children: [_jsx(Plus, { className: "h-4 w-4 mr-1" }), " Add action"] }), open && (_jsx("div", { className: "absolute left-0 top-full mt-1 z-50 w-56 bg-popover border border-border rounded-md shadow-md py-1", children: ACTION_TYPES.map(at => (_jsxs("button", { type: "button", className: "w-full text-left px-3 py-2 text-sm hover:bg-accent flex items-center gap-2", onClick: () => { onSelect(at.type); setOpen(false); }, children: [actionIcon(at.type), at.label] }, at.type))) }))] }));
|
|
24
|
+
}
|
|
25
|
+
// ── Sortable action card ──
|
|
26
|
+
function SortableAction({ node, onRemove, onSelect, expanded, onToggle, }) {
|
|
27
|
+
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: node.$path });
|
|
28
|
+
return (_jsxs("div", { ref: setNodeRef, style: { transform: CSS.Transform.toString(transform), transition }, className: "bg-card border border-border rounded-md group hover:border-primary/50", children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-2 cursor-pointer", onClick: onToggle, children: [_jsx("div", { ...attributes, ...listeners, className: "cursor-grab text-muted-foreground hover:text-foreground", onClick: e => e.stopPropagation(), children: _jsx(GripVertical, { className: "h-4 w-4" }) }), _jsx("div", { className: "text-muted-foreground", children: expanded
|
|
29
|
+
? _jsx(ChevronDown, { className: "h-3.5 w-3.5" })
|
|
30
|
+
: _jsx(ChevronRight, { className: "h-3.5 w-3.5" }) }), _jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [actionIcon(node.$type), _jsx("span", { className: "text-xs font-medium text-muted-foreground uppercase", children: ACTION_TYPES.find(a => a.type === node.$type)?.label ?? node.$type.split('.').at(-1) }), !expanded && (_jsx("span", { className: "text-sm truncate text-foreground/60", children: actionSummary(node) }))] }), _jsx("button", { type: "button", onClick: e => { e.stopPropagation(); onSelect(); }, className: "text-muted-foreground hover:text-foreground text-[10px] opacity-0 group-hover:opacity-100", title: "Select in tree", children: "\u2197" }), _jsx("button", { type: "button", onClick: e => { e.stopPropagation(); onRemove(); }, className: "opacity-0 group-hover:opacity-100 text-muted-foreground hover:text-destructive transition-opacity", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) })] }), expanded && (_jsx("div", { className: "px-3 pb-3 border-t border-border/50 pt-3", children: _jsx(Render, { value: node }) }))] }));
|
|
31
|
+
}
|
|
32
|
+
// ── Page layout view (registered as 'brahman.page' react handler) ──
|
|
33
|
+
export function PageLayoutView({ value }) {
|
|
34
|
+
const navigate = useNavigate();
|
|
35
|
+
const node = usePath(value.$path);
|
|
36
|
+
const actionsPath = value.$path + '/_actions';
|
|
37
|
+
const children = useChildren(actionsPath, { watch: true, watchNew: true });
|
|
38
|
+
const [collapsed, setCollapsed] = useState(new Set());
|
|
39
|
+
// Read command & positions from node top-level (getComponent returns node itself)
|
|
40
|
+
const command = node?.command ?? '';
|
|
41
|
+
const positions = node?.positions ?? [];
|
|
42
|
+
// Debounced save: update local state immediately, persist after 400ms idle
|
|
43
|
+
const [localCommand, setLocalCommand] = useState(command);
|
|
44
|
+
const timerRef = useRef(undefined);
|
|
45
|
+
// Sync local state when node changes externally
|
|
46
|
+
useEffect(() => { setLocalCommand(command); }, [command]);
|
|
47
|
+
const saveNode = useCallback((patch) => {
|
|
48
|
+
if (!node)
|
|
49
|
+
return;
|
|
50
|
+
// Strip any leftover 'page' component that shouldn't exist
|
|
51
|
+
const { page: _drop, ...clean } = node;
|
|
52
|
+
set({ ...clean, ...patch });
|
|
53
|
+
}, [node]);
|
|
54
|
+
const debouncedSave = useCallback((patch) => {
|
|
55
|
+
clearTimeout(timerRef.current);
|
|
56
|
+
timerRef.current = setTimeout(() => saveNode(patch), 400);
|
|
57
|
+
}, [saveNode]);
|
|
58
|
+
// Cleanup timer on unmount
|
|
59
|
+
useEffect(() => () => clearTimeout(timerRef.current), []);
|
|
60
|
+
// Sort children by positions, append any untracked
|
|
61
|
+
const tracked = new Set(positions);
|
|
62
|
+
const sorted = [
|
|
63
|
+
...positions.map(p => children.find(c => c.$path === p)).filter((c) => !!c),
|
|
64
|
+
...children.filter(c => !tracked.has(c.$path) && c.$type?.startsWith('brahman.action.')),
|
|
65
|
+
];
|
|
66
|
+
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
|
|
67
|
+
function handleDragEnd(event) {
|
|
68
|
+
const { active, over } = event;
|
|
69
|
+
if (!over || active.id === over.id)
|
|
70
|
+
return;
|
|
71
|
+
const oldIndex = sorted.findIndex(c => c.$path === active.id);
|
|
72
|
+
const newIndex = sorted.findIndex(c => c.$path === over.id);
|
|
73
|
+
if (oldIndex === -1 || newIndex === -1)
|
|
74
|
+
return;
|
|
75
|
+
const reordered = arrayMove(sorted.map(c => c.$path), oldIndex, newIndex);
|
|
76
|
+
saveNode({ positions: reordered });
|
|
77
|
+
}
|
|
78
|
+
async function addAction(type) {
|
|
79
|
+
const id = Date.now().toString(36);
|
|
80
|
+
const childPath = `${actionsPath}/${id}`;
|
|
81
|
+
// Ensure _actions dir exists as a real node
|
|
82
|
+
await trpc.set.mutate({ node: { $path: actionsPath, $type: 'dir' } });
|
|
83
|
+
const defaults = getDefaults(type);
|
|
84
|
+
// Data on the node directly (findActionComp returns node when $type matches)
|
|
85
|
+
await trpc.set.mutate({
|
|
86
|
+
node: { $path: childPath, $type: type, ...defaults },
|
|
87
|
+
});
|
|
88
|
+
saveNode({ positions: [...positions, childPath] });
|
|
89
|
+
}
|
|
90
|
+
async function removeAction(path) {
|
|
91
|
+
await trpc.remove.mutate({ path });
|
|
92
|
+
saveNode({ positions: positions.filter(p => p !== path) });
|
|
93
|
+
}
|
|
94
|
+
function selectAction(path) {
|
|
95
|
+
navigate(path);
|
|
96
|
+
}
|
|
97
|
+
return (_jsxs("div", { className: "space-y-4 max-w-2xl", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("label", { className: "text-sm font-medium text-muted-foreground w-20", children: "Command" }), _jsx(Input, { className: "flex-1 font-mono", placeholder: "/command...", value: localCommand, onChange: e => {
|
|
98
|
+
setLocalCommand(e.target.value);
|
|
99
|
+
debouncedSave({ command: e.target.value });
|
|
100
|
+
}, onBlur: () => {
|
|
101
|
+
// Flush pending save on blur
|
|
102
|
+
clearTimeout(timerRef.current);
|
|
103
|
+
if (localCommand !== command)
|
|
104
|
+
saveNode({ command: localCommand });
|
|
105
|
+
} })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "text-[11px] font-semibold text-muted-foreground uppercase tracking-wider", children: ["Actions (", sorted.length, ")"] }), _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: sorted.map(c => c.$path), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "space-y-1", children: sorted.map(child => (_jsx(SortableAction, { node: child, onRemove: () => removeAction(child.$path), onSelect: () => selectAction(child.$path), expanded: !collapsed.has(child.$path), onToggle: () => setCollapsed(prev => {
|
|
106
|
+
const next = new Set(prev);
|
|
107
|
+
if (next.has(child.$path))
|
|
108
|
+
next.delete(child.$path);
|
|
109
|
+
else
|
|
110
|
+
next.add(child.$path);
|
|
111
|
+
return next;
|
|
112
|
+
}) }, child.$path))) }) }) }), sorted.length === 0 && (_jsx("div", { className: "text-sm text-muted-foreground text-center py-8 border border-dashed border-border rounded-md", children: "No actions yet. Add one below." }))] }), _jsx(ActionPalette, { onSelect: addAction })] }));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=page-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-layout.js","sourceRoot":"","sources":["../../../brahman/views/page-layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TString } from '../types';
|
|
2
|
+
type Props = {
|
|
3
|
+
value: TString;
|
|
4
|
+
onChange: (next: TString) => void;
|
|
5
|
+
langs?: string[];
|
|
6
|
+
rows?: number;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function TStringInput({ value, onChange, langs, rows, placeholder }: Props): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
/** Single-line TString input */
|
|
11
|
+
export declare function TStringLineInput({ value, onChange, langs, placeholder }: Omit<Props, 'rows'>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
/** Get first non-empty TString value for display */
|
|
13
|
+
export declare function tstringPreview(ts: TString | undefined, maxLen?: number): string;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=tstring-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tstring-input.d.ts","sourceRoot":"","sources":["../../../brahman/views/tstring-input.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,KAAU,EAAE,QAAQ,EAAE,KAAoB,EAAE,IAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,2CAgCxG;AAED,gCAAgC;AAChC,wBAAgB,gBAAgB,CAAC,EAAE,KAAU,EAAE,QAAQ,EAAE,KAAoB,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,2CA2BhH;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAI3E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// TString editor — tabbed multilingual text input
|
|
3
|
+
// Used by message, question, and menu button editors
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
export function TStringInput({ value = {}, onChange, langs = ['ru', 'en'], rows = 3, placeholder }) {
|
|
6
|
+
const [activeLang, setActiveLang] = useState(langs[0] ?? 'ru');
|
|
7
|
+
return (_jsxs("div", { children: [_jsx("div", { className: "flex gap-0.5 mb-1", children: langs.map(lang => (_jsxs("button", { type: "button", onClick: () => setActiveLang(lang), className: `px-2.5 py-1 text-xs font-medium uppercase rounded-t transition-colors ${activeLang === lang
|
|
8
|
+
? 'bg-muted text-foreground'
|
|
9
|
+
: 'text-muted-foreground hover:text-foreground'}`, children: [lang, value[lang] ? '' : ' *'] }, lang))) }), _jsx("textarea", { className: "w-full px-3 py-2 text-sm bg-background border border-border rounded-md resize-none outline-none focus:border-primary transition-colors", rows: rows, placeholder: placeholder ?? `Text (${activeLang})`, value: value[activeLang] ?? '', onChange: e => onChange({ ...value, [activeLang]: e.target.value }) })] }));
|
|
10
|
+
}
|
|
11
|
+
/** Single-line TString input */
|
|
12
|
+
export function TStringLineInput({ value = {}, onChange, langs = ['ru', 'en'], placeholder }) {
|
|
13
|
+
const [activeLang, setActiveLang] = useState(langs[0] ?? 'ru');
|
|
14
|
+
return (_jsxs("div", { className: "flex items-center gap-1 border border-border rounded-md overflow-hidden bg-background", children: [langs.map(lang => (_jsx("button", { type: "button", onClick: () => setActiveLang(lang), className: `px-2 py-1 text-[10px] font-medium uppercase shrink-0 ${activeLang === lang ? 'text-primary' : 'text-muted-foreground'}`, children: lang }, lang))), _jsx("input", { type: "text", className: "flex-1 px-2 py-1.5 text-sm outline-none bg-transparent", placeholder: placeholder ?? `Text (${activeLang})`, value: value[activeLang] ?? '', onChange: e => onChange({ ...value, [activeLang]: e.target.value }) })] }));
|
|
15
|
+
}
|
|
16
|
+
/** Get first non-empty TString value for display */
|
|
17
|
+
export function tstringPreview(ts, maxLen = 40) {
|
|
18
|
+
if (!ts)
|
|
19
|
+
return '';
|
|
20
|
+
const text = ts.ru || ts.en || Object.values(ts).find(v => v) || '';
|
|
21
|
+
return text.length > maxLen ? text.slice(0, maxLen) + '...' : text;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=tstring-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tstring-input.js","sourceRoot":"","sources":["../../../brahman/views/tstring-input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../cafe/seed.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { registerPrefab } from '@treenity/core/mod';
|
|
2
|
+
registerPrefab('cafe', 'seed', [
|
|
3
|
+
{ $path: 'cafe', $type: 'dir' },
|
|
4
|
+
{ $path: 'cafe/contact', $type: 'cafe.contact', recipient: 'owner@cafe.example' },
|
|
5
|
+
{ $path: 'cafe/pages', $type: 'dir' },
|
|
6
|
+
]);
|
|
7
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../cafe/seed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;IAC7B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;IAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE;IACjF,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;CACxB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../cafe/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../cafe/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../cafe/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Cafe use cases — domain types for a cafe landing page
|
|
2
|
+
import { registerType } from '@treenity/core/comp';
|
|
3
|
+
/** Mail delivery settings */
|
|
4
|
+
class CafeMailService {
|
|
5
|
+
/** @title SMTP host */
|
|
6
|
+
host = 'smtp.example.com';
|
|
7
|
+
/** @title Port */
|
|
8
|
+
port = 587;
|
|
9
|
+
/** @title Sender address @format email */
|
|
10
|
+
from = '';
|
|
11
|
+
}
|
|
12
|
+
registerType('cafe.mail', CafeMailService);
|
|
13
|
+
/** Contact form use case — receives form submissions, logs them */
|
|
14
|
+
class CafeContact {
|
|
15
|
+
/** @title Recipient @format email */
|
|
16
|
+
recipient = '';
|
|
17
|
+
/** @title Mail service */
|
|
18
|
+
mailService;
|
|
19
|
+
/** @title Last submission */
|
|
20
|
+
lastSubmission = '';
|
|
21
|
+
/** @description Submit contact form — validates and logs submission */
|
|
22
|
+
submit(data) {
|
|
23
|
+
if (!data.name || !data.email)
|
|
24
|
+
throw new Error('Name and email required');
|
|
25
|
+
// For now: store last submission on the node. Later: create child node, send notification.
|
|
26
|
+
this.lastSubmission = JSON.stringify({ ...data, at: new Date().toISOString() });
|
|
27
|
+
console.log(`[cafe:contact] → ${this.recipient}: ${data.name} <${data.email}> "${data.message}"`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
registerType('cafe.contact', CafeContact);
|
|
31
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../cafe/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,6BAA6B;AAC7B,MAAM,eAAe;IACnB,uBAAuB;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAC1B,kBAAkB;IAClB,IAAI,GAAG,GAAG,CAAC;IACX,0CAA0C;IAC1C,IAAI,GAAG,EAAE,CAAC;CACX;AACD,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAE3C,mEAAmE;AACnE,MAAM,WAAW;IACf,qCAAqC;IACrC,SAAS,GAAG,EAAE,CAAC;IACf,0BAA0B;IAC1B,WAAW,CAAmB;IAC9B,6BAA6B;IAC7B,cAAc,GAAG,EAAE,CAAC;IAEpB,uEAAuE;IACvE,MAAM,CAAC,IAAsD;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC1E,2FAA2F;QAC3F,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACpG,CAAC;CACF;AACD,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../canary/seed.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { registerPrefab } from '@treenity/core/mod';
|
|
2
|
+
registerPrefab('canary', 'seed', [
|
|
3
|
+
{ $path: 'canary', $type: 'dir' },
|
|
4
|
+
{ $path: 'canary/runner', $type: 'canary.runner' },
|
|
5
|
+
{ $path: 'sys/autostart/canary', $type: 'ref', $ref: '/canary/runner' },
|
|
6
|
+
]);
|
|
7
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../canary/seed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE;IAC/B,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;IACjC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;IAClD,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;CAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../canary/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC;AAChB,OAAO,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../canary/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC;AAChB,OAAO,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../canary/service.ts"],"names":[],"mappings":"AAIA,OAAO,iCAAiC,CAAC"}
|