@tanstack/devtools 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk/CEHNENNI.js +251 -0
- package/dist/{esm/core.js → dev.js} +10 -12
- package/dist/devtools/DJF65R3Y.js +1674 -0
- package/dist/devtools/ITBBRMTQ.js +1966 -0
- package/dist/index.d.ts +168 -0
- package/dist/index.js +76 -0
- package/dist/server.js +44 -0
- package/package.json +21 -12
- package/src/core.tsx +3 -0
- package/dist/esm/components/content-panel.d.ts +0 -6
- package/dist/esm/components/content-panel.js +0 -32
- package/dist/esm/components/content-panel.js.map +0 -1
- package/dist/esm/components/main-panel.d.ts +0 -6
- package/dist/esm/components/main-panel.js +0 -42
- package/dist/esm/components/main-panel.js.map +0 -1
- package/dist/esm/components/tab-content.d.ts +0 -2
- package/dist/esm/components/tab-content.js +0 -23
- package/dist/esm/components/tab-content.js.map +0 -1
- package/dist/esm/components/tabs.d.ts +0 -5
- package/dist/esm/components/tabs.js +0 -75
- package/dist/esm/components/tabs.js.map +0 -1
- package/dist/esm/components/trigger.d.ts +0 -5
- package/dist/esm/components/trigger.js +0 -31
- package/dist/esm/components/trigger.js.map +0 -1
- package/dist/esm/constants.d.ts +0 -2
- package/dist/esm/constants.js +0 -7
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/context/devtools-context.d.ts +0 -62
- package/dist/esm/context/devtools-context.js +0 -77
- package/dist/esm/context/devtools-context.js.map +0 -1
- package/dist/esm/context/devtools-store.d.ts +0 -59
- package/dist/esm/context/devtools-store.js +0 -29
- package/dist/esm/context/devtools-store.js.map +0 -1
- package/dist/esm/context/draw-context.d.ts +0 -13
- package/dist/esm/context/draw-context.js +0 -55
- package/dist/esm/context/draw-context.js.map +0 -1
- package/dist/esm/context/pip-context.d.ts +0 -14
- package/dist/esm/context/pip-context.js +0 -117
- package/dist/esm/context/pip-context.js.map +0 -1
- package/dist/esm/context/use-devtools-context.d.ts +0 -40
- package/dist/esm/context/use-devtools-context.js +0 -96
- package/dist/esm/context/use-devtools-context.js.map +0 -1
- package/dist/esm/core.d.ts +0 -39
- package/dist/esm/core.js.map +0 -1
- package/dist/esm/devtools.d.ts +0 -1
- package/dist/esm/devtools.js +0 -200
- package/dist/esm/devtools.js.map +0 -1
- package/dist/esm/hooks/use-disable-tabbing.d.ts +0 -6
- package/dist/esm/hooks/use-disable-tabbing.js +0 -23
- package/dist/esm/hooks/use-disable-tabbing.js.map +0 -1
- package/dist/esm/hooks/use-head-changes.d.ts +0 -39
- package/dist/esm/hooks/use-head-changes.js +0 -65
- package/dist/esm/hooks/use-head-changes.js.map +0 -1
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.js +0 -8
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/styles/tokens.d.ts +0 -298
- package/dist/esm/styles/tokens.js +0 -63
- package/dist/esm/styles/tokens.js.map +0 -1
- package/dist/esm/styles/use-styles.d.ts +0 -42
- package/dist/esm/styles/use-styles.js +0 -422
- package/dist/esm/styles/use-styles.js.map +0 -1
- package/dist/esm/tabs/index.d.ts +0 -17
- package/dist/esm/tabs/index.js +0 -25
- package/dist/esm/tabs/index.js.map +0 -1
- package/dist/esm/tabs/plugins-tab.d.ts +0 -1
- package/dist/esm/tabs/plugins-tab.js +0 -88
- package/dist/esm/tabs/plugins-tab.js.map +0 -1
- package/dist/esm/tabs/seo-tab.d.ts +0 -1
- package/dist/esm/tabs/seo-tab.js +0 -296
- package/dist/esm/tabs/seo-tab.js.map +0 -1
- package/dist/esm/tabs/settings-tab.d.ts +0 -1
- package/dist/esm/tabs/settings-tab.js +0 -308
- package/dist/esm/tabs/settings-tab.js.map +0 -1
- package/dist/esm/utils/sanitize.d.ts +0 -3
- package/dist/esm/utils/sanitize.js +0 -31
- package/dist/esm/utils/sanitize.js.map +0 -1
- package/dist/esm/utils/storage.d.ts +0 -5
- package/dist/esm/utils/storage.js +0 -19
- package/dist/esm/utils/storage.js.map +0 -1
package/dist/esm/core.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ClientEventBusConfig } from '@tanstack/devtools-event-bus/client';
|
|
2
|
-
import { TanStackDevtoolsConfig, TanStackDevtoolsPlugin } from './context/devtools-context.js';
|
|
3
|
-
export interface TanStackDevtoolsInit {
|
|
4
|
-
/**
|
|
5
|
-
* Configuration for the devtools shell. These configuration options are used to set the
|
|
6
|
-
* initial state of the devtools when it is started for the first time. Afterwards,
|
|
7
|
-
* the settings are persisted in local storage and changed through the settings panel.
|
|
8
|
-
*/
|
|
9
|
-
config?: Partial<TanStackDevtoolsConfig>;
|
|
10
|
-
/**
|
|
11
|
-
* Array of plugins to be used in the devtools.
|
|
12
|
-
* Each plugin has a `render` function that gives you the dom node to mount into
|
|
13
|
-
*
|
|
14
|
-
* Example:
|
|
15
|
-
* ```ts
|
|
16
|
-
* const devtools = new TanStackDevtoolsCore({
|
|
17
|
-
* plugins: [
|
|
18
|
-
* {
|
|
19
|
-
* id: "your-plugin-id",
|
|
20
|
-
* name: "Your Plugin",
|
|
21
|
-
* render: (el) => {
|
|
22
|
-
* // Your render logic here
|
|
23
|
-
* },
|
|
24
|
-
* },
|
|
25
|
-
* ],
|
|
26
|
-
* })
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
plugins?: Array<TanStackDevtoolsPlugin>;
|
|
30
|
-
eventBusConfig?: ClientEventBusConfig;
|
|
31
|
-
}
|
|
32
|
-
export declare class TanStackDevtoolsCore {
|
|
33
|
-
#private;
|
|
34
|
-
constructor(init: TanStackDevtoolsInit);
|
|
35
|
-
mount<T extends HTMLElement>(el: T): void;
|
|
36
|
-
unmount(): void;
|
|
37
|
-
setConfig(config: Partial<TanStackDevtoolsInit>): void;
|
|
38
|
-
}
|
|
39
|
-
export type { ClientEventBusConfig };
|
package/dist/esm/core.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sources":["../../src/core.tsx"],"sourcesContent":["import { lazy } from 'solid-js'\nimport { Portal, render } from 'solid-js/web'\nimport { ClientEventBus } from '@tanstack/devtools-event-bus/client'\nimport { DevtoolsProvider } from './context/devtools-context'\nimport { initialState } from './context/devtools-store'\nimport { PiPProvider } from './context/pip-context'\nimport type { ClientEventBusConfig } from '@tanstack/devtools-event-bus/client'\nimport type {\n TanStackDevtoolsConfig,\n TanStackDevtoolsPlugin,\n} from './context/devtools-context'\n\nexport interface TanStackDevtoolsInit {\n /**\n * Configuration for the devtools shell. These configuration options are used to set the\n * initial state of the devtools when it is started for the first time. Afterwards,\n * the settings are persisted in local storage and changed through the settings panel.\n */\n config?: Partial<TanStackDevtoolsConfig>\n /**\n * Array of plugins to be used in the devtools.\n * Each plugin has a `render` function that gives you the dom node to mount into\n *\n * Example:\n * ```ts\n * const devtools = new TanStackDevtoolsCore({\n * plugins: [\n * {\n * id: \"your-plugin-id\",\n * name: \"Your Plugin\",\n * render: (el) => {\n * // Your render logic here\n * },\n * },\n * ],\n * })\n * ```\n */\n plugins?: Array<TanStackDevtoolsPlugin>\n eventBusConfig?: ClientEventBusConfig\n}\n\nexport class TanStackDevtoolsCore {\n #config: TanStackDevtoolsConfig = {\n ...initialState.settings,\n }\n #plugins: Array<TanStackDevtoolsPlugin> = []\n #isMounted = false\n #dispose?: () => void\n #Component: any\n #eventBus: ClientEventBus | undefined\n #eventBusConfig: ClientEventBusConfig | undefined\n\n constructor(init: TanStackDevtoolsInit) {\n this.#plugins = init.plugins || []\n this.#eventBusConfig = init.eventBusConfig\n this.#config = {\n ...this.#config,\n ...init.config,\n }\n }\n\n mount<T extends HTMLElement>(el: T) {\n if (this.#isMounted) {\n throw new Error('Devtools is already mounted')\n }\n const mountTo = el\n const dispose = render(() => {\n this.#Component = lazy(() => import('./devtools'))\n const Devtools = this.#Component\n this.#eventBus = new ClientEventBus(this.#eventBusConfig)\n this.#eventBus.start()\n return (\n <DevtoolsProvider plugins={this.#plugins} config={this.#config}>\n <PiPProvider>\n <Portal mount={mountTo}>\n <Devtools />\n </Portal>\n </PiPProvider>\n </DevtoolsProvider>\n )\n }, mountTo)\n\n this.#isMounted = true\n this.#dispose = dispose\n }\n\n unmount() {\n if (!this.#isMounted) {\n throw new Error('Devtools is not mounted')\n }\n this.#eventBus?.stop()\n this.#dispose?.()\n this.#isMounted = false\n }\n\n setConfig(config: Partial<TanStackDevtoolsInit>) {\n this.#config = {\n ...this.#config,\n ...config,\n }\n }\n}\n\nexport type { ClientEventBusConfig }\n"],"names":["TanStackDevtoolsCore","initialState","settings","constructor","init","plugins","eventBusConfig","config","mount","el","Error","mountTo","dispose","render","_self$","lazy","Devtools","ClientEventBus","start","_$createComponent","DevtoolsProvider","children","PiPProvider","Portal","unmount","stop","setConfig"],"mappings":";;;;;;AA0CO,MAAMA,qBAAqB;AAAA,EAChC,UAAkC;AAAA,IAChC,GAAGC,aAAaC;AAAAA,EAAAA;AAAAA,EAElB,WAA0C,CAAA;AAAA,EAC1C,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEAC,YAAYC,MAA4B;AACtC,SAAK,WAAWA,KAAKC,WAAW,CAAA;AAChC,SAAK,kBAAkBD,KAAKE;AAC5B,SAAK,UAAU;AAAA,MACb,GAAG,KAAK;AAAA,MACR,GAAGF,KAAKG;AAAAA,IAAAA;AAAAA,EAEZ;AAAA,EAEAC,MAA6BC,IAAO;AAClC,QAAI,KAAK,YAAY;AACnB,YAAM,IAAIC,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAMC,UAAUF;AAChB,UAAMG,UAAUC,OAAO,MAAM;AAAA,YAAAC,SAAA;AAC3B,WAAK,aAAaC,KAAK,MAAM,OAAO,eAAY,CAAC;AACjD,YAAMC,WAAW,KAAK;AACtB,WAAK,YAAY,IAAIC,eAAe,KAAK,eAAe;AACxD,WAAK,UAAUC,MAAAA;AACf,aAAAC,gBACGC,kBAAgB;AAAA,QAAA,IAACf,UAAO;AAAA,iBAAES,OAAK;AAAA,QAAQ;AAAA,QAAA,IAAEP,SAAM;AAAA,iBAAEO,OAAK;AAAA,QAAO;AAAA,QAAA,IAAAO,WAAA;AAAA,iBAAAF,gBAC3DG,aAAW;AAAA,YAAA,IAAAD,WAAA;AAAA,qBAAAF,gBACTI,QAAM;AAAA,gBAACf,OAAOG;AAAAA,gBAAO,IAAAU,WAAA;AAAA,yBAAAF,gBACnBH,UAAQ,EAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA;AAAA,IAKnB,GAAGL,OAAO;AAEV,SAAK,aAAa;AAClB,SAAK,WAAWC;AAAAA,EAClB;AAAA,EAEAY,UAAU;AACR,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAId,MAAM,yBAAyB;AAAA,IAC3C;AACA,SAAK,WAAWe,KAAAA;AAChB,SAAK,WAAA;AACL,SAAK,aAAa;AAAA,EACpB;AAAA,EAEAC,UAAUnB,QAAuC;AAC/C,SAAK,UAAU;AAAA,MACb,GAAG,KAAK;AAAA,MACR,GAAGA;AAAAA,IAAAA;AAAAA,EAEP;AACF;"}
|
package/dist/esm/devtools.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function DevTools(): import("solid-js").JSX.Element;
|
package/dist/esm/devtools.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { createComponent, Portal, template, use, setAttribute, insert, memo } from "solid-js/web";
|
|
2
|
-
import { createSignal, createEffect, onCleanup, Show } from "solid-js";
|
|
3
|
-
import { createShortcut } from "@solid-primitives/keyboard";
|
|
4
|
-
import { ThemeContextProvider } from "@tanstack/devtools-ui";
|
|
5
|
-
import { useDevtoolsSettings, useHeight, usePersistOpen, useTheme } from "./context/use-devtools-context.js";
|
|
6
|
-
import { useDisableTabbing } from "./hooks/use-disable-tabbing.js";
|
|
7
|
-
import { TANSTACK_DEVTOOLS } from "./utils/storage.js";
|
|
8
|
-
import { Trigger } from "./components/trigger.js";
|
|
9
|
-
import { MainPanel } from "./components/main-panel.js";
|
|
10
|
-
import { ContentPanel } from "./components/content-panel.js";
|
|
11
|
-
import { Tabs } from "./components/tabs.js";
|
|
12
|
-
import { TabContent } from "./components/tab-content.js";
|
|
13
|
-
import { keyboardModifiers } from "./context/devtools-store.js";
|
|
14
|
-
import { getAllPermutations } from "./utils/sanitize.js";
|
|
15
|
-
import { usePiPWindow } from "./context/pip-context.js";
|
|
16
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>`);
|
|
17
|
-
function DevTools() {
|
|
18
|
-
const {
|
|
19
|
-
settings
|
|
20
|
-
} = useDevtoolsSettings();
|
|
21
|
-
const {
|
|
22
|
-
setHeight
|
|
23
|
-
} = useHeight();
|
|
24
|
-
const {
|
|
25
|
-
persistOpen,
|
|
26
|
-
setPersistOpen
|
|
27
|
-
} = usePersistOpen();
|
|
28
|
-
const [rootEl, setRootEl] = createSignal();
|
|
29
|
-
const [isOpen, setIsOpen] = createSignal(settings().defaultOpen || persistOpen());
|
|
30
|
-
const pip = usePiPWindow();
|
|
31
|
-
let panelRef = void 0;
|
|
32
|
-
const [isResizing, setIsResizing] = createSignal(false);
|
|
33
|
-
const toggleOpen = () => {
|
|
34
|
-
if (pip().pipWindow) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const open = isOpen();
|
|
38
|
-
setIsOpen(!open);
|
|
39
|
-
setPersistOpen(!open);
|
|
40
|
-
};
|
|
41
|
-
const handleDragStart = (panelElement, startEvent) => {
|
|
42
|
-
if (startEvent.button !== 0) return;
|
|
43
|
-
if (!panelElement) return;
|
|
44
|
-
setIsResizing(true);
|
|
45
|
-
const dragInfo = {
|
|
46
|
-
originalHeight: panelElement.getBoundingClientRect().height,
|
|
47
|
-
pageY: startEvent.pageY
|
|
48
|
-
};
|
|
49
|
-
const run = (moveEvent) => {
|
|
50
|
-
const delta = dragInfo.pageY - moveEvent.pageY;
|
|
51
|
-
const newHeight = settings().panelLocation === "bottom" ? dragInfo.originalHeight + delta : dragInfo.originalHeight - delta;
|
|
52
|
-
setHeight(newHeight);
|
|
53
|
-
if (newHeight < 70) {
|
|
54
|
-
setIsOpen(false);
|
|
55
|
-
} else {
|
|
56
|
-
setIsOpen(true);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const unsub = () => {
|
|
60
|
-
setIsResizing(false);
|
|
61
|
-
document.removeEventListener("mousemove", run);
|
|
62
|
-
document.removeEventListener("mouseUp", unsub);
|
|
63
|
-
};
|
|
64
|
-
document.addEventListener("mousemove", run);
|
|
65
|
-
document.addEventListener("mouseup", unsub);
|
|
66
|
-
};
|
|
67
|
-
createEffect(() => {
|
|
68
|
-
if (isOpen()) {
|
|
69
|
-
const previousValue = rootEl()?.parentElement?.style.paddingBottom;
|
|
70
|
-
const run = () => {
|
|
71
|
-
if (!panelRef) return;
|
|
72
|
-
if (rootEl()?.parentElement) {
|
|
73
|
-
setRootEl((prev) => {
|
|
74
|
-
if (prev?.parentElement) ;
|
|
75
|
-
return prev;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
run();
|
|
80
|
-
if (typeof window !== "undefined") {
|
|
81
|
-
(pip().pipWindow ?? window).addEventListener("resize", run);
|
|
82
|
-
return () => {
|
|
83
|
-
(pip().pipWindow ?? window).removeEventListener("resize", run);
|
|
84
|
-
if (rootEl()?.parentElement && typeof previousValue === "string") {
|
|
85
|
-
setRootEl((prev) => {
|
|
86
|
-
return prev;
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
} else {
|
|
92
|
-
if (rootEl()?.parentElement) {
|
|
93
|
-
setRootEl((prev) => {
|
|
94
|
-
if (prev?.parentElement) {
|
|
95
|
-
prev.parentElement.removeAttribute("style");
|
|
96
|
-
}
|
|
97
|
-
return prev;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return;
|
|
102
|
-
});
|
|
103
|
-
createEffect(() => {
|
|
104
|
-
window.addEventListener("keydown", (e) => {
|
|
105
|
-
if (e.key === "Escape" && isOpen()) {
|
|
106
|
-
toggleOpen();
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
useDisableTabbing(isOpen);
|
|
111
|
-
createEffect(() => {
|
|
112
|
-
if (rootEl()) {
|
|
113
|
-
const el = rootEl();
|
|
114
|
-
const fontSize = getComputedStyle(el).fontSize;
|
|
115
|
-
el?.style.setProperty("--tsrd-font-size", fontSize);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
createEffect(() => {
|
|
119
|
-
const modifiers = settings().openHotkey.filter((key) => keyboardModifiers.includes(key));
|
|
120
|
-
const nonModifiers = settings().openHotkey.filter((key) => !keyboardModifiers.includes(key));
|
|
121
|
-
const allModifierCombinations = getAllPermutations(modifiers);
|
|
122
|
-
for (const combination of allModifierCombinations) {
|
|
123
|
-
const permutation = [...combination, ...nonModifiers];
|
|
124
|
-
createShortcut(permutation, () => {
|
|
125
|
-
toggleOpen();
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
createEffect(() => {
|
|
130
|
-
const openSourceHandler = (e) => {
|
|
131
|
-
const isShiftHeld = e.shiftKey;
|
|
132
|
-
const isCtrlHeld = e.ctrlKey || e.metaKey;
|
|
133
|
-
if (!isShiftHeld || !isCtrlHeld) return;
|
|
134
|
-
if (e.target instanceof HTMLElement) {
|
|
135
|
-
const dataSource = e.target.getAttribute("data-tsd-source");
|
|
136
|
-
window.getSelection()?.removeAllRanges();
|
|
137
|
-
if (dataSource) {
|
|
138
|
-
e.preventDefault();
|
|
139
|
-
e.stopPropagation();
|
|
140
|
-
fetch(`__TSD_HOST__://localhost:__TSD_PORT__/__tsd/open-source?source=${encodeURIComponent(dataSource)}`).catch(() => {
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
window.addEventListener("click", openSourceHandler);
|
|
146
|
-
onCleanup(() => {
|
|
147
|
-
window.removeEventListener("click", openSourceHandler);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
const {
|
|
151
|
-
theme
|
|
152
|
-
} = useTheme();
|
|
153
|
-
return createComponent(ThemeContextProvider, {
|
|
154
|
-
get theme() {
|
|
155
|
-
return theme();
|
|
156
|
-
},
|
|
157
|
-
get children() {
|
|
158
|
-
return createComponent(Portal, {
|
|
159
|
-
get mount() {
|
|
160
|
-
return (pip().pipWindow ?? window).document.body;
|
|
161
|
-
},
|
|
162
|
-
get children() {
|
|
163
|
-
var _el$ = _tmpl$();
|
|
164
|
-
use(setRootEl, _el$);
|
|
165
|
-
setAttribute(_el$, "data-testid", TANSTACK_DEVTOOLS);
|
|
166
|
-
insert(_el$, createComponent(Show, {
|
|
167
|
-
get when() {
|
|
168
|
-
return memo(() => pip().pipWindow !== null)() ? true : memo(() => !!settings().requireUrlFlag)() ? window.location.search.includes(settings().urlFlag) : true;
|
|
169
|
-
},
|
|
170
|
-
get children() {
|
|
171
|
-
return [createComponent(Trigger, {
|
|
172
|
-
isOpen,
|
|
173
|
-
setIsOpen: toggleOpen
|
|
174
|
-
}), createComponent(MainPanel, {
|
|
175
|
-
isResizing,
|
|
176
|
-
isOpen,
|
|
177
|
-
get children() {
|
|
178
|
-
return createComponent(ContentPanel, {
|
|
179
|
-
ref: (ref) => panelRef = ref,
|
|
180
|
-
handleDragStart: (e) => handleDragStart(panelRef, e),
|
|
181
|
-
get children() {
|
|
182
|
-
return [createComponent(Tabs, {
|
|
183
|
-
toggleOpen
|
|
184
|
-
}), createComponent(TabContent, {})];
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
})];
|
|
189
|
-
}
|
|
190
|
-
}));
|
|
191
|
-
return _el$;
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
export {
|
|
198
|
-
DevTools as default
|
|
199
|
-
};
|
|
200
|
-
//# sourceMappingURL=devtools.js.map
|
package/dist/esm/devtools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sources":["../../src/devtools.tsx"],"sourcesContent":["import { Show, createEffect, createSignal, onCleanup } from 'solid-js'\nimport { createShortcut } from '@solid-primitives/keyboard'\nimport { Portal } from 'solid-js/web'\nimport { ThemeContextProvider } from '@tanstack/devtools-ui'\nimport {\n useDevtoolsSettings,\n useHeight,\n usePersistOpen,\n useTheme,\n} from './context/use-devtools-context'\nimport { useDisableTabbing } from './hooks/use-disable-tabbing'\nimport { TANSTACK_DEVTOOLS } from './utils/storage'\nimport { Trigger } from './components/trigger'\nimport { MainPanel } from './components/main-panel'\nimport { ContentPanel } from './components/content-panel'\nimport { Tabs } from './components/tabs'\nimport { TabContent } from './components/tab-content'\nimport { keyboardModifiers } from './context/devtools-store'\nimport { getAllPermutations } from './utils/sanitize'\nimport { usePiPWindow } from './context/pip-context'\n\nexport default function DevTools() {\n const { settings } = useDevtoolsSettings()\n const { setHeight } = useHeight()\n const { persistOpen, setPersistOpen } = usePersistOpen()\n const [rootEl, setRootEl] = createSignal<HTMLDivElement>()\n const [isOpen, setIsOpen] = createSignal(\n settings().defaultOpen || persistOpen(),\n )\n const pip = usePiPWindow()\n let panelRef: HTMLDivElement | undefined = undefined\n const [isResizing, setIsResizing] = createSignal(false)\n const toggleOpen = () => {\n if (pip().pipWindow) {\n return\n }\n const open = isOpen()\n setIsOpen(!open)\n setPersistOpen(!open)\n }\n // Used to resize the panel\n const handleDragStart = (\n panelElement: HTMLDivElement | undefined,\n startEvent: MouseEvent,\n ) => {\n if (startEvent.button !== 0) return // Only allow left click for drag\n if (!panelElement) return\n setIsResizing(true)\n\n const dragInfo = {\n originalHeight: panelElement.getBoundingClientRect().height,\n pageY: startEvent.pageY,\n }\n\n const run = (moveEvent: MouseEvent) => {\n const delta = dragInfo.pageY - moveEvent.pageY\n const newHeight =\n settings().panelLocation === 'bottom'\n ? dragInfo.originalHeight + delta\n : dragInfo.originalHeight - delta\n\n setHeight(newHeight)\n\n if (newHeight < 70) {\n setIsOpen(false)\n } else {\n setIsOpen(true)\n }\n }\n\n const unsub = () => {\n setIsResizing(false)\n document.removeEventListener('mousemove', run)\n document.removeEventListener('mouseUp', unsub)\n }\n\n document.addEventListener('mousemove', run)\n document.addEventListener('mouseup', unsub)\n }\n\n // Handle resizing and padding adjustments\n createEffect(() => {\n if (isOpen()) {\n const previousValue = rootEl()?.parentElement?.style.paddingBottom\n\n const run = () => {\n if (!panelRef) return\n // const containerHeight = panelRef.getBoundingClientRect().height\n if (rootEl()?.parentElement) {\n setRootEl((prev) => {\n if (prev?.parentElement) {\n // prev.parentElement.style.paddingBottom = `${containerHeight}px`\n }\n return prev\n })\n }\n }\n\n run()\n\n if (typeof window !== 'undefined') {\n ;(pip().pipWindow ?? window).addEventListener('resize', run)\n\n return () => {\n ;(pip().pipWindow ?? window).removeEventListener('resize', run)\n if (rootEl()?.parentElement && typeof previousValue === 'string') {\n setRootEl((prev) => {\n // prev!.parentElement!.style.paddingBottom = previousValue\n return prev\n })\n }\n }\n }\n } else {\n // Reset padding when devtools are closed\n if (rootEl()?.parentElement) {\n setRootEl((prev) => {\n if (prev?.parentElement) {\n prev.parentElement.removeAttribute('style')\n }\n return prev\n })\n }\n }\n return\n })\n\n createEffect(() => {\n window.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && isOpen()) {\n toggleOpen()\n }\n })\n })\n useDisableTabbing(isOpen)\n createEffect(() => {\n if (rootEl()) {\n const el = rootEl()\n const fontSize = getComputedStyle(el!).fontSize\n el?.style.setProperty('--tsrd-font-size', fontSize)\n }\n })\n createEffect(() => {\n // we create all combinations of modifiers\n const modifiers = settings().openHotkey.filter((key) =>\n keyboardModifiers.includes(key as any),\n )\n const nonModifiers = settings().openHotkey.filter(\n (key) => !keyboardModifiers.includes(key as any),\n )\n\n const allModifierCombinations = getAllPermutations(modifiers)\n\n for (const combination of allModifierCombinations) {\n const permutation = [...combination, ...nonModifiers]\n createShortcut(permutation, () => {\n toggleOpen()\n })\n }\n })\n\n createEffect(() => {\n // this will only work with the Vite plugin\n const openSourceHandler = (e: Event) => {\n const isShiftHeld = (e as KeyboardEvent).shiftKey\n const isCtrlHeld =\n (e as KeyboardEvent).ctrlKey || (e as KeyboardEvent).metaKey\n if (!isShiftHeld || !isCtrlHeld) return\n\n if (e.target instanceof HTMLElement) {\n const dataSource = e.target.getAttribute('data-tsd-source')\n window.getSelection()?.removeAllRanges()\n if (dataSource) {\n e.preventDefault()\n e.stopPropagation()\n fetch(\n `__TSD_HOST__://localhost:__TSD_PORT__/__tsd/open-source?source=${encodeURIComponent(dataSource)}`,\n ).catch(() => {})\n }\n }\n }\n window.addEventListener('click', openSourceHandler)\n onCleanup(() => {\n window.removeEventListener('click', openSourceHandler)\n })\n })\n const { theme } = useTheme()\n\n return (\n <ThemeContextProvider theme={theme()}>\n <Portal mount={(pip().pipWindow ?? window).document.body}>\n <div ref={setRootEl} data-testid={TANSTACK_DEVTOOLS}>\n <Show\n when={\n pip().pipWindow !== null\n ? true\n : settings().requireUrlFlag\n ? window.location.search.includes(settings().urlFlag)\n : true\n }\n >\n <Trigger isOpen={isOpen} setIsOpen={toggleOpen} />\n <MainPanel isResizing={isResizing} isOpen={isOpen}>\n <ContentPanel\n ref={(ref) => (panelRef = ref)}\n handleDragStart={(e) => handleDragStart(panelRef, e)}\n >\n <Tabs toggleOpen={toggleOpen} />\n <TabContent />\n </ContentPanel>\n </MainPanel>\n </Show>\n </div>\n </Portal>\n </ThemeContextProvider>\n )\n}\n"],"names":["DevTools","settings","useDevtoolsSettings","setHeight","useHeight","persistOpen","setPersistOpen","usePersistOpen","rootEl","setRootEl","createSignal","isOpen","setIsOpen","defaultOpen","pip","usePiPWindow","panelRef","undefined","isResizing","setIsResizing","toggleOpen","pipWindow","open","handleDragStart","panelElement","startEvent","button","dragInfo","originalHeight","getBoundingClientRect","height","pageY","run","moveEvent","delta","newHeight","panelLocation","unsub","document","removeEventListener","addEventListener","createEffect","previousValue","parentElement","style","paddingBottom","prev","window","removeAttribute","e","key","useDisableTabbing","el","fontSize","getComputedStyle","setProperty","modifiers","openHotkey","filter","keyboardModifiers","includes","nonModifiers","allModifierCombinations","getAllPermutations","combination","permutation","createShortcut","openSourceHandler","isShiftHeld","shiftKey","isCtrlHeld","ctrlKey","metaKey","target","HTMLElement","dataSource","getAttribute","getSelection","removeAllRanges","preventDefault","stopPropagation","fetch","encodeURIComponent","catch","onCleanup","theme","useTheme","_$createComponent","ThemeContextProvider","children","Portal","mount","body","_el$","_tmpl$","_$use","_$setAttribute","TANSTACK_DEVTOOLS","_$insert","Show","when","_$memo","requireUrlFlag","location","search","urlFlag","Trigger","MainPanel","ContentPanel","ref","Tabs","TabContent"],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { createEffect } from "solid-js";
|
|
2
|
-
import { TANSTACK_DEVTOOLS } from "../utils/storage.js";
|
|
3
|
-
const recursivelyChangeTabIndex = (node, remove = true) => {
|
|
4
|
-
if (remove) {
|
|
5
|
-
node.setAttribute("tabIndex", "-1");
|
|
6
|
-
} else {
|
|
7
|
-
node.removeAttribute("tabIndex");
|
|
8
|
-
}
|
|
9
|
-
for (const child of node.children) {
|
|
10
|
-
recursivelyChangeTabIndex(child, remove);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
const useDisableTabbing = (isOpen) => {
|
|
14
|
-
createEffect(() => {
|
|
15
|
-
const el = document.getElementById(TANSTACK_DEVTOOLS);
|
|
16
|
-
if (!el) return;
|
|
17
|
-
recursivelyChangeTabIndex(el, !isOpen());
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
export {
|
|
21
|
-
useDisableTabbing
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=use-disable-tabbing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-disable-tabbing.js","sources":["../../../src/hooks/use-disable-tabbing.ts"],"sourcesContent":["import { createEffect } from 'solid-js'\nimport { TANSTACK_DEVTOOLS } from '../utils/storage'\n\nconst recursivelyChangeTabIndex = (\n node: Element | HTMLElement,\n remove = true,\n) => {\n if (remove) {\n node.setAttribute('tabIndex', '-1')\n } else {\n node.removeAttribute('tabIndex')\n }\n for (const child of node.children) {\n recursivelyChangeTabIndex(child, remove)\n }\n}\n/**\n * @param isOpen A function that returns whether the devtools are open or not.\n * This is used to disable tabbing over the main devtools container while\n * the devtools are closed.\n */\nexport const useDisableTabbing = (isOpen: () => boolean) => {\n createEffect(() => {\n const el = document.getElementById(TANSTACK_DEVTOOLS)\n if (!el) return\n recursivelyChangeTabIndex(el, !isOpen())\n })\n}\n"],"names":[],"mappings":";;AAGA,MAAM,4BAA4B,CAChC,MACA,SAAS,SACN;AACH,MAAI,QAAQ;AACV,SAAK,aAAa,YAAY,IAAI;AAAA,EACpC,OAAO;AACL,SAAK,gBAAgB,UAAU;AAAA,EACjC;AACA,aAAW,SAAS,KAAK,UAAU;AACjC,8BAA0B,OAAO,MAAM;AAAA,EACzC;AACF;AAMO,MAAM,oBAAoB,CAAC,WAA0B;AAC1D,eAAa,MAAM;AACjB,UAAM,KAAK,SAAS,eAAe,iBAAiB;AACpD,QAAI,CAAC,GAAI;AACT,8BAA0B,IAAI,CAAC,QAAQ;AAAA,EACzC,CAAC;AACH;"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
type HeadChange = {
|
|
2
|
-
kind: 'added';
|
|
3
|
-
node: Node;
|
|
4
|
-
} | {
|
|
5
|
-
kind: 'removed';
|
|
6
|
-
node: Node;
|
|
7
|
-
} | {
|
|
8
|
-
kind: 'attr';
|
|
9
|
-
target: Element;
|
|
10
|
-
name: string | null;
|
|
11
|
-
oldValue: string | null;
|
|
12
|
-
} | {
|
|
13
|
-
kind: 'title';
|
|
14
|
-
title: string;
|
|
15
|
-
};
|
|
16
|
-
type UseHeadChangesOptions = {
|
|
17
|
-
/**
|
|
18
|
-
* Observe attribute changes on elements inside <head>
|
|
19
|
-
* Default: true
|
|
20
|
-
*/
|
|
21
|
-
attributes?: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Observe added/removed nodes in <head>
|
|
24
|
-
* Default: true
|
|
25
|
-
*/
|
|
26
|
-
childList?: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Observe descendants of <head>
|
|
29
|
-
* Default: true
|
|
30
|
-
*/
|
|
31
|
-
subtree?: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Also observe <title> changes explicitly
|
|
34
|
-
* Default: true
|
|
35
|
-
*/
|
|
36
|
-
observeTitle?: boolean;
|
|
37
|
-
};
|
|
38
|
-
export declare function useHeadChanges(onChange: (change: HeadChange, raw?: MutationRecord) => void, opts?: UseHeadChangesOptions): void;
|
|
39
|
-
export {};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { onMount, onCleanup } from "solid-js";
|
|
2
|
-
function useHeadChanges(onChange, opts = {}) {
|
|
3
|
-
const {
|
|
4
|
-
attributes = true,
|
|
5
|
-
childList = true,
|
|
6
|
-
subtree = true,
|
|
7
|
-
observeTitle = true
|
|
8
|
-
} = opts;
|
|
9
|
-
onMount(() => {
|
|
10
|
-
const headObserver = new MutationObserver((mutations) => {
|
|
11
|
-
for (const m of mutations) {
|
|
12
|
-
if (m.type === "childList") {
|
|
13
|
-
m.addedNodes.forEach((node) => onChange({ kind: "added", node }, m));
|
|
14
|
-
m.removedNodes.forEach(
|
|
15
|
-
(node) => onChange({ kind: "removed", node }, m)
|
|
16
|
-
);
|
|
17
|
-
} else if (m.type === "attributes") {
|
|
18
|
-
const el = m.target;
|
|
19
|
-
onChange(
|
|
20
|
-
{
|
|
21
|
-
kind: "attr",
|
|
22
|
-
target: el,
|
|
23
|
-
name: m.attributeName,
|
|
24
|
-
oldValue: m.oldValue ?? null
|
|
25
|
-
},
|
|
26
|
-
m
|
|
27
|
-
);
|
|
28
|
-
} else {
|
|
29
|
-
const isInTitle = m.target.parentNode && m.target.parentNode.tagName.toLowerCase() === "title";
|
|
30
|
-
if (isInTitle) onChange({ kind: "title", title: document.title }, m);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
headObserver.observe(document.head, {
|
|
35
|
-
childList,
|
|
36
|
-
attributes,
|
|
37
|
-
subtree,
|
|
38
|
-
attributeOldValue: attributes,
|
|
39
|
-
characterData: true,
|
|
40
|
-
// helps catch <title> text node edits
|
|
41
|
-
characterDataOldValue: false
|
|
42
|
-
});
|
|
43
|
-
let titleObserver;
|
|
44
|
-
if (observeTitle) {
|
|
45
|
-
const titleEl = document.head.querySelector("title") || // create a <title> if missing so future changes are observable
|
|
46
|
-
document.head.appendChild(document.createElement("title"));
|
|
47
|
-
titleObserver = new MutationObserver(() => {
|
|
48
|
-
onChange({ kind: "title", title: document.title });
|
|
49
|
-
});
|
|
50
|
-
titleObserver.observe(titleEl, {
|
|
51
|
-
childList: true,
|
|
52
|
-
characterData: true,
|
|
53
|
-
subtree: true
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
onCleanup(() => {
|
|
57
|
-
headObserver.disconnect();
|
|
58
|
-
titleObserver?.disconnect();
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
export {
|
|
63
|
-
useHeadChanges
|
|
64
|
-
};
|
|
65
|
-
//# sourceMappingURL=use-head-changes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-head-changes.js","sources":["../../../src/hooks/use-head-changes.ts"],"sourcesContent":["import { onCleanup, onMount } from 'solid-js'\n\ntype HeadChange =\n | { kind: 'added'; node: Node }\n | { kind: 'removed'; node: Node }\n | {\n kind: 'attr'\n target: Element\n name: string | null\n oldValue: string | null\n }\n | { kind: 'title'; title: string }\n\ntype UseHeadChangesOptions = {\n /**\n * Observe attribute changes on elements inside <head>\n * Default: true\n */\n attributes?: boolean\n /**\n * Observe added/removed nodes in <head>\n * Default: true\n */\n childList?: boolean\n /**\n * Observe descendants of <head>\n * Default: true\n */\n subtree?: boolean\n /**\n * Also observe <title> changes explicitly\n * Default: true\n */\n observeTitle?: boolean\n}\n\nexport function useHeadChanges(\n onChange: (change: HeadChange, raw?: MutationRecord) => void,\n opts: UseHeadChangesOptions = {},\n) {\n const {\n attributes = true,\n childList = true,\n subtree = true,\n observeTitle = true,\n } = opts\n\n onMount(() => {\n const headObserver = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === 'childList') {\n m.addedNodes.forEach((node) => onChange({ kind: 'added', node }, m))\n m.removedNodes.forEach((node) =>\n onChange({ kind: 'removed', node }, m),\n )\n } else if (m.type === 'attributes') {\n const el = m.target as Element\n onChange(\n {\n kind: 'attr',\n target: el,\n name: m.attributeName,\n oldValue: m.oldValue ?? null,\n },\n m,\n )\n } else {\n // If someone mutates a Text node inside <title>, surface it as a title change.\n const isInTitle =\n m.target.parentNode &&\n (m.target.parentNode as Element).tagName.toLowerCase() === 'title'\n if (isInTitle) onChange({ kind: 'title', title: document.title }, m)\n }\n }\n })\n\n headObserver.observe(document.head, {\n childList,\n attributes,\n subtree,\n attributeOldValue: attributes,\n characterData: true, // helps catch <title> text node edits\n characterDataOldValue: false,\n })\n\n // Extra explicit observer for <title>, since `document.title = \"...\"`\n // may not always bubble as a head mutation in all setups.\n let titleObserver: MutationObserver | undefined\n if (observeTitle) {\n const titleEl =\n document.head.querySelector('title') ||\n // create a <title> if missing so future changes are observable\n document.head.appendChild(document.createElement('title'))\n\n titleObserver = new MutationObserver(() => {\n onChange({ kind: 'title', title: document.title })\n })\n titleObserver.observe(titleEl, {\n childList: true,\n characterData: true,\n subtree: true,\n })\n }\n\n onCleanup(() => {\n headObserver.disconnect()\n titleObserver?.disconnect()\n })\n })\n}\n"],"names":[],"mappings":";AAoCO,SAAS,eACd,UACA,OAA8B,IAC9B;AACA,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,eAAe;AAAA,EAAA,IACb;AAEJ,UAAQ,MAAM;AACZ,UAAM,eAAe,IAAI,iBAAiB,CAAC,cAAc;AACvD,iBAAW,KAAK,WAAW;AACzB,YAAI,EAAE,SAAS,aAAa;AAC1B,YAAE,WAAW,QAAQ,CAAC,SAAS,SAAS,EAAE,MAAM,SAAS,KAAA,GAAQ,CAAC,CAAC;AACnE,YAAE,aAAa;AAAA,YAAQ,CAAC,SACtB,SAAS,EAAE,MAAM,WAAW,KAAA,GAAQ,CAAC;AAAA,UAAA;AAAA,QAEzC,WAAW,EAAE,SAAS,cAAc;AAClC,gBAAM,KAAK,EAAE;AACb;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM,EAAE;AAAA,cACR,UAAU,EAAE,YAAY;AAAA,YAAA;AAAA,YAE1B;AAAA,UAAA;AAAA,QAEJ,OAAO;AAEL,gBAAM,YACJ,EAAE,OAAO,cACR,EAAE,OAAO,WAAuB,QAAQ,YAAA,MAAkB;AAC7D,cAAI,oBAAoB,EAAE,MAAM,SAAS,OAAO,SAAS,MAAA,GAAS,CAAC;AAAA,QACrE;AAAA,MACF;AAAA,IACF,CAAC;AAED,iBAAa,QAAQ,SAAS,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,MACnB,eAAe;AAAA;AAAA,MACf,uBAAuB;AAAA,IAAA,CACxB;AAID,QAAI;AACJ,QAAI,cAAc;AAChB,YAAM,UACJ,SAAS,KAAK,cAAc,OAAO;AAAA,MAEnC,SAAS,KAAK,YAAY,SAAS,cAAc,OAAO,CAAC;AAE3D,sBAAgB,IAAI,iBAAiB,MAAM;AACzC,iBAAS,EAAE,MAAM,SAAS,OAAO,SAAS,OAAO;AAAA,MACnD,CAAC;AACD,oBAAc,QAAQ,SAAS;AAAA,QAC7B,WAAW;AAAA,QACX,eAAe;AAAA,QACf,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAEA,cAAU,MAAM;AACd,mBAAa,WAAA;AACb,qBAAe,WAAA;AAAA,IACjB,CAAC;AAAA,EACH,CAAC;AACH;"}
|
package/dist/esm/index.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { PLUGIN_CONTAINER_ID, PLUGIN_TITLE_CONTAINER_ID } from './constants.js';
|
|
2
|
-
export { TanStackDevtoolsCore } from './core.js';
|
|
3
|
-
export type { TanStackDevtoolsInit, ClientEventBusConfig } from './core.js';
|
|
4
|
-
export type { TanStackDevtoolsPlugin, TanStackDevtoolsConfig, } from './context/devtools-context.js';
|
package/dist/esm/index.js
DELETED
package/dist/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|