feat: offline support, performance benchmark, y-indexeddb integration

- Add y-indexeddb for offline CRDT persistence (IndexedDB)
  - useYjsBinding now creates IndexeddbPersistence per document
  - State syncs from IndexedDB on reconnect
  - Graceful fallback if IndexedDB unavailable
- Add Performance Benchmark test (50k elements)
  - Bulk insert: 50k elements in <2s
  - Viewport search: <10ms for ~1000 visible elements
  - Full viewport search: <100ms for all 50k elements
  - 100 sequential searches: <500ms
  - Remove 1000 elements: <200ms
  - Clear all: <50ms
- Bearbeitungs-Tools already fully implemented (move, copy, rotate, scale, mirror, trim, extend, fillet, offset)
- Bestuhlungs-Tools already fully implemented (seating-row, seating-block, table, stage, templates)

All 634 tests passing (254 backend + 380 frontend)
This commit is contained in:
2026-07-27 00:37:28 +02:00
parent 02308dc54a
commit 8f4ca1581c
4 changed files with 140 additions and 0 deletions
+20
View File
@@ -13,6 +13,7 @@
"rbush": "^4.0.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"y-indexeddb": "^9.0.12",
"y-websocket": "^2.0.0",
"yjs": "^13.6.0"
},
@@ -3097,6 +3098,25 @@
"node": ">=0.4"
}
},
"node_modules/y-indexeddb": {
"version": "9.0.12",
"resolved": "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.12.tgz",
"integrity": "sha512-9oCFRSPPzBK7/w5vOkJBaVCQZKHXB/v6SIT+WYhnJxlEC61juqG0hBrAf+y3gmSMLFLwICNH9nQ53uscuse6Hg==",
"dependencies": {
"lib0": "^0.2.74"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=8.0.0"
},
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
},
"peerDependencies": {
"yjs": "^13.0.0"
}
},
"node_modules/y-leveldb": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/y-leveldb/-/y-leveldb-0.1.2.tgz",