Label Positioning Fixes: - Fix labels accounting for mesh scaling using maximumWorld coordinates - Labels now properly positioned on scaled objects (spheres, boxes, etc.) - Restore world→local coordinate transformation in updateLabelPosition Billboard Mode Implementation: - Add configurable label rendering modes: fixed, billboard, dynamic, distance-based - Implement billboard mode (labels always face camera using BILLBOARDMODE_Y) - Add label rendering mode to AppConfig with default 'billboard' - Add UI selector in ConfigModal for label rendering mode - Observable pattern updates all existing labels when mode changes XR Entry Positioning Fix: - Synchronize desktop camera position to platform before entering XR - Transfer camera world position and rotation to prevent scene shift - Reset physics velocity on XR entry to prevent drift - Add debug logging for position synchronization Config System Architecture Fix: - Create singleton appConfigInstance to ensure single source of truth - Update DiagramObject to use singleton instead of creating instances - Update DiagramManager to use singleton - Fix ConfigModal to update AppConfig directly (was only updating legacy config) - ConfigModal now triggers Observable notifications via appConfigInstance setters - Maintain legacy config for backward compatibility - Fixes issue where label rendering mode changes didn't take effect Files Modified: - src/diagram/diagramObject.ts - Label positioning, billboard mode, singleton config - src/diagram/diagramManager.ts - Use singleton config - src/util/appConfig.ts - Add labelRenderingMode, export singleton - src/util/appConfigType.ts - Add LabelRenderingMode type - src/react/pages/configModal.tsx - Update AppConfig directly, add label mode UI - src/util/functions/groundMeshObserver.ts - Add camera position sync on XR entry - public/api/user/features - Update test config - package.json - Version bump 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
27 lines
530 B
Plaintext
27 lines
530 B
Plaintext
{
|
|
"tier": "none",
|
|
"pages": {
|
|
"examples": false,
|
|
"documentation": false,
|
|
"pricing": false,
|
|
"vrExperience": true
|
|
},
|
|
"features": {
|
|
"createDiagram": false,
|
|
"createFromTemplate": false,
|
|
"manageDiagrams": false,
|
|
"shareCollaborate": false,
|
|
"privateDesigns": false,
|
|
"encryptedDesigns": false,
|
|
"editData": false,
|
|
"config": true,
|
|
"enterImmersive": true,
|
|
"launchMetaQuest": true
|
|
},
|
|
"limits": {
|
|
"maxDiagrams": 0,
|
|
"maxCollaborators": 0,
|
|
"storageQuotaMB": 0
|
|
}
|
|
}
|