Package Exports
- @treenity/react
- @treenity/react/app/App
- @treenity/react/app/ErrorBoundary
- @treenity/react/app/Login
- @treenity/react/app/RoutedPage
- @treenity/react/app/Treenity
- @treenity/react/app/ViewPage
- @treenity/react/app/main
- @treenity/react/assets/DraftTextarea-BXFkXCrd
- @treenity/react/assets/FieldLabel-ClXe5wBe
- @treenity/react/assets/Reflect-BOmO-SNF
- @treenity/react/assets/__vite-browser-external-BH7VMd9g
- @treenity/react/assets/__vite-browser-external-CR3oAkHY
- @treenity/react/assets/actions-BhdNxKnT
- @treenity/react/assets/badge-BoU3UDV8
- @treenity/react/assets/button--z3IQIka
- @treenity/react/assets/checkbox-CJcr2us5
- @treenity/react/assets/chevron-right-BDInJVl9
- @treenity/react/assets/chunk-DECur_0Z
- @treenity/react/assets/chunk-V2S4ZYJR-C_Syj0o4
- @treenity/react/assets/client-1TJiKwNn
- @treenity/react/assets/client-6M1-zo6N
- @treenity/react/assets/client-97Nt5uNq
- @treenity/react/assets/client-B-3bjiBZ
- @treenity/react/assets/client-B8fpnML8
- @treenity/react/assets/client-Bj08AA4v
- @treenity/react/assets/client-Btw-_43K
- @treenity/react/assets/client-C1mT3zAk
- @treenity/react/assets/client-C5WM44ef
- @treenity/react/assets/client-C7W5Q2so
- @treenity/react/assets/client-CYyFDyEA
- @treenity/react/assets/client-Caa4_RvX
- @treenity/react/assets/client-Cza5nrd_
- @treenity/react/assets/client-CzzB90Wp
- @treenity/react/assets/client-D1q7ZJT7
- @treenity/react/assets/client-DIYPoffB
- @treenity/react/assets/client-DSUXEKJA
- @treenity/react/assets/client-DXAr1Ki7
- @treenity/react/assets/client-DZ4lsMSg
- @treenity/react/assets/client-Dfx5pXqF
- @treenity/react/assets/client-Du9oSxmb
- @treenity/react/assets/client-Dz7D-jkx
- @treenity/react/assets/client-Dzy897HK2
- @treenity/react/assets/client-PDBEAX7P
- @treenity/react/assets/client-n2jgqPVO
- @treenity/react/assets/client-u2-HyUMQ
- @treenity/react/assets/client-xek6Uhvv
- @treenity/react/assets/client-yw7n-fgZ
- @treenity/react/assets/clients-CUXl0EZ-
- @treenity/react/assets/clients-DZYIHKSB
- @treenity/react/assets/code-D9P5V6hl
- @treenity/react/assets/comp-SV07yiIo
- @treenity/react/assets/compiler-runtime-CTSaa4HM
- @treenity/react/assets/component-C_8M79Cm
- @treenity/react/assets/context-D-u_lhj3
- @treenity/react/assets/createLucideIcon-DbUlqiFX
- @treenity/react/assets/default-view-D003Fbth
- @treenity/react/assets/dialog-Box-s3Br
- @treenity/react/assets/dist-DRmqEOOE
- @treenity/react/assets/dist-IGGUzEuP
- @treenity/react/assets/ellipsis-mWylsW2s
- @treenity/react/assets/emotion-is-prop-valid.cjs-C7CPc5iW
- @treenity/react/assets/emscripten-module-CPIVKBXU
- @treenity/react/assets/ffi-DpRcyGEu
- @treenity/react/assets/form-fields-BBzfYhGx
- @treenity/react/assets/grip-vertical-DV-mnVaO
- @treenity/react/assets/handle-DWAiDVAu
- @treenity/react/assets/helpers-aO5ZgOHv
- @treenity/react/assets/immer-CpZ8-LQB
- @treenity/react/assets/index-CrdDN7wW
- @treenity/react/assets/input-tTtgcZvp
- @treenity/react/assets/module-ES6BEMUI-Dsq7VAU8
- @treenity/react/assets/needs-gWfJr5Qn
- @treenity/react/assets/node-utils-DJogTi3q
- @treenity/react/assets/plus-C8E3XxuM
- @treenity/react/assets/popover-6J-OgZoK
- @treenity/react/assets/preload-helper-eAV8hweq
- @treenity/react/assets/proxy-QEkuRd2b
- @treenity/react/assets/react-DLk_omft
- @treenity/react/assets/react-dom-Buf1BSqj
- @treenity/react/assets/react-three-fiber.esm-C87uU2TO
- @treenity/react/assets/rnnoise-effect-By0RQ0h7
- @treenity/react/assets/schema-loader-C_SwlIsQ
- @treenity/react/assets/search-DpOOa0SY
- @treenity/react/assets/select-DUfxSW38
- @treenity/react/assets/sortable.esm-taeVpWFm
- @treenity/react/assets/src-C_x9eWEg
- @treenity/react/assets/src-D9TRqwFz
- @treenity/react/assets/src-DOcTQPhI
- @treenity/react/assets/src-DPjD6hoQ
- @treenity/react/assets/string-utils-DQWa8mOn
- @treenity/react/assets/textarea-BfOO4lUA
- @treenity/react/assets/triangle-alert-D76bgcnV
- @treenity/react/assets/types-B77jS4_R
- @treenity/react/assets/types-BNF9eDYb
- @treenity/react/assets/types-BcbPYXp_
- @treenity/react/assets/types-Bcm5LQew
- @treenity/react/assets/types-BldruHYi
- @treenity/react/assets/types-Bumj0T50
- @treenity/react/assets/types-C1djhQu1
- @treenity/react/assets/types-C2SLnrzO
- @treenity/react/assets/types-CF_45_UT
- @treenity/react/assets/types-CS_zmHmO
- @treenity/react/assets/types-CbGEu6BQ
- @treenity/react/assets/types-CgoQsMDa
- @treenity/react/assets/types-Cik16yZk
- @treenity/react/assets/types-CkmWTOGT
- @treenity/react/assets/types-D2qYmTz2
- @treenity/react/assets/types-Dw4Eh4Yh2
- @treenity/react/assets/types-Dz_tK9k6
- @treenity/react/assets/types-wlcViYdH
- @treenity/react/assets/view-BN81Mf4t
- @treenity/react/assets/view-R7H8Rf5V
- @treenity/react/assets/with-selector-DtN2H9jz
- @treenity/react/assets/x-BBVbeQE3
- @treenity/react/bind/computed
- @treenity/react/bind/engine
- @treenity/react/bind/eval
- @treenity/react/bind/hook
- @treenity/react/bind/parse
- @treenity/react/bind/pipes
- @treenity/react/components/ConfirmDialog
- @treenity/react/components/ConfirmPopover
- @treenity/react/components/PathBreadcrumb
- @treenity/react/components/lib/utils
- @treenity/react/components/ui/accordion
- @treenity/react/components/ui/alert-dialog
- @treenity/react/components/ui/badge
- @treenity/react/components/ui/breadcrumb
- @treenity/react/components/ui/button
- @treenity/react/components/ui/card
- @treenity/react/components/ui/checkbox
- @treenity/react/components/ui/collapsible
- @treenity/react/components/ui/command
- @treenity/react/components/ui/dialog
- @treenity/react/components/ui/drawer
- @treenity/react/components/ui/dropdown-menu
- @treenity/react/components/ui/form-field
- @treenity/react/components/ui/input
- @treenity/react/components/ui/label
- @treenity/react/components/ui/pagination
- @treenity/react/components/ui/popover
- @treenity/react/components/ui/progress
- @treenity/react/components/ui/resizable
- @treenity/react/components/ui/scroll-area
- @treenity/react/components/ui/select
- @treenity/react/components/ui/separator
- @treenity/react/components/ui/sheet
- @treenity/react/components/ui/skeleton
- @treenity/react/components/ui/slider
- @treenity/react/components/ui/sonner
- @treenity/react/components/ui/switch
- @treenity/react/components/ui/table
- @treenity/react/components/ui/tabs
- @treenity/react/components/ui/textarea
- @treenity/react/components/ui/toggle
- @treenity/react/components/ui/toggle-group
- @treenity/react/components/ui/tooltip
- @treenity/react/context
- @treenity/react/context/index
- @treenity/react/draft
- @treenity/react/editor/AclEditor
- @treenity/react/editor/ActionCards
- @treenity/react/editor/ComponentSection
- @treenity/react/editor/Inspector
- @treenity/react/editor/Inspector.css
- @treenity/react/editor/NodeEditor
- @treenity/react/editor/Tree
- @treenity/react/editor/Tree.css
- @treenity/react/hooks
- @treenity/react/index
- @treenity/react/lib/minimd
- @treenity/react/lib/minimd.css
- @treenity/react/lib/sanitize-href
- @treenity/react/lib/string-utils
- @treenity/react/lib/to-plain
- @treenity/react/lib/use-debounce
- @treenity/react/lib/utils
- @treenity/react/mod-errors
- @treenity/react/mods/clients
- @treenity/react/mods/editor-ui/DraftTextarea
- @treenity/react/mods/editor-ui/FieldLabel
- @treenity/react/mods/editor-ui/JsonEditor
- @treenity/react/mods/editor-ui/client
- @treenity/react/mods/editor-ui/default-edit
- @treenity/react/mods/editor-ui/default-view
- @treenity/react/mods/editor-ui/dir-view
- @treenity/react/mods/editor-ui/editor-ui.css
- @treenity/react/mods/editor-ui/empty-placeholder
- @treenity/react/mods/editor-ui/form-field
- @treenity/react/mods/editor-ui/form-fields
- @treenity/react/mods/editor-ui/layout-view
- @treenity/react/mods/editor-ui/list-items
- @treenity/react/mods/editor-ui/node-utils
- @treenity/react/mods/editor-ui/type-picker
- @treenity/react/mods/editor-ui/user-view
- @treenity/react/mods/servers
- @treenity/react/mods/treenity/client
- @treenity/react/mods/treenity/groups/index
- @treenity/react/mods/treenity/preview
- @treenity/react/mods/treenity/ref-view
- @treenity/react/mods/treenity/root-view
- @treenity/react/mods/treenity/schema-form
- @treenity/react/mods/treenity/type-view
- @treenity/react/navigate
- @treenity/react/root.css
- @treenity/react/schema-loader
- @treenity/react/symbols
- @treenity/react/tree/auto-save
- @treenity/react/tree/cache
- @treenity/react/tree/client
- @treenity/react/tree/client-tree
- @treenity/react/tree/events
- @treenity/react/tree/fiber-tree
- @treenity/react/tree/idb
- @treenity/react/tree/load-client
- @treenity/react/tree/on-change
- @treenity/react/tree/rebase
- @treenity/react/tree/remote-tree
- @treenity/react/tree/trpc
- @treenity/react/ui/accordion
- @treenity/react/ui/alert-dialog
- @treenity/react/ui/badge
- @treenity/react/ui/breadcrumb
- @treenity/react/ui/button
- @treenity/react/ui/card
- @treenity/react/ui/checkbox
- @treenity/react/ui/collapsible
- @treenity/react/ui/command
- @treenity/react/ui/dialog
- @treenity/react/ui/drawer
- @treenity/react/ui/dropdown-menu
- @treenity/react/ui/form-field
- @treenity/react/ui/input
- @treenity/react/ui/label
- @treenity/react/ui/pagination
- @treenity/react/ui/popover
- @treenity/react/ui/progress
- @treenity/react/ui/resizable
- @treenity/react/ui/scroll-area
- @treenity/react/ui/select
- @treenity/react/ui/separator
- @treenity/react/ui/sheet
- @treenity/react/ui/skeleton
- @treenity/react/ui/slider
- @treenity/react/ui/sonner
- @treenity/react/ui/switch
- @treenity/react/ui/table
- @treenity/react/ui/tabs
- @treenity/react/ui/textarea
- @treenity/react/ui/toggle
- @treenity/react/ui/toggle-group
- @treenity/react/ui/tooltip
- @treenity/react/view
- @treenity/react/vite-plugin-treenity
Readme
@treenity/react
React binding for Treenity — reactive hooks, admin UI, and component rendering.
Built on top of @treenity/core. Provides hooks for reading and mutating tree nodes, a context-based component renderer, and a full admin interface with node editor, inspector, and tree browser.
Install
npm install @treenity/react @treenity/core react react-domHooks
import { usePath, useChildren } from '@treenity/react/hooks';
import { TodoItem } from './types';
// Typed proxy — reactive data + action methods
const item = usePath('/todo/list/1', TodoItem);
item.title; // reactive read
await item.toggle(); // tRPC mutation → Immer patch → SSE broadcast
// URI-based read (returns raw data)
const node = usePath('/todo/list/1');
// Reactive children list
const children = useChildren('/todo/list');Available Hooks
| Hook | Description |
|---|---|
usePath(uri) |
Reactive node read by URI string |
usePath(path, Class, key?) |
TypeProxy — reactive fields + typed action methods |
useChildren(path, opts?) |
Reactive children list with optional query filter |
useCanWrite(path) |
Check write permission for current user |
useNavigate() |
Navigation function for tree paths |
useCurrentNode() |
Current node from context |
useTreeContext() |
Current render context name |
useSchema(type) |
JSON schema for a type |
useReg(type, context) |
Resolve registered context handler |
Component Rendering
Register React views per type + context:
import { register } from '@treenity/core';
register('todo.item', 'react', ({ value, onChange }) => (
<div>
<span>{value.title}</span>
<button onClick={() => onChange({ ...value, done: !value.done })}>
{value.done ? 'Undo' : 'Done'}
</button>
</div>
));Render any node with automatic type resolution:
import { Render } from '@treenity/react/context';
<Render value={node} onChange={handleChange} />UI Components
Ships with shadcn/ui components (Tailwind CSS v4):
import { Button } from '@treenity/react/ui/button';
import { Slider } from '@treenity/react/ui/slider';Admin UI
<App /> provides a full admin interface: tree browser, node editor, inspector, ACL editor, login. Used as the default frontend during development.
Links
License
Licensed under FSL-1.1-MIT. Free to use for any purpose. Converts to MIT automatically after two years from each release date.