diff --git a/.changeset/rare-moles-rest.md b/.changeset/rare-moles-rest.md
new file mode 100644
index 00000000..9c23c530
--- /dev/null
+++ b/.changeset/rare-moles-rest.md
@@ -0,0 +1,8 @@
+---
+'@tanstack/react-devtools': minor
+'@tanstack/devtools': minor
+---
+
+added optional trigger component in config
+
+removed trigger image setting completely
diff --git a/examples/solid/basic/src/index.tsx b/examples/solid/basic/src/index.tsx
index acd824cb..c9ac6b6e 100644
--- a/examples/solid/basic/src/index.tsx
+++ b/examples/solid/basic/src/index.tsx
@@ -19,6 +19,9 @@ function App() {
hello world
,
+ }}
plugins={[
{
name: 'TanStack Query',
diff --git a/packages/devtools/src/components/trigger.tsx b/packages/devtools/src/components/trigger.tsx
index a2944e79..07dc6eba 100644
--- a/packages/devtools/src/components/trigger.tsx
+++ b/packages/devtools/src/components/trigger.tsx
@@ -1,37 +1,49 @@
-import { Show, createMemo } from 'solid-js'
+import { Show, createEffect, createMemo, createSignal } from 'solid-js'
import clsx from 'clsx'
import { useDevtoolsSettings } from '../context/use-devtools-context'
import { useStyles } from '../styles/use-styles'
import TanStackLogo from './tanstack-logo.png'
import type { Accessor } from 'solid-js'
-export const Trigger = ({
- isOpen,
- setIsOpen,
- image = TanStackLogo,
-}: {
+export const Trigger = (props: {
isOpen: Accessor
setIsOpen: (isOpen: boolean) => void
- image: string
}) => {
const { settings } = useDevtoolsSettings()
+ const [containerRef, setContainerRef] = createSignal()
const styles = useStyles()
const buttonStyle = createMemo(() => {
return clsx(
styles().mainCloseBtn,
styles().mainCloseBtnPosition(settings().position),
- styles().mainCloseBtnAnimation(isOpen(), settings().hideUntilHover),
+ styles().mainCloseBtnAnimation(props.isOpen(), settings().hideUntilHover),
)
})
+
+ createEffect(() => {
+ const triggerComponent = settings().customTrigger
+ const el = containerRef()
+ if (triggerComponent && el) {
+ triggerComponent(el, {
+ theme: settings().theme,
+ })
+ }
+ })
+
return (
)
diff --git a/packages/devtools/src/context/devtools-store.ts b/packages/devtools/src/context/devtools-store.ts
index 8ff46b39..da30780a 100644
--- a/packages/devtools/src/context/devtools-store.ts
+++ b/packages/devtools/src/context/devtools-store.ts
@@ -18,6 +18,10 @@ type TriggerPosition =
| 'middle-left'
| 'middle-right'
+type TriggerProps = {
+ theme: 'light' | 'dark'
+}
+
export type DevtoolsStore = {
settings: {
/**
@@ -61,15 +65,17 @@ export type DevtoolsStore = {
* @default "dark"
*/
theme: 'light' | 'dark'
- /**
- * The image used for the dev tools trigger
- * @default TanStackLogo
- */
- triggerImage: string
+
/**
* Whether the trigger should be completely hidden or not (you can still open with the hotkey)
*/
triggerHidden?: boolean
+ /**
+ * An optional custom function to render the dev tools trigger component.
+ * If provided, it replaces the default trigger button.
+ * @default undefined
+ */
+ customTrigger?: (el: HTMLElement, props: TriggerProps) => void
}
state: {
activeTab: TabName
@@ -95,8 +101,8 @@ export const initialState: DevtoolsStore = {
window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light',
- triggerImage: '',
triggerHidden: false,
+ customTrigger: undefined,
},
state: {
activeTab: 'plugins',
diff --git a/packages/devtools/src/devtools.tsx b/packages/devtools/src/devtools.tsx
index 9ca75eaf..4ee929fd 100644
--- a/packages/devtools/src/devtools.tsx
+++ b/packages/devtools/src/devtools.tsx
@@ -175,11 +175,7 @@ export default function DevTools() {
: true
}
>
-
+
(panelRef = ref)}
diff --git a/packages/devtools/src/tabs/settings-tab.tsx b/packages/devtools/src/tabs/settings-tab.tsx
index b4ac5fd3..147e8f7d 100644
--- a/packages/devtools/src/tabs/settings-tab.tsx
+++ b/packages/devtools/src/tabs/settings-tab.tsx
@@ -79,13 +79,7 @@ export const SettingsTab = () => {
}
checked={settings().triggerHidden}
/>
- setSettings({ triggerImage: value })}
- />
+