diff --git a/core/http/react-ui/src/App.css b/core/http/react-ui/src/App.css index d70755c7b..f816019ae 100644 --- a/core/http/react-ui/src/App.css +++ b/core/http/react-ui/src/App.css @@ -5338,6 +5338,16 @@ select.input { .canvas-resize-handle { display: none; } .canvas-panel { width: 100% !important; max-width: none !important; } } +.canvas-header-actions { display: inline-flex; gap: var(--spacing-xs); } +/* Fullscreen: the canvas covers the viewport. */ +.canvas-panel--fullscreen { + position: fixed; + inset: 0; + width: 100% !important; + max-width: none !important; + z-index: 60; + border-left: none; +} .canvas-panel-header { display: flex; align-items: center; diff --git a/core/http/react-ui/src/components/CanvasPanel.jsx b/core/http/react-ui/src/components/CanvasPanel.jsx index 92de05d1f..b09bce35d 100644 --- a/core/http/react-ui/src/components/CanvasPanel.jsx +++ b/core/http/react-ui/src/components/CanvasPanel.jsx @@ -16,6 +16,7 @@ export default function CanvasPanel({ artifacts, selectedId, onSelect, onClose } const [width, setWidth] = useState(() => { try { const v = localStorage.getItem(WIDTH_KEY); return v ? Number(v) : null } catch { return null } }) + const [fullscreen, setFullscreen] = useState(false) const codeRef = useRef(null) const panelRef = useRef(null) @@ -149,33 +150,65 @@ export default function CanvasPanel({ artifacts, selectedId, onSelect, onClose } } return ( -