tutorialkit
tutorialkit copied to clipboard
Resizing Terminal is buggy because of the iframe
Describe the bug
The Terminal is not resizing correctly.
Link to a StackBlitz project which shows the error
https://demo.tutorialkit.dev/
Steps to reproduce
- Go to TutorialKit Demo
- Toggle the Terminal
- Try to resize the Terminal
- Sometime the resizing doesn't happens or is stuck
Expected behavior
The Terminal should resizing correctly.
Screenshots
Here's a video to show the bug
https://github.com/user-attachments/assets/1e9e2650-b5fd-40bb-8bf4-5fd1c548d2a1
Platform
- TutorialKit version: Demo
- OS: macOS
- Browser: Chromium (Brave)
- Version: 1.76
Additional context
I had this problem while making my own iframe and Terminal with panels I can resize. I fixed it by putting an overlay on the iframe when resizing. I think it’s because the iframe’s resize and mouse events stop the Terminal panel from resizing right.
Understanding of codebase:
- TutorialKit uses Xterm js to emulate terminal in browser.
- xterm’s fitAddon plugin is used to automatically resize terminal to fill the parent container
- terminal related files are in ./packages/react/src/core/Terminal
Observations:
- terminal is buggy only when we increase its height, reducing height is smooth and if height is maxed then it latches with preview section
- No issue with terminal resize when using site on mobile phone
Solutions tried:
- I tried to add a debounce to “onTerminalResize?.(terminal.cols, terminal.rows)” as it was being triggered every time we change height, I thought it's excessive repeated calls might be overloading fitAddon.fit(). But later found out that onTerminalResize is used to send new terminal dimensions to backend for rendering properties like font alignment, spacing, etc. It does not set terminal size in UI. For that “terminal.loadAddon(fitAddon);” is being used so I added debounce to it but still issue was not solved.