-
-
Notifications
You must be signed in to change notification settings - Fork 98
feat(devtools): rainbow trigger, persist strip fold, and pane gutters #510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| '@tanstack/devtools': patch | ||
| --- | ||
|
|
||
| Persist the folded plugin strip across reloads so it does not steal height back on refresh. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| '@tanstack/devtools': patch | ||
| --- | ||
|
|
||
| Use the rainbow palm favicon as the default trigger mark, default the trigger to floating, and make pane gutters follow the pointer instead of compounding each drag move. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| --- | ||
| '@tanstack/devtools': patch | ||
| '@tanstack/devtools-ui': patch | ||
| --- | ||
|
|
||
| Give plugin tabs a small inset in a rounded card, keep pane gutters visible at rest, and theme the panel scrollbars. | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -146,26 +146,26 @@ The devtools shell is a Solid.js application that renders the entire devtools UI | |||||
| - **`setConfig(config)`** -- Updates configuration and plugins at runtime. Plugins are reactive: adding or removing them updates the tab bar immediately. | ||||||
|
|
||||||
| The shell renders: | ||||||
| - A **trigger button** (the floating devtools toggle, customizable or replaceable) | ||||||
| - A **trigger button** (the floating rainbow palm mark, customizable or replaceable) | ||||||
| - A **resizable Workbench panel** (docked to the top or bottom of the viewport, resizable via pointer or keyboard) | ||||||
| - A compact **36px TanStack Devtools header** with Plugins, Marketplace, SEO, and Settings destinations. The palm emblem is inline SVG, so it stays sharp and takes its colour from the theme. | ||||||
| - A fixed-height **44px secondary strip** for plugin and SEO navigation. It scrolls horizontally when space is limited, and a pull tab on its bottom edge folds it away behind the header. Folding changes nothing else — the panel keeps its height and the destination content keeps running — so the tab is rendered only on the destinations that have a strip. | ||||||
| - A separate **Marketplace** header tab that does not disturb mounted plugin panes | ||||||
| - A **settings panel** for theme, hotkeys, position, and other preferences | ||||||
| - Up to three simultaneous **plugin mount frames**, divided into equal widths by static separators | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Describe the pane separators as resizable. “Static separators” conflicts with the documented pane-resize behavior. Replace this text with wording that describes resizable splitters between plugin mount frames. Proposed documentation change-- Up to three simultaneous **plugin mount frames**, divided into equal widths by static separators
+- Up to three simultaneous **plugin mount frames**, separated by resizable splitters📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
|
|
||||||
| Settings and UI state (panel size, position, active tab, theme) are persisted in `localStorage` so they survive page reloads. | ||||||
| Settings and UI state (panel size, position, active tab, theme, and whether the secondary strip is folded) are persisted in `localStorage` so they survive page reloads. | ||||||
|
|
||||||
| The core shell owns the Workbench header, navigation, mount-frame geometry, separators, and surrounding light/dark surfaces. Each external plugin owns everything inside its mount target; core styling deliberately does not reach into plugin descendants. Detaching the Workbench uses a fixed `100vh` Picture-in-Picture layout and restores the stored docked height when reattached. | ||||||
|
|
||||||
| #### Workbench surfaces and gutters | ||||||
|
|
||||||
| Two rules keep the shell reading as one surface: | ||||||
|
|
||||||
| - **Chrome versus canvas.** The header and every secondary strip paint the brand surface (cream in light mode, near-black in dark mode) and close with a translucent ink hairline. Destination content and plugin mount frames paint the workspace surface. A plugin pane can paint any colour it likes, so the separator between panes uses a mid-tone border that stays visible against both. | ||||||
| - **Chrome versus canvas.** The header and every secondary strip paint the brand surface (cream in light mode, near-black in dark mode) and close with a translucent ink hairline. Destination content and plugin mount frames paint the workspace surface. A plugin pane can paint any colour it likes. The resize gutter between panes is invisible at rest and paints a line on hover or keyboard focus. | ||||||
| - **One gutter.** `WORKBENCH_GUTTER` (16px, or `WORKBENCH_GUTTER_NARROW` at 12px below 430px) is the single inline gutter. The header, the strips, and each destination's content all start there, so the left edge is one column instead of three. `MainPanel withPadding` uses the same value. | ||||||
|
|
||||||
| Colour comes from the semantic theme only. Raw hex values in core-owned source are rejected by `tests/semantic-color-usage.test.ts` unless they carry a narrow, path-scoped `semantic-color-exempt` marker — currently only third-party network marks and the source-inspector highlight alpha. Status colours (success, warning, error, info) mark real state; identity accents do not compete with them, so a card that is both featured and active keeps the neutral outline and lets its badge say which it is. | ||||||
| Colour comes from the semantic theme only. Raw hex values in core-owned source are rejected by `tests/semantic-color-usage.test.ts` unless they carry a narrow, path-scoped `semantic-color-exempt` marker. The current exemptions are third-party network marks, the source-inspector highlight alpha, and the trigger rainbow mark. Status colours (success, warning, error, info) mark real state; identity accents do not compete with them, so a card that is both featured and active keeps the neutral outline and lets its badge say which it is. | ||||||
|
|
||||||
| ### @tanstack/devtools-ui -- Component Library | ||||||
|
|
||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -18,7 +18,8 @@ close it, so there is only ever one control for it. | |||||||||
| same zones as below. Dropping onto an empty workspace gives it the whole area. | ||||||||||
|
|
||||||||||
| The strip folds itself away when everything is open, and comes back on its own the | ||||||||||
| moment a plugin closes and returns to it. | ||||||||||
| moment a plugin closes and returns to it. A fold you make with the pull tab is | ||||||||||
| kept across reloads. | ||||||||||
|
|
||||||||||
| ## Arranging panes | ||||||||||
|
|
||||||||||
|
|
@@ -50,8 +51,9 @@ or bottom edge stack instead. Drag the panel taller first if you want rows. | |||||||||
|
|
||||||||||
| ## Resizing | ||||||||||
|
|
||||||||||
| Drag the gutter between two panes. One pane grows by exactly what the other loses, | ||||||||||
| and neither can shrink past a readable minimum. | ||||||||||
| Each pane sits in a rounded card with a small gutter from the workspace edge. | ||||||||||
| Drag between cards to resize: the resize line appears on hover. One pane grows | ||||||||||
| by exactly what the other loses, and neither can shrink past a readable minimum. | ||||||||||
|
Comment on lines
+55
to
+56
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Document keyboard-focus visibility for the resize line. The resize line also appears on keyboard focus. Include this behavior so keyboard users receive correct instructions. Proposed documentation change-Drag between cards to resize: the resize line appears on hover.
+Drag between cards to resize: the resize line appears on hover or keyboard focus.📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
|
|
||||||||||
| ## Keyboard | ||||||||||
|
|
||||||||||
|
|
||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Correct the resting-gutter release note.
The separator is transparent at rest. The PR behavior shows its resize line on hover or focus. Replace “keep pane gutters visible at rest” with wording that describes hidden resize lines or transparent resting gutters.
🤖 Prompt for AI Agents