@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,1684 @@
1
+ import { usePiPWindow, keyboardModifiers, getAllPermutations, TANSTACK_DEVTOOLS, DevtoolsContext, PLUGIN_TITLE_CONTAINER_ID, PLUGIN_CONTAINER_ID, uppercaseFirstLetter } from '../chunk/CEHNENNI.js';
2
+ import { createComponent, Portal, ssr, ssrAttribute, escape } 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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAA4+klEQVR4AeSWBXBbPRaFYwonxlLw56LbnxnLzMzM6DLubBoqt+G4TKEyMzdQhtAyMw4tGXr2RH5ONHEWy+2b+eZeS1fSvTrW0/N7Rh410RFNHX0hpBnpQWaQ9SSPnCIl5A4pF3j8EqUvl6wl00l30pQE1zG/huhEDi/5oyLaOkQwky4kkZwnv2YkaB8KZY5fkrMknnQkxjrE0YrcXpJHPg3yE00mkpPkzwTV6LTwCwmCyqh3qeqbnaqIeg5Vo/pO4ZvYZgx3+YWFuPzCQ4SvMhlEHGM8sfRFDOfgXLWF+iM5RsaSCDmhl+HUqGQhFL83OUr+TuBFFRrkUjW0OFQNLE5uolu0PzwP/AJ0bs7r5LwOVUiQq1b/X8lB0o1oauWpepGFMJP55Mfyq0hlCHOoqzYrPNhHAO37rRA8qBcMtomwxC9E/ZQENLSvQcSOdETszEBETpaHXRloxDb2of6GBJiXL4B+1gQED+gBzbtWH5FU+hC3WNMQ6qj1avs+sRH9iyaMVvINJE5+JakCdE51Q7NTbQp/IG9UYJvPYJkzAVFpCXi1IBtvnNiNt87vxVuXD6DxlYOCtwh/e7gkqPktYogSw7FijlfzsxCVGg+LbTwCvv4Y8ppqi/6BuoHJ6eevlU/OH8hSEibX9Dxf2N5nFvmT90SoAnUOTYRFPgkI69oa0Qlz0Dg/HS3O5qDl1X1kP6yX98J6sQDWC3mwnstDi3O5tRHt1vPsO+/bxzYxlnOIuVoW7hdztziTg8Z5aYiOsyG001eQc6nKTeWvdUgn5ndk8vN6WmQhWpOKaiECdA5tZI0QqnomRM8dixY56/HehRx8ULQXHxTuwfuX8vD+hRyy22MvVpErwxjJ9+mry8+BPCfXEGtxTbF2i91rEWUbDb/AgJpXZaSPMPfI58/TadEpNpDYCRQc2ghztRABzV9HkyQbPjq+EZ+XFODz4nx8dnk3Pru0S0D/CSCtd2U3cygQfHQ0G43jZ0D3enSNMI1MblqHVE+qJIbuWf2U1Sj+p+Qnyj/KpTGEODWWcO/FDWvyTHx1ZhPaXs9Hm6IctL68w8OVnWh9VUL8fkJcqcKTR5viHJHbV6c3onn8tBpR6uuh1gc56buV2r5H3lNq1jxLrzCN5M8hUPhHQLTF66PZ3BFoeyoTXW7monPJTnS6ug2dCrcr7JB8iSJhnwzyWsyNOYpc255IR5NZQ1B9uqMsojapzinyXjxL90UuAXmgDvF3+TfUi4QbtHkfbfOT0PvmLvS+vgM9C7egZ/FW9CreJqBPtslIfZL/H6gd1+t/i/NtK9oqcu19Y6fIvU1OPCyftxI1+UcYoQ7SOSVRtsh78rTvi3BSohzjf/jXr/mE/WDpKPQv3IjBd3ZiQPFmDCjZjIHXtvxHBij24XnoNUTORNTQ74od7y0YBm99OkuouFuU2i+SIEmUpyJGI/JjrxjB0ebqZLvuXIpRd7djxM3NGH7NjhHXN/1v3Hg6cVK8bEUNrIU18XW2bVF1ncHRJtD+XdmDSmKS9uiJihFDfk2EGKGxnvsitv17GHZ6NSaVbsO4G9kYX8VN+8Mh5pCxPx1u2EVNrA1DT6xExBctRM2hMWaxB4ooPyENnsRJkRdoJIsRFisSwrujO2BySRpmlm7C1JsZmHY7qw6yhf2P3KoiE9Pv2DH97mayCdPucF4yjW2MeVqwtkzWuBmTClPQcsg3onZlD2RRTI9bFI10Z/zYK4b+FY8YX9p6Yc6dTMy7n405t9Mx524mf2dIpMtWIZNxwkp+BmYTzoP59+ywlazFzItLMP30VEw9NQZzzo3E/OvJjM0WsVxHnst3Ptn3jVOsT9x/8DMxmzXOK82mzcCnk7uIPdC/apFFqSSBj+vrS+115AvcoIjRfmFfLC3NwBKy+G4aFt8jtEvup7M9E8vKsrC0LJu+gO2ZIsZDukSa4Fvl2ZhXlIzJh0Zh+t6PYdsfi3lHXkXc2bcQfzoSi0oSuVaWNP7Js4SwRk/d9L+Z2d0jSqxJFuWCtG+qx3E6cr1iGF8xecSY3QPx5WlYXpaGb9/bgLjSVCRUpCOhPANxd9djaXECFl5ahIUX5mLxxTlYVrgAcbdWMT4Ty0vTSApJFcTR5zjMODEHg+1WTM6NwrR9LWA7/C4Wn/4YieffwNKLkzk2Sxr3dIm7l4J41k4f30ztJPbEQFGki37To3516RQ7p/pkxBhBi6/GtUFyWQpWVqQg6f562lSsqkjjpi/HlAMTMHxbDwzI+gwDs1th+NbmmLC7MWbubYylJz5B/NVxSOaYFeWpnGMDkks3YPV30jHj6Ex0XBWOkdubYeQOK8bkNMP0g1YsONaE4z5H/J01HJPCMeslNghWyNbX/5/ifPto64xjLqWe2pNoPxn6hUcU7pH0SfxPaswBSpJmCdRfZGZVtbtHa1/btm3btm3btm2bv+3Vr5mdWYzV3aWMt1un526feXv3/9+77nO+k4rs7oqozMCzrmzkJVfCiWfArYETAK2vq7N4YFGuf68b8Ji3P46wHJJnOUEQsLywxKUX7+bAgUuIs0VEPNaCERDJiUKlVjU0qspwdYZy5WbY1u1QY7HWMHtoit/+4fOsG6kiouSaMdgMCIPDyCWMbHoujaEdZFkCIgCoKuBBPcB/poIhoF5xgaOz2OELL/4cu/+8i+pIxS9Ptg0AcCPg7BWdHvcqOo6xPFAC/gC0gmqQd2Y7FuD5X3wOzaEqPkkJneXg2H5OOfUvHJoaQ/GgGdYkBDajHOU0KoohY3k5JlePNy1CduM0IKpswqKcftIJLHR2U45qLCx3iULBGEOne5Bq5basWXMNkuVJsuVx8u4EQb6MkxxnLMYEWBEsHiscxYClv3/8tdXtlZYzQJZRqZW46k2uwh+++EfSdiqu7DKfeQPcEfgEkB/vrZErcTo+g/BUlKS5oR7OTyzyqu+/mKvcaDtxO8ZYAwon/ekUdl56IUvdZWJdYKTZolYJCMKMKIRyWahXLM4Is/MJJoBGrULEBWzZ/jKSpMIXvvs2tq7bTCdOMAbKkRIErjDMyMA2nIsxjFOKPKXQUA7tYcpEwTAm2EoeXAWCJpCDKsgxHk//0UN0/O/S3BNWInaduof3POLDDGxuMjs2n4gQqvJB4EVAAKRX2iB9xrgz8DsgH97aslOXz/HEdzycOz3yNiTdBDECAAg+98SdmNmpOS6/dIwzdp7LvvZFXGPdNlqtgKjkCZxQqVgqoWFqKkGcJckmWNu4MyYf5CdnfJGtAzuYX46JnFKtBjQbFVxgyXUZZ4VSWCIIhDCEUiBUS4ZG2dMsx5RsFQ1vjZauiqKAHueR9Urc5grw/yynXgmigN986U987U0/YGhrS6cvn1PAALcCTv57V5dcwS9cCFyrNlzOlqY67mb3vh7Peu9jCwV5r4j07xKMEUQMqsr89ALnnb2TL//lZyRukdvu2EqzaXrKNERWmJxOUcmZPhiSJxUSO02WCN3YMzwY0WgEZN7jNaNcstQqhmpFqJVMcWpczz8pQilyDNcczXAaCe+Mlq8P5PwnPqpgrCHpJHzwuZ/n/D/todwKs85c4oAzgZv8PYub42TjLwSuBaQuMA7gES+8B/VqgPE5oVEC6QOPyTNIYxw569e3uMe9bsX7n/siHnnN+3LhzjajlyfML2QsLmXML2cYoywuKgvLS0zMHSLtGubmMiqlADHC3EJMmmSUgp4BnCKieBQFrBNqZcdg3RJIzuRCl+nOMJr8gSC5lMAcmfeH0X8rodFCF81mxGNfdl8AytXQAakINwaeBigQXJFTN0AOtIDvA+XhzQ2ZGV+Sp77lgdzirtchS1ICI1gB0+c8BSV0hiiwLC92GLt8gp079zI1M1MITB2cZ+fYImmbwhBeIUuVTidnYR7wjribE1hHVLakWU4UGYIQEAXxGAEExIAxIICiCFCJLNXQsBynZL5EyRwiCrdhbYhZ7ej7MKvG/6jcCs6AZjlrNrSIqo6Tf3YBw5vq0l5IBLhpz8HHgBzPIA7wwKtFuEdQtunSdNe11lR49lseTLnsML7/4bRA0MLBtpe7nHXeHn5/5omcO3oyB5Z2sX/hLKbal1CuRkRGmJ32TE9moIAVkgSWFnLSBFSFUsWCeoyBNMmJD5OmnixTsryYxwhF6xw4K1gj5F5BoBIYuqkh85NU3BClaKRnEMUcU7G6SuHHktNjyHE8uQKD4qywfvMgP/zMn+ksJuIik6rXJrAInAAEgO83yOrTMQR8HSit2dSQpblYXvbBR3CdG20hj1OcBYNi+v54KbCMjU/zgz8fNsT4GZSjlIF6hcF6laHGIK1qExt4xCnGQRzD6P4M3/VghLitBUHJIQashSg01GqOVj2kUQuoRI68axgbj7nsQJeknZHEQp4ZVME6QQyFYUJbGAUnCc3qVpwxGFaU1fvv5jD0nqF/XuiX68FRub/t0+PJ9dYBn9MarLJh2yB//fkFjGyqFzoFrgd8EugCAkB/py8UewXwzlLNpd2lLLjWTTbyzq88lUotwudK/w5VJXSO3Zcd4vN/+AuhmaP5t1BXQZVu4nsBgCBGKFqBuKuM70uYnc2KdZ8b6o2AUgmishBFhykZ6lVDo26pVgyVwGK8MLk/4ZTzFtnVHScX2FSFq68ZZNvGAdatjYhCMBhKLuYaGx5IuTSE9xmI/Ec8vHWWhbk2z73/R5i4dI4gMmka+wB4HvDRPt0jqyKrANgNbFu/tZHvv3zBvvVzj+FO97ke3U6KGKHfGIGzjB9c4MO/+BOSz1CJhCDKcKIkaQ4ilEqmwFnBGJBeVrvU9sSJEseeUtmyOOWZXYLBQUMUQalw4pB7j6rSariCasUy0gjIO4YwvS5GAy4bH2fvxARnHjyPZtVz82ttZeO6Fs7OcI2192D94FXJ8hT5TxgE8F4plQN+/b0zefNzvs2KboGLgGv320BW5R0PBr7nQpNliXcjG6p8+dcvoDlQIcs80leusEboxDmf/vmp7Dq4h1ZksEEG3pNknnLFUC0bnKOQNZbiOzodj6pQr1oyr1grNFqO9r6cE09YYt31SjQqUC4X+6kcxgALiykuFFpNRyV0bBwUhmub2dy6NYENWO60mZld5MJdo/z+/DMImpNc/1qDXH/jrbn6uhuQaYYgVyJDLOZX9/8hOVVwgWX60CL3u+E7AQgik2eJt6rcE/jVig3MqizpyQAj6yoAPO1Fd2bNSBXJsl6Y63sokRPOuHAffxq7lIZ1ZD6l085ZWlaCwOAM5LknTZU0U+ZmM6ZnclQNQwMOY8FaaNQs9ZKhUhbqO2MmDyV0u548V7LsSOuJItixqUQjMizMpyRZxqEFYXppF/um/4zPYurlgO2bhrnPXW7MG570aG6/6R788cwxpudncCbvhaS+j/5xP7q6/w/LhUYLHW5YV+fFb74nAEMjZVU9qnNAAVyfM98M3NU6Ie6mFuAWt9lefKk3ihEAetYWZhc6/PK8vWy0SppnZElO7oVyGdQfMQSoCiLKwnyGiqXRsEVx0edKu5Mx2AoIAyF0UkRT9fNz5HopYyg7eo7de8hzIck9G9ZERZ4ys5AWexbadcruUhY7m1jbuDp5r+g41Kjy4LvfjGttX4e3KZERMl31dv+bP16VwCi3vv1VeD+gqhYAuBcwAkwCYvtC3UcjPGBgKMpmJmP70MfekAc85AaIKnZVvhEFlrN2H+Sj5+5ku4NOEpNlQhgC6gEQgSxTDkwkpLmj2bTFeik0RWJYKrJtQxgcxsHBvV2SP3YZHBT2NYVuW4vMPCoJ1kJghVyVwaaDnCKxDEtgCLFmjqFoGxVXwgDGA17ZMNJibWug6DsxWBFskUMVYGSlMKgUrfwDGDBcwbp6Ws0So5dNcvap+2VgOMy67bwMnAecCwQWAFDgrcBVh9dW/MJcYp7zkttz7euuw6c5zqzE1eCMgsIvT7uEsalJKj4rIqkgNKj3iAAoeQoH9qXEuWVgMMAaT61sSFJf5BPlnqN3AgATZ7SxezIGIsM16gF/dHO4ZUetagkiQdBCPvdKqx6wtOxJ85wgDBCZpeFGGIqGEM2wCBYg94h6nBRjHIIVeuvSG68ApmgVy0qIC1aOUd2Vvvl+3cgx5ADTSxRRpVoJivzqVz+9iOGRsl+YT4oV4NuAOMADQ8AtANqLsQG43mFjOM0JejG1AgDWCvNLCbsPzdNC6MQZNjD43COiiFGkK+ybXGTZe3asHSLPM0QE7z1L7Zxq1aCq5LkWCl6a8+S7MgZ2lAnPOcDtH3M37nWTbTzi858hlPWgIWbYUgQHYliOM9YNhYwe6NIuZQTGMd0ZZ3t1KyEK5CACAAqogoCuvrREjsohqChgUfGsSCkKR0VYabRvzOp+v1xf34vixHPDG6wHIIlTAyDCbVSpAUsWALgz8OTB4TCbmUrsAx9yTR76sOv3jrRi+jLPkjMcmmnz+TMuoZx0yNQXRlKfYw0EqXDq+Ci33byD2+zYxpkzkwyEhlIkvWybXmFQQJVSaJm7JCb+TkJjs2NtuMTtnnNPbn7jHdyouYGPnXMCbjEqrsmgDCKCEcEFYBGWujml0CESs628maoEiM+xqqxgAENvzBHooRhVHGA4+jZbVq60lbZIAP+hcotZaVWpVAIuunCC886Zot5wGse+DvwWuMwAALcFqNcCLQa33Ua94jA+LyzqWEFxosRxyp5uAqoYa/HeI0DcTjllfJQX3/oOvPsp92LjQIuJ9jRODFnmWV72oJBnSpYqqLDYXqJ9bk5tY0Alz2ldbQsb1jTJ2x3ucZOr8rNHPYULkkV+etEkE6MJy+28uCLbXU+pJOSppxMLM/EC3XiRIM+xeYZbTXaE/Cj5ETzOe6w/0mpBcKTVAgIFhxBgCBAcUOgA34f2tXqM+T7EIz6nVQu4wx12AMjgQJgDALfur+zeEkC9CsANr7+OamQwXjCrksFSKBRT3mOtIUPBK5IroXV85fEP5363vQbd1PPXyybYVhmkkMmF3INYwQOqBpVFrs7tGZ0fpVPfQ8OUWLOmSjUUSqL4NOYu19vMWfUn86HfnMAJY+OkKWzZHoEI1gmViiNJlbbmpL5DRZREPYLpu2oUEIpWBChaVAABjEDRp2/+6JwCiAFRQFH8qkhNjt9flSRWIsNNbrQeAGNlRehWAA6oAtcEOHiwYwB+9IPzOeEvl9CfDAKoQuCEsckOnDbOPutJ1WM0ZzmOuda6YS4dmuSjZx5icrbDOaeOkmRtuqEgohT7QyGwgjuCS9DaOHsvHiVeXmbUdrgsSRn7xJ+xzqBFSSWnVasgo8rlF85yKHZcts4w0HKEziAixWlz5YyZ+ulsCPeS6UpwIazWSW8B+tb751T6Npije1Z8Sa8H+P/PSorinOXgoUUA9k90jAioch0goJe6aw9fiowCV0iDSANKGhVUVPi/91WpqiM8xv5yH6wiUOCY1KjpUDisLdYotBRs33qkwP8U5bJRwPfGCbAD4AGAAtmK4MhIqJs2lQ9T0bVr0VYL/T9sm7WZJDEUhDUzzcwgWGY0F/xLYAI4RutSuUQmwaPa1/A1fL1GiVX/E5mK405pwqBZrwPcyKLxWjtm+GGrM5iBAWYyrO0VVtO5VOYix4bK+noFi9S0Ry6xfIYyZRCljuPDHJeXJwteLiIcnx/CCKluMBjkl3oMiUvylsoC8qsM7KsQRUJtQedjrlnbpoQLyWndwgGviHtU4P7uDFE4556cVLi9PQHnxmKP0iZmYZFMKOXj+LhEGBI7o/XTngQBsfZ8qutg3YOc7v0bEvvZV/4sN7mBJNjb2yewaiWkbHOlBlH/HoGCYQ7nAvf393h+fh7aNE3v8o1GwQocHR2NG5vnQ7mu696fPMMIRVEOfefn53j37h1+/PiB7XY7tFdVBV7zdo5Uqo9V9qKyav3auDS9e0kheQsh8fj0hLu7u95r1albw+B/cHDwKpf82/FRFHdsYtU1H7wsy+7nH8L3Q9zc3LRq2tbr4XVP9/4zif2aPJlpEG2+2+1e2KYSDIhhKHqCYU7UK/QmvURv0eNU71BBLEGI7IlIJHjT/hm1DZ4lb0U+SinQWsM5B+/9A2stIaWEdV1Jf54ncs7E11rBOb/GvK7Rb+LneYZSCjFGyluW5ffrvhfAGKO8u3Pfd3qbpgnHcZCn944xBlprkFJi27an9/YZY/7uDCFACEHaD6dmApFdFsbx/3wN9dkiI7skxZRIWRrJEpFUIhVFylKohAiRyCA7LQiDVIpiKimjXarRlLRKklIp2UlkZjrz/I95Hne67/t+mR/Xebv3LM85z3qIh6t9OCfnWlpa8t9oXDxo/i4oKHBbW1t+bHDdu7s7Nzw8bGc1Pz/vXl9ffb/b21sam82xvr7uXl5e/LenpydXXl7u3yclJfn2w9n/DGEqkkLS09N9u7Gx4T5Df3+/XywSPT09Nm9NTY37W26EysPDg7ynS//gWx6ocnh46N89Pz+7WIyOjnrlfIu/eBEC3MzMTOgbFRT01qqqKq+wWKyurvq+VJrCw/9JvI7vh4aGQnIGjD2Sh/wC4bdIISslJcW3U1NTFJZWYQLKvYOPPygeKC2wpaXFTU5O2sb5nS1ZW1uzeaurq72VEVocWV5e/jfJfXWPj49O2dzcdLOzs9aX852cnNBzTBb9dn5+7uW5v7+nZ5qcb29vlNF75dXVlV/n+vra5KRx8CG9vb0mJz2b0DMI93hxcWFzq+xdXV1uYWHBKfQ4jq+oqPBrK9vb2/59amoq22gK+RXC7x+SeiDufx/822s4qJDm5mb/Pi4uzrc3Nzf2fX9/34TmYegctbW1KqjOo4cR8oadnR13fHzsFBqFzlNUVOSOjo7c6empV1JlZSXfW/hSqKDgHhobG00uKpVjgwbAPn19faYwQkXo+Pr6eh9OFcoQVogpnTBU2fjExMRYClljpR2PKIhAkMNGRkYGCH8H4f/zErEwNDU1QeImiGwY4+PjEGsCSU5ORnd3d8Q5lI6ODpuL6G/OobJIMYDLy0tIzEZxcTFKSkogSRLZ2dmYm5uD5CGQ4N1Jf7MPKS0thRgaiHgjJHdAycrKAsnJybGxZGRkBKSwsBATExMQj4bkScjhQzwICQkJUMTYIKEM4gm8c/i/xdhAJFT5MQov3SoqUV2cRfMQPiKUJVw55P9Ydmtrq/Wbnp4OWYS6PVlZWfHvGhoagh6i4c3cmklR2d3dde3t7S4atPSzszNvtZxbDpQtLTqUo9LS0kIyLS4uSjn9o5dBEcPysipM1qJ8jmVxYjkmPj7e1mNIJsHwp+3BwQH7WCXH6uo7vVd9jXNy0Q6e/R9fPnOz5PMtcnNzodCKicR1KGqhtJig9dKapAIBkWRIL7D1aHmDg4P+kWSPj9DSMzMzMTAw4OenxUdDFIG6ujpIFQVlb28PEt4gBQEUKUzojaEzUI9VD+c+xBhgmNV/0da8rbOzExJ6/drv7xYBzOwNKoxz43+ii0oZaRtV15d8gvz8fBANW+JRkHxi4wj7SelqG+eG2RLxHBApjSGWCSkcMDY2BknqkCRroUxKSLS1tUGKD8SirKyMSuS8/pEc6NfneIUHqEbDPlJoQO4/IHl5eRDvpwxe+eJ9lEXltZZhlnLxb+5VvByE4Y370zj1+vbu/68goJY/Yyb1fwg5Aw2HgSAMv1QVFAV9ggIU+gYtpQ/QlkbcMwSEwAURTp4gESIA5E0Ocvst/8pochlWGdmd3ZmZnf9f7hgq97kr63K5CImpTBfhJlIUBdefmioCBGUNmqNBaIK9eZ57gEDp3243A58nNtkD+sUri+Eq9999ClXp+tV3gt+M3W7nG7cEW2VZmu/v9zuQ2KAx13tEbtUKZps6AfmRci0gLjOCYZzmGrHXD8MwSiBndV17J/ILZJbQHw6HA4cOTs+yzK+x3++Zq0Ooh4DcjLNAQgRJejnBgYZZlAU/QXc8Hg0MhSSyftu2Y9d12NSeIHoQVNkMaK1pGvZo9I/HwyeaBAKIPXc7CI3ZXiTONY+yvqf/EuN3LSBEeSrn8xkjJuOqqjJzcbiEA0dR5DcnUUAYcRyH7xACStBXhOCbpo4zLcCw1Y2oujUEUwWvT6eTOMeiuB7EXJLEJKRDY8am/NP3vV4DqBCGCYj+HvFrLSB6d0qSZEQgdmQU5MdBwhFh8xz29XqFDOH3er2STSKDPCXwDPNRypvNJrBeOY3sRfd+v8loZbgOSTbCAT4SB26hb5g31WEX+65XeMS03W71/GHOBhok2ZinwCigkMQ0TWUXYmvWdjTBEEzmsAb7eT6f6HkDnHs6+SPEGtIziqHo9+zftu0F1LbbeTdRc+GnuXmo20F0HSfnld+Z/x1ZkvdBnE5n9NPmABtBC+FIBIuLi4x2xmmHh4eIehiNwMEzAaIk08Rx+eOTE2xvbxPEQm1ui12UXN40TSqD44V48/MLvj3vU3mB29tbPD090c4hkNI7j0VYthPIrayskA3ub3Nzk9Po43jEfJ4wu6tra5wmqypkReH1dqdDPOoD+Q5WOaX19Q1cX1/j+fmZnuEBPZ3JUEkgKulQn6hvfLwMrz/tdoc+w4ThURnEo+n6T0fWJU3Inn+pCz5aa8uoRVVUIwqqXllP2kh8maiKI0L6SrNF1CIaqiGZJQW1MO/wnymsq7Cog7aOrPVZvmbLGNVKGJRyP+p2GnWUYzrKloCqIqGWiX2TKavyN1ojYqJqCiyJqId15L7GxNKgnMek+R3qoL7NOg3WNxX1mAH7rby3gJLjSNa2n8yCxmHSyJYsey2TzPa9hmVm715mZmZmZl5mZmYmM9vyrMzyCkcanp7GqsyMvyHrTP1zRx8unq/PeR1ZWeVWdzwdEVmQOVv29/y1ZySUc2bHZXabz3zOzLDsKKl+W+UHVPB0gPNyN0lcJVQCfJWlBUKBWADfLggUtzlWCYz4G1BbYVYFdgjl02RoYjbbf2oNjfr3Q6iOCOVx/77x9sdT9p+ptM1nmhKYERj+qvllKFKS830H2KOAMvAIMNuF4RpG9F++eB+zo2VS41DazxtDA4DgreQFrmcdCN66QR8CzuWPRbpSXVmBG46nrKyvMxRaxsow0n8mWBFEQoUyVQo4HCq7/akVx+spHzi2yFikmdDClfuqlDvTBPMh7qmXEAyVSRfX0B/9HPGOGVaW17h36TizIxGzF5Yoh6MEjRDRDpXdokWBSDaHe/OevBpYwfdr7fvUQDrXzvp1tr31WWIQcUQaji7X+YsPH6ALxdVT0QIHgXNDoAkcAGZ3DEXu0dVEv+Di3Vx23g5ILQQR6ABQXoCw6XDnrViwzm9bbz0Ya0Hy2wL0tjVDj1i+cmKeqaDJTFWYGlKMVTXFslDRZWaDcRALAE4gDLjhaI3bbZOLxkLCFJ53QYnzZmeJ7hii+8Hh2kug3cHtnELfeR+cewY3PlrhxOLDXHHWBGfsnUKtDIN1oADYnJblPIgg1+cd7yevbPYHGlTg295qvQ2oTSA4A6Hilv2H+0Bmh2L30EpHA3OACYHs5PDpCAJw+8MLXLZrAmukz0KUQykNsBUISAZlKwwv2brtECcoHMYprNO0utpwjmJbCDU4ESoG1sIalbjMsAqxYtEKbCLcMF8jajvWa3UoJHz+nlFGxo4yuWcv8YdvxY5UCfedjXneE3FrGxTvvY+rdu3i9ijm7s8ewJUTdoyfRWm1CsqBUhixGJcSjoIiJmhowOQcq73DHehg67a3Og8lE5IxQXD++bVbHzwJgHXOk+JmgAzIDQAbbasBPn//PD9x1dlEUTiIYp2lYgWSkSafrk4t+e/bSgY2AspKSEWROKGZCOVQEWlBoSC0LNBgOBhBG1A6YL6VMFdvMqbbBMwyXB7hwfU5HjoYUz1vhe4cCqKPXE8ax4Tnn4X81HeSfuEMwlsPcM1skYWxSVpH2xhWSa0maIdYQuqJ5uaDh9h9cZtzztuJmCGiRgyBgAJ0PkUPIPrt7dO3xgMZGBik6gBFu9XhU3PHAGSpYQMA4Kb8gy63AisLbRvMlgL3jnuOc3ypAU4hqYNUoG8dGBlsm/8FWZdr//8lfn+pBwRN6hQbiWOj7ah3tdF0tJqKE80NGrEjHVHIuOXLnSbNVGiuJVx44Xl874uf2T/+toOGxdVj1HeugQ0pvO8zqOvvxjqh9m3ns/b0PTQuGWJ6aoQzonGi838E9X2/ir3uh1DJMONpzD49wU2fWeeRBw5Sa9bBgRgHluw7bP99zKnkBvI+lJ51cHSxzsceXGJXJZT11GkF88Cd+eVdV33aYigOHMDdX1nyzj8VALeNdVs/aNY+xRdyFJVgUTiBjhHqnR6Uniy1Hpw1y43TK3z8CUt85qpFrmeDEZOgl4sMX/4Qhas+y7c/ezcPPtbmvsc6bHCIOTnCXGeVT7ztP3n9H/4Or/rVH+KuG/6VzsSD1MZXYHWD6PgxEqXYKAQ0wpCV2+7ikaWTtCsB6ycmqbSrYK2H4bb/Pvkfnt3ON1vk/XjHwUUACoF2AAI3AA0gzP+tjPcreF6tbQH4yNwRrjtvNzoKEev86AIQgHyIsiU95azL78sEzu9XXY2Ioq0DDAojgjaCUpDYwZPoGM3SsQ1OThni5QInv2xQoaF6QREm6xxdP8nZ145z8O4Stx/usKOkeXDtXm483mS4OEo5XSKMJ7n9AY1SRxitl5h8JOw/enqkc4J04QT6yw/idlTZMz3Gj43uYjQugCgw2fdW4ACd+275FJbt09k+BhZADSQiaCDtJHzgnkMA1DqWzPfeovD/O7ATeCRUlHYUQznaMuqhX30Oe2fHcRa0Djw6T0Xy2raI5/qtH+4O+lQyyMHLY4ZP1hU33ZVSkkWk0yYSQ0lBpICCUN/tOHamI+51PhziDlhatSYjl8ac+cQQ2QhoHIPawwaTGPb2hs0ScN9JQ6kg6EChtKFrcC2NvjEg3qspPbXK+uFjNI8bTju9yIv2ncWZMgMmBQeg8gV9IL2N1cE2/Vnh0N4Krgck1Hz56BIX/ufHOLMaucfqqQbWgMcBK4DKYITAceBTRqColQX43EPzkG6XmmR72Z6lZ/N513MRVKerVHFkKuTNey2/ML7Bv0dHWZ1aYqFiWBhJOTZhOLgzZe7chNsvTdh/mmG9JSyeFMxxIcViQmjOw4E3O+57ZYeDH2xRO5kQOjjaclgcMxVhqW1YbxoWl2DVhZQujjj73yOe8O8x3/EbCVf/1C4O7h8jMQVqrNKMG7CmB/VNZd8JsNtar+1qCgPZTX+pVCBxfPr+owAgZOHxMQ8jBESTf/nHUA43DQC/9+n9rKw00ZZccd9aB/JtchLwwaJSQbfh5GgXxHma39zZ5A1mlXStzmzQBXHWGvPn1zm5z3DyfMvJx1lWpx0dBWYdlteFdAH0RtealLgQoJuCsinRrEWfKayPOxaKllRgIXWcPR0zPRxxouLQV2h2v0Bx7rMMuy9rUZ1sUG/W2buvzVP+oMSBT3V45ESLjfIqnYtSlISwokH5FGTZtDa/nYNmMslW9X2nBBaW6/xG16ehgvmW0QrYsggzgbfi7aPAD1qY3FuJ7PGO1VdPjXD+1BjSoyxATy6TeOU+YM46BN1xpKHmc2cF/Ntsyu2uRrlWp5x0EGUIQ0clhEoBygWhEkNBQ+AUzkLSUyK0Gw7TNJiWxSqhEQprReFkVVgYFtbLsBALY0YhbZgsK86fjbm3kLJUNKzVLIfnLfMLwmpNaLQA2kztijl8SHFyucOu3gnp5SnJUy1BJyZ4OPTrZCiw+RNjPWiLV74tbFo3kFhBofjQgUO896FjnFWJ7UJiA+A+4HcBAHeqhQN+E/iXYa3SmpPo8tESX/jRZzNUKiLZkxgqd/mELXVEXK5WCEcnNW8+zfJ5tcFMo4GkHRKXIC5FiyGgJ0egbN8qsvf0J/VGSBJo9UZfdaHTVTsRWqkidQotEClNrAUJYMwJF9QChjQ8a2+JI0b406UaFxQ1oiHUgwlDQ1UYHRLO2q1pPBZz6P0JF+zTPP+cCQovFphRVL48SfWzw+gFhYwKSnSungT5E0ZQue2+HYASEZRWrDZaXPDyD3EisRSVStsiEfDzwCu3WzggV60Z8ZEycU4ldg81Ev3eF17Fd154Fs46tC90nsgmFA/DdaV7bQe37FT812SbdrtGtd2kZROc7UAPBrYPIezLEeoeFBlI9yz9tlIZb8Ea6CTQbgvNprDRgEZD0WqDMRCiMKFwUUszVFNcPBPw7Y+r8PbFJp/vNNlTDFCBEIdCIVKEASSpz0y3B9g54QXXFLjs2SMUX5yiYghXRxi9fpLibSUYtb7s5gp57rLKVhgAzi/V9LZ7HuaHPnobe7s+fbjrU+AYsBdonWqWHDlSf6LgL8tapQ3XJ8nSL1/HRLUyGC347Lc1ShwObRxGK953BrymuMF0o4ZN23T6IBJwBo3JYBD1QGjp21BD2GsHAyhhX6rfzkbd+KxojAfTgnoDVtdhZRWW6zCUKi5raWIlXLevRDBS4BW1FaZHhPFhYWwYxoYUlRJ9MNZCvQ6r8wF2KeC8vZrHXRMS6QiJFMrFDM/NMvqpUdCCFEA5DyUDQgbDW9TAV4HmxHqD2Zd8gLJWWCFNRCIZZKJ/y0fHdkAyUkM+SqYeV47co81U/9dTLuaXr9mHc4L2vwIPNQdDaBQ0r97l+JBa4/QujKZJSG0bsQlKcjC09Q53A6t6IHqiZz0YCPt9PSiDts7N2QP85FHodIR6U7G8DN00TXBAMXZIc/4eeNolQ8yd3aC4q81kJaBcHEzPjkK66llFEIAohVJ6kI2cRqkARYCgcZFQPjzLzCdnCWoKKUseSh6EtyACSiv+8fr9/N71c5zV9eXBri+BIz46OpnPTwWEHLFfVPBSgXRPKYq+0kqZ+/FnsW/npE9dWVj64m2ElbLm306z3GbWmGrW2bBtnOl0lSKSeBhmkKKCAYjAgxjA2YQS5+BEoeq1B8cEDOBoCHLSHpJzQqcDK2vC2gmFWQvYM62Z3WcYHoG4B6D/Hqonv9xTz3r1oajcBBeNSFcuxEaWeG2c0z+3h8KhGBlyKMnVDjbTlfWLztx9ZIHL3/ipHgy6MFIFkcCPA2/MfP2/s8TfvcDFO6LAnEht+KIzpnjndz2ZQhxlBR6nQFvNfFXz9zNtHumsMNRcp2EaWNPq1wxxFtBopQl04FNTSqhSAm294513+gBC3FPIZpTonu1v+z4PxdswUBmkDJx3MoQ9oAoUfluzBUY2u1d7GGT5fwBGNBaNsyEmMOj2MHtu2svwA2WkYlFkKQtAZZFBs5Py/Ld9mi/MrzERarNsXAjcAlwDaMD9ry4TG/qD54CfrDvhnGqsblrcYHcl5orTpnAAWqON5dBwyl9MrXOstUypbai5EsZVMTKEZQTbbeM6YObBrIJdR6QOqoKokr8hZFEISqlT3uvRXorN7UBlv27ptX3NAa10vx1p3e9XykeEf7O+gdxoyKcZn/t725IfzTsw4nAmJFEJC7tWiIIhho5WIQTR5Be3QWnNy247wCvuO9TznRxtGx9CvAiYB4LtgIRs/zI+nG4AXqLglx+qJ0k37OKf/cw93ZCZ5KpdY9BJeGBqlj+cmWDZDaELQ6zpEItgUDiyyycG7RIi0yHurFBoLVJoH6GY3EHMIsQg8Yyf39VGEECh8JfrUWgkDwTIYPn9CizZMQpBcNJPHbnzAkF6wADrGEQ3ICp36qzc4EcBZECME2wPhuiuNVgXYDHMXTLHxsg5nH3bDlRHIUWLs0IQhlx/8Di//vn9vVEVXd+lCmKBfwDu+t9dJnZr6gqBA8DeYa1MLSyFe5Imb/mDX+aBc67kTwsVKkpTwrGBATGIWA+ja53bvJei8dEgRM5QbNcYrR9huH4/leTzFCII4wmiMCbSTQqBIwwgzteUrQohzKWzflSEKktpfoSWrxd99bZ95ClQgkbnb4gCgzAV2bwC4ugBVh5MgHOaTmSYWDudC+7bw/BjBSjCodoae1724f6oSoFpOAmB/cAled/+3yw1fgVwB8Dw0LDUNmqKJzwTfuanuTAMMJ06LbGIOBySWxJBobRfssLlLi4q+v3Oj1BimzLWOMn06r2MtD9AQUNYGCMMS8S6RaRT4i31I9IQh315IL4dqGy/HwB45YHonrKa4RH4qFBKbaYtBm36IPARB0YUgsZJTyFpaMCVOHfhTIb2V/jpP76BT8gSO+PQHU+MBgD2AQdyPuX/BAi58PolBS8RSMujY9H02ipyzRNYfdoLaCQppOnA4cigUAZdFULickxULRBUuirFqDhA/NVghaD1AJpVmlAcE81FZlbnGG28h5JOCOKYKJgi0m3CICHOnO9HYD5K/HYuUryyIXNWwIP8KBU/qtIZiEFf/oaoQ0EGyW8b6bV9HxrnQnSk+j/Kf/yPI9z9djh9KuDoojUKQoGfAN6Q8yX/N0DIUX0dgzdP1NhELKvLcPkT0Nc+FXBgLQK5S+0C4qM/CoiHipQmq8QTVcJqETSIcSglvjjTB4MI481lZlcfZKz+WUryGGEMQbBjAEB3ujbxw2NNlB+ReVhhJg+kJ1/wPQD8f8iGuj5SBAEgQAgRAhwaVJAB6Mv22wHiOijdwLgy73nlCu99ywanz3ZhzNvE142XAL+Sj4yvBpB8zvsC8GSgw8hYgfVVuOopqMuvHQCwJr8yQtb0gHpWUIWQ0vQw5Z1jxONVlAJnLcqPkjSCURrbA9NeZ2b9IOPrt1BJbyEKQEcRUTjpa0tCpC1xaLOhM1Go/DlNrpZ4MJspC1AAGqXCvkRFQITgUHRAbSDSQAAgb7GAM0ABOnIxH3rDAd7/BsPMLsXJI9JRioIIHweel/OzfLWAAASABUp+pHAekFAZjmnU4NJr0F0waI0kHYDs+pYfowJaowKNAOIf6SnNDFPdPUE8MYQI4AYnndliaQZNKkI1aTBdP8lE7SGGGzdRlIODM+2I/vAzDMvEYUCke1AsUdhVdvklkBwQjdIaraOuDf2Iqo6SFTSAeIdrMHp3156BCYqkwQhOFSEo4XSRNlWS6i4arsT1L3knN73mE0yeUWXpUD1BESPcA1wJ2Jzv+GoCyaeucQ/lDCChOhpTX0Nf+UTiZ12HKpZw7RaCIMbgkgTptJEkRZxFKQ1RMCjs1vXBVE4bY2jPFNFYBRFBnK9FCpRzOCBBoaxhtL3BeHORkcYhRltzlGSOAq3NIh9moy/8anR6kLoCu7kAMqC8tSEkwbXUSxdSK+2lURinHg3TjMqYIEZ0gFEBKI3rClHoUon2ao1P/vPr4I1vZOyMUVYPrWUwsj/LWs/5jK8FkHyRnwFu9VA6XSiFHhR1zoUUXvQD6IlJXNIB6WPBWQvGIEkbV2/iOglK4YdCCjEChYihXV0wZ04TDpf9w5COLN1njw8ZFKmAFkc1bTOc1BnurDKUrna3l6i4JQpqnYg6sU4Je+oDidBBEQnHMNE0jeLp1Mq7WavsYK0wQj0qYoKIECFWQgSE2TpZgM5UKFA/+BXu/q0/ZuGuh7sRPkn98FIHRQHhQX8mvpqH8bUEkocyDtwInJePFID4536bYM/Zg+tYXeUepuw7WXpRU2/gWm0UMgCjFWIFijHV08e6cCYIx4cg0IjNHrAju8IE+HMD/2Gch1QSS4GenF8RzxfuMMJFMUnXJnER07VhEFBWQklDQQthdo6SnZg6UP5hQFEaQbFxz33c8MO/BkC0a5b0yHyCUjEi9wBPBOo5H/H1AJKHUgQ+DjwFSClVA1p1DRBe9/0Uvu1aJC5gkw7OGMgmkSpf6DsJbqMO7Y4fjYVID4xx0G0Xp4cZ2j1BcWoYVYwH0Jz0heDB9AQawF9fExTiK7juSvWH4rrv7KiruKtCqAiz/QgYh0kM7VZKp52SpN12x5A6N4BYb9D4zOfgzW+HKCQYHXZ2ccUNRgTyCeAFgM1HxtcTCFv+4ddk8xsIQkOpElJfR++9gOgZLyA4fTcEASZJ+lGTDY0FAaEPRHpgUgOBRkUBonzEAHqoSGVmhEpvZDZaQRcjVBAg2WNFfYEgeC7+vEOhdM9qgqCnQVsDWIttpzRrber1NrVuu5HmnllGUHE8eI9DX8G8+W1w8CDh6TswC8tGkjREAZINbSFfwL8RQLZ+gF8AXubbCcNjMbVVALjqaYRXXk24YxZChe30IsYCmxGjnCCtFtJogbH+5MGPzIRBndEaXYkpjVcoTw1RGCkTlAroOESHASrIrzGPTz2gxKGsw6WGpJHQ6ELYaHZtx2QwUQi6Z5X064SKQ+zSMu7WW3Dv/wAKYHpSZGEpBWIANk/6VG4NZL6RQACUB2OAy4C3ZfNOKBQdcTFkYw0AnnYd4cWXEU5P4kSw7fbmNAWyteHdIGKabUjN4MZRH4yvMyL4iwL+JnlEWIqIil1bCAmiYADHH9tfYds4kq5MVwgQDIDp7MQ1CAhLMdFwhahShFqN5m130n7pKwBgfAxaLUOrHfRpi+wHfiB3OcQCAvCNBbJ9XdHAvwC/DgCkFCsBpqMxBgD17O8kuvgS9PhE32EuScANroeBQgUKnCCdBGm1IUk3529oD6cfDRqBgRRA/lq9Hli/iK72kQMgWqN78ColCiMV4pEqQRzg1lbp7J+j/vZ34h49AlEI5Ypjfd367wfwD8DvA2xfvL/RQE5dV64BXgJcDoDSKaVKQLuucb42PPs6wgsuQo1N4IIQ6UExFro2/wmxDknTQcQkqT/pzGJTb06m0WQg8tMBBvt7UdOLoi6EcLRK1IUQFiJU2sHOz9O68x5ar34D2YvJCcfKqsW5KDdt45eAu7Z+129mINn7hrlfzs8AfwHM5sBoTDsgSQHQl16JPu9C2HEaqn+vNUaU9o73AsAPQbPJQbbXtiCCf+WiSEMcogsxulzogejaIjrUkCb0rsWZbpHu3HIb9qZbAaAHbXLCysqqI0kj/9jLEeBPgDfmosIAAvCtAASALbm17EcivwHMAICyVIYc4kKadQW+95wLUGefi9qxEzU2jq5U+4Dwy1JIV2rLaqL4vgEIr+zmBw7SFJp13PIy9ugR7P57cd3UBGQ1QtDasLKqcS4AAI4D/wy8FEi2L9zfWkC2i5Yq8OPALwLng3dsXBisrp8mmnZTk3upnbtg9x7UxGQ/epQHpIpFCENUHxIDANYOfv0mRTY2kNo6srjQmzCOHDtC/sXYqCMMHa0WNJphLsrmfKp9E9DaPiq+9V8KiLb0PRt4J1ADJBNRbKgOJ12l3bYFnJf8H8r1VSpZxsdTxsYSikW75ZhV4K3A07cZqKivn5O2vL4BEQMwBTwHeDHw+M2UxuaDaFHsCCOH1gKAiMIacA5A+WPFP2ZCdhzOqX7UJV1trTUwD9zg52d8ClgG+BaKiK8+GK/8qwo8Ffgj4CPAY6dc9kOp/y56Yjt1gEeBD/kh65OAytaa56X4f/ylvSOCU5zbnOUXGf5pv5Tqa/yv+nP+4ubtwG29tu97nz/mr4Cf8mlozzbwAQLfr/nGv/j/AER3GxTUc5MlAAAAAElFTkSuQmCC";
887
+
888
+ // src/components/trigger.tsx
889
+ var _tmpl$ = ['<button type="button" aria-label="Open TanStack Devtools"', "><img", ' alt="TanStack Logo"></button>'];
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 ssr(_tmpl$, ssrAttribute("class", escape(buttonStyle(), true), false), ssrAttribute("src", escape(tanstack_logo_default, true), false));
902
+ };
903
+ var _tmpl$2 = ["<div", ' style="', '"', ">", "</div>"];
904
+ var MainPanel = (props) => {
905
+ const styles = useStyles();
906
+ const {
907
+ height
908
+ } = useHeight();
909
+ const {
910
+ settings
911
+ } = useDevtoolsSettings();
912
+ const pip = usePiPWindow();
913
+ return ssr(_tmpl$2, ssrAttribute("id", escape(TANSTACK_DEVTOOLS, true), false), "height:" + (pip().pipWindow ? "100vh" : escape(height(), true) + "px"), ssrAttribute("class", escape(clsx3(styles().devtoolsPanelContainer(settings().panelLocation, Boolean(pip().pipWindow)), styles().devtoolsPanelContainerAnimation(props.isOpen(), height()), styles().devtoolsPanelContainerVisibility(props.isOpen()), styles().devtoolsPanelContainerResizing(props.isResizing)), true), false), escape(createComponent(DrawClientProvider, {
914
+ animationMs: 400,
915
+ get children() {
916
+ return props.children;
917
+ }
918
+ })));
919
+ };
920
+ var _tmpl$3 = ["<div", ">", "", "</div>"];
921
+ var _tmpl$22 = ["<div", "></div>"];
922
+ var ContentPanel = (props) => {
923
+ const styles = useStyles();
924
+ const {
925
+ settings
926
+ } = useDevtoolsSettings();
927
+ return ssr(_tmpl$3, ssrAttribute("class", escape(styles().devtoolsPanel, true), false), props.handleDragStart ? ssr(_tmpl$22, ssrAttribute("class", escape(styles().dragHandle(settings().panelLocation), true), false)) : escape(null), escape(props.children));
928
+ };
929
+ var _tmpl$4 = ["<div", ">", "", "", "</div>"];
930
+ var _tmpl$23 = ["<div", ">", "</div>"];
931
+ var _tmpl$32 = ["<div", ">", "", "</div>"];
932
+ var _tmpl$42 = ["<div", "><div", ">", "</div>", "Final shortcut is: ", "</div>"];
933
+ var _tmpl$5 = ["<div", "><div", ">", "", "</div></div>"];
934
+ var SettingsTab = () => {
935
+ const {
936
+ setSettings,
937
+ settings
938
+ } = useDevtoolsSettings();
939
+ const styles = useStyles();
940
+ const hotkey = createMemo(() => settings().openHotkey);
941
+ const modifiers = ["Control", "Alt", "Meta", "Shift"];
942
+ const changeHotkey = (newHotkey) => () => {
943
+ if (hotkey().includes(newHotkey)) {
944
+ return setSettings({
945
+ openHotkey: hotkey().filter((key) => key !== newHotkey)
946
+ });
947
+ }
948
+ const existingModifiers = hotkey().filter((key) => modifiers.includes(key));
949
+ const otherModifiers = hotkey().filter((key) => !modifiers.includes(key));
950
+ setSettings({
951
+ openHotkey: [...existingModifiers, newHotkey, ...otherModifiers]
952
+ });
953
+ };
954
+ return createComponent(MainPanel$1, {
955
+ withPadding: true,
956
+ get children() {
957
+ return [createComponent(Section, {
958
+ get children() {
959
+ return [createComponent(SectionTitle, {
960
+ get children() {
961
+ return [createComponent(SectionIcon, {
962
+ get children() {
963
+ return createComponent(SettingsCog, {});
964
+ }
965
+ }), "General"];
966
+ }
967
+ }), createComponent(SectionDescription, {
968
+ children: "Configure general behavior of the devtools panel."
969
+ }), ssr(_tmpl$4, ssrAttribute("class", escape(styles().settingsGroup, true), false), escape(createComponent(Checkbox, {
970
+ label: "Default open",
971
+ description: "Automatically open the devtools panel when the page loads",
972
+ onChange: () => setSettings({
973
+ defaultOpen: !settings().defaultOpen
974
+ }),
975
+ get checked() {
976
+ return settings().defaultOpen;
977
+ }
978
+ })), escape(createComponent(Checkbox, {
979
+ label: "Hide trigger until hovered",
980
+ description: "Keep the devtools trigger button hidden until you hover over its area",
981
+ onChange: () => setSettings({
982
+ hideUntilHover: !settings().hideUntilHover
983
+ }),
984
+ get checked() {
985
+ return settings().hideUntilHover;
986
+ }
987
+ })), escape(createComponent(Select, {
988
+ label: "Theme",
989
+ description: "Choose the theme for the devtools panel",
990
+ get value() {
991
+ return settings().theme;
992
+ },
993
+ options: [{
994
+ label: "Dark",
995
+ value: "dark"
996
+ }, {
997
+ label: "Light",
998
+ value: "light"
999
+ }],
1000
+ onChange: (value) => setSettings({
1001
+ theme: value
1002
+ })
1003
+ })))];
1004
+ }
1005
+ }), createComponent(Section, {
1006
+ get children() {
1007
+ return [createComponent(SectionTitle, {
1008
+ get children() {
1009
+ return [createComponent(SectionIcon, {
1010
+ get children() {
1011
+ return createComponent(Link, {});
1012
+ }
1013
+ }), "URL Configuration"];
1014
+ }
1015
+ }), createComponent(SectionDescription, {
1016
+ children: "Control when devtools are available based on URL parameters."
1017
+ }), ssr(_tmpl$32, ssrAttribute("class", escape(styles().settingsGroup, true), false), escape(createComponent(Checkbox, {
1018
+ label: "Require URL Flag",
1019
+ description: "Only show devtools when a specific URL parameter is present",
1020
+ get checked() {
1021
+ return settings().requireUrlFlag;
1022
+ },
1023
+ onChange: (checked) => setSettings({
1024
+ requireUrlFlag: checked
1025
+ })
1026
+ })), escape(createComponent(Show, {
1027
+ get when() {
1028
+ return settings().requireUrlFlag;
1029
+ },
1030
+ get children() {
1031
+ return ssr(_tmpl$23, ssrAttribute("class", escape(styles().conditionalSetting, true), false), escape(createComponent(Input, {
1032
+ label: "URL flag",
1033
+ description: "Enter the URL parameter name (e.g., 'debug' for ?debug=true)",
1034
+ placeholder: "debug",
1035
+ get value() {
1036
+ return settings().urlFlag;
1037
+ },
1038
+ onChange: (e) => setSettings({
1039
+ urlFlag: e
1040
+ })
1041
+ })));
1042
+ }
1043
+ })))];
1044
+ }
1045
+ }), createComponent(Section, {
1046
+ get children() {
1047
+ return [createComponent(SectionTitle, {
1048
+ get children() {
1049
+ return [createComponent(SectionIcon, {
1050
+ get children() {
1051
+ return createComponent(Keyboard, {});
1052
+ }
1053
+ }), "Keyboard"];
1054
+ }
1055
+ }), createComponent(SectionDescription, {
1056
+ children: "Customize keyboard shortcuts for quick access."
1057
+ }), ssr(_tmpl$42, ssrAttribute("class", escape(styles().settingsGroup, true), false), ssrAttribute("class", escape(styles().settingsModifiers, true), false), escape(createComponent(Show, {
1058
+ keyed: true,
1059
+ get when() {
1060
+ return hotkey();
1061
+ },
1062
+ get children() {
1063
+ return [createComponent(Button, {
1064
+ variant: "success",
1065
+ get onclick() {
1066
+ return changeHotkey("Shift");
1067
+ },
1068
+ get outline() {
1069
+ return !hotkey().includes("Shift");
1070
+ },
1071
+ children: "Shift"
1072
+ }), createComponent(Button, {
1073
+ variant: "success",
1074
+ get onclick() {
1075
+ return changeHotkey("Alt");
1076
+ },
1077
+ get outline() {
1078
+ return !hotkey().includes("Alt");
1079
+ },
1080
+ children: "Alt"
1081
+ }), createComponent(Button, {
1082
+ variant: "success",
1083
+ get onclick() {
1084
+ return changeHotkey("Meta");
1085
+ },
1086
+ get outline() {
1087
+ return !hotkey().includes("Meta");
1088
+ },
1089
+ children: "Meta"
1090
+ }), createComponent(Button, {
1091
+ variant: "success",
1092
+ get onclick() {
1093
+ return changeHotkey("Control");
1094
+ },
1095
+ get outline() {
1096
+ return !hotkey().includes("Control");
1097
+ },
1098
+ children: "Control"
1099
+ })];
1100
+ }
1101
+ })), escape(createComponent(Input, {
1102
+ label: "Hotkey to open/close devtools",
1103
+ description: "Use '+' to combine keys (e.g., 'a+b' or 'd'). This will be used with the enabled modifiers from above",
1104
+ placeholder: "a",
1105
+ get value() {
1106
+ return hotkey().filter((key) => !["Shift", "Meta", "Alt", "Ctrl"].includes(key)).join("+");
1107
+ },
1108
+ onChange: (e) => {
1109
+ const makeModifierArray = (key) => {
1110
+ if (key.length === 1) return [uppercaseFirstLetter(key)];
1111
+ const modifiers3 = [];
1112
+ for (const character of key) {
1113
+ const newLetter = uppercaseFirstLetter(character);
1114
+ if (!modifiers3.includes(newLetter)) modifiers3.push(newLetter);
1115
+ }
1116
+ return modifiers3;
1117
+ };
1118
+ const modifiers2 = e.split("+").flatMap((key) => makeModifierArray(key)).filter(Boolean);
1119
+ return setSettings({
1120
+ openHotkey: [...hotkey().filter((key) => ["Shift", "Meta", "Alt", "Ctrl"].includes(key)), ...modifiers2]
1121
+ });
1122
+ }
1123
+ })), escape(hotkey().join(" + ")))];
1124
+ }
1125
+ }), createComponent(Section, {
1126
+ get children() {
1127
+ return [createComponent(SectionTitle, {
1128
+ get children() {
1129
+ return [createComponent(SectionIcon, {
1130
+ get children() {
1131
+ return createComponent(GeoTag, {});
1132
+ }
1133
+ }), "Position"];
1134
+ }
1135
+ }), createComponent(SectionDescription, {
1136
+ children: "Adjust the position of the trigger button and devtools panel."
1137
+ }), ssr(_tmpl$5, ssrAttribute("class", escape(styles().settingsGroup, true), false), ssrAttribute("class", escape(styles().settingRow, true), false), escape(createComponent(Select, {
1138
+ label: "Trigger Position",
1139
+ options: [{
1140
+ label: "Bottom Right",
1141
+ value: "bottom-right"
1142
+ }, {
1143
+ label: "Bottom Left",
1144
+ value: "bottom-left"
1145
+ }, {
1146
+ label: "Top Right",
1147
+ value: "top-right"
1148
+ }, {
1149
+ label: "Top Left",
1150
+ value: "top-left"
1151
+ }, {
1152
+ label: "Middle Right",
1153
+ value: "middle-right"
1154
+ }, {
1155
+ label: "Middle Left",
1156
+ value: "middle-left"
1157
+ }],
1158
+ get value() {
1159
+ return settings().position;
1160
+ },
1161
+ onChange: (value) => setSettings({
1162
+ position: value
1163
+ })
1164
+ })), escape(createComponent(Select, {
1165
+ label: "Panel Position",
1166
+ get value() {
1167
+ return settings().panelLocation;
1168
+ },
1169
+ options: [{
1170
+ label: "Top",
1171
+ value: "top"
1172
+ }, {
1173
+ label: "Bottom",
1174
+ value: "bottom"
1175
+ }],
1176
+ onChange: (value) => setSettings({
1177
+ panelLocation: value
1178
+ })
1179
+ })))];
1180
+ }
1181
+ })];
1182
+ }
1183
+ });
1184
+ };
1185
+ var _tmpl$6 = ["<div", "><div", "><div", ">", "</div></div><div", "></div></div>"];
1186
+ var _tmpl$24 = ["<div", "><h3", "></h3></div>"];
1187
+ var PluginsTab = () => {
1188
+ const {
1189
+ plugins,
1190
+ activePlugin,
1191
+ setActivePlugin
1192
+ } = usePlugins();
1193
+ const {
1194
+ expanded,
1195
+ hoverUtils,
1196
+ animationMs
1197
+ } = useDrawContext();
1198
+ useTheme();
1199
+ createEffect(() => {
1200
+ plugins()?.find((plugin) => plugin.id === activePlugin());
1201
+ });
1202
+ const styles = useStyles();
1203
+ return ssr(_tmpl$6, ssrAttribute("class", escape(styles().pluginsTabPanel, true), false), ssrAttribute("class", escape(clsx3(styles().pluginsTabDraw(expanded()), {
1204
+ [styles().pluginsTabDraw(expanded())]: expanded()
1205
+ }, styles().pluginsTabDrawTransition(animationMs)), true), false), ssrAttribute("class", escape(clsx3(styles().pluginsTabSidebar(expanded()), styles().pluginsTabSidebarTransition(animationMs)), true), false), escape(createComponent(For, {
1206
+ get each() {
1207
+ return plugins();
1208
+ },
1209
+ children: (plugin) => {
1210
+ createEffect(() => {
1211
+ });
1212
+ return ssr(_tmpl$24, ssrAttribute("class", escape(clsx3(styles().pluginName, {
1213
+ active: activePlugin() === plugin.id
1214
+ }), true), false), ssrAttribute("id", escape(PLUGIN_TITLE_CONTAINER_ID, true), false));
1215
+ }
1216
+ })), ssrAttribute("id", escape(PLUGIN_CONTAINER_ID, true), false) + ssrAttribute("class", escape(styles().pluginsTabContent, true), false));
1217
+ };
1218
+ function useHeadChanges(onChange, opts = {}) {
1219
+ const {
1220
+ attributes = true,
1221
+ childList = true,
1222
+ subtree = true,
1223
+ observeTitle = true
1224
+ } = opts;
1225
+ onMount(() => {
1226
+ const headObserver = new MutationObserver((mutations) => {
1227
+ for (const m of mutations) {
1228
+ if (m.type === "childList") {
1229
+ m.addedNodes.forEach((node) => onChange({ kind: "added", node }, m));
1230
+ m.removedNodes.forEach(
1231
+ (node) => onChange({ kind: "removed", node }, m)
1232
+ );
1233
+ } else if (m.type === "attributes") {
1234
+ const el = m.target;
1235
+ onChange(
1236
+ {
1237
+ kind: "attr",
1238
+ target: el,
1239
+ name: m.attributeName,
1240
+ oldValue: m.oldValue ?? null
1241
+ },
1242
+ m
1243
+ );
1244
+ } else {
1245
+ const isInTitle = m.target.parentNode && m.target.parentNode.tagName.toLowerCase() === "title";
1246
+ if (isInTitle) onChange({ kind: "title", title: document.title }, m);
1247
+ }
1248
+ }
1249
+ });
1250
+ headObserver.observe(document.head, {
1251
+ childList,
1252
+ attributes,
1253
+ subtree,
1254
+ attributeOldValue: attributes,
1255
+ characterData: true,
1256
+ // helps catch <title> text node edits
1257
+ characterDataOldValue: false
1258
+ });
1259
+ let titleObserver;
1260
+ if (observeTitle) {
1261
+ const titleEl = document.head.querySelector("title") || // create a <title> if missing so future changes are observable
1262
+ document.head.appendChild(document.createElement("title"));
1263
+ titleObserver = new MutationObserver(() => {
1264
+ onChange({ kind: "title", title: document.title });
1265
+ });
1266
+ titleObserver.observe(titleEl, {
1267
+ childList: true,
1268
+ characterData: true,
1269
+ subtree: true
1270
+ });
1271
+ }
1272
+ onCleanup(() => {
1273
+ headObserver.disconnect();
1274
+ titleObserver?.disconnect();
1275
+ });
1276
+ });
1277
+ }
1278
+
1279
+ // src/tabs/seo-tab.tsx
1280
+ var _tmpl$7 = ["<div", ' style="', '"><div', ' style="', '">', " Preview</div>", "<div", ">", "</div><div", ">", "</div><div", ">", "</div></div>"];
1281
+ var _tmpl$25 = ["<img", ' alt="Preview"', ">"];
1282
+ var _tmpl$33 = ["<div", ' style="', '">No Image</div>'];
1283
+ var _tmpl$43 = ["<div", ">", "</div>"];
1284
+ var _tmpl$52 = ["<div>", "", "</div>"];
1285
+ var _tmpl$62 = ["<div", "><strong>Missing tags for ", ":</strong><ul", ">", "</ul></div>"];
1286
+ var _tmpl$72 = ["<li", ">", "</li>"];
1287
+ var SOCIALS = [
1288
+ {
1289
+ network: "Facebook",
1290
+ tags: [{
1291
+ key: "og:title",
1292
+ prop: "title"
1293
+ }, {
1294
+ key: "og:description",
1295
+ prop: "description"
1296
+ }, {
1297
+ key: "og:image",
1298
+ prop: "image"
1299
+ }, {
1300
+ key: "og:url",
1301
+ prop: "url"
1302
+ }],
1303
+ color: "#4267B2"
1304
+ },
1305
+ {
1306
+ network: "X/Twitter",
1307
+ tags: [{
1308
+ key: "twitter:title",
1309
+ prop: "title"
1310
+ }, {
1311
+ key: "twitter:description",
1312
+ prop: "description"
1313
+ }, {
1314
+ key: "twitter:image",
1315
+ prop: "image"
1316
+ }, {
1317
+ key: "twitter:url",
1318
+ prop: "url"
1319
+ }],
1320
+ color: "#1DA1F2"
1321
+ },
1322
+ {
1323
+ network: "LinkedIn",
1324
+ tags: [{
1325
+ key: "og:title",
1326
+ prop: "title"
1327
+ }, {
1328
+ key: "og:description",
1329
+ prop: "description"
1330
+ }, {
1331
+ key: "og:image",
1332
+ prop: "image"
1333
+ }, {
1334
+ key: "og:url",
1335
+ prop: "url"
1336
+ }],
1337
+ color: "#0077B5"
1338
+ },
1339
+ {
1340
+ network: "Discord",
1341
+ tags: [{
1342
+ key: "og:title",
1343
+ prop: "title"
1344
+ }, {
1345
+ key: "og:description",
1346
+ prop: "description"
1347
+ }, {
1348
+ key: "og:image",
1349
+ prop: "image"
1350
+ }, {
1351
+ key: "og:url",
1352
+ prop: "url"
1353
+ }],
1354
+ color: "#5865F2"
1355
+ },
1356
+ {
1357
+ network: "Slack",
1358
+ tags: [{
1359
+ key: "og:title",
1360
+ prop: "title"
1361
+ }, {
1362
+ key: "og:description",
1363
+ prop: "description"
1364
+ }, {
1365
+ key: "og:image",
1366
+ prop: "image"
1367
+ }, {
1368
+ key: "og:url",
1369
+ prop: "url"
1370
+ }],
1371
+ color: "#4A154B"
1372
+ },
1373
+ {
1374
+ network: "Mastodon",
1375
+ tags: [{
1376
+ key: "og:title",
1377
+ prop: "title"
1378
+ }, {
1379
+ key: "og:description",
1380
+ prop: "description"
1381
+ }, {
1382
+ key: "og:image",
1383
+ prop: "image"
1384
+ }, {
1385
+ key: "og:url",
1386
+ prop: "url"
1387
+ }],
1388
+ color: "#6364FF"
1389
+ },
1390
+ {
1391
+ network: "Bluesky",
1392
+ tags: [{
1393
+ key: "og:title",
1394
+ prop: "title"
1395
+ }, {
1396
+ key: "og:description",
1397
+ prop: "description"
1398
+ }, {
1399
+ key: "og:image",
1400
+ prop: "image"
1401
+ }, {
1402
+ key: "og:url",
1403
+ prop: "url"
1404
+ }],
1405
+ color: "#1185FE"
1406
+ }
1407
+ // Add more networks as needed
1408
+ ];
1409
+ function SocialPreview(props) {
1410
+ const styles = useStyles();
1411
+ return ssr(_tmpl$7, ssrAttribute("class", escape(styles().seoPreviewCard, true), false), "border-color:" + escape(props.color, true), ssrAttribute("class", escape(styles().seoPreviewHeader, true), false), "color:" + escape(props.color, true), escape(props.network), props.meta.image ? ssr(_tmpl$25, ssrAttribute("src", escape(props.meta.image, true), false), ssrAttribute("class", escape(styles().seoPreviewImage, true), false)) : ssr(_tmpl$33, ssrAttribute("class", escape(styles().seoPreviewImage, true), false), "background:#222;color:#888;display:flex;align-items:center;justify-content:center;min-height:80px;width:100%"), ssrAttribute("class", escape(styles().seoPreviewTitle, true), false), escape(props.meta.title) || "No Title", ssrAttribute("class", escape(styles().seoPreviewDesc, true), false), escape(props.meta.description) || "No Description", ssrAttribute("class", escape(styles().seoPreviewUrl, true), false), escape(props.meta.url) || escape(window.location.href));
1412
+ }
1413
+ var SeoTab = () => {
1414
+ const [reports, setReports] = createSignal(analyzeHead());
1415
+ const styles = useStyles();
1416
+ function analyzeHead() {
1417
+ const metaTags = Array.from(document.head.querySelectorAll("meta"));
1418
+ const reports2 = [];
1419
+ for (const social of SOCIALS) {
1420
+ const found = {};
1421
+ const missing = [];
1422
+ for (const tag of social.tags) {
1423
+ const meta = metaTags.find((m) => (tag.key.includes("twitter:") ? false : m.getAttribute("property") === tag.key) || m.getAttribute("name") === tag.key);
1424
+ if (meta && meta.getAttribute("content")) {
1425
+ found[tag.prop] = meta.getAttribute("content") || void 0;
1426
+ } else {
1427
+ missing.push(tag.key);
1428
+ }
1429
+ }
1430
+ reports2.push({
1431
+ network: social.network,
1432
+ found,
1433
+ missing
1434
+ });
1435
+ }
1436
+ return reports2;
1437
+ }
1438
+ useHeadChanges(() => {
1439
+ setReports(analyzeHead());
1440
+ });
1441
+ return createComponent(MainPanel$1, {
1442
+ withPadding: true,
1443
+ get children() {
1444
+ return createComponent(Section, {
1445
+ get children() {
1446
+ return [createComponent(SectionTitle, {
1447
+ get children() {
1448
+ return [createComponent(SectionIcon, {
1449
+ get children() {
1450
+ return createComponent(SocialBubble, {});
1451
+ }
1452
+ }), "Social previews"];
1453
+ }
1454
+ }), createComponent(SectionDescription, {
1455
+ 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."
1456
+ }), ssr(_tmpl$43, ssrAttribute("class", escape(styles().seoPreviewSection, true), false), escape(createComponent(For, {
1457
+ get each() {
1458
+ return reports();
1459
+ },
1460
+ children: (report, i) => {
1461
+ const social = SOCIALS[i()];
1462
+ return ssr(_tmpl$52, escape(createComponent(SocialPreview, {
1463
+ get meta() {
1464
+ return report.found;
1465
+ },
1466
+ get color() {
1467
+ return social.color;
1468
+ },
1469
+ get network() {
1470
+ return social.network;
1471
+ }
1472
+ })), report.missing.length > 0 ? escape(ssr(_tmpl$62, ssrAttribute("class", escape(styles().seoMissingTagsSection, true), false), escape(social?.network), ssrAttribute("class", escape(styles().seoMissingTagsList, true), false), escape(createComponent(For, {
1473
+ get each() {
1474
+ return report.missing;
1475
+ },
1476
+ children: (tag) => ssr(_tmpl$72, ssrAttribute("class", escape(styles().seoMissingTag, true), false), escape(tag))
1477
+ })))) : escape(null));
1478
+ }
1479
+ })))];
1480
+ }
1481
+ });
1482
+ }
1483
+ });
1484
+ };
1485
+
1486
+ // src/tabs/index.tsx
1487
+ var tabs = [{
1488
+ name: "Plugins",
1489
+ id: "plugins",
1490
+ component: () => createComponent(PluginsTab, {}),
1491
+ icon: () => createComponent(List, {})
1492
+ }, {
1493
+ name: "SEO",
1494
+ id: "seo",
1495
+ component: () => createComponent(SeoTab, {}),
1496
+ icon: () => createComponent(PageSearch, {})
1497
+ }, {
1498
+ name: "Settings",
1499
+ id: "settings",
1500
+ component: () => createComponent(SettingsTab, {}),
1501
+ icon: () => createComponent(Cogs, {})
1502
+ }];
1503
+
1504
+ // src/components/tabs.tsx
1505
+ var _tmpl$8 = ["<div", ">", "", "</div>"];
1506
+ var _tmpl$26 = ['<button type="button"', ">", "</button>"];
1507
+ var _tmpl$34 = ['<div style="', '"><button type="button"', ">", '</button><button type="button"', ">", "</button></div>"];
1508
+ var Tabs = (props) => {
1509
+ const styles = useStyles();
1510
+ const {
1511
+ state,
1512
+ setState
1513
+ } = useDevtoolsState();
1514
+ const pipWindow = usePiPWindow();
1515
+ const {
1516
+ hoverUtils
1517
+ } = useDrawContext();
1518
+ return ssr(_tmpl$8, ssrAttribute("class", escape(styles().tabContainer, true), false), escape(createComponent(For, {
1519
+ each: tabs,
1520
+ children: (tab) => ssr(_tmpl$26, ssrAttribute("class", escape(clsx3(styles().tab, {
1521
+ active: state().activeTab === tab.id
1522
+ }), true), false), escape(tab.icon()))
1523
+ })), pipWindow().pipWindow !== null ? escape(null) : ssr(_tmpl$34, "margin-top:auto", ssrAttribute("class", escape(clsx3(styles().tab, "detach"), true), false), escape(createComponent(PiP, {})), ssrAttribute("class", escape(clsx3(styles().tab, "close"), true), false), escape(createComponent(X, {}))));
1524
+ };
1525
+ var _tmpl$9 = ["<div", ">", "</div>"];
1526
+ var TabContent = () => {
1527
+ const {
1528
+ state
1529
+ } = useDevtoolsState();
1530
+ const styles = useStyles();
1531
+ const component = createMemo(() => tabs.find((t) => t.id === state().activeTab)?.component || null);
1532
+ return ssr(_tmpl$9, ssrAttribute("class", escape(styles().tabContent, true), false), escape(component()?.()));
1533
+ };
1534
+
1535
+ // src/devtools.tsx
1536
+ var _tmpl$10 = ["<div", ">", "</div>"];
1537
+ function DevTools() {
1538
+ const {
1539
+ settings
1540
+ } = useDevtoolsSettings();
1541
+ const {
1542
+ setHeight
1543
+ } = useHeight();
1544
+ const {
1545
+ persistOpen,
1546
+ setPersistOpen
1547
+ } = usePersistOpen();
1548
+ const [rootEl, setRootEl] = createSignal();
1549
+ const [isOpen, setIsOpen] = createSignal(settings().defaultOpen || persistOpen());
1550
+ const pip = usePiPWindow();
1551
+ let panelRef = void 0;
1552
+ const [isResizing, setIsResizing] = createSignal(false);
1553
+ const toggleOpen = () => {
1554
+ if (pip().pipWindow) {
1555
+ return;
1556
+ }
1557
+ const open = isOpen();
1558
+ setIsOpen(!open);
1559
+ setPersistOpen(!open);
1560
+ };
1561
+ const handleDragStart = (panelElement, startEvent) => {
1562
+ if (startEvent.button !== 0) return;
1563
+ return;
1564
+ };
1565
+ createEffect(() => {
1566
+ if (isOpen()) {
1567
+ const previousValue = rootEl()?.parentElement?.style.paddingBottom;
1568
+ const run = () => {
1569
+ return;
1570
+ };
1571
+ if (typeof window !== "undefined") {
1572
+ (pip().pipWindow ?? window).addEventListener("resize", run);
1573
+ return () => {
1574
+ (pip().pipWindow ?? window).removeEventListener("resize", run);
1575
+ if (rootEl()?.parentElement && typeof previousValue === "string") {
1576
+ setRootEl((prev) => {
1577
+ return prev;
1578
+ });
1579
+ }
1580
+ };
1581
+ }
1582
+ } else {
1583
+ if (rootEl()?.parentElement) {
1584
+ setRootEl((prev) => {
1585
+ if (prev?.parentElement) {
1586
+ prev.parentElement.removeAttribute("style");
1587
+ }
1588
+ return prev;
1589
+ });
1590
+ }
1591
+ }
1592
+ return;
1593
+ });
1594
+ createEffect(() => {
1595
+ window.addEventListener("keydown", (e) => {
1596
+ if (e.key === "Escape" && isOpen()) {
1597
+ toggleOpen();
1598
+ }
1599
+ });
1600
+ });
1601
+ useDisableTabbing(isOpen);
1602
+ createEffect(() => {
1603
+ if (rootEl()) {
1604
+ const el = rootEl();
1605
+ const fontSize = getComputedStyle(el).fontSize;
1606
+ el?.style.setProperty("--tsrd-font-size", fontSize);
1607
+ }
1608
+ });
1609
+ createEffect(() => {
1610
+ const modifiers = settings().openHotkey.filter((key) => keyboardModifiers.includes(key));
1611
+ const nonModifiers = settings().openHotkey.filter((key) => !keyboardModifiers.includes(key));
1612
+ const allModifierCombinations = getAllPermutations(modifiers);
1613
+ for (const combination of allModifierCombinations) {
1614
+ const permutation = [...combination, ...nonModifiers];
1615
+ createShortcut(permutation, () => {
1616
+ toggleOpen();
1617
+ });
1618
+ }
1619
+ });
1620
+ createEffect(() => {
1621
+ const openSourceHandler = (e) => {
1622
+ const isShiftHeld = e.shiftKey;
1623
+ const isCtrlHeld = e.ctrlKey || e.metaKey;
1624
+ if (!isShiftHeld || !isCtrlHeld) return;
1625
+ if (e.target instanceof HTMLElement) {
1626
+ const dataSource = e.target.getAttribute("data-tsd-source");
1627
+ window.getSelection()?.removeAllRanges();
1628
+ if (dataSource) {
1629
+ e.preventDefault();
1630
+ e.stopPropagation();
1631
+ fetch(`__TSD_HOST__://localhost:__TSD_PORT__/__tsd/open-source?source=${encodeURIComponent(dataSource)}`).catch(() => {
1632
+ });
1633
+ }
1634
+ }
1635
+ };
1636
+ window.addEventListener("click", openSourceHandler);
1637
+ onCleanup(() => {
1638
+ window.removeEventListener("click", openSourceHandler);
1639
+ });
1640
+ });
1641
+ const {
1642
+ theme
1643
+ } = useTheme();
1644
+ return createComponent(ThemeContextProvider, {
1645
+ get theme() {
1646
+ return theme();
1647
+ },
1648
+ get children() {
1649
+ return createComponent(Portal, {
1650
+ get mount() {
1651
+ return (pip().pipWindow ?? window).document.body;
1652
+ },
1653
+ get children() {
1654
+ return ssr(_tmpl$10, ssrAttribute("data-testid", escape(TANSTACK_DEVTOOLS, true), false), escape(createComponent(Show, {
1655
+ get when() {
1656
+ return pip().pipWindow !== null ? true : settings().requireUrlFlag ? window.location.search.includes(settings().urlFlag) : true;
1657
+ },
1658
+ get children() {
1659
+ return [createComponent(Trigger, {
1660
+ isOpen,
1661
+ setIsOpen: toggleOpen
1662
+ }), createComponent(MainPanel, {
1663
+ isResizing,
1664
+ isOpen,
1665
+ get children() {
1666
+ return createComponent(ContentPanel, {
1667
+ handleDragStart: (e) => handleDragStart(panelRef, e),
1668
+ get children() {
1669
+ return [createComponent(Tabs, {
1670
+ toggleOpen
1671
+ }), createComponent(TabContent, {})];
1672
+ }
1673
+ });
1674
+ }
1675
+ })];
1676
+ }
1677
+ })));
1678
+ }
1679
+ });
1680
+ }
1681
+ });
1682
+ }
1683
+
1684
+ export { DevTools as default };