apps/desktop/src/electron/ElectronProtocol.test.ts | 11 +- apps/desktop/src/electron/ElectronProtocol.ts | 3 +- apps/desktop/src/ipc/channels.ts | 1 + apps/desktop/src/preload.ts | 5 + apps/desktop/src/window/DesktopWindow.test.ts | 25 +++ apps/desktop/src/window/DesktopWindow.ts | 4 + apps/web/src/components/RightPanelTabs.tsx | 37 +++- apps/web/src/components/device/DeviceControlsRail.tsx | 308 ++++++++++++++++++++++++++ apps/web/src/components/device/DevicePanel.tsx | 154 ++----------- apps/web/src/components/device/DevicePhoneViewport.tsx | 151 +++++++++++++ apps/web/src/components/device/DeviceStreamView.tsx | 375 ++++++++++++++++++++++---------- apps/web/src/components/device/DeviceToolsPanel.tsx | 103 ++------- apps/web/src/components/device/DeviceWorkspace.tsx | 131 +++++++++++ apps/web/src/components/device/deviceFrameLayout.test.ts | 9 + apps/web/src/components/device/deviceFrameLayout.ts | 8 + apps/web/src/components/device/deviceModels.ts | 35 +++ apps/web/src/components/device/models/ipad-pro-13-m5-magic-keyboard.glb | Bin 0 -> 2341888 bytes apps/web/src/components/device/models/ipad-pro-13-m5.glb | Bin 0 -> 1815876 bytes apps/web/src/components/device/models/iphone-18-pro-max.glb | Bin 0 -> 2399028 bytes apps/web/src/components/device/models/iphone-18-pro.glb | Bin 0 -> 2422548 bytes apps/web/src/components/device/models/sources.json | 49 +++++ apps/web/src/components/device/phoneTrackpad.test.ts | 105 +++++++++ apps/web/src/components/device/phoneTrackpad.ts | 137 ++++++++++++ apps/web/src/components/device/useDeviceControls.test.tsx | 232 ++++++++++++++++++++ apps/web/src/components/device/useDeviceControls.ts | 130 +++++++++++ packages/client-runtime/package.json | 26 +++ packages/client-runtime/src/device/deviceFraming.test.ts | 53 +++++ packages/client-runtime/src/device/deviceFraming.ts | 82 +++++++ packages/client-runtime/src/device/deviceMotion.test.ts | 175 +++++++++++++++ packages/client-runtime/src/device/deviceMotion.ts | 279 ++++++++++++++++++++++++ packages/client-runtime/src/device/deviceViewSnap.ts | 26 +++ packages/client-runtime/src/device/frame.test.ts | 32 +++ packages/client-runtime/src/device/frame.ts | 24 ++ packages/client-runtime/src/device/model.test.ts | 125 +++++++++++ packages/client-runtime/src/device/model.ts | 87 ++++++++ packages/client-runtime/src/device/modelScene.test.ts | 121 +++++++++++ packages/client-runtime/src/device/modelScene.ts | 118 ++++++++++ packages/client-runtime/src/device/phoneInteraction.test.ts | 105 +++++++++ packages/client-runtime/src/device/phoneInteraction.ts | 83 +++++++ packages/client-runtime/src/device/phoneScene.test.ts | 150 +++++++++++++ packages/client-runtime/src/device/phoneScene.ts | 302 +++++++++++++++++++++++++ packages/client-runtime/src/device/phoneViewer.test.ts | 350 +++++++++++++++++++++++++++++ packages/client-runtime/src/device/phoneViewer.ts | 332 ++++++++++++++++++++++++++++ packages/client-runtime/src/device/renderScheduler.test.ts | 27 +++ packages/client-runtime/src/device/renderScheduler.ts | 23 ++ packages/client-runtime/src/device/screenshot.test.ts | 50 +++++ packages/client-runtime/src/device/screenshot.ts | 30 +++ packages/client-runtime/src/device/shapeProfile.test.ts | 27 +++ packages/client-runtime/src/device/shapeProfile.ts | 124 +++++++++++ packages/client-runtime/src/device/stream.test.ts | 3 + packages/client-runtime/src/device/stream.ts | 25 ++- packages/client-runtime/src/device/streamFrames.test.ts | 97 +++++++++ packages/contracts/src/ipc.ts | 1 + pnpm-lock.yaml | 54 +++++ scripts/convert-device-model.py | 108 +++++++++ 55 files changed, 4704 insertions(+), 348 deletions(-)