@tanstack/react-query-devtools 4.0.11-beta.0 → 4.2.1

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 (98) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +33 -0
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/build/cjs/node_modules/@tanstack/match-sorter-utils/build/esm/index.js +757 -0
  4. package/build/cjs/node_modules/@tanstack/match-sorter-utils/build/esm/index.js.map +1 -0
  5. package/build/{lib → cjs}/noop.js +0 -0
  6. package/build/{lib → cjs}/noop.js.map +0 -0
  7. package/build/cjs/packages/react-query-devtools/src/Explorer.js +215 -0
  8. package/build/cjs/packages/react-query-devtools/src/Explorer.js.map +1 -0
  9. package/build/cjs/packages/react-query-devtools/src/Logo.js +66 -0
  10. package/build/cjs/packages/react-query-devtools/src/Logo.js.map +1 -0
  11. package/build/cjs/packages/react-query-devtools/src/devtools.js +805 -0
  12. package/build/cjs/packages/react-query-devtools/src/devtools.js.map +1 -0
  13. package/build/cjs/packages/react-query-devtools/src/index.js +26 -0
  14. package/build/cjs/packages/react-query-devtools/src/index.js.map +1 -0
  15. package/build/cjs/packages/react-query-devtools/src/styledComponents.js +113 -0
  16. package/build/cjs/packages/react-query-devtools/src/styledComponents.js.map +1 -0
  17. package/build/cjs/packages/react-query-devtools/src/theme.js +68 -0
  18. package/build/cjs/packages/react-query-devtools/src/theme.js.map +1 -0
  19. package/build/cjs/packages/react-query-devtools/src/useLocalStorage.js +81 -0
  20. package/build/cjs/packages/react-query-devtools/src/useLocalStorage.js.map +1 -0
  21. package/build/cjs/packages/react-query-devtools/src/useMediaQuery.js +66 -0
  22. package/build/cjs/packages/react-query-devtools/src/useMediaQuery.js.map +1 -0
  23. package/build/cjs/packages/react-query-devtools/src/utils.js +113 -0
  24. package/build/cjs/packages/react-query-devtools/src/utils.js.map +1 -0
  25. package/build/{lib/index.mjs → esm/index.js} +3 -282
  26. package/build/esm/index.js.map +1 -0
  27. package/build/{lib/noop.mjs → esm/noop.js} +1 -1
  28. package/build/esm/noop.js.map +1 -0
  29. package/build/stats-html.html +2689 -0
  30. package/build/stats.json +45 -0
  31. package/build/types/query-core/src/focusManager.d.ts +16 -0
  32. package/build/types/query-core/src/hydration.d.ts +34 -0
  33. package/build/types/query-core/src/index.d.ts +20 -0
  34. package/build/types/query-core/src/infiniteQueryBehavior.d.ts +15 -0
  35. package/build/types/query-core/src/infiniteQueryObserver.d.ts +18 -0
  36. package/build/types/query-core/src/logger.d.ts +8 -0
  37. package/build/types/query-core/src/mutation.d.ts +70 -0
  38. package/build/types/query-core/src/mutationCache.d.ts +57 -0
  39. package/build/types/query-core/src/mutationObserver.d.ts +23 -0
  40. package/build/types/query-core/src/notifyManager.d.ts +18 -0
  41. package/build/types/query-core/src/onlineManager.d.ts +16 -0
  42. package/build/types/query-core/src/queriesObserver.d.ts +23 -0
  43. package/build/types/query-core/src/query.d.ts +119 -0
  44. package/build/types/query-core/src/queryCache.d.ts +64 -0
  45. package/build/types/query-core/src/queryClient.d.ts +65 -0
  46. package/build/types/query-core/src/queryObserver.d.ts +61 -0
  47. package/build/types/query-core/src/removable.d.ts +9 -0
  48. package/build/types/query-core/src/retryer.d.ts +33 -0
  49. package/build/types/query-core/src/subscribable.d.ts +10 -0
  50. package/build/types/query-core/src/types.d.ts +419 -0
  51. package/build/types/query-core/src/utils.d.ts +99 -0
  52. package/build/types/react-query/src/Hydrate.d.ts +10 -0
  53. package/build/types/react-query/src/QueryClientProvider.d.ts +24 -0
  54. package/build/types/react-query/src/QueryErrorResetBoundary.d.ts +12 -0
  55. package/build/types/react-query/src/index.d.ts +17 -0
  56. package/build/types/react-query/src/isRestoring.d.ts +3 -0
  57. package/build/types/react-query/src/reactBatchedUpdates.d.ts +2 -0
  58. package/build/types/react-query/src/setBatchUpdatesFn.d.ts +1 -0
  59. package/build/types/react-query/src/types.d.ts +34 -0
  60. package/build/types/react-query/src/useBaseQuery.d.ts +3 -0
  61. package/build/types/react-query/src/useInfiniteQuery.d.ts +5 -0
  62. package/build/types/react-query/src/useIsFetching.d.ts +7 -0
  63. package/build/types/react-query/src/useIsMutating.d.ts +7 -0
  64. package/build/types/react-query/src/useMutation.d.ts +6 -0
  65. package/build/types/react-query/src/useQueries.d.ts +49 -0
  66. package/build/types/react-query/src/useQuery.d.ts +23 -0
  67. package/build/types/react-query/src/utils.d.ts +1 -0
  68. package/build/{lib → types/react-query-devtools/src}/Explorer.d.ts +0 -0
  69. package/build/{lib → types/react-query-devtools/src}/Logo.d.ts +0 -0
  70. package/build/types/react-query-devtools/src/__tests__/Explorer.test.d.ts +1 -0
  71. package/build/types/react-query-devtools/src/__tests__/devtools.test.d.ts +6 -0
  72. package/build/types/react-query-devtools/src/__tests__/utils.d.ts +22 -0
  73. package/build/{lib → types/react-query-devtools/src}/devtools.d.ts +0 -0
  74. package/build/{lib → types/react-query-devtools/src}/index.d.ts +0 -0
  75. package/build/{lib → types/react-query-devtools/src}/noop.d.ts +0 -0
  76. package/build/{lib → types/react-query-devtools/src}/styledComponents.d.ts +0 -0
  77. package/build/{lib → types/react-query-devtools/src}/theme.d.ts +0 -0
  78. package/build/{lib → types/react-query-devtools/src}/useLocalStorage.d.ts +0 -0
  79. package/build/{lib → types/react-query-devtools/src}/useMediaQuery.d.ts +0 -0
  80. package/build/{lib → types/react-query-devtools/src}/utils.d.ts +0 -0
  81. package/build/umd/index.development.js +9 -2240
  82. package/build/umd/index.development.js.map +1 -1
  83. package/build/umd/index.production.js +2 -2
  84. package/build/umd/index.production.js.map +1 -1
  85. package/package.json +21 -28
  86. package/src/devtools.tsx +1 -1
  87. package/build/lib/index.js +0 -2286
  88. package/build/lib/index.js.map +0 -1
  89. package/build/lib/index.mjs.map +0 -1
  90. package/build/lib/noop.mjs.map +0 -1
  91. package/build/lib/useSyncExternalStore.d.ts +0 -1
  92. package/build/lib/useSyncExternalStore.native.d.ts +0 -1
  93. package/build/umd/noop.development.js +0 -30
  94. package/build/umd/noop.development.js.map +0 -1
  95. package/build/umd/noop.production.js +0 -12
  96. package/build/umd/noop.production.js.map +0 -1
  97. package/src/useSyncExternalStore.native.ts +0 -3
  98. package/src/useSyncExternalStore.ts +0 -2
@@ -0,0 +1,805 @@
1
+ /**
2
+ * react-query-devtools
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
16
+ var React = require('react');
17
+ var shim = require('use-sync-external-store/shim');
18
+ var reactQuery = require('@tanstack/react-query');
19
+ var index = require('../../../node_modules/@tanstack/match-sorter-utils/build/esm/index.js');
20
+ var useLocalStorage = require('./useLocalStorage.js');
21
+ var utils = require('./utils.js');
22
+ var styledComponents = require('./styledComponents.js');
23
+ var theme = require('./theme.js');
24
+ var Explorer = require('./Explorer.js');
25
+ var Logo = require('./Logo.js');
26
+
27
+ function _interopNamespace(e) {
28
+ if (e && e.__esModule) return e;
29
+ var n = Object.create(null);
30
+ if (e) {
31
+ Object.keys(e).forEach(function (k) {
32
+ if (k !== 'default') {
33
+ var d = Object.getOwnPropertyDescriptor(e, k);
34
+ Object.defineProperty(n, k, d.get ? d : {
35
+ enumerable: true,
36
+ get: function () { return e[k]; }
37
+ });
38
+ }
39
+ });
40
+ }
41
+ n["default"] = e;
42
+ return Object.freeze(n);
43
+ }
44
+
45
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
46
+
47
+ const isServer = typeof window === 'undefined';
48
+ function ReactQueryDevtools({
49
+ initialIsOpen,
50
+ panelProps = {},
51
+ closeButtonProps = {},
52
+ toggleButtonProps = {},
53
+ position = 'bottom-left',
54
+ containerElement: Container = 'aside',
55
+ context,
56
+ styleNonce
57
+ }) {
58
+ const rootRef = React__namespace.useRef(null);
59
+ const panelRef = React__namespace.useRef(null);
60
+ const [isOpen, setIsOpen] = useLocalStorage["default"]('reactQueryDevtoolsOpen', initialIsOpen);
61
+ const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage["default"]('reactQueryDevtoolsHeight', null);
62
+ const [isResolvedOpen, setIsResolvedOpen] = React__namespace.useState(false);
63
+ const [isResizing, setIsResizing] = React__namespace.useState(false);
64
+ const isMounted = utils.useIsMounted();
65
+
66
+ const handleDragStart = (panelElement, startEvent) => {
67
+ var _panelElement$getBoun;
68
+
69
+ if (startEvent.button !== 0) return; // Only allow left click for drag
70
+
71
+ setIsResizing(true);
72
+ const dragInfo = {
73
+ originalHeight: (_panelElement$getBoun = panelElement == null ? void 0 : panelElement.getBoundingClientRect().height) != null ? _panelElement$getBoun : 0,
74
+ pageY: startEvent.pageY
75
+ };
76
+
77
+ const run = moveEvent => {
78
+ const delta = dragInfo.pageY - moveEvent.pageY;
79
+ const newHeight = dragInfo.originalHeight + delta;
80
+ setDevtoolsHeight(newHeight);
81
+
82
+ if (newHeight < 70) {
83
+ setIsOpen(false);
84
+ } else {
85
+ setIsOpen(true);
86
+ }
87
+ };
88
+
89
+ const unsub = () => {
90
+ setIsResizing(false);
91
+ document.removeEventListener('mousemove', run);
92
+ document.removeEventListener('mouseUp', unsub);
93
+ };
94
+
95
+ document.addEventListener('mousemove', run);
96
+ document.addEventListener('mouseup', unsub);
97
+ };
98
+
99
+ React__namespace.useEffect(() => {
100
+ setIsResolvedOpen(isOpen != null ? isOpen : false);
101
+ }, [isOpen, isResolvedOpen, setIsResolvedOpen]); // Toggle panel visibility before/after transition (depending on direction).
102
+ // Prevents focusing in a closed panel.
103
+
104
+ React__namespace.useEffect(() => {
105
+ const ref = panelRef.current;
106
+
107
+ if (ref) {
108
+ const handlePanelTransitionStart = () => {
109
+ if (isResolvedOpen) {
110
+ ref.style.visibility = 'visible';
111
+ }
112
+ };
113
+
114
+ const handlePanelTransitionEnd = () => {
115
+ if (!isResolvedOpen) {
116
+ ref.style.visibility = 'hidden';
117
+ }
118
+ };
119
+
120
+ ref.addEventListener('transitionstart', handlePanelTransitionStart);
121
+ ref.addEventListener('transitionend', handlePanelTransitionEnd);
122
+ return () => {
123
+ ref.removeEventListener('transitionstart', handlePanelTransitionStart);
124
+ ref.removeEventListener('transitionend', handlePanelTransitionEnd);
125
+ };
126
+ }
127
+ }, [isResolvedOpen]);
128
+ React__namespace[isServer ? 'useEffect' : 'useLayoutEffect'](() => {
129
+ if (isResolvedOpen) {
130
+ var _rootRef$current, _rootRef$current$pare;
131
+
132
+ const previousValue = (_rootRef$current = rootRef.current) == null ? void 0 : (_rootRef$current$pare = _rootRef$current.parentElement) == null ? void 0 : _rootRef$current$pare.style.paddingBottom;
133
+
134
+ const run = () => {
135
+ var _panelRef$current, _rootRef$current2;
136
+
137
+ const containerHeight = (_panelRef$current = panelRef.current) == null ? void 0 : _panelRef$current.getBoundingClientRect().height;
138
+
139
+ if ((_rootRef$current2 = rootRef.current) != null && _rootRef$current2.parentElement) {
140
+ rootRef.current.parentElement.style.paddingBottom = containerHeight + "px";
141
+ }
142
+ };
143
+
144
+ run();
145
+
146
+ if (typeof window !== 'undefined') {
147
+ window.addEventListener('resize', run);
148
+ return () => {
149
+ var _rootRef$current3;
150
+
151
+ window.removeEventListener('resize', run);
152
+
153
+ if ((_rootRef$current3 = rootRef.current) != null && _rootRef$current3.parentElement && typeof previousValue === 'string') {
154
+ rootRef.current.parentElement.style.paddingBottom = previousValue;
155
+ }
156
+ };
157
+ }
158
+ }
159
+ }, [isResolvedOpen]);
160
+ const {
161
+ style: panelStyle = {},
162
+ ...otherPanelProps
163
+ } = panelProps;
164
+ const {
165
+ style: closeButtonStyle = {},
166
+ onClick: onCloseClick,
167
+ ...otherCloseButtonProps
168
+ } = closeButtonProps;
169
+ const {
170
+ style: toggleButtonStyle = {},
171
+ onClick: onToggleClick,
172
+ ...otherToggleButtonProps
173
+ } = toggleButtonProps; // Do not render on the server
174
+
175
+ if (!isMounted()) return null;
176
+ return /*#__PURE__*/React__namespace.createElement(Container, {
177
+ ref: rootRef,
178
+ className: "ReactQueryDevtools",
179
+ "aria-label": "React Query Devtools"
180
+ }, /*#__PURE__*/React__namespace.createElement(theme.ThemeProvider, {
181
+ theme: theme.defaultTheme
182
+ }, /*#__PURE__*/React__namespace.createElement(ReactQueryDevtoolsPanel, _rollupPluginBabelHelpers["extends"]({
183
+ ref: panelRef,
184
+ context: context,
185
+ styleNonce: styleNonce
186
+ }, otherPanelProps, {
187
+ style: {
188
+ position: 'fixed',
189
+ bottom: '0',
190
+ right: '0',
191
+ zIndex: 99999,
192
+ width: '100%',
193
+ height: devtoolsHeight != null ? devtoolsHeight : 500,
194
+ maxHeight: '90%',
195
+ boxShadow: '0 0 20px rgba(0,0,0,.3)',
196
+ borderTop: "1px solid " + theme.defaultTheme.gray,
197
+ transformOrigin: 'top',
198
+ // visibility will be toggled after transitions, but set initial state here
199
+ visibility: isOpen ? 'visible' : 'hidden',
200
+ ...panelStyle,
201
+ ...(isResizing ? {
202
+ transition: "none"
203
+ } : {
204
+ transition: "all .2s ease"
205
+ }),
206
+ ...(isResolvedOpen ? {
207
+ opacity: 1,
208
+ pointerEvents: 'all',
209
+ transform: "translateY(0) scale(1)"
210
+ } : {
211
+ opacity: 0,
212
+ pointerEvents: 'none',
213
+ transform: "translateY(15px) scale(1.02)"
214
+ })
215
+ },
216
+ isOpen: isResolvedOpen,
217
+ setIsOpen: setIsOpen,
218
+ handleDragStart: e => handleDragStart(panelRef.current, e)
219
+ })), isResolvedOpen ? /*#__PURE__*/React__namespace.createElement(styledComponents.Button, _rollupPluginBabelHelpers["extends"]({
220
+ type: "button",
221
+ "aria-controls": "ReactQueryDevtoolsPanel",
222
+ "aria-haspopup": "true",
223
+ "aria-expanded": "true"
224
+ }, otherCloseButtonProps, {
225
+ onClick: e => {
226
+ setIsOpen(false);
227
+ onCloseClick == null ? void 0 : onCloseClick(e);
228
+ },
229
+ style: {
230
+ position: 'fixed',
231
+ zIndex: 99999,
232
+ margin: '.5em',
233
+ bottom: 0,
234
+ ...(position === 'top-right' ? {
235
+ right: '0'
236
+ } : position === 'top-left' ? {
237
+ left: '0'
238
+ } : position === 'bottom-right' ? {
239
+ right: '0'
240
+ } : {
241
+ left: '0'
242
+ }),
243
+ ...closeButtonStyle
244
+ }
245
+ }), "Close") : null), !isResolvedOpen ? /*#__PURE__*/React__namespace.createElement("button", _rollupPluginBabelHelpers["extends"]({
246
+ type: "button"
247
+ }, otherToggleButtonProps, {
248
+ "aria-label": "Open React Query Devtools",
249
+ "aria-controls": "ReactQueryDevtoolsPanel",
250
+ "aria-haspopup": "true",
251
+ "aria-expanded": "false",
252
+ onClick: e => {
253
+ setIsOpen(true);
254
+ onToggleClick == null ? void 0 : onToggleClick(e);
255
+ },
256
+ style: {
257
+ background: 'none',
258
+ border: 0,
259
+ padding: 0,
260
+ position: 'fixed',
261
+ zIndex: 99999,
262
+ display: 'inline-flex',
263
+ fontSize: '1.5em',
264
+ margin: '.5em',
265
+ cursor: 'pointer',
266
+ width: 'fit-content',
267
+ ...(position === 'top-right' ? {
268
+ top: '0',
269
+ right: '0'
270
+ } : position === 'top-left' ? {
271
+ top: '0',
272
+ left: '0'
273
+ } : position === 'bottom-right' ? {
274
+ bottom: '0',
275
+ right: '0'
276
+ } : {
277
+ bottom: '0',
278
+ left: '0'
279
+ }),
280
+ ...toggleButtonStyle
281
+ }
282
+ }), /*#__PURE__*/React__namespace.createElement(Logo["default"], {
283
+ "aria-hidden": true
284
+ })) : null);
285
+ }
286
+
287
+ const useSubscribeToQueryCache = (queryCache, getSnapshot) => {
288
+ return shim.useSyncExternalStore(React__namespace.useCallback(onStoreChange => queryCache.subscribe(reactQuery.notifyManager.batchCalls(onStoreChange)), [queryCache]), getSnapshot, getSnapshot);
289
+ };
290
+
291
+ const ReactQueryDevtoolsPanel = /*#__PURE__*/React__namespace.forwardRef(function ReactQueryDevtoolsPanel(props, ref) {
292
+ const {
293
+ isOpen = true,
294
+ styleNonce,
295
+ setIsOpen,
296
+ handleDragStart,
297
+ context,
298
+ ...panelProps
299
+ } = props;
300
+ const queryClient = reactQuery.useQueryClient({
301
+ context
302
+ });
303
+ const queryCache = queryClient.getQueryCache();
304
+ const [sort, setSort] = useLocalStorage["default"]('reactQueryDevtoolsSortFn', Object.keys(utils.sortFns)[0]);
305
+ const [filter, setFilter] = useLocalStorage["default"]('reactQueryDevtoolsFilter', '');
306
+ const [sortDesc, setSortDesc] = useLocalStorage["default"]('reactQueryDevtoolsSortDesc', false);
307
+ const sortFn = React__namespace.useMemo(() => utils.sortFns[sort], [sort]);
308
+ const queriesCount = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().length);
309
+ const [activeQueryHash, setActiveQueryHash] = useLocalStorage["default"]('reactQueryDevtoolsActiveQueryHash', '');
310
+ const queries = React__namespace.useMemo(() => {
311
+ const unsortedQueries = queryCache.getAll();
312
+ const sorted = queriesCount > 0 ? [...unsortedQueries].sort(sortFn) : [];
313
+
314
+ if (sortDesc) {
315
+ sorted.reverse();
316
+ }
317
+
318
+ if (!filter) {
319
+ return sorted;
320
+ }
321
+
322
+ let ranked = sorted.map(item => [item, index.rankItem(item.queryHash, filter)]);
323
+ ranked = ranked.filter(d => d[1].passed);
324
+ ranked = ranked.sort((a, b) => index.compareItems(a[1], b[1]));
325
+ return ranked.map(d => d[0]);
326
+ }, [sortDesc, sortFn, filter, queriesCount, queryCache]);
327
+ const [isMockOffline, setMockOffline] = React__namespace.useState(false);
328
+ return /*#__PURE__*/React__namespace.createElement(theme.ThemeProvider, {
329
+ theme: theme.defaultTheme
330
+ }, /*#__PURE__*/React__namespace.createElement(styledComponents.Panel, _rollupPluginBabelHelpers["extends"]({
331
+ ref: ref,
332
+ className: "ReactQueryDevtoolsPanel",
333
+ "aria-label": "React Query Devtools Panel",
334
+ id: "ReactQueryDevtoolsPanel"
335
+ }, panelProps), /*#__PURE__*/React__namespace.createElement("style", {
336
+ nonce: styleNonce,
337
+ dangerouslySetInnerHTML: {
338
+ __html: "\n .ReactQueryDevtoolsPanel * {\n scrollbar-color: " + theme.defaultTheme.backgroundAlt + " " + theme.defaultTheme.gray + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar, .ReactQueryDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-track, .ReactQueryDevtoolsPanel scrollbar-track {\n background: " + theme.defaultTheme.backgroundAlt + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-thumb, .ReactQueryDevtoolsPanel scrollbar-thumb {\n background: " + theme.defaultTheme.gray + ";\n border-radius: .5em;\n border: 3px solid " + theme.defaultTheme.backgroundAlt + ";\n }\n "
339
+ }
340
+ }), /*#__PURE__*/React__namespace.createElement("div", {
341
+ style: {
342
+ position: 'absolute',
343
+ left: 0,
344
+ top: 0,
345
+ width: '100%',
346
+ height: '4px',
347
+ marginBottom: '-4px',
348
+ cursor: 'row-resize',
349
+ zIndex: 100000
350
+ },
351
+ onMouseDown: handleDragStart
352
+ }), /*#__PURE__*/React__namespace.createElement("div", {
353
+ style: {
354
+ flex: '1 1 500px',
355
+ minHeight: '40%',
356
+ maxHeight: '100%',
357
+ overflow: 'auto',
358
+ borderRight: "1px solid " + theme.defaultTheme.grayAlt,
359
+ display: isOpen ? 'flex' : 'none',
360
+ flexDirection: 'column'
361
+ }
362
+ }, /*#__PURE__*/React__namespace.createElement("div", {
363
+ style: {
364
+ padding: '.5em',
365
+ background: theme.defaultTheme.backgroundAlt,
366
+ display: 'flex',
367
+ justifyContent: 'space-between',
368
+ alignItems: 'center'
369
+ }
370
+ }, /*#__PURE__*/React__namespace.createElement("button", {
371
+ type: "button",
372
+ "aria-label": "Close React Query Devtools",
373
+ "aria-controls": "ReactQueryDevtoolsPanel",
374
+ "aria-haspopup": "true",
375
+ "aria-expanded": "true",
376
+ onClick: () => setIsOpen(false),
377
+ style: {
378
+ display: 'inline-flex',
379
+ background: 'none',
380
+ border: 0,
381
+ padding: 0,
382
+ marginRight: '.5em',
383
+ cursor: 'pointer'
384
+ }
385
+ }, /*#__PURE__*/React__namespace.createElement(Logo["default"], {
386
+ "aria-hidden": true
387
+ })), /*#__PURE__*/React__namespace.createElement("div", {
388
+ style: {
389
+ display: 'flex',
390
+ flexDirection: 'column'
391
+ }
392
+ }, /*#__PURE__*/React__namespace.createElement(QueryStatusCount, {
393
+ queryCache: queryCache
394
+ }), /*#__PURE__*/React__namespace.createElement("div", {
395
+ style: {
396
+ display: 'flex',
397
+ alignItems: 'center'
398
+ }
399
+ }, /*#__PURE__*/React__namespace.createElement(styledComponents.Input, {
400
+ placeholder: "Filter",
401
+ "aria-label": "Filter by queryhash",
402
+ value: filter != null ? filter : '',
403
+ onChange: e => setFilter(e.target.value),
404
+ onKeyDown: e => {
405
+ if (e.key === 'Escape') setFilter('');
406
+ },
407
+ style: {
408
+ flex: '1',
409
+ marginRight: '.5em',
410
+ width: '100%'
411
+ }
412
+ }), !filter ? /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(styledComponents.Select, {
413
+ "aria-label": "Sort queries",
414
+ value: sort,
415
+ onChange: e => setSort(e.target.value),
416
+ style: {
417
+ flex: '1',
418
+ minWidth: 75,
419
+ marginRight: '.5em'
420
+ }
421
+ }, Object.keys(utils.sortFns).map(key => /*#__PURE__*/React__namespace.createElement("option", {
422
+ key: key,
423
+ value: key
424
+ }, "Sort by ", key))), /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
425
+ type: "button",
426
+ onClick: () => setSortDesc(old => !old),
427
+ style: {
428
+ padding: '.3em .4em',
429
+ marginRight: '.5em'
430
+ }
431
+ }, sortDesc ? '⬇ Desc' : '⬆ Asc'), /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
432
+ type: "button",
433
+ onClick: () => {
434
+ if (isMockOffline) {
435
+ reactQuery.onlineManager.setOnline(undefined);
436
+ setMockOffline(false);
437
+ window.dispatchEvent(new Event('online'));
438
+ } else {
439
+ reactQuery.onlineManager.setOnline(false);
440
+ setMockOffline(true);
441
+ }
442
+ },
443
+ "aria-label": isMockOffline ? 'Restore offline mock' : 'Mock offline behavior',
444
+ title: isMockOffline ? 'Restore offline mock' : 'Mock offline behavior',
445
+ style: {
446
+ padding: '0',
447
+ height: '2em'
448
+ }
449
+ }, /*#__PURE__*/React__namespace.createElement("svg", {
450
+ xmlns: "http://www.w3.org/2000/svg",
451
+ width: "2em",
452
+ height: "2em",
453
+ viewBox: "0 0 24 24",
454
+ stroke: isMockOffline ? theme.defaultTheme.danger : 'currentColor',
455
+ fill: "none"
456
+ }, isMockOffline ? /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("path", {
457
+ stroke: "none",
458
+ d: "M0 0h24v24H0z",
459
+ fill: "none"
460
+ }), /*#__PURE__*/React__namespace.createElement("line", {
461
+ x1: "12",
462
+ y1: "18",
463
+ x2: "12.01",
464
+ y2: "18"
465
+ }), /*#__PURE__*/React__namespace.createElement("path", {
466
+ d: "M9.172 15.172a4 4 0 0 1 5.656 0"
467
+ }), /*#__PURE__*/React__namespace.createElement("path", {
468
+ d: "M6.343 12.343a7.963 7.963 0 0 1 3.864 -2.14m4.163 .155a7.965 7.965 0 0 1 3.287 2"
469
+ }), /*#__PURE__*/React__namespace.createElement("path", {
470
+ d: "M3.515 9.515a12 12 0 0 1 3.544 -2.455m3.101 -.92a12 12 0 0 1 10.325 3.374"
471
+ }), /*#__PURE__*/React__namespace.createElement("line", {
472
+ x1: "3",
473
+ y1: "3",
474
+ x2: "21",
475
+ y2: "21"
476
+ })) : /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("path", {
477
+ stroke: "none",
478
+ d: "M0 0h24v24H0z",
479
+ fill: "none"
480
+ }), /*#__PURE__*/React__namespace.createElement("line", {
481
+ x1: "12",
482
+ y1: "18",
483
+ x2: "12.01",
484
+ y2: "18"
485
+ }), /*#__PURE__*/React__namespace.createElement("path", {
486
+ d: "M9.172 15.172a4 4 0 0 1 5.656 0"
487
+ }), /*#__PURE__*/React__namespace.createElement("path", {
488
+ d: "M6.343 12.343a8 8 0 0 1 11.314 0"
489
+ }), /*#__PURE__*/React__namespace.createElement("path", {
490
+ d: "M3.515 9.515c4.686 -4.687 12.284 -4.687 17 0"
491
+ }))))) : null))), /*#__PURE__*/React__namespace.createElement("div", {
492
+ style: {
493
+ overflowY: 'auto',
494
+ flex: '1'
495
+ }
496
+ }, queries.map(query => {
497
+ return /*#__PURE__*/React__namespace.createElement(QueryRow, {
498
+ queryKey: query.queryKey,
499
+ activeQueryHash: activeQueryHash,
500
+ setActiveQueryHash: setActiveQueryHash,
501
+ key: query.queryHash,
502
+ queryCache: queryCache
503
+ });
504
+ }))), activeQueryHash ? /*#__PURE__*/React__namespace.createElement(ActiveQuery, {
505
+ activeQueryHash: activeQueryHash,
506
+ queryCache: queryCache,
507
+ queryClient: queryClient
508
+ }) : null));
509
+ });
510
+
511
+ const ActiveQuery = ({
512
+ queryCache,
513
+ activeQueryHash,
514
+ queryClient
515
+ }) => {
516
+ var _useSubscribeToQueryC, _useSubscribeToQueryC2;
517
+
518
+ const activeQuery = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash));
519
+ const activeQueryState = useSubscribeToQueryCache(queryCache, () => {
520
+ var _queryCache$getAll$fi;
521
+
522
+ return (_queryCache$getAll$fi = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi.state;
523
+ });
524
+ const isStale = (_useSubscribeToQueryC = useSubscribeToQueryCache(queryCache, () => {
525
+ var _queryCache$getAll$fi2;
526
+
527
+ return (_queryCache$getAll$fi2 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi2.isStale();
528
+ })) != null ? _useSubscribeToQueryC : false;
529
+ const observerCount = (_useSubscribeToQueryC2 = useSubscribeToQueryCache(queryCache, () => {
530
+ var _queryCache$getAll$fi3;
531
+
532
+ return (_queryCache$getAll$fi3 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi3.getObserversCount();
533
+ })) != null ? _useSubscribeToQueryC2 : 0;
534
+
535
+ const handleRefetch = () => {
536
+ const promise = activeQuery == null ? void 0 : activeQuery.fetch();
537
+ promise == null ? void 0 : promise.catch(noop);
538
+ };
539
+
540
+ if (!activeQuery || !activeQueryState) {
541
+ return null;
542
+ }
543
+
544
+ return /*#__PURE__*/React__namespace.createElement(styledComponents.ActiveQueryPanel, null, /*#__PURE__*/React__namespace.createElement("div", {
545
+ style: {
546
+ padding: '.5em',
547
+ background: theme.defaultTheme.backgroundAlt,
548
+ position: 'sticky',
549
+ top: 0,
550
+ zIndex: 1
551
+ }
552
+ }, "Query Details"), /*#__PURE__*/React__namespace.createElement("div", {
553
+ style: {
554
+ padding: '.5em'
555
+ }
556
+ }, /*#__PURE__*/React__namespace.createElement("div", {
557
+ style: {
558
+ marginBottom: '.5em',
559
+ display: 'flex',
560
+ alignItems: 'stretch',
561
+ justifyContent: 'space-between'
562
+ }
563
+ }, /*#__PURE__*/React__namespace.createElement(styledComponents.Code, {
564
+ style: {
565
+ lineHeight: '1.8em'
566
+ }
567
+ }, /*#__PURE__*/React__namespace.createElement("pre", {
568
+ style: {
569
+ margin: 0,
570
+ padding: 0,
571
+ overflow: 'auto'
572
+ }
573
+ }, JSON.stringify(activeQuery.queryKey, null, 2))), /*#__PURE__*/React__namespace.createElement("span", {
574
+ style: {
575
+ padding: '0.3em .6em',
576
+ borderRadius: '0.4em',
577
+ fontWeight: 'bold',
578
+ textShadow: '0 2px 10px black',
579
+ background: utils.getQueryStatusColor({
580
+ queryState: activeQueryState,
581
+ isStale: isStale,
582
+ observerCount: observerCount,
583
+ theme: theme.defaultTheme
584
+ }),
585
+ flexShrink: 0
586
+ }
587
+ }, utils.getQueryStatusLabel(activeQuery))), /*#__PURE__*/React__namespace.createElement("div", {
588
+ style: {
589
+ marginBottom: '.5em',
590
+ display: 'flex',
591
+ alignItems: 'center',
592
+ justifyContent: 'space-between'
593
+ }
594
+ }, "Observers: ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, observerCount)), /*#__PURE__*/React__namespace.createElement("div", {
595
+ style: {
596
+ display: 'flex',
597
+ alignItems: 'center',
598
+ justifyContent: 'space-between'
599
+ }
600
+ }, "Last Updated:", ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, new Date(activeQueryState.dataUpdatedAt).toLocaleTimeString()))), /*#__PURE__*/React__namespace.createElement("div", {
601
+ style: {
602
+ background: theme.defaultTheme.backgroundAlt,
603
+ padding: '.5em',
604
+ position: 'sticky',
605
+ top: 0,
606
+ zIndex: 1
607
+ }
608
+ }, "Actions"), /*#__PURE__*/React__namespace.createElement("div", {
609
+ style: {
610
+ padding: '0.5em'
611
+ }
612
+ }, /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
613
+ type: "button",
614
+ onClick: handleRefetch,
615
+ disabled: activeQueryState.fetchStatus === 'fetching',
616
+ style: {
617
+ background: theme.defaultTheme.active
618
+ }
619
+ }, "Refetch"), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
620
+ type: "button",
621
+ onClick: () => queryClient.invalidateQueries(activeQuery),
622
+ style: {
623
+ background: theme.defaultTheme.warning,
624
+ color: theme.defaultTheme.inputTextColor
625
+ }
626
+ }, "Invalidate"), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
627
+ type: "button",
628
+ onClick: () => queryClient.resetQueries(activeQuery),
629
+ style: {
630
+ background: theme.defaultTheme.gray
631
+ }
632
+ }, "Reset"), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
633
+ type: "button",
634
+ onClick: () => queryClient.removeQueries(activeQuery),
635
+ style: {
636
+ background: theme.defaultTheme.danger
637
+ }
638
+ }, "Remove")), /*#__PURE__*/React__namespace.createElement("div", {
639
+ style: {
640
+ background: theme.defaultTheme.backgroundAlt,
641
+ padding: '.5em',
642
+ position: 'sticky',
643
+ top: 0,
644
+ zIndex: 1
645
+ }
646
+ }, "Data Explorer"), /*#__PURE__*/React__namespace.createElement("div", {
647
+ style: {
648
+ padding: '.5em'
649
+ }
650
+ }, /*#__PURE__*/React__namespace.createElement(Explorer["default"], {
651
+ label: "Data",
652
+ value: activeQueryState.data,
653
+ defaultExpanded: {}
654
+ })), /*#__PURE__*/React__namespace.createElement("div", {
655
+ style: {
656
+ background: theme.defaultTheme.backgroundAlt,
657
+ padding: '.5em',
658
+ position: 'sticky',
659
+ top: 0,
660
+ zIndex: 1
661
+ }
662
+ }, "Query Explorer"), /*#__PURE__*/React__namespace.createElement("div", {
663
+ style: {
664
+ padding: '.5em'
665
+ }
666
+ }, /*#__PURE__*/React__namespace.createElement(Explorer["default"], {
667
+ label: "Query",
668
+ value: activeQuery,
669
+ defaultExpanded: {
670
+ queryKey: true
671
+ }
672
+ })));
673
+ };
674
+
675
+ const QueryStatusCount = ({
676
+ queryCache
677
+ }) => {
678
+ const hasFresh = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => utils.getQueryStatusLabel(q) === 'fresh').length);
679
+ const hasFetching = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => utils.getQueryStatusLabel(q) === 'fetching').length);
680
+ const hasPaused = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => utils.getQueryStatusLabel(q) === 'paused').length);
681
+ const hasStale = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => utils.getQueryStatusLabel(q) === 'stale').length);
682
+ const hasInactive = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => utils.getQueryStatusLabel(q) === 'inactive').length);
683
+ return /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKeys, {
684
+ style: {
685
+ marginBottom: '.5em'
686
+ }
687
+ }, /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKey, {
688
+ style: {
689
+ background: theme.defaultTheme.success,
690
+ opacity: hasFresh ? 1 : 0.3
691
+ }
692
+ }, "fresh ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, "(", hasFresh, ")")), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKey, {
693
+ style: {
694
+ background: theme.defaultTheme.active,
695
+ opacity: hasFetching ? 1 : 0.3
696
+ }
697
+ }, "fetching ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, "(", hasFetching, ")")), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKey, {
698
+ style: {
699
+ background: theme.defaultTheme.paused,
700
+ opacity: hasPaused ? 1 : 0.3
701
+ }
702
+ }, "paused ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, "(", hasPaused, ")")), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKey, {
703
+ style: {
704
+ background: theme.defaultTheme.warning,
705
+ color: 'black',
706
+ textShadow: '0',
707
+ opacity: hasStale ? 1 : 0.3
708
+ }
709
+ }, "stale ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, "(", hasStale, ")")), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.QueryKey, {
710
+ style: {
711
+ background: theme.defaultTheme.gray,
712
+ opacity: hasInactive ? 1 : 0.3
713
+ }
714
+ }, "inactive ", /*#__PURE__*/React__namespace.createElement(styledComponents.Code, null, "(", hasInactive, ")")));
715
+ };
716
+
717
+ const QueryRow = ({
718
+ queryKey,
719
+ setActiveQueryHash,
720
+ activeQueryHash,
721
+ queryCache
722
+ }) => {
723
+ var _useSubscribeToQueryC3, _useSubscribeToQueryC4, _useSubscribeToQueryC5, _useSubscribeToQueryC6;
724
+
725
+ const queryHash = (_useSubscribeToQueryC3 = useSubscribeToQueryCache(queryCache, () => {
726
+ var _queryCache$find;
727
+
728
+ return (_queryCache$find = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find.queryHash;
729
+ })) != null ? _useSubscribeToQueryC3 : '';
730
+ const queryState = useSubscribeToQueryCache(queryCache, () => {
731
+ var _queryCache$find2;
732
+
733
+ return (_queryCache$find2 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find2.state;
734
+ });
735
+ const isStale = (_useSubscribeToQueryC4 = useSubscribeToQueryCache(queryCache, () => {
736
+ var _queryCache$find3;
737
+
738
+ return (_queryCache$find3 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find3.isStale();
739
+ })) != null ? _useSubscribeToQueryC4 : false;
740
+ const isDisabled = (_useSubscribeToQueryC5 = useSubscribeToQueryCache(queryCache, () => {
741
+ var _queryCache$find4;
742
+
743
+ return (_queryCache$find4 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find4.isDisabled();
744
+ })) != null ? _useSubscribeToQueryC5 : false;
745
+ const observerCount = (_useSubscribeToQueryC6 = useSubscribeToQueryCache(queryCache, () => {
746
+ var _queryCache$find5;
747
+
748
+ return (_queryCache$find5 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find5.getObserversCount();
749
+ })) != null ? _useSubscribeToQueryC6 : 0;
750
+
751
+ if (!queryState) {
752
+ return null;
753
+ }
754
+
755
+ return /*#__PURE__*/React__namespace.createElement("div", {
756
+ role: "button",
757
+ "aria-label": "Open query details for " + queryHash,
758
+ onClick: () => setActiveQueryHash(activeQueryHash === queryHash ? '' : queryHash),
759
+ style: {
760
+ display: 'flex',
761
+ borderBottom: "solid 1px " + theme.defaultTheme.grayAlt,
762
+ cursor: 'pointer',
763
+ background: queryHash === activeQueryHash ? 'rgba(255,255,255,.1)' : undefined
764
+ }
765
+ }, /*#__PURE__*/React__namespace.createElement("div", {
766
+ style: {
767
+ flex: '0 0 auto',
768
+ width: '2em',
769
+ height: '2em',
770
+ background: utils.getQueryStatusColor({
771
+ queryState,
772
+ isStale,
773
+ observerCount,
774
+ theme: theme.defaultTheme
775
+ }),
776
+ display: 'flex',
777
+ alignItems: 'center',
778
+ justifyContent: 'center',
779
+ fontWeight: 'bold',
780
+ textShadow: isStale ? '0' : '0 0 10px black',
781
+ color: isStale ? 'black' : 'white'
782
+ }
783
+ }, observerCount), isDisabled ? /*#__PURE__*/React__namespace.createElement("div", {
784
+ style: {
785
+ flex: '0 0 auto',
786
+ height: '2em',
787
+ background: theme.defaultTheme.gray,
788
+ display: 'flex',
789
+ alignItems: 'center',
790
+ fontWeight: 'bold',
791
+ padding: '0 0.5em'
792
+ }
793
+ }, "disabled") : null, /*#__PURE__*/React__namespace.createElement(styledComponents.Code, {
794
+ style: {
795
+ padding: '.5em'
796
+ }
797
+ }, "" + queryHash));
798
+ }; // eslint-disable-next-line @typescript-eslint/no-empty-function
799
+
800
+
801
+ function noop() {}
802
+
803
+ exports.ReactQueryDevtools = ReactQueryDevtools;
804
+ exports.ReactQueryDevtoolsPanel = ReactQueryDevtoolsPanel;
805
+ //# sourceMappingURL=devtools.js.map