@tanstack/devtools 0.6.7 → 0.6.9

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.
Files changed (83) hide show
  1. package/dist/chunk/CEHNENNI.js +251 -0
  2. package/dist/{esm/core.js → dev.js} +10 -12
  3. package/dist/devtools/67YFWU65.js +1976 -0
  4. package/dist/devtools/O4SGY7NG.js +1684 -0
  5. package/dist/index.d.ts +168 -0
  6. package/dist/index.js +76 -0
  7. package/dist/server.js +44 -0
  8. package/package.json +19 -10
  9. package/src/components/tanstack-logo.png +0 -0
  10. package/src/components/trigger.tsx +2 -2
  11. package/src/core.tsx +3 -0
  12. package/src/styles/use-styles.ts +11 -4
  13. package/dist/esm/components/content-panel.d.ts +0 -6
  14. package/dist/esm/components/content-panel.js +0 -32
  15. package/dist/esm/components/content-panel.js.map +0 -1
  16. package/dist/esm/components/main-panel.d.ts +0 -6
  17. package/dist/esm/components/main-panel.js +0 -42
  18. package/dist/esm/components/main-panel.js.map +0 -1
  19. package/dist/esm/components/tab-content.d.ts +0 -2
  20. package/dist/esm/components/tab-content.js +0 -23
  21. package/dist/esm/components/tab-content.js.map +0 -1
  22. package/dist/esm/components/tabs.d.ts +0 -5
  23. package/dist/esm/components/tabs.js +0 -75
  24. package/dist/esm/components/tabs.js.map +0 -1
  25. package/dist/esm/components/trigger.d.ts +0 -5
  26. package/dist/esm/components/trigger.js +0 -31
  27. package/dist/esm/components/trigger.js.map +0 -1
  28. package/dist/esm/constants.d.ts +0 -2
  29. package/dist/esm/constants.js +0 -7
  30. package/dist/esm/constants.js.map +0 -1
  31. package/dist/esm/context/devtools-context.d.ts +0 -62
  32. package/dist/esm/context/devtools-context.js +0 -77
  33. package/dist/esm/context/devtools-context.js.map +0 -1
  34. package/dist/esm/context/devtools-store.d.ts +0 -59
  35. package/dist/esm/context/devtools-store.js +0 -29
  36. package/dist/esm/context/devtools-store.js.map +0 -1
  37. package/dist/esm/context/draw-context.d.ts +0 -13
  38. package/dist/esm/context/draw-context.js +0 -55
  39. package/dist/esm/context/draw-context.js.map +0 -1
  40. package/dist/esm/context/pip-context.d.ts +0 -14
  41. package/dist/esm/context/pip-context.js +0 -117
  42. package/dist/esm/context/pip-context.js.map +0 -1
  43. package/dist/esm/context/use-devtools-context.d.ts +0 -40
  44. package/dist/esm/context/use-devtools-context.js +0 -96
  45. package/dist/esm/context/use-devtools-context.js.map +0 -1
  46. package/dist/esm/core.d.ts +0 -39
  47. package/dist/esm/core.js.map +0 -1
  48. package/dist/esm/devtools.d.ts +0 -1
  49. package/dist/esm/devtools.js +0 -200
  50. package/dist/esm/devtools.js.map +0 -1
  51. package/dist/esm/hooks/use-disable-tabbing.d.ts +0 -6
  52. package/dist/esm/hooks/use-disable-tabbing.js +0 -23
  53. package/dist/esm/hooks/use-disable-tabbing.js.map +0 -1
  54. package/dist/esm/hooks/use-head-changes.d.ts +0 -39
  55. package/dist/esm/hooks/use-head-changes.js +0 -65
  56. package/dist/esm/hooks/use-head-changes.js.map +0 -1
  57. package/dist/esm/index.d.ts +0 -4
  58. package/dist/esm/index.js +0 -8
  59. package/dist/esm/index.js.map +0 -1
  60. package/dist/esm/styles/tokens.d.ts +0 -298
  61. package/dist/esm/styles/tokens.js +0 -63
  62. package/dist/esm/styles/tokens.js.map +0 -1
  63. package/dist/esm/styles/use-styles.d.ts +0 -42
  64. package/dist/esm/styles/use-styles.js +0 -422
  65. package/dist/esm/styles/use-styles.js.map +0 -1
  66. package/dist/esm/tabs/index.d.ts +0 -17
  67. package/dist/esm/tabs/index.js +0 -25
  68. package/dist/esm/tabs/index.js.map +0 -1
  69. package/dist/esm/tabs/plugins-tab.d.ts +0 -1
  70. package/dist/esm/tabs/plugins-tab.js +0 -88
  71. package/dist/esm/tabs/plugins-tab.js.map +0 -1
  72. package/dist/esm/tabs/seo-tab.d.ts +0 -1
  73. package/dist/esm/tabs/seo-tab.js +0 -296
  74. package/dist/esm/tabs/seo-tab.js.map +0 -1
  75. package/dist/esm/tabs/settings-tab.d.ts +0 -1
  76. package/dist/esm/tabs/settings-tab.js +0 -308
  77. package/dist/esm/tabs/settings-tab.js.map +0 -1
  78. package/dist/esm/utils/sanitize.d.ts +0 -3
  79. package/dist/esm/utils/sanitize.js +0 -31
  80. package/dist/esm/utils/sanitize.js.map +0 -1
  81. package/dist/esm/utils/storage.d.ts +0 -5
  82. package/dist/esm/utils/storage.js +0 -19
  83. package/dist/esm/utils/storage.js.map +0 -1
@@ -0,0 +1,1976 @@
1
+ import { usePiPWindow, keyboardModifiers, getAllPermutations, TANSTACK_DEVTOOLS, DevtoolsContext, PLUGIN_TITLE_CONTAINER_ID, PLUGIN_CONTAINER_ID, uppercaseFirstLetter } from '../chunk/CEHNENNI.js';
2
+ import { delegateEvents, createComponent, Portal, template, use, setAttribute, insert, memo, effect, className, addEventListener } from 'solid-js/web';
3
+ import { createContext, createSignal, createEffect, onCleanup, Show, createMemo, For, useContext, onMount } from 'solid-js';
4
+ import { createShortcut } from '@solid-primitives/keyboard';
5
+ import { ThemeContextProvider, MainPanel as MainPanel$1, Section, SectionTitle, SectionIcon, SectionDescription, Checkbox, Select, Input, Button } from '@tanstack/devtools-ui';
6
+ import clsx3 from 'clsx';
7
+ import * as goober from 'goober';
8
+ import { PiP, X, List, PageSearch, Cogs, SettingsCog, Link, Keyboard, GeoTag, SocialBubble } from '@tanstack/devtools-ui/icons';
9
+
10
+ var useDraw = (props) => {
11
+ const [activeHover, setActiveHover] = createSignal(false);
12
+ const [forceExpand, setForceExpand] = createSignal(false);
13
+ const expanded = createMemo(() => activeHover() || forceExpand());
14
+ let hoverTimeout = null;
15
+ onCleanup(() => {
16
+ if (hoverTimeout) clearTimeout(hoverTimeout);
17
+ });
18
+ const hoverUtils = {
19
+ enter: () => {
20
+ if (hoverTimeout) {
21
+ clearTimeout(hoverTimeout);
22
+ hoverTimeout = null;
23
+ }
24
+ setActiveHover(true);
25
+ },
26
+ leave: () => {
27
+ hoverTimeout = setTimeout(() => {
28
+ setActiveHover(false);
29
+ }, props.animationMs);
30
+ }
31
+ };
32
+ return {
33
+ expanded,
34
+ setForceExpand,
35
+ hoverUtils,
36
+ animationMs: props.animationMs
37
+ };
38
+ };
39
+ var DrawContext = createContext(void 0);
40
+ var DrawClientProvider = (props) => {
41
+ const value = useDraw({
42
+ animationMs: props.animationMs
43
+ });
44
+ return createComponent(DrawContext.Provider, {
45
+ value,
46
+ get children() {
47
+ return props.children;
48
+ }
49
+ });
50
+ };
51
+ function useDrawContext() {
52
+ const context = useContext(DrawContext);
53
+ if (context === void 0) {
54
+ throw new Error(`useDrawContext must be used within a DrawClientProvider`);
55
+ }
56
+ return context;
57
+ }
58
+
59
+ // src/context/use-devtools-context.ts
60
+ var useDevtoolsContext = () => {
61
+ const context = useContext(DevtoolsContext);
62
+ if (context === void 0) {
63
+ throw new Error(
64
+ "useDevtoolsShellContext must be used within a ShellContextProvider"
65
+ );
66
+ }
67
+ return context;
68
+ };
69
+ function useTheme() {
70
+ const { settings, setSettings } = useDevtoolsSettings();
71
+ const theme = createMemo(() => settings().theme);
72
+ return {
73
+ theme,
74
+ setTheme: (theme2) => setSettings({ theme: theme2 })
75
+ };
76
+ }
77
+ var usePlugins = () => {
78
+ const { store, setStore } = useDevtoolsContext();
79
+ const { setForceExpand } = useDrawContext();
80
+ const plugins = createMemo(() => store.plugins);
81
+ const activePlugin = createMemo(() => store.state.activePlugin);
82
+ createEffect(() => {
83
+ if (activePlugin() == null) {
84
+ setForceExpand(false);
85
+ } else {
86
+ setForceExpand(true);
87
+ }
88
+ });
89
+ const setActivePlugin = (pluginId) => {
90
+ setStore((prev) => ({
91
+ ...prev,
92
+ state: {
93
+ ...prev.state,
94
+ activePlugin: pluginId
95
+ }
96
+ }));
97
+ };
98
+ return { plugins, setActivePlugin, activePlugin };
99
+ };
100
+ var useDevtoolsState = () => {
101
+ const { store, setStore } = useDevtoolsContext();
102
+ const state = createMemo(() => store.state);
103
+ const setState = (newState) => {
104
+ setStore((prev) => ({
105
+ ...prev,
106
+ state: {
107
+ ...prev.state,
108
+ ...newState
109
+ }
110
+ }));
111
+ };
112
+ return { state, setState };
113
+ };
114
+ var useDevtoolsSettings = () => {
115
+ const { store, setStore } = useDevtoolsContext();
116
+ const settings = createMemo(() => store.settings);
117
+ const setSettings = (newSettings) => {
118
+ setStore((prev) => ({
119
+ ...prev,
120
+ settings: {
121
+ ...prev.settings,
122
+ ...newSettings
123
+ }
124
+ }));
125
+ };
126
+ return { setSettings, settings };
127
+ };
128
+ var usePersistOpen = () => {
129
+ const { state, setState } = useDevtoolsState();
130
+ const persistOpen = createMemo(() => state().persistOpen);
131
+ const setPersistOpen = (value) => {
132
+ setState({ persistOpen: value });
133
+ };
134
+ return { persistOpen, setPersistOpen };
135
+ };
136
+ var useHeight = () => {
137
+ const { state, setState } = useDevtoolsState();
138
+ const height = createMemo(() => state().height);
139
+ const setHeight = (newHeight) => {
140
+ setState({ height: newHeight });
141
+ };
142
+ return { height, setHeight };
143
+ };
144
+ var recursivelyChangeTabIndex = (node, remove = true) => {
145
+ if (remove) {
146
+ node.setAttribute("tabIndex", "-1");
147
+ } else {
148
+ node.removeAttribute("tabIndex");
149
+ }
150
+ for (const child of node.children) {
151
+ recursivelyChangeTabIndex(child, remove);
152
+ }
153
+ };
154
+ var useDisableTabbing = (isOpen) => {
155
+ createEffect(() => {
156
+ const el = document.getElementById(TANSTACK_DEVTOOLS);
157
+ if (!el) return;
158
+ recursivelyChangeTabIndex(el, !isOpen());
159
+ });
160
+ };
161
+
162
+ // src/styles/tokens.ts
163
+ var tokens = {
164
+ colors: {
165
+ inherit: "inherit",
166
+ current: "currentColor",
167
+ transparent: "transparent",
168
+ black: "#000000",
169
+ white: "#ffffff",
170
+ neutral: {
171
+ 50: "#f9fafb",
172
+ 100: "#f2f4f7",
173
+ 200: "#eaecf0",
174
+ 300: "#d0d5dd",
175
+ 400: "#98a2b3",
176
+ 500: "#667085",
177
+ 600: "#475467",
178
+ 700: "#344054",
179
+ 800: "#1d2939",
180
+ 900: "#101828"
181
+ },
182
+ darkGray: {
183
+ 50: "#525c7a",
184
+ 100: "#49536e",
185
+ 200: "#414962",
186
+ 300: "#394056",
187
+ 400: "#313749",
188
+ 500: "#292e3d",
189
+ 600: "#212530",
190
+ 700: "#191c24",
191
+ 800: "#111318",
192
+ 900: "#0b0d10"
193
+ },
194
+ gray: {
195
+ 50: "#f9fafb",
196
+ 100: "#f2f4f7",
197
+ 200: "#eaecf0",
198
+ 300: "#d0d5dd",
199
+ 400: "#98a2b3",
200
+ 500: "#667085",
201
+ 600: "#475467",
202
+ 700: "#344054",
203
+ 800: "#1d2939",
204
+ 900: "#101828"
205
+ },
206
+ blue: {
207
+ 25: "#F5FAFF",
208
+ 50: "#EFF8FF",
209
+ 100: "#D1E9FF",
210
+ 200: "#B2DDFF",
211
+ 300: "#84CAFF",
212
+ 400: "#53B1FD",
213
+ 500: "#2E90FA",
214
+ 600: "#1570EF",
215
+ 700: "#175CD3",
216
+ 800: "#1849A9",
217
+ 900: "#194185"
218
+ },
219
+ green: {
220
+ 25: "#F6FEF9",
221
+ 50: "#ECFDF3",
222
+ 100: "#D1FADF",
223
+ 200: "#A6F4C5",
224
+ 300: "#6CE9A6",
225
+ 400: "#32D583",
226
+ 500: "#12B76A",
227
+ 600: "#039855",
228
+ 700: "#027A48",
229
+ 800: "#05603A",
230
+ 900: "#054F31"
231
+ },
232
+ red: {
233
+ 50: "#fef2f2",
234
+ 100: "#fee2e2",
235
+ 200: "#fecaca",
236
+ 300: "#fca5a5",
237
+ 400: "#f87171",
238
+ 500: "#ef4444",
239
+ 600: "#dc2626",
240
+ 700: "#b91c1c",
241
+ 800: "#991b1b",
242
+ 900: "#7f1d1d",
243
+ 950: "#450a0a"
244
+ },
245
+ yellow: {
246
+ 25: "#FFFCF5",
247
+ 50: "#FFFAEB",
248
+ 100: "#FEF0C7",
249
+ 200: "#FEDF89",
250
+ 300: "#FEC84B",
251
+ 400: "#FDB022",
252
+ 500: "#F79009",
253
+ 600: "#DC6803",
254
+ 700: "#B54708",
255
+ 800: "#93370D",
256
+ 900: "#7A2E0E"
257
+ },
258
+ purple: {
259
+ 25: "#FAFAFF",
260
+ 50: "#F4F3FF",
261
+ 100: "#EBE9FE",
262
+ 200: "#D9D6FE",
263
+ 300: "#BDB4FE",
264
+ 400: "#9B8AFB",
265
+ 500: "#7A5AF8",
266
+ 600: "#6938EF",
267
+ 700: "#5925DC",
268
+ 800: "#4A1FB8",
269
+ 900: "#3E1C96"
270
+ },
271
+ teal: {
272
+ 25: "#F6FEFC",
273
+ 50: "#F0FDF9",
274
+ 100: "#CCFBEF",
275
+ 200: "#99F6E0",
276
+ 300: "#5FE9D0",
277
+ 400: "#2ED3B7",
278
+ 500: "#15B79E",
279
+ 600: "#0E9384",
280
+ 700: "#107569",
281
+ 800: "#125D56",
282
+ 900: "#134E48"
283
+ },
284
+ pink: {
285
+ 25: "#fdf2f8",
286
+ 50: "#fce7f3",
287
+ 100: "#fbcfe8",
288
+ 200: "#f9a8d4",
289
+ 300: "#f472b6",
290
+ 400: "#ec4899",
291
+ 500: "#db2777",
292
+ 600: "#be185d",
293
+ 700: "#9d174d",
294
+ 800: "#831843",
295
+ 900: "#500724"
296
+ },
297
+ cyan: {
298
+ 25: "#ecfeff",
299
+ 50: "#cffafe",
300
+ 100: "#a5f3fc",
301
+ 200: "#67e8f9",
302
+ 300: "#22d3ee",
303
+ 400: "#06b6d4",
304
+ 500: "#0891b2",
305
+ 600: "#0e7490",
306
+ 700: "#155e75",
307
+ 800: "#164e63",
308
+ 900: "#083344"
309
+ }
310
+ },
311
+ alpha: {
312
+ 100: "ff",
313
+ 90: "e5",
314
+ 80: "cc",
315
+ 70: "b3",
316
+ 60: "99",
317
+ 50: "80",
318
+ 40: "66",
319
+ 30: "4d",
320
+ 20: "33",
321
+ 10: "1a",
322
+ 0: "00"
323
+ },
324
+ font: {
325
+ size: {
326
+ "2xs": "calc(var(--tsrd-font-size) * 0.625)",
327
+ xs: "calc(var(--tsrd-font-size) * 0.75)",
328
+ sm: "calc(var(--tsrd-font-size) * 0.875)",
329
+ md: "var(--tsrd-font-size)",
330
+ lg: "calc(var(--tsrd-font-size) * 1.125)",
331
+ xl: "calc(var(--tsrd-font-size) * 1.25)",
332
+ "2xl": "calc(var(--tsrd-font-size) * 1.5)",
333
+ "3xl": "calc(var(--tsrd-font-size) * 1.875)",
334
+ "4xl": "calc(var(--tsrd-font-size) * 2.25)",
335
+ "5xl": "calc(var(--tsrd-font-size) * 3)",
336
+ "6xl": "calc(var(--tsrd-font-size) * 3.75)",
337
+ "7xl": "calc(var(--tsrd-font-size) * 4.5)",
338
+ "8xl": "calc(var(--tsrd-font-size) * 6)",
339
+ "9xl": "calc(var(--tsrd-font-size) * 8)"
340
+ },
341
+ lineHeight: {
342
+ "3xs": "calc(var(--tsrd-font-size) * 0.75)",
343
+ "2xs": "calc(var(--tsrd-font-size) * 0.875)",
344
+ xs: "calc(var(--tsrd-font-size) * 1)",
345
+ sm: "calc(var(--tsrd-font-size) * 1.25)",
346
+ md: "calc(var(--tsrd-font-size) * 1.5)",
347
+ lg: "calc(var(--tsrd-font-size) * 1.75)",
348
+ xl: "calc(var(--tsrd-font-size) * 2)",
349
+ "2xl": "calc(var(--tsrd-font-size) * 2.25)",
350
+ "3xl": "calc(var(--tsrd-font-size) * 2.5)",
351
+ "4xl": "calc(var(--tsrd-font-size) * 2.75)",
352
+ "5xl": "calc(var(--tsrd-font-size) * 3)",
353
+ "6xl": "calc(var(--tsrd-font-size) * 3.25)",
354
+ "7xl": "calc(var(--tsrd-font-size) * 3.5)",
355
+ "8xl": "calc(var(--tsrd-font-size) * 3.75)",
356
+ "9xl": "calc(var(--tsrd-font-size) * 4)"
357
+ },
358
+ weight: {
359
+ thin: "100",
360
+ extralight: "200",
361
+ light: "300",
362
+ normal: "400",
363
+ medium: "500",
364
+ semibold: "600",
365
+ bold: "700",
366
+ extrabold: "800",
367
+ black: "900"
368
+ },
369
+ fontFamily: {
370
+ sans: "ui-sans-serif, Inter, system-ui, sans-serif, sans-serif",
371
+ mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`
372
+ }
373
+ },
374
+ breakpoints: {
375
+ xs: "320px",
376
+ sm: "640px",
377
+ md: "768px",
378
+ lg: "1024px",
379
+ xl: "1280px",
380
+ "2xl": "1536px"
381
+ },
382
+ border: {
383
+ radius: {
384
+ none: "0px",
385
+ xs: "calc(var(--tsrd-font-size) * 0.125)",
386
+ sm: "calc(var(--tsrd-font-size) * 0.25)",
387
+ md: "calc(var(--tsrd-font-size) * 0.375)",
388
+ lg: "calc(var(--tsrd-font-size) * 0.5)",
389
+ xl: "calc(var(--tsrd-font-size) * 0.75)",
390
+ "2xl": "calc(var(--tsrd-font-size) * 1)",
391
+ "3xl": "calc(var(--tsrd-font-size) * 1.5)",
392
+ full: "9999px"
393
+ }
394
+ },
395
+ size: {
396
+ 0: "0px",
397
+ 0.25: "calc(var(--tsrd-font-size) * 0.0625)",
398
+ 0.5: "calc(var(--tsrd-font-size) * 0.125)",
399
+ 1: "calc(var(--tsrd-font-size) * 0.25)",
400
+ 1.5: "calc(var(--tsrd-font-size) * 0.375)",
401
+ 2: "calc(var(--tsrd-font-size) * 0.5)",
402
+ 2.5: "calc(var(--tsrd-font-size) * 0.625)",
403
+ 3: "calc(var(--tsrd-font-size) * 0.75)",
404
+ 3.5: "calc(var(--tsrd-font-size) * 0.875)",
405
+ 4: "calc(var(--tsrd-font-size) * 1)",
406
+ 4.5: "calc(var(--tsrd-font-size) * 1.125)",
407
+ 5: "calc(var(--tsrd-font-size) * 1.25)",
408
+ 5.5: "calc(var(--tsrd-font-size) * 1.375)",
409
+ 6: "calc(var(--tsrd-font-size) * 1.5)",
410
+ 6.5: "calc(var(--tsrd-font-size) * 1.625)",
411
+ 7: "calc(var(--tsrd-font-size) * 1.75)",
412
+ 8: "calc(var(--tsrd-font-size) * 2)",
413
+ 9: "calc(var(--tsrd-font-size) * 2.25)",
414
+ 10: "calc(var(--tsrd-font-size) * 2.5)",
415
+ 11: "calc(var(--tsrd-font-size) * 2.75)",
416
+ 12: "calc(var(--tsrd-font-size) * 3)",
417
+ 14: "calc(var(--tsrd-font-size) * 3.5)",
418
+ 16: "calc(var(--tsrd-font-size) * 4)",
419
+ 20: "calc(var(--tsrd-font-size) * 5)",
420
+ 24: "calc(var(--tsrd-font-size) * 6)",
421
+ 28: "calc(var(--tsrd-font-size) * 7)",
422
+ 32: "calc(var(--tsrd-font-size) * 8)",
423
+ 36: "calc(var(--tsrd-font-size) * 9)",
424
+ 40: "calc(var(--tsrd-font-size) * 10)",
425
+ 44: "calc(var(--tsrd-font-size) * 11)",
426
+ 48: "calc(var(--tsrd-font-size) * 12)",
427
+ 52: "calc(var(--tsrd-font-size) * 13)",
428
+ 56: "calc(var(--tsrd-font-size) * 14)",
429
+ 60: "calc(var(--tsrd-font-size) * 15)",
430
+ 64: "calc(var(--tsrd-font-size) * 16)",
431
+ 72: "calc(var(--tsrd-font-size) * 18)",
432
+ 80: "calc(var(--tsrd-font-size) * 20)",
433
+ 96: "calc(var(--tsrd-font-size) * 24)"
434
+ },
435
+ shadow: {
436
+ xs: (_ = "rgb(0 0 0 / 0.1)") => `0 1px 2px 0 rgb(0 0 0 / 0.05)`,
437
+ sm: (color = "rgb(0 0 0 / 0.1)") => `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}`,
438
+ md: (color = "rgb(0 0 0 / 0.1)") => `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}`,
439
+ lg: (color = "rgb(0 0 0 / 0.1)") => `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}`,
440
+ xl: (color = "rgb(0 0 0 / 0.1)") => `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}`,
441
+ "2xl": (color = "rgb(0 0 0 / 0.25)") => `0 25px 50px -12px ${color}`,
442
+ inner: (color = "rgb(0 0 0 / 0.05)") => `inset 0 2px 4px 0 ${color}`,
443
+ none: () => `none`
444
+ },
445
+ zIndices: {
446
+ hide: -1,
447
+ auto: "auto",
448
+ base: 0,
449
+ docked: 10,
450
+ dropdown: 1e3,
451
+ sticky: 1100,
452
+ banner: 1200,
453
+ overlay: 1300,
454
+ modal: 1400,
455
+ popover: 1500,
456
+ skipLink: 1600,
457
+ toast: 1700,
458
+ tooltip: 1800
459
+ }
460
+ };
461
+
462
+ // src/styles/use-styles.ts
463
+ var mSecondsToCssSeconds = (mSeconds) => `${(mSeconds / 1e3).toFixed(2)}s`;
464
+ var stylesFactory = (theme) => {
465
+ const { colors, font, size, border } = tokens;
466
+ const { fontFamily, size: fontSize } = font;
467
+ const css2 = goober.css;
468
+ const t = (light, dark) => theme === "light" ? light : dark;
469
+ return {
470
+ seoTabContainer: css2`
471
+ padding: 0;
472
+ margin: 0 auto;
473
+ background: ${t(colors.white, colors.darkGray[700])};
474
+ border-radius: 12px;
475
+ box-shadow: 0 2px 16px ${t("rgba(0, 0, 0, 0.04)", "rgba(0, 0, 0, 0.08)")};
476
+ overflow-y: auto;
477
+ height: 100%;
478
+ display: flex;
479
+ flex-direction: column;
480
+ gap: 0;
481
+ width: 100%;
482
+ overflow-y: auto;
483
+ `,
484
+ seoTabTitle: css2`
485
+ font-size: 1.25rem;
486
+ font-weight: 600;
487
+ color: ${t(colors.purple[500], colors.purple[400])};
488
+ margin: 0;
489
+ padding: 1rem 1.5rem 0.5rem 1.5rem;
490
+ text-align: left;
491
+ border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};
492
+ `,
493
+ seoTabSection: css2`
494
+ padding: 1.5rem;
495
+ background: ${t(colors.gray[100], colors.gray[800])};
496
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
497
+ display: flex;
498
+ flex-direction: column;
499
+ gap: 0.5rem;
500
+ margin-bottom: 2rem;
501
+ border-radius: 0.75rem;
502
+ `,
503
+ seoPreviewSection: css2`
504
+ display: flex;
505
+ flex-direction: row;
506
+ gap: 16px;
507
+ margin-bottom: 0;
508
+ justify-content: flex-start;
509
+ align-items: flex-start;
510
+ overflow-x: auto;
511
+ flex-wrap: wrap;
512
+ padding-bottom: 0.5rem;
513
+ `,
514
+ seoPreviewCard: css2`
515
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
516
+ border-radius: 8px;
517
+ padding: 12px 10px;
518
+ background: ${t(colors.white, colors.darkGray[900])};
519
+ margin-bottom: 0;
520
+ box-shadow: 0 1px 4px ${t("rgba(0,0,0,0.02)", "rgba(0,0,0,0.04)")};
521
+ display: flex;
522
+ flex-direction: column;
523
+ align-items: flex-start;
524
+ min-width: 200px;
525
+ max-width: 240px;
526
+ font-size: 0.95rem;
527
+ gap: 4px;
528
+ `,
529
+ seoPreviewHeader: css2`
530
+ font-size: 1rem;
531
+ font-weight: 500;
532
+ margin-bottom: 6px;
533
+ color: ${t(colors.purple[500], colors.purple[400])};
534
+ `,
535
+ seoPreviewImage: css2`
536
+ max-width: 100%;
537
+ border-radius: 6px;
538
+ margin-bottom: 6px;
539
+ box-shadow: 0 1px 2px ${t("rgba(0,0,0,0.03)", "rgba(0,0,0,0.06)")};
540
+ height: 160px;
541
+ `,
542
+ seoPreviewTitle: css2`
543
+ font-size: 1rem;
544
+ font-weight: 600;
545
+ margin-bottom: 2px;
546
+ color: ${t(colors.gray[900], colors.gray[100])};
547
+ `,
548
+ seoPreviewDesc: css2`
549
+ color: ${t(colors.gray[700], colors.gray[300])};
550
+ margin-bottom: 2px;
551
+ font-size: 0.95rem;
552
+ `,
553
+ seoPreviewUrl: css2`
554
+ color: ${t(colors.gray[500], colors.gray[500])};
555
+ font-size: 0.9rem;
556
+ margin-bottom: 2px;
557
+ word-break: break-all;
558
+ `,
559
+ seoMissingTagsSection: css2`
560
+ margin-top: 4px;
561
+ font-size: 0.95rem;
562
+ color: ${t(colors.red[400], colors.red[400])};
563
+ `,
564
+ seoMissingTagsList: css2`
565
+ margin: 4px 0 0 0;
566
+ padding: 0;
567
+ list-style: none;
568
+ display: flex;
569
+ flex-wrap: wrap;
570
+ gap: 6px;
571
+ max-width: 240px;
572
+ `,
573
+ seoMissingTag: css2`
574
+ background: ${t(colors.red[100], colors.red[500] + "22")};
575
+ color: ${t(colors.red[700], colors.red[500])};
576
+ border-radius: 4px;
577
+ padding: 1px 6px;
578
+ font-size: 0.9rem;
579
+ font-weight: 500;
580
+ `,
581
+ seoAllTagsFound: css2`
582
+ color: ${t(colors.green[700], colors.green[500])};
583
+ font-weight: 500;
584
+ margin-left: 6px;
585
+ font-size: 0.95rem;
586
+ `,
587
+ devtoolsPanelContainer: (panelLocation, isDetached) => css2`
588
+ direction: ltr;
589
+ position: fixed;
590
+ overflow-y: hidden;
591
+ overflow-x: hidden;
592
+ ${panelLocation}: 0;
593
+ right: 0;
594
+ z-index: 99999;
595
+ width: 100%;
596
+ ${isDetached ? "" : "max-height: 90%;"}
597
+ border-top: 1px solid ${t(colors.gray[300], colors.gray[700])};
598
+ transform-origin: top;
599
+ `,
600
+ devtoolsPanelContainerVisibility: (isOpen) => {
601
+ return css2`
602
+ visibility: ${isOpen ? "visible" : "hidden"};
603
+ height: ${isOpen ? "auto" : "0"};
604
+ `;
605
+ },
606
+ devtoolsPanelContainerResizing: (isResizing) => {
607
+ if (isResizing()) {
608
+ return css2`
609
+ transition: none;
610
+ `;
611
+ }
612
+ return css2`
613
+ transition: all 0.4s ease;
614
+ `;
615
+ },
616
+ devtoolsPanelContainerAnimation: (isOpen, height) => {
617
+ if (isOpen) {
618
+ return css2`
619
+ pointer-events: auto;
620
+ transform: translateY(0);
621
+ `;
622
+ }
623
+ return css2`
624
+ pointer-events: none;
625
+ transform: translateY(${height}px);
626
+ `;
627
+ },
628
+ devtoolsPanel: css2`
629
+ display: flex;
630
+ font-size: ${fontSize.sm};
631
+ font-family: ${fontFamily.sans};
632
+ background-color: ${t(colors.white, colors.darkGray[700])};
633
+ color: ${t(colors.gray[900], colors.gray[300])};
634
+ width: w-screen;
635
+ flex-direction: row;
636
+ overflow-x: hidden;
637
+ overflow-y: hidden;
638
+ height: 100%;
639
+ `,
640
+ dragHandle: (panelLocation) => css2`
641
+ position: absolute;
642
+ left: 0;
643
+ ${panelLocation === "bottom" ? "top" : "bottom"}: 0;
644
+ width: 100%;
645
+ height: 4px;
646
+ cursor: row-resize;
647
+ user-select: none;
648
+ z-index: 100000;
649
+ &:hover {
650
+ background-color: ${t(colors.purple[700], colors.purple[400])};
651
+ }
652
+ `,
653
+ mainCloseBtn: css2`
654
+ background: transparent;
655
+ position: fixed;
656
+ z-index: 99999;
657
+ display: inline-flex;
658
+ width: fit-content;
659
+ cursor: pointer;
660
+ appearance: none;
661
+ border: 0;
662
+ align-items: center;
663
+ padding: 0;
664
+ font-size: ${font.size.xs};
665
+ cursor: pointer;
666
+ transition: all 0.25s ease-out;
667
+ & > img {
668
+ width: 56px;
669
+ height: 56px;
670
+ transition: all 0.3s ease;
671
+ outline-offset: 2px;
672
+ border-radius: ${border.radius.full};
673
+ outline: 2px solid transparent;
674
+ }
675
+ &:hide-until-hover {
676
+ opacity: 0;
677
+ pointer-events: none;
678
+ visibility: hidden;
679
+ }
680
+ &:hide-until-hover:hover {
681
+ opacity: 1;
682
+ pointer-events: auto;
683
+ visibility: visible;
684
+ }
685
+ & > img:focus-visible,
686
+ img:hover {
687
+ outline: 2px solid ${t(colors.black, colors.black)};
688
+ }
689
+ `,
690
+ mainCloseBtnPosition: (position) => {
691
+ const base = css2`
692
+ ${position === "top-left" ? `top: ${size[2]}; left: ${size[2]};` : ""}
693
+ ${position === "top-right" ? `top: ${size[2]}; right: ${size[2]};` : ""}
694
+ ${position === "middle-left" ? `top: 50%; left: ${size[2]}; transform: translateY(-50%);` : ""}
695
+ ${position === "middle-right" ? `top: 50%; right: ${size[2]}; transform: translateY(-50%);` : ""}
696
+ ${position === "bottom-left" ? `bottom: ${size[2]}; left: ${size[2]};` : ""}
697
+ ${position === "bottom-right" ? `bottom: ${size[2]}; right: ${size[2]};` : ""}
698
+ `;
699
+ return base;
700
+ },
701
+ mainCloseBtnAnimation: (isOpen, hideUntilHover) => {
702
+ if (!isOpen) {
703
+ return hideUntilHover ? css2`
704
+ opacity: 0;
705
+
706
+ &:hover {
707
+ opacity: 1;
708
+ pointer-events: auto;
709
+ visibility: visible;
710
+ }
711
+ ` : css2`
712
+ opacity: 1;
713
+ pointer-events: auto;
714
+ visibility: visible;
715
+ `;
716
+ }
717
+ return css2`
718
+ opacity: 0;
719
+ pointer-events: none;
720
+ visibility: hidden;
721
+ `;
722
+ },
723
+ tabContainer: css2`
724
+ display: flex;
725
+ flex-direction: column;
726
+ align-items: center;
727
+ justify-content: flex-start;
728
+ height: 100%;
729
+ background-color: ${t(colors.gray[100], colors.darkGray[800])};
730
+ border-right: 1px solid ${t(colors.gray[300], colors.gray[700])};
731
+ box-shadow: 0 1px 0 ${t(colors.gray[200], colors.gray[700])};
732
+ position: relative;
733
+ width: ${size[10]};
734
+ `,
735
+ tab: css2`
736
+ display: flex;
737
+ align-items: center;
738
+ justify-content: center;
739
+ width: 100%;
740
+ height: ${size[10]};
741
+ cursor: pointer;
742
+ font-size: ${fontSize.sm};
743
+ font-family: ${fontFamily.sans};
744
+ color: ${t(colors.gray[700], colors.gray[300])};
745
+ background-color: transparent;
746
+ border: none;
747
+ transition: all 0.2s ease-in-out;
748
+ border-left: 2px solid transparent;
749
+ &:hover:not(.close):not(.active):not(.detach) {
750
+ background-color: ${t(colors.gray[200], colors.gray[700])};
751
+ color: ${t(colors.gray[900], colors.gray[100])};
752
+ border-left: 2px solid ${t(colors.purple[700], colors.purple[500])};
753
+ }
754
+ &.active {
755
+ background-color: ${t(colors.purple[200], colors.purple[500])};
756
+ color: ${t(colors.gray[900], colors.gray[100])};
757
+ border-left: 2px solid ${t(colors.purple[700], colors.purple[500])};
758
+ }
759
+ &.detach {
760
+ &:hover {
761
+ background-color: ${t(colors.gray[200], colors.gray[700])};
762
+ }
763
+ &:hover {
764
+ color: ${t(colors.green[700], colors.green[500])};
765
+ }
766
+ }
767
+ &.close {
768
+ margin-top: auto;
769
+ &:hover {
770
+ background-color: ${t(colors.gray[200], colors.gray[700])};
771
+ }
772
+ &:hover {
773
+ color: ${t(colors.red[700], colors.red[500])};
774
+ }
775
+ }
776
+ &.disabled {
777
+ cursor: not-allowed;
778
+ opacity: 0.2;
779
+ pointer-events: none;
780
+ }
781
+ &.disabled:hover {
782
+ background-color: transparent;
783
+ color: ${colors.gray[300]};
784
+ }
785
+ `,
786
+ tabContent: css2`
787
+ transition: all 0.2s ease-in-out;
788
+ width: 100%;
789
+ height: 100%;
790
+ `,
791
+ pluginsTabPanel: css2`
792
+ display: flex;
793
+ flex-direction: row;
794
+ width: 100%;
795
+ height: 100%;
796
+ overflow: hidden;
797
+ `,
798
+ pluginsTabDraw: (isExpanded) => css2`
799
+ width: ${isExpanded ? size[48] : 0};
800
+ height: 100%;
801
+ background-color: ${t(colors.white, colors.darkGray[800])};
802
+ box-shadow: 0 1px 0 ${colors.gray[700]};
803
+ ${isExpanded ? `border-right: 1px solid ${t(colors.gray[300], colors.gray[700])};` : ""}
804
+ `,
805
+ pluginsTabDrawExpanded: css2`
806
+ width: ${size[48]};
807
+ border-right: 1px solid ${t(colors.gray[300], colors.gray[700])};
808
+ `,
809
+ pluginsTabDrawTransition: (mSeconds) => {
810
+ return css2`
811
+ transition: width ${mSecondsToCssSeconds(mSeconds)} ease;
812
+ `;
813
+ },
814
+ pluginsTabSidebar: (isExpanded) => css2`
815
+ width: ${size[48]};
816
+ overflow-y: auto;
817
+ transform: ${isExpanded ? "translateX(0)" : "translateX(-100%)"};
818
+ `,
819
+ pluginsTabSidebarTransition: (mSeconds) => {
820
+ return css2`
821
+ transition: transform ${mSecondsToCssSeconds(mSeconds)} ease;
822
+ `;
823
+ },
824
+ pluginName: css2`
825
+ font-size: ${fontSize.xs};
826
+ font-family: ${fontFamily.sans};
827
+ color: ${t(colors.gray[700], colors.gray[300])};
828
+ padding: ${size[2]};
829
+ cursor: pointer;
830
+ text-align: center;
831
+ transition: all 0.2s ease-in-out;
832
+ &:hover {
833
+ background-color: ${t(colors.gray[200], colors.gray[700])};
834
+ color: ${t(colors.gray[900], colors.gray[100])};
835
+ padding: ${size[2]};
836
+ }
837
+ &.active {
838
+ background-color: ${t(colors.purple[200], colors.purple[500])};
839
+ color: ${t(colors.gray[900], colors.gray[100])};
840
+ }
841
+ `,
842
+ pluginsTabContent: css2`
843
+ width: 100%;
844
+ height: 100%;
845
+ overflow-y: auto;
846
+ `,
847
+ settingsGroup: css2`
848
+ display: flex;
849
+ flex-direction: column;
850
+ gap: 1rem;
851
+ `,
852
+ conditionalSetting: css2`
853
+ margin-left: 1.5rem;
854
+ padding-left: 1rem;
855
+ border-left: 2px solid ${t(colors.purple[600], colors.purple[400])};
856
+ background-color: ${t(colors.gray[100], colors.darkGray[800])};
857
+ padding: 1rem;
858
+ border-radius: 0.5rem;
859
+ margin-top: 0.5rem;
860
+ `,
861
+ settingRow: css2`
862
+ display: grid;
863
+ grid-template-columns: 1fr 1fr;
864
+ gap: 1rem;
865
+
866
+ @media (max-width: 768px) {
867
+ grid-template-columns: 1fr;
868
+ }
869
+ `,
870
+ settingsModifiers: css2`
871
+ display: flex;
872
+ gap: 0.5rem;
873
+ `
874
+ };
875
+ };
876
+ function useStyles() {
877
+ const { theme } = useTheme();
878
+ const [styles, setStyles] = createSignal(stylesFactory(theme()));
879
+ createEffect(() => {
880
+ setStyles(stylesFactory(theme()));
881
+ });
882
+ return styles;
883
+ }
884
+
885
+ // src/components/tanstack-logo.png
886
+ var tanstack_logo_default = "data:image/png;base64,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";
887
+
888
+ // src/components/trigger.tsx
889
+ var _tmpl$ = /* @__PURE__ */ template(`<button type=button aria-label="Open TanStack Devtools"><img alt="TanStack Logo">`);
890
+ var Trigger = ({
891
+ isOpen,
892
+ setIsOpen
893
+ }) => {
894
+ const {
895
+ settings
896
+ } = useDevtoolsSettings();
897
+ const styles = useStyles();
898
+ const buttonStyle = createMemo(() => {
899
+ return clsx3(styles().mainCloseBtn, styles().mainCloseBtnPosition(settings().position), styles().mainCloseBtnAnimation(isOpen(), settings().hideUntilHover));
900
+ });
901
+ return (() => {
902
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
903
+ _el$.$$click = () => setIsOpen(!isOpen());
904
+ setAttribute(_el$2, "src", tanstack_logo_default);
905
+ effect(() => className(_el$, buttonStyle()));
906
+ return _el$;
907
+ })();
908
+ };
909
+ delegateEvents(["click"]);
910
+ var _tmpl$2 = /* @__PURE__ */ template(`<div>`);
911
+ var MainPanel = (props) => {
912
+ const styles = useStyles();
913
+ const {
914
+ height
915
+ } = useHeight();
916
+ const {
917
+ settings
918
+ } = useDevtoolsSettings();
919
+ const pip = usePiPWindow();
920
+ return (() => {
921
+ var _el$ = _tmpl$2();
922
+ setAttribute(_el$, "id", TANSTACK_DEVTOOLS);
923
+ insert(_el$, createComponent(DrawClientProvider, {
924
+ animationMs: 400,
925
+ get children() {
926
+ return props.children;
927
+ }
928
+ }));
929
+ effect((_p$) => {
930
+ var _v$ = pip().pipWindow ? "100vh" : height() + "px", _v$2 = clsx3(styles().devtoolsPanelContainer(settings().panelLocation, Boolean(pip().pipWindow)), styles().devtoolsPanelContainerAnimation(props.isOpen(), height()), styles().devtoolsPanelContainerVisibility(props.isOpen()), styles().devtoolsPanelContainerResizing(props.isResizing));
931
+ _v$ !== _p$.e && ((_p$.e = _v$) != null ? _el$.style.setProperty("height", _v$) : _el$.style.removeProperty("height"));
932
+ _v$2 !== _p$.t && className(_el$, _p$.t = _v$2);
933
+ return _p$;
934
+ }, {
935
+ e: void 0,
936
+ t: void 0
937
+ });
938
+ return _el$;
939
+ })();
940
+ };
941
+ var _tmpl$3 = /* @__PURE__ */ template(`<div>`);
942
+ var ContentPanel = (props) => {
943
+ const styles = useStyles();
944
+ const {
945
+ settings
946
+ } = useDevtoolsSettings();
947
+ return (() => {
948
+ var _el$ = _tmpl$3();
949
+ var _ref$ = props.ref;
950
+ typeof _ref$ === "function" ? use(_ref$, _el$) : props.ref = _el$;
951
+ insert(_el$, (() => {
952
+ var _c$ = memo(() => !!props.handleDragStart);
953
+ return () => _c$() ? (() => {
954
+ var _el$2 = _tmpl$3();
955
+ addEventListener(_el$2, "mousedown", props.handleDragStart, true);
956
+ effect(() => className(_el$2, styles().dragHandle(settings().panelLocation)));
957
+ return _el$2;
958
+ })() : null;
959
+ })(), null);
960
+ insert(_el$, () => props.children, null);
961
+ effect(() => className(_el$, styles().devtoolsPanel));
962
+ return _el$;
963
+ })();
964
+ };
965
+ delegateEvents(["mousedown"]);
966
+ var _tmpl$4 = /* @__PURE__ */ template(`<div>`);
967
+ var _tmpl$22 = /* @__PURE__ */ template(`<div><div></div>Final shortcut is: `);
968
+ var _tmpl$32 = /* @__PURE__ */ template(`<div><div>`);
969
+ var SettingsTab = () => {
970
+ const {
971
+ setSettings,
972
+ settings
973
+ } = useDevtoolsSettings();
974
+ const styles = useStyles();
975
+ const hotkey = createMemo(() => settings().openHotkey);
976
+ const modifiers = ["Control", "Alt", "Meta", "Shift"];
977
+ const changeHotkey = (newHotkey) => () => {
978
+ if (hotkey().includes(newHotkey)) {
979
+ return setSettings({
980
+ openHotkey: hotkey().filter((key) => key !== newHotkey)
981
+ });
982
+ }
983
+ const existingModifiers = hotkey().filter((key) => modifiers.includes(key));
984
+ const otherModifiers = hotkey().filter((key) => !modifiers.includes(key));
985
+ setSettings({
986
+ openHotkey: [...existingModifiers, newHotkey, ...otherModifiers]
987
+ });
988
+ };
989
+ return createComponent(MainPanel$1, {
990
+ withPadding: true,
991
+ get children() {
992
+ return [createComponent(Section, {
993
+ get children() {
994
+ return [createComponent(SectionTitle, {
995
+ get children() {
996
+ return [createComponent(SectionIcon, {
997
+ get children() {
998
+ return createComponent(SettingsCog, {});
999
+ }
1000
+ }), "General"];
1001
+ }
1002
+ }), createComponent(SectionDescription, {
1003
+ children: "Configure general behavior of the devtools panel."
1004
+ }), (() => {
1005
+ var _el$ = _tmpl$4();
1006
+ insert(_el$, createComponent(Checkbox, {
1007
+ label: "Default open",
1008
+ description: "Automatically open the devtools panel when the page loads",
1009
+ onChange: () => setSettings({
1010
+ defaultOpen: !settings().defaultOpen
1011
+ }),
1012
+ get checked() {
1013
+ return settings().defaultOpen;
1014
+ }
1015
+ }), null);
1016
+ insert(_el$, createComponent(Checkbox, {
1017
+ label: "Hide trigger until hovered",
1018
+ description: "Keep the devtools trigger button hidden until you hover over its area",
1019
+ onChange: () => setSettings({
1020
+ hideUntilHover: !settings().hideUntilHover
1021
+ }),
1022
+ get checked() {
1023
+ return settings().hideUntilHover;
1024
+ }
1025
+ }), null);
1026
+ insert(_el$, createComponent(Select, {
1027
+ label: "Theme",
1028
+ description: "Choose the theme for the devtools panel",
1029
+ get value() {
1030
+ return settings().theme;
1031
+ },
1032
+ options: [{
1033
+ label: "Dark",
1034
+ value: "dark"
1035
+ }, {
1036
+ label: "Light",
1037
+ value: "light"
1038
+ }],
1039
+ onChange: (value) => setSettings({
1040
+ theme: value
1041
+ })
1042
+ }), null);
1043
+ effect(() => className(_el$, styles().settingsGroup));
1044
+ return _el$;
1045
+ })()];
1046
+ }
1047
+ }), createComponent(Section, {
1048
+ get children() {
1049
+ return [createComponent(SectionTitle, {
1050
+ get children() {
1051
+ return [createComponent(SectionIcon, {
1052
+ get children() {
1053
+ return createComponent(Link, {});
1054
+ }
1055
+ }), "URL Configuration"];
1056
+ }
1057
+ }), createComponent(SectionDescription, {
1058
+ children: "Control when devtools are available based on URL parameters."
1059
+ }), (() => {
1060
+ var _el$2 = _tmpl$4();
1061
+ insert(_el$2, createComponent(Checkbox, {
1062
+ label: "Require URL Flag",
1063
+ description: "Only show devtools when a specific URL parameter is present",
1064
+ get checked() {
1065
+ return settings().requireUrlFlag;
1066
+ },
1067
+ onChange: (checked) => setSettings({
1068
+ requireUrlFlag: checked
1069
+ })
1070
+ }), null);
1071
+ insert(_el$2, createComponent(Show, {
1072
+ get when() {
1073
+ return settings().requireUrlFlag;
1074
+ },
1075
+ get children() {
1076
+ var _el$3 = _tmpl$4();
1077
+ insert(_el$3, createComponent(Input, {
1078
+ label: "URL flag",
1079
+ description: "Enter the URL parameter name (e.g., 'debug' for ?debug=true)",
1080
+ placeholder: "debug",
1081
+ get value() {
1082
+ return settings().urlFlag;
1083
+ },
1084
+ onChange: (e) => setSettings({
1085
+ urlFlag: e
1086
+ })
1087
+ }));
1088
+ effect(() => className(_el$3, styles().conditionalSetting));
1089
+ return _el$3;
1090
+ }
1091
+ }), null);
1092
+ effect(() => className(_el$2, styles().settingsGroup));
1093
+ return _el$2;
1094
+ })()];
1095
+ }
1096
+ }), createComponent(Section, {
1097
+ get children() {
1098
+ return [createComponent(SectionTitle, {
1099
+ get children() {
1100
+ return [createComponent(SectionIcon, {
1101
+ get children() {
1102
+ return createComponent(Keyboard, {});
1103
+ }
1104
+ }), "Keyboard"];
1105
+ }
1106
+ }), createComponent(SectionDescription, {
1107
+ children: "Customize keyboard shortcuts for quick access."
1108
+ }), (() => {
1109
+ var _el$4 = _tmpl$22(), _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
1110
+ insert(_el$5, createComponent(Show, {
1111
+ keyed: true,
1112
+ get when() {
1113
+ return hotkey();
1114
+ },
1115
+ get children() {
1116
+ return [createComponent(Button, {
1117
+ variant: "success",
1118
+ get onclick() {
1119
+ return changeHotkey("Shift");
1120
+ },
1121
+ get outline() {
1122
+ return !hotkey().includes("Shift");
1123
+ },
1124
+ children: "Shift"
1125
+ }), createComponent(Button, {
1126
+ variant: "success",
1127
+ get onclick() {
1128
+ return changeHotkey("Alt");
1129
+ },
1130
+ get outline() {
1131
+ return !hotkey().includes("Alt");
1132
+ },
1133
+ children: "Alt"
1134
+ }), createComponent(Button, {
1135
+ variant: "success",
1136
+ get onclick() {
1137
+ return changeHotkey("Meta");
1138
+ },
1139
+ get outline() {
1140
+ return !hotkey().includes("Meta");
1141
+ },
1142
+ children: "Meta"
1143
+ }), createComponent(Button, {
1144
+ variant: "success",
1145
+ get onclick() {
1146
+ return changeHotkey("Control");
1147
+ },
1148
+ get outline() {
1149
+ return !hotkey().includes("Control");
1150
+ },
1151
+ children: "Control"
1152
+ })];
1153
+ }
1154
+ }));
1155
+ insert(_el$4, createComponent(Input, {
1156
+ label: "Hotkey to open/close devtools",
1157
+ description: "Use '+' to combine keys (e.g., 'a+b' or 'd'). This will be used with the enabled modifiers from above",
1158
+ placeholder: "a",
1159
+ get value() {
1160
+ return hotkey().filter((key) => !["Shift", "Meta", "Alt", "Ctrl"].includes(key)).join("+");
1161
+ },
1162
+ onChange: (e) => {
1163
+ const makeModifierArray = (key) => {
1164
+ if (key.length === 1) return [uppercaseFirstLetter(key)];
1165
+ const modifiers3 = [];
1166
+ for (const character of key) {
1167
+ const newLetter = uppercaseFirstLetter(character);
1168
+ if (!modifiers3.includes(newLetter)) modifiers3.push(newLetter);
1169
+ }
1170
+ return modifiers3;
1171
+ };
1172
+ const modifiers2 = e.split("+").flatMap((key) => makeModifierArray(key)).filter(Boolean);
1173
+ return setSettings({
1174
+ openHotkey: [...hotkey().filter((key) => ["Shift", "Meta", "Alt", "Ctrl"].includes(key)), ...modifiers2]
1175
+ });
1176
+ }
1177
+ }), _el$6);
1178
+ insert(_el$4, () => hotkey().join(" + "), null);
1179
+ effect((_p$) => {
1180
+ var _v$ = styles().settingsGroup, _v$2 = styles().settingsModifiers;
1181
+ _v$ !== _p$.e && className(_el$4, _p$.e = _v$);
1182
+ _v$2 !== _p$.t && className(_el$5, _p$.t = _v$2);
1183
+ return _p$;
1184
+ }, {
1185
+ e: void 0,
1186
+ t: void 0
1187
+ });
1188
+ return _el$4;
1189
+ })()];
1190
+ }
1191
+ }), createComponent(Section, {
1192
+ get children() {
1193
+ return [createComponent(SectionTitle, {
1194
+ get children() {
1195
+ return [createComponent(SectionIcon, {
1196
+ get children() {
1197
+ return createComponent(GeoTag, {});
1198
+ }
1199
+ }), "Position"];
1200
+ }
1201
+ }), createComponent(SectionDescription, {
1202
+ children: "Adjust the position of the trigger button and devtools panel."
1203
+ }), (() => {
1204
+ var _el$7 = _tmpl$32(), _el$8 = _el$7.firstChild;
1205
+ insert(_el$8, createComponent(Select, {
1206
+ label: "Trigger Position",
1207
+ options: [{
1208
+ label: "Bottom Right",
1209
+ value: "bottom-right"
1210
+ }, {
1211
+ label: "Bottom Left",
1212
+ value: "bottom-left"
1213
+ }, {
1214
+ label: "Top Right",
1215
+ value: "top-right"
1216
+ }, {
1217
+ label: "Top Left",
1218
+ value: "top-left"
1219
+ }, {
1220
+ label: "Middle Right",
1221
+ value: "middle-right"
1222
+ }, {
1223
+ label: "Middle Left",
1224
+ value: "middle-left"
1225
+ }],
1226
+ get value() {
1227
+ return settings().position;
1228
+ },
1229
+ onChange: (value) => setSettings({
1230
+ position: value
1231
+ })
1232
+ }), null);
1233
+ insert(_el$8, createComponent(Select, {
1234
+ label: "Panel Position",
1235
+ get value() {
1236
+ return settings().panelLocation;
1237
+ },
1238
+ options: [{
1239
+ label: "Top",
1240
+ value: "top"
1241
+ }, {
1242
+ label: "Bottom",
1243
+ value: "bottom"
1244
+ }],
1245
+ onChange: (value) => setSettings({
1246
+ panelLocation: value
1247
+ })
1248
+ }), null);
1249
+ effect((_p$) => {
1250
+ var _v$3 = styles().settingsGroup, _v$4 = styles().settingRow;
1251
+ _v$3 !== _p$.e && className(_el$7, _p$.e = _v$3);
1252
+ _v$4 !== _p$.t && className(_el$8, _p$.t = _v$4);
1253
+ return _p$;
1254
+ }, {
1255
+ e: void 0,
1256
+ t: void 0
1257
+ });
1258
+ return _el$7;
1259
+ })()];
1260
+ }
1261
+ })];
1262
+ }
1263
+ });
1264
+ };
1265
+ var _tmpl$5 = /* @__PURE__ */ template(`<div><div><div></div></div><div>`);
1266
+ var _tmpl$23 = /* @__PURE__ */ template(`<div><h3>`);
1267
+ var PluginsTab = () => {
1268
+ const {
1269
+ plugins,
1270
+ activePlugin,
1271
+ setActivePlugin
1272
+ } = usePlugins();
1273
+ const {
1274
+ expanded,
1275
+ hoverUtils,
1276
+ animationMs
1277
+ } = useDrawContext();
1278
+ let activePluginRef;
1279
+ const {
1280
+ theme
1281
+ } = useTheme();
1282
+ createEffect(() => {
1283
+ const currentActivePlugin = plugins()?.find((plugin) => plugin.id === activePlugin());
1284
+ if (activePluginRef && currentActivePlugin) {
1285
+ currentActivePlugin.render(activePluginRef, theme());
1286
+ }
1287
+ });
1288
+ const styles = useStyles();
1289
+ return (() => {
1290
+ var _el$ = _tmpl$5(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling;
1291
+ _el$2.addEventListener("mouseleave", () => {
1292
+ hoverUtils.leave();
1293
+ });
1294
+ _el$2.addEventListener("mouseenter", () => {
1295
+ hoverUtils.enter();
1296
+ });
1297
+ insert(_el$3, createComponent(For, {
1298
+ get each() {
1299
+ return plugins();
1300
+ },
1301
+ children: (plugin) => {
1302
+ let pluginHeading;
1303
+ createEffect(() => {
1304
+ if (pluginHeading) {
1305
+ typeof plugin.name === "string" ? pluginHeading.textContent = plugin.name : plugin.name(pluginHeading, theme());
1306
+ }
1307
+ });
1308
+ return (() => {
1309
+ var _el$5 = _tmpl$23(), _el$6 = _el$5.firstChild;
1310
+ _el$5.$$click = () => setActivePlugin(plugin.id);
1311
+ var _ref$2 = pluginHeading;
1312
+ typeof _ref$2 === "function" ? use(_ref$2, _el$6) : pluginHeading = _el$6;
1313
+ setAttribute(_el$6, "id", PLUGIN_TITLE_CONTAINER_ID);
1314
+ effect(() => className(_el$5, clsx3(styles().pluginName, {
1315
+ active: activePlugin() === plugin.id
1316
+ })));
1317
+ return _el$5;
1318
+ })();
1319
+ }
1320
+ }));
1321
+ var _ref$ = activePluginRef;
1322
+ typeof _ref$ === "function" ? use(_ref$, _el$4) : activePluginRef = _el$4;
1323
+ setAttribute(_el$4, "id", PLUGIN_CONTAINER_ID);
1324
+ effect((_p$) => {
1325
+ var _v$ = styles().pluginsTabPanel, _v$2 = clsx3(styles().pluginsTabDraw(expanded()), {
1326
+ [styles().pluginsTabDraw(expanded())]: expanded()
1327
+ }, styles().pluginsTabDrawTransition(animationMs)), _v$3 = clsx3(styles().pluginsTabSidebar(expanded()), styles().pluginsTabSidebarTransition(animationMs)), _v$4 = styles().pluginsTabContent;
1328
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
1329
+ _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
1330
+ _v$3 !== _p$.a && className(_el$3, _p$.a = _v$3);
1331
+ _v$4 !== _p$.o && className(_el$4, _p$.o = _v$4);
1332
+ return _p$;
1333
+ }, {
1334
+ e: void 0,
1335
+ t: void 0,
1336
+ a: void 0,
1337
+ o: void 0
1338
+ });
1339
+ return _el$;
1340
+ })();
1341
+ };
1342
+ delegateEvents(["click"]);
1343
+ function useHeadChanges(onChange, opts = {}) {
1344
+ const {
1345
+ attributes = true,
1346
+ childList = true,
1347
+ subtree = true,
1348
+ observeTitle = true
1349
+ } = opts;
1350
+ onMount(() => {
1351
+ const headObserver = new MutationObserver((mutations) => {
1352
+ for (const m of mutations) {
1353
+ if (m.type === "childList") {
1354
+ m.addedNodes.forEach((node) => onChange({ kind: "added", node }, m));
1355
+ m.removedNodes.forEach(
1356
+ (node) => onChange({ kind: "removed", node }, m)
1357
+ );
1358
+ } else if (m.type === "attributes") {
1359
+ const el = m.target;
1360
+ onChange(
1361
+ {
1362
+ kind: "attr",
1363
+ target: el,
1364
+ name: m.attributeName,
1365
+ oldValue: m.oldValue ?? null
1366
+ },
1367
+ m
1368
+ );
1369
+ } else {
1370
+ const isInTitle = m.target.parentNode && m.target.parentNode.tagName.toLowerCase() === "title";
1371
+ if (isInTitle) onChange({ kind: "title", title: document.title }, m);
1372
+ }
1373
+ }
1374
+ });
1375
+ headObserver.observe(document.head, {
1376
+ childList,
1377
+ attributes,
1378
+ subtree,
1379
+ attributeOldValue: attributes,
1380
+ characterData: true,
1381
+ // helps catch <title> text node edits
1382
+ characterDataOldValue: false
1383
+ });
1384
+ let titleObserver;
1385
+ if (observeTitle) {
1386
+ const titleEl = document.head.querySelector("title") || // create a <title> if missing so future changes are observable
1387
+ document.head.appendChild(document.createElement("title"));
1388
+ titleObserver = new MutationObserver(() => {
1389
+ onChange({ kind: "title", title: document.title });
1390
+ });
1391
+ titleObserver.observe(titleEl, {
1392
+ childList: true,
1393
+ characterData: true,
1394
+ subtree: true
1395
+ });
1396
+ }
1397
+ onCleanup(() => {
1398
+ headObserver.disconnect();
1399
+ titleObserver?.disconnect();
1400
+ });
1401
+ });
1402
+ }
1403
+
1404
+ // src/tabs/seo-tab.tsx
1405
+ var _tmpl$6 = /* @__PURE__ */ template(`<div><div> Preview</div><div></div><div></div><div>`);
1406
+ var _tmpl$24 = /* @__PURE__ */ template(`<img alt=Preview>`);
1407
+ var _tmpl$33 = /* @__PURE__ */ template(`<div>No Image`);
1408
+ var _tmpl$42 = /* @__PURE__ */ template(`<div>`);
1409
+ var _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Missing tags for <!>:</strong><ul>`);
1410
+ var _tmpl$62 = /* @__PURE__ */ template(`<li>`);
1411
+ var SOCIALS = [
1412
+ {
1413
+ network: "Facebook",
1414
+ tags: [{
1415
+ key: "og:title",
1416
+ prop: "title"
1417
+ }, {
1418
+ key: "og:description",
1419
+ prop: "description"
1420
+ }, {
1421
+ key: "og:image",
1422
+ prop: "image"
1423
+ }, {
1424
+ key: "og:url",
1425
+ prop: "url"
1426
+ }],
1427
+ color: "#4267B2"
1428
+ },
1429
+ {
1430
+ network: "X/Twitter",
1431
+ tags: [{
1432
+ key: "twitter:title",
1433
+ prop: "title"
1434
+ }, {
1435
+ key: "twitter:description",
1436
+ prop: "description"
1437
+ }, {
1438
+ key: "twitter:image",
1439
+ prop: "image"
1440
+ }, {
1441
+ key: "twitter:url",
1442
+ prop: "url"
1443
+ }],
1444
+ color: "#1DA1F2"
1445
+ },
1446
+ {
1447
+ network: "LinkedIn",
1448
+ tags: [{
1449
+ key: "og:title",
1450
+ prop: "title"
1451
+ }, {
1452
+ key: "og:description",
1453
+ prop: "description"
1454
+ }, {
1455
+ key: "og:image",
1456
+ prop: "image"
1457
+ }, {
1458
+ key: "og:url",
1459
+ prop: "url"
1460
+ }],
1461
+ color: "#0077B5"
1462
+ },
1463
+ {
1464
+ network: "Discord",
1465
+ tags: [{
1466
+ key: "og:title",
1467
+ prop: "title"
1468
+ }, {
1469
+ key: "og:description",
1470
+ prop: "description"
1471
+ }, {
1472
+ key: "og:image",
1473
+ prop: "image"
1474
+ }, {
1475
+ key: "og:url",
1476
+ prop: "url"
1477
+ }],
1478
+ color: "#5865F2"
1479
+ },
1480
+ {
1481
+ network: "Slack",
1482
+ tags: [{
1483
+ key: "og:title",
1484
+ prop: "title"
1485
+ }, {
1486
+ key: "og:description",
1487
+ prop: "description"
1488
+ }, {
1489
+ key: "og:image",
1490
+ prop: "image"
1491
+ }, {
1492
+ key: "og:url",
1493
+ prop: "url"
1494
+ }],
1495
+ color: "#4A154B"
1496
+ },
1497
+ {
1498
+ network: "Mastodon",
1499
+ tags: [{
1500
+ key: "og:title",
1501
+ prop: "title"
1502
+ }, {
1503
+ key: "og:description",
1504
+ prop: "description"
1505
+ }, {
1506
+ key: "og:image",
1507
+ prop: "image"
1508
+ }, {
1509
+ key: "og:url",
1510
+ prop: "url"
1511
+ }],
1512
+ color: "#6364FF"
1513
+ },
1514
+ {
1515
+ network: "Bluesky",
1516
+ tags: [{
1517
+ key: "og:title",
1518
+ prop: "title"
1519
+ }, {
1520
+ key: "og:description",
1521
+ prop: "description"
1522
+ }, {
1523
+ key: "og:image",
1524
+ prop: "image"
1525
+ }, {
1526
+ key: "og:url",
1527
+ prop: "url"
1528
+ }],
1529
+ color: "#1185FE"
1530
+ }
1531
+ // Add more networks as needed
1532
+ ];
1533
+ function SocialPreview(props) {
1534
+ const styles = useStyles();
1535
+ return (() => {
1536
+ var _el$ = _tmpl$6(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
1537
+ insert(_el$2, () => props.network, _el$3);
1538
+ insert(_el$, (() => {
1539
+ var _c$ = memo(() => !!props.meta.image);
1540
+ return () => _c$() ? (() => {
1541
+ var _el$7 = _tmpl$24();
1542
+ effect((_p$) => {
1543
+ var _v$8 = props.meta.image, _v$9 = styles().seoPreviewImage;
1544
+ _v$8 !== _p$.e && setAttribute(_el$7, "src", _p$.e = _v$8);
1545
+ _v$9 !== _p$.t && className(_el$7, _p$.t = _v$9);
1546
+ return _p$;
1547
+ }, {
1548
+ e: void 0,
1549
+ t: void 0
1550
+ });
1551
+ return _el$7;
1552
+ })() : (() => {
1553
+ var _el$8 = _tmpl$33();
1554
+ _el$8.style.setProperty("background", "#222");
1555
+ _el$8.style.setProperty("color", "#888");
1556
+ _el$8.style.setProperty("display", "flex");
1557
+ _el$8.style.setProperty("align-items", "center");
1558
+ _el$8.style.setProperty("justify-content", "center");
1559
+ _el$8.style.setProperty("min-height", "80px");
1560
+ _el$8.style.setProperty("width", "100%");
1561
+ effect(() => className(_el$8, styles().seoPreviewImage));
1562
+ return _el$8;
1563
+ })();
1564
+ })(), _el$4);
1565
+ insert(_el$4, () => props.meta.title || "No Title");
1566
+ insert(_el$5, () => props.meta.description || "No Description");
1567
+ insert(_el$6, () => props.meta.url || window.location.href);
1568
+ effect((_p$) => {
1569
+ var _v$ = styles().seoPreviewCard, _v$2 = props.color, _v$3 = styles().seoPreviewHeader, _v$4 = props.color, _v$5 = styles().seoPreviewTitle, _v$6 = styles().seoPreviewDesc, _v$7 = styles().seoPreviewUrl;
1570
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
1571
+ _v$2 !== _p$.t && ((_p$.t = _v$2) != null ? _el$.style.setProperty("border-color", _v$2) : _el$.style.removeProperty("border-color"));
1572
+ _v$3 !== _p$.a && className(_el$2, _p$.a = _v$3);
1573
+ _v$4 !== _p$.o && ((_p$.o = _v$4) != null ? _el$2.style.setProperty("color", _v$4) : _el$2.style.removeProperty("color"));
1574
+ _v$5 !== _p$.i && className(_el$4, _p$.i = _v$5);
1575
+ _v$6 !== _p$.n && className(_el$5, _p$.n = _v$6);
1576
+ _v$7 !== _p$.s && className(_el$6, _p$.s = _v$7);
1577
+ return _p$;
1578
+ }, {
1579
+ e: void 0,
1580
+ t: void 0,
1581
+ a: void 0,
1582
+ o: void 0,
1583
+ i: void 0,
1584
+ n: void 0,
1585
+ s: void 0
1586
+ });
1587
+ return _el$;
1588
+ })();
1589
+ }
1590
+ var SeoTab = () => {
1591
+ const [reports, setReports] = createSignal(analyzeHead());
1592
+ const styles = useStyles();
1593
+ function analyzeHead() {
1594
+ const metaTags = Array.from(document.head.querySelectorAll("meta"));
1595
+ const reports2 = [];
1596
+ for (const social of SOCIALS) {
1597
+ const found = {};
1598
+ const missing = [];
1599
+ for (const tag of social.tags) {
1600
+ const meta = metaTags.find((m) => (tag.key.includes("twitter:") ? false : m.getAttribute("property") === tag.key) || m.getAttribute("name") === tag.key);
1601
+ if (meta && meta.getAttribute("content")) {
1602
+ found[tag.prop] = meta.getAttribute("content") || void 0;
1603
+ } else {
1604
+ missing.push(tag.key);
1605
+ }
1606
+ }
1607
+ reports2.push({
1608
+ network: social.network,
1609
+ found,
1610
+ missing
1611
+ });
1612
+ }
1613
+ return reports2;
1614
+ }
1615
+ useHeadChanges(() => {
1616
+ setReports(analyzeHead());
1617
+ });
1618
+ return createComponent(MainPanel$1, {
1619
+ withPadding: true,
1620
+ get children() {
1621
+ return createComponent(Section, {
1622
+ get children() {
1623
+ return [createComponent(SectionTitle, {
1624
+ get children() {
1625
+ return [createComponent(SectionIcon, {
1626
+ get children() {
1627
+ return createComponent(SocialBubble, {});
1628
+ }
1629
+ }), "Social previews"];
1630
+ }
1631
+ }), createComponent(SectionDescription, {
1632
+ children: "See how your current page will look when shared on popular social networks. The tool checks for essential meta tags and highlights any that are missing."
1633
+ }), (() => {
1634
+ var _el$9 = _tmpl$42();
1635
+ insert(_el$9, createComponent(For, {
1636
+ get each() {
1637
+ return reports();
1638
+ },
1639
+ children: (report, i) => {
1640
+ const social = SOCIALS[i()];
1641
+ return (() => {
1642
+ var _el$0 = _tmpl$42();
1643
+ insert(_el$0, createComponent(SocialPreview, {
1644
+ get meta() {
1645
+ return report.found;
1646
+ },
1647
+ get color() {
1648
+ return social.color;
1649
+ },
1650
+ get network() {
1651
+ return social.network;
1652
+ }
1653
+ }), null);
1654
+ insert(_el$0, (() => {
1655
+ var _c$2 = memo(() => report.missing.length > 0);
1656
+ return () => _c$2() ? (() => {
1657
+ var _el$1 = _tmpl$52(), _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$13 = _el$11.nextSibling; _el$13.nextSibling; var _el$14 = _el$10.nextSibling;
1658
+ insert(_el$10, () => social?.network, _el$13);
1659
+ insert(_el$14, createComponent(For, {
1660
+ get each() {
1661
+ return report.missing;
1662
+ },
1663
+ children: (tag) => (() => {
1664
+ var _el$15 = _tmpl$62();
1665
+ insert(_el$15, tag);
1666
+ effect(() => className(_el$15, styles().seoMissingTag));
1667
+ return _el$15;
1668
+ })()
1669
+ }));
1670
+ effect((_p$) => {
1671
+ var _v$0 = styles().seoMissingTagsSection, _v$1 = styles().seoMissingTagsList;
1672
+ _v$0 !== _p$.e && className(_el$1, _p$.e = _v$0);
1673
+ _v$1 !== _p$.t && className(_el$14, _p$.t = _v$1);
1674
+ return _p$;
1675
+ }, {
1676
+ e: void 0,
1677
+ t: void 0
1678
+ });
1679
+ return _el$1;
1680
+ })() : null;
1681
+ })(), null);
1682
+ return _el$0;
1683
+ })();
1684
+ }
1685
+ }));
1686
+ effect(() => className(_el$9, styles().seoPreviewSection));
1687
+ return _el$9;
1688
+ })()];
1689
+ }
1690
+ });
1691
+ }
1692
+ });
1693
+ };
1694
+
1695
+ // src/tabs/index.tsx
1696
+ var tabs = [{
1697
+ name: "Plugins",
1698
+ id: "plugins",
1699
+ component: () => createComponent(PluginsTab, {}),
1700
+ icon: () => createComponent(List, {})
1701
+ }, {
1702
+ name: "SEO",
1703
+ id: "seo",
1704
+ component: () => createComponent(SeoTab, {}),
1705
+ icon: () => createComponent(PageSearch, {})
1706
+ }, {
1707
+ name: "Settings",
1708
+ id: "settings",
1709
+ component: () => createComponent(SettingsTab, {}),
1710
+ icon: () => createComponent(Cogs, {})
1711
+ }];
1712
+
1713
+ // src/components/tabs.tsx
1714
+ var _tmpl$7 = /* @__PURE__ */ template(`<div>`);
1715
+ var _tmpl$25 = /* @__PURE__ */ template(`<button type=button>`);
1716
+ var _tmpl$34 = /* @__PURE__ */ template(`<div><button type=button></button><button type=button>`);
1717
+ var Tabs = (props) => {
1718
+ const styles = useStyles();
1719
+ const {
1720
+ state,
1721
+ setState
1722
+ } = useDevtoolsState();
1723
+ const pipWindow = usePiPWindow();
1724
+ const handleDetachment = () => {
1725
+ pipWindow().requestPipWindow(`width=${window.innerWidth},height=${state().height},top=${window.screen.height},left=${window.screenLeft}}`);
1726
+ };
1727
+ const {
1728
+ hoverUtils
1729
+ } = useDrawContext();
1730
+ return (() => {
1731
+ var _el$ = _tmpl$7();
1732
+ insert(_el$, createComponent(For, {
1733
+ each: tabs,
1734
+ children: (tab) => (() => {
1735
+ var _el$2 = _tmpl$25();
1736
+ _el$2.addEventListener("mouseleave", () => {
1737
+ if (tab.id === "plugins") hoverUtils.leave();
1738
+ });
1739
+ _el$2.addEventListener("mouseenter", () => {
1740
+ if (tab.id === "plugins") hoverUtils.enter();
1741
+ });
1742
+ _el$2.$$click = () => setState({
1743
+ activeTab: tab.id
1744
+ });
1745
+ insert(_el$2, () => tab.icon());
1746
+ effect(() => className(_el$2, clsx3(styles().tab, {
1747
+ active: state().activeTab === tab.id
1748
+ })));
1749
+ return _el$2;
1750
+ })()
1751
+ }), null);
1752
+ insert(_el$, (() => {
1753
+ var _c$ = memo(() => pipWindow().pipWindow !== null);
1754
+ return () => _c$() ? null : (() => {
1755
+ var _el$3 = _tmpl$34(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
1756
+ _el$3.style.setProperty("margin-top", "auto");
1757
+ _el$4.$$click = handleDetachment;
1758
+ insert(_el$4, createComponent(PiP, {}));
1759
+ _el$5.$$click = () => props.toggleOpen();
1760
+ insert(_el$5, createComponent(X, {}));
1761
+ effect((_p$) => {
1762
+ var _v$ = clsx3(styles().tab, "detach"), _v$2 = clsx3(styles().tab, "close");
1763
+ _v$ !== _p$.e && className(_el$4, _p$.e = _v$);
1764
+ _v$2 !== _p$.t && className(_el$5, _p$.t = _v$2);
1765
+ return _p$;
1766
+ }, {
1767
+ e: void 0,
1768
+ t: void 0
1769
+ });
1770
+ return _el$3;
1771
+ })();
1772
+ })(), null);
1773
+ effect(() => className(_el$, styles().tabContainer));
1774
+ return _el$;
1775
+ })();
1776
+ };
1777
+ delegateEvents(["click"]);
1778
+ var _tmpl$8 = /* @__PURE__ */ template(`<div>`);
1779
+ var TabContent = () => {
1780
+ const {
1781
+ state
1782
+ } = useDevtoolsState();
1783
+ const styles = useStyles();
1784
+ const component = createMemo(() => tabs.find((t) => t.id === state().activeTab)?.component || null);
1785
+ return (() => {
1786
+ var _el$ = _tmpl$8();
1787
+ insert(_el$, () => component()?.());
1788
+ effect(() => className(_el$, styles().tabContent));
1789
+ return _el$;
1790
+ })();
1791
+ };
1792
+
1793
+ // src/devtools.tsx
1794
+ var _tmpl$9 = /* @__PURE__ */ template(`<div>`);
1795
+ function DevTools() {
1796
+ const {
1797
+ settings
1798
+ } = useDevtoolsSettings();
1799
+ const {
1800
+ setHeight
1801
+ } = useHeight();
1802
+ const {
1803
+ persistOpen,
1804
+ setPersistOpen
1805
+ } = usePersistOpen();
1806
+ const [rootEl, setRootEl] = createSignal();
1807
+ const [isOpen, setIsOpen] = createSignal(settings().defaultOpen || persistOpen());
1808
+ const pip = usePiPWindow();
1809
+ let panelRef = void 0;
1810
+ const [isResizing, setIsResizing] = createSignal(false);
1811
+ const toggleOpen = () => {
1812
+ if (pip().pipWindow) {
1813
+ return;
1814
+ }
1815
+ const open = isOpen();
1816
+ setIsOpen(!open);
1817
+ setPersistOpen(!open);
1818
+ };
1819
+ const handleDragStart = (panelElement, startEvent) => {
1820
+ if (startEvent.button !== 0) return;
1821
+ if (!panelElement) return;
1822
+ setIsResizing(true);
1823
+ const dragInfo = {
1824
+ originalHeight: panelElement.getBoundingClientRect().height,
1825
+ pageY: startEvent.pageY
1826
+ };
1827
+ const run = (moveEvent) => {
1828
+ const delta = dragInfo.pageY - moveEvent.pageY;
1829
+ const newHeight = settings().panelLocation === "bottom" ? dragInfo.originalHeight + delta : dragInfo.originalHeight - delta;
1830
+ setHeight(newHeight);
1831
+ if (newHeight < 70) {
1832
+ setIsOpen(false);
1833
+ } else {
1834
+ setIsOpen(true);
1835
+ }
1836
+ };
1837
+ const unsub = () => {
1838
+ setIsResizing(false);
1839
+ document.removeEventListener("mousemove", run);
1840
+ document.removeEventListener("mouseUp", unsub);
1841
+ };
1842
+ document.addEventListener("mousemove", run);
1843
+ document.addEventListener("mouseup", unsub);
1844
+ };
1845
+ createEffect(() => {
1846
+ if (isOpen()) {
1847
+ const previousValue = rootEl()?.parentElement?.style.paddingBottom;
1848
+ const run = () => {
1849
+ if (!panelRef) return;
1850
+ if (rootEl()?.parentElement) {
1851
+ setRootEl((prev) => {
1852
+ if (prev?.parentElement) ;
1853
+ return prev;
1854
+ });
1855
+ }
1856
+ };
1857
+ run();
1858
+ if (typeof window !== "undefined") {
1859
+ (pip().pipWindow ?? window).addEventListener("resize", run);
1860
+ return () => {
1861
+ (pip().pipWindow ?? window).removeEventListener("resize", run);
1862
+ if (rootEl()?.parentElement && typeof previousValue === "string") {
1863
+ setRootEl((prev) => {
1864
+ return prev;
1865
+ });
1866
+ }
1867
+ };
1868
+ }
1869
+ } else {
1870
+ if (rootEl()?.parentElement) {
1871
+ setRootEl((prev) => {
1872
+ if (prev?.parentElement) {
1873
+ prev.parentElement.removeAttribute("style");
1874
+ }
1875
+ return prev;
1876
+ });
1877
+ }
1878
+ }
1879
+ return;
1880
+ });
1881
+ createEffect(() => {
1882
+ window.addEventListener("keydown", (e) => {
1883
+ if (e.key === "Escape" && isOpen()) {
1884
+ toggleOpen();
1885
+ }
1886
+ });
1887
+ });
1888
+ useDisableTabbing(isOpen);
1889
+ createEffect(() => {
1890
+ if (rootEl()) {
1891
+ const el = rootEl();
1892
+ const fontSize = getComputedStyle(el).fontSize;
1893
+ el?.style.setProperty("--tsrd-font-size", fontSize);
1894
+ }
1895
+ });
1896
+ createEffect(() => {
1897
+ const modifiers = settings().openHotkey.filter((key) => keyboardModifiers.includes(key));
1898
+ const nonModifiers = settings().openHotkey.filter((key) => !keyboardModifiers.includes(key));
1899
+ const allModifierCombinations = getAllPermutations(modifiers);
1900
+ for (const combination of allModifierCombinations) {
1901
+ const permutation = [...combination, ...nonModifiers];
1902
+ createShortcut(permutation, () => {
1903
+ toggleOpen();
1904
+ });
1905
+ }
1906
+ });
1907
+ createEffect(() => {
1908
+ const openSourceHandler = (e) => {
1909
+ const isShiftHeld = e.shiftKey;
1910
+ const isCtrlHeld = e.ctrlKey || e.metaKey;
1911
+ if (!isShiftHeld || !isCtrlHeld) return;
1912
+ if (e.target instanceof HTMLElement) {
1913
+ const dataSource = e.target.getAttribute("data-tsd-source");
1914
+ window.getSelection()?.removeAllRanges();
1915
+ if (dataSource) {
1916
+ e.preventDefault();
1917
+ e.stopPropagation();
1918
+ fetch(`__TSD_HOST__://localhost:__TSD_PORT__/__tsd/open-source?source=${encodeURIComponent(dataSource)}`).catch(() => {
1919
+ });
1920
+ }
1921
+ }
1922
+ };
1923
+ window.addEventListener("click", openSourceHandler);
1924
+ onCleanup(() => {
1925
+ window.removeEventListener("click", openSourceHandler);
1926
+ });
1927
+ });
1928
+ const {
1929
+ theme
1930
+ } = useTheme();
1931
+ return createComponent(ThemeContextProvider, {
1932
+ get theme() {
1933
+ return theme();
1934
+ },
1935
+ get children() {
1936
+ return createComponent(Portal, {
1937
+ get mount() {
1938
+ return (pip().pipWindow ?? window).document.body;
1939
+ },
1940
+ get children() {
1941
+ var _el$ = _tmpl$9();
1942
+ use(setRootEl, _el$);
1943
+ setAttribute(_el$, "data-testid", TANSTACK_DEVTOOLS);
1944
+ insert(_el$, createComponent(Show, {
1945
+ get when() {
1946
+ return memo(() => pip().pipWindow !== null)() ? true : memo(() => !!settings().requireUrlFlag)() ? window.location.search.includes(settings().urlFlag) : true;
1947
+ },
1948
+ get children() {
1949
+ return [createComponent(Trigger, {
1950
+ isOpen,
1951
+ setIsOpen: toggleOpen
1952
+ }), createComponent(MainPanel, {
1953
+ isResizing,
1954
+ isOpen,
1955
+ get children() {
1956
+ return createComponent(ContentPanel, {
1957
+ ref: (ref) => panelRef = ref,
1958
+ handleDragStart: (e) => handleDragStart(panelRef, e),
1959
+ get children() {
1960
+ return [createComponent(Tabs, {
1961
+ toggleOpen
1962
+ }), createComponent(TabContent, {})];
1963
+ }
1964
+ });
1965
+ }
1966
+ })];
1967
+ }
1968
+ }));
1969
+ return _el$;
1970
+ }
1971
+ });
1972
+ }
1973
+ });
1974
+ }
1975
+
1976
+ export { DevTools as default };