From dd82bcde10326ef87de048dfd54e8a79475b3131 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 30 Oct 2025 13:08:43 +0100 Subject: [PATCH 1/2] add custom trigger handling --- .changeset/hungry-tables-strive.md | 6 +++++ packages/devtools-client/src/index.ts | 3 +++ packages/devtools/src/devtools.tsx | 33 +++++++++++++++++++++++---- pnpm-lock.yaml | 2 ++ 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 .changeset/hungry-tables-strive.md diff --git a/.changeset/hungry-tables-strive.md b/.changeset/hungry-tables-strive.md new file mode 100644 index 00000000..674e95ab --- /dev/null +++ b/.changeset/hungry-tables-strive.md @@ -0,0 +1,6 @@ +--- +'@tanstack/devtools-client': patch +'@tanstack/devtools': patch +--- + +add the ability to open up devtools programatically diff --git a/packages/devtools-client/src/index.ts b/packages/devtools-client/src/index.ts index 00dc0572..c0d33534 100644 --- a/packages/devtools-client/src/index.ts +++ b/packages/devtools-client/src/index.ts @@ -83,6 +83,9 @@ interface EventMap { 'tanstack-devtools-core:package-json-updated': { packageJson: PackageJson | null } + 'tanstack-devtools-core:trigger-toggled': { + isOpen: boolean + } } export class DevtoolsEventClient extends EventClient { diff --git a/packages/devtools/src/devtools.tsx b/packages/devtools/src/devtools.tsx index 9ca75eaf..dcce9962 100644 --- a/packages/devtools/src/devtools.tsx +++ b/packages/devtools/src/devtools.tsx @@ -1,7 +1,8 @@ -import { Show, createEffect, createSignal } from 'solid-js' +import { Show, createEffect, createSignal, onCleanup } from 'solid-js' import { createShortcut } from '@solid-primitives/keyboard' import { Portal } from 'solid-js/web' import { ThemeContextProvider } from '@tanstack/devtools-ui' +import { devtoolsEventClient } from '@tanstack/devtools-client' import { useDevtoolsSettings, useHeight, @@ -31,14 +32,36 @@ export default function DevTools() { const pip = usePiPWindow() let panelRef: HTMLDivElement | undefined = undefined const [isResizing, setIsResizing] = createSignal(false) + const toggleOpen = () => { if (pip().pipWindow) { return } const open = isOpen() - setIsOpen(!open) - setPersistOpen(!open) + const newState = !open + setIsOpen(newState) + setPersistOpen(newState) + + // Emit event when user toggles devtools + devtoolsEventClient.emit('trigger-toggled', { isOpen: newState }) } + + // Listen for trigger-toggled events to control devtools + createEffect(() => { + const unsubscribe = devtoolsEventClient.on('trigger-toggled', (event) => { + if (pip().pipWindow) { + return + } + const payload = event.payload as unknown as { isOpen: boolean } + const shouldBeOpen = payload.isOpen + if (shouldBeOpen !== isOpen()) { + setIsOpen(shouldBeOpen) + setPersistOpen(shouldBeOpen) + } + }) + + onCleanup(unsubscribe) + }) // Used to resize the panel const handleDragStart = ( panelElement: HTMLDivElement | undefined, @@ -100,10 +123,10 @@ export default function DevTools() { run() if (typeof window !== 'undefined') { - ;(pip().pipWindow ?? window).addEventListener('resize', run) + ; (pip().pipWindow ?? window).addEventListener('resize', run) return () => { - ;(pip().pipWindow ?? window).removeEventListener('resize', run) + ; (pip().pipWindow ?? window).removeEventListener('resize', run) if (rootEl()?.parentElement && typeof previousValue === 'string') { setRootEl((prev) => { // prev!.parentElement!.style.paddingBottom = previousValue diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5016896..00930f1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -388,6 +388,8 @@ importers: specifier: ^4.2.4 version: 4.2.4 + examples/react/start/generated/prisma: {} + examples/react/time-travel: dependencies: '@tanstack/devtools-event-client': From 96fe146b91d7aade7c75339381f8abdf13c1fada Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:09:41 +0000 Subject: [PATCH 2/2] ci: apply automated fixes --- packages/devtools/src/devtools.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devtools/src/devtools.tsx b/packages/devtools/src/devtools.tsx index dcce9962..921d1718 100644 --- a/packages/devtools/src/devtools.tsx +++ b/packages/devtools/src/devtools.tsx @@ -123,10 +123,10 @@ export default function DevTools() { run() if (typeof window !== 'undefined') { - ; (pip().pipWindow ?? window).addEventListener('resize', run) + ;(pip().pipWindow ?? window).addEventListener('resize', run) return () => { - ; (pip().pipWindow ?? window).removeEventListener('resize', run) + ;(pip().pipWindow ?? window).removeEventListener('resize', run) if (rootEl()?.parentElement && typeof previousValue === 'string') { setRootEl((prev) => { // prev!.parentElement!.style.paddingBottom = previousValue