Only one tab at the top of the console is active at a time. The active tab is underlined.
Log reveals the level dropdown (Filter ▼) on the left.Network active, the body switches to the network-only view with match navigation (▲ ▼).The search box looks at the printed text as well as the URL, headers and body of each network request. A matched network row is expanded on the section that matched, with the hit highlighted. The query is shared with the network-only view, so it survives switching tabs.
While you scroll up to read, the list stops following new logs. It counts what piled up as N new ↓; tap it to
jump back to the bottom.
You can put any debugging information you need into a console tab. A tab with renderContent
sits after a divider, and tapping it replaces the whole body with that content.
A tab with filter becomes a filter tab that collects only the console entries that match. It sits next to Log, Network and Perf, so you can turn it on alongside them or on its own.
String and RegExp filters look at the text as it is printed: %c style strings are dropped and %s / %d are applied first. %c styling is rendered in the tab too, so a colored chip is an easy way to mark a log family.
Matched entries are rendered like every other row. Pass renderEntry to draw each entry yourself — it applies when that tab is the only one active:
LynxConsoleHandle lets you open and close the panel yourself.
Wire close() into your back-press handler to dismiss the console with the back button.
The default is { right: 16, bottom: 84 }, and each side is independent:
Once the user drags the button, the dragged position wins over initialPosition.
safeAreaInsetBottom defaults to "50px".
When the LynxView is wider than it is tall, the console opens as a panel docked to the right edge.
The layout follows the LynxView, not the device: the console measures the root on open and follows
onWindowResize, so folding or rotating switches it between the two shapes.
Because a side panel reaches the top of the screen, its content is inset by safeAreaInsetTop ("24px" by
default). Pass the status bar height of your host if that default does not fit.
Pass renderFloatingButton to replace the whole default button, including reload. Connect open to your tap event; isOpen tells you whether the panel is open. Your component controls its own appearance and position.
Use the public useFloatingButtonDrag hook inside your button component. Spread dragHandlers on the draggable wrapper and stopDragHandlers on independent controls such as reload. The hook handles touch/mouse differences and prevents a reload tap from opening the panel.
Render the transparent overlay when dragOverlayHandlers is present: it keeps receiving mouse events when the pointer leaves the button on web. Keep its z-index below the button and above page content. Do not add another bindtap={open} to the draggable wrapper; the hook handles taps.
Call hooks inside MyFloatingButton, not directly inside renderFloatingButton. The hook automatically uses LynxConsole.initialPosition. You only need useFloatingButtonDrag({ onTap: open }). An explicit hook initialPosition overrides that value; without either, it uses { right: 16, bottom: 84 }. The hook remembers the last dragged position in this runtime and shares it with the default button when anchors match.
When enabled is false, the default button appears. Omitting the prop does the same. Returning null from the renderer hides the button instead; use ref.open() from another control.