@refinedev/devtools 1.1.34 → 1.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/devtools-pin.d.ts.map +1 -1
- package/dist/components/devtools-selector.d.ts.map +1 -1
- package/dist/components/resizable-pane.d.ts.map +1 -1
- package/dist/components/selector-box.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/iife/index.js +1 -1
- package/dist/iife/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/use-selector.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/components/devtools-pin.tsx +51 -51
- package/src/components/devtools-selector.tsx +85 -88
- package/src/components/icons/arrow-union-icon.tsx +28 -28
- package/src/components/icons/devtools-icon.tsx +30 -30
- package/src/components/icons/resize-handle-icon.tsx +23 -23
- package/src/components/icons/selector-button.tsx +15 -15
- package/src/components/resizable-pane.tsx +245 -245
- package/src/components/selector-box.tsx +94 -94
- package/src/components/selector-hint.tsx +53 -53
- package/src/panel.tsx +86 -90
- package/src/provider.tsx +5 -7
- package/src/utilities/index.ts +88 -89
- package/src/utilities/use-selector.tsx +218 -228
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
getElementFromFiber,
|
|
3
|
+
getFiberFromElement,
|
|
4
|
+
getFirstFiberHasName,
|
|
5
|
+
getFirstStateNodeFiber,
|
|
6
|
+
getNameFromFiber,
|
|
7
|
+
getParentOfFiber,
|
|
8
8
|
} from "@aliemir/dom-to-fiber-utils";
|
|
9
9
|
import { DevToolsContext } from "@refinedev/devtools-shared";
|
|
10
10
|
import debounce from "lodash/debounce";
|
|
@@ -13,247 +13,237 @@ import React from "react";
|
|
|
13
13
|
type Fiber = Exclude<ReturnType<typeof getFiberFromElement>, null>;
|
|
14
14
|
|
|
15
15
|
export const useSelector = (active: boolean) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
const { devtoolsUrl } = React.useContext(DevToolsContext);
|
|
17
|
+
const [traceItems, setTraceItems] = React.useState<string[]>([]);
|
|
18
|
+
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
if (active) {
|
|
21
|
+
fetch(
|
|
22
|
+
`${devtoolsUrl ?? "http://localhost:5001"}/api/unique-trace-items`,
|
|
23
|
+
).then((res) =>
|
|
24
|
+
res.json().then((data: { data: string[] }) => setTraceItems(data.data)),
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}, [active, devtoolsUrl]);
|
|
28
|
+
|
|
29
|
+
const [selectedFiber, setSelectedFiber] = React.useState<{
|
|
30
|
+
stateNode: Fiber | null;
|
|
31
|
+
nameFiber: Fiber | null;
|
|
32
|
+
}>({
|
|
33
|
+
stateNode: null,
|
|
34
|
+
nameFiber: null,
|
|
35
|
+
});
|
|
36
|
+
const [activeFiber, setActiveFiber] = React.useState<{
|
|
37
|
+
stateNode: Fiber | null;
|
|
38
|
+
nameFiber: Fiber | null;
|
|
39
|
+
derived?: boolean;
|
|
40
|
+
}>({
|
|
41
|
+
stateNode: null,
|
|
42
|
+
nameFiber: null,
|
|
43
|
+
derived: false,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (active) {
|
|
48
|
+
return () => {
|
|
49
|
+
setSelectedFiber({
|
|
50
|
+
stateNode: null,
|
|
51
|
+
nameFiber: null,
|
|
52
|
+
});
|
|
53
|
+
setActiveFiber({
|
|
54
|
+
stateNode: null,
|
|
55
|
+
nameFiber: null,
|
|
56
|
+
derived: false,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return () => 0;
|
|
62
|
+
}, [active]);
|
|
63
|
+
|
|
64
|
+
const selectAppropriateFiber = React.useCallback(
|
|
65
|
+
(start: Fiber | null) => {
|
|
66
|
+
let fiber = start;
|
|
67
|
+
let firstParentOfNodeWithName: Fiber | null;
|
|
68
|
+
let fiberWithStateNode: Fiber | null;
|
|
69
|
+
|
|
70
|
+
let acceptedName = false;
|
|
71
|
+
|
|
72
|
+
while (!acceptedName && fiber) {
|
|
73
|
+
// Get the first fiber node that has a name (look up the tree)
|
|
74
|
+
firstParentOfNodeWithName = getFirstFiberHasName(fiber);
|
|
75
|
+
// Get the first fiber node that has a state node (look up the tree)
|
|
76
|
+
fiberWithStateNode = getFirstStateNodeFiber(firstParentOfNodeWithName);
|
|
77
|
+
acceptedName = traceItems.includes(
|
|
78
|
+
getNameFromFiber(firstParentOfNodeWithName) ?? "",
|
|
79
|
+
);
|
|
80
|
+
if (!acceptedName) {
|
|
81
|
+
fiber = getParentOfFiber(fiber);
|
|
32
82
|
}
|
|
33
|
-
|
|
83
|
+
}
|
|
34
84
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const [activeFiber, setActiveFiber] = React.useState<{
|
|
43
|
-
stateNode: Fiber | null;
|
|
44
|
-
nameFiber: Fiber | null;
|
|
45
|
-
derived?: boolean;
|
|
46
|
-
}>({
|
|
85
|
+
if (fiberWithStateNode && firstParentOfNodeWithName) {
|
|
86
|
+
return {
|
|
87
|
+
stateNode: fiberWithStateNode,
|
|
88
|
+
nameFiber: firstParentOfNodeWithName,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
47
92
|
stateNode: null,
|
|
48
93
|
nameFiber: null,
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
[traceItems],
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const pickFiber = React.useCallback(
|
|
100
|
+
(target: HTMLElement) => {
|
|
101
|
+
const fiber = getFiberFromElement(target);
|
|
102
|
+
|
|
103
|
+
setSelectedFiber(selectAppropriateFiber(fiber));
|
|
104
|
+
return;
|
|
105
|
+
},
|
|
106
|
+
[traceItems],
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
React.useEffect(() => {
|
|
110
|
+
if (
|
|
111
|
+
activeFiber.stateNode !== selectedFiber.stateNode ||
|
|
112
|
+
activeFiber.nameFiber !== selectedFiber.nameFiber
|
|
113
|
+
) {
|
|
114
|
+
setActiveFiber({
|
|
115
|
+
stateNode: selectedFiber.stateNode,
|
|
116
|
+
nameFiber: selectedFiber.nameFiber,
|
|
49
117
|
derived: false,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
let acceptedName = false;
|
|
77
|
-
|
|
78
|
-
while (!acceptedName && fiber) {
|
|
79
|
-
// Get the first fiber node that has a name (look up the tree)
|
|
80
|
-
firstParentOfNodeWithName = getFirstFiberHasName(fiber);
|
|
81
|
-
// Get the first fiber node that has a state node (look up the tree)
|
|
82
|
-
fiberWithStateNode = getFirstStateNodeFiber(
|
|
83
|
-
firstParentOfNodeWithName,
|
|
84
|
-
);
|
|
85
|
-
acceptedName = traceItems.includes(
|
|
86
|
-
getNameFromFiber(firstParentOfNodeWithName) ?? "",
|
|
87
|
-
);
|
|
88
|
-
if (!acceptedName) {
|
|
89
|
-
fiber = getParentOfFiber(fiber);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (fiberWithStateNode && firstParentOfNodeWithName) {
|
|
94
|
-
return {
|
|
95
|
-
stateNode: fiberWithStateNode,
|
|
96
|
-
nameFiber: firstParentOfNodeWithName,
|
|
97
|
-
};
|
|
98
|
-
} else {
|
|
99
|
-
return {
|
|
100
|
-
stateNode: null,
|
|
101
|
-
nameFiber: null,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
[traceItems],
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
const pickFiber = React.useCallback(
|
|
109
|
-
(target: HTMLElement) => {
|
|
110
|
-
const fiber = getFiberFromElement(target);
|
|
111
|
-
|
|
112
|
-
setSelectedFiber(selectAppropriateFiber(fiber));
|
|
113
|
-
return;
|
|
114
|
-
},
|
|
115
|
-
[traceItems],
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
React.useEffect(() => {
|
|
119
|
-
if (
|
|
120
|
-
activeFiber.stateNode !== selectedFiber.stateNode ||
|
|
121
|
-
activeFiber.nameFiber !== selectedFiber.nameFiber
|
|
122
|
-
) {
|
|
123
|
-
setActiveFiber({
|
|
124
|
-
stateNode: selectedFiber.stateNode,
|
|
125
|
-
nameFiber: selectedFiber.nameFiber,
|
|
126
|
-
derived: false,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}, [selectedFiber]);
|
|
130
|
-
|
|
131
|
-
const previousValues = React.useRef<{
|
|
132
|
-
rect: {
|
|
133
|
-
width: number;
|
|
134
|
-
height: number;
|
|
135
|
-
x: number;
|
|
136
|
-
y: number;
|
|
137
|
-
};
|
|
138
|
-
name: string;
|
|
139
|
-
}>({
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}, [selectedFiber]);
|
|
121
|
+
|
|
122
|
+
const previousValues = React.useRef<{
|
|
123
|
+
rect: {
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
x: number;
|
|
127
|
+
y: number;
|
|
128
|
+
};
|
|
129
|
+
name: string;
|
|
130
|
+
}>({
|
|
131
|
+
rect: {
|
|
132
|
+
width: 0,
|
|
133
|
+
height: 0,
|
|
134
|
+
x: 0,
|
|
135
|
+
y: 0,
|
|
136
|
+
},
|
|
137
|
+
name: "",
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const { rect, name } = React.useMemo(() => {
|
|
141
|
+
if (!active) {
|
|
142
|
+
return {
|
|
140
143
|
rect: {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
width: 0,
|
|
145
|
+
height: 0,
|
|
146
|
+
x: 0,
|
|
147
|
+
y: 0,
|
|
145
148
|
},
|
|
146
149
|
name: "",
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
: null;
|
|
166
|
-
// Get the name of the fiber node with a name
|
|
167
|
-
const fiberName = activeFiber.nameFiber
|
|
168
|
-
? getNameFromFiber(activeFiber.nameFiber)
|
|
169
|
-
: null;
|
|
170
|
-
|
|
171
|
-
if (!element) {
|
|
172
|
-
return {
|
|
173
|
-
rect: previousValues.current.rect,
|
|
174
|
-
name: fiberName ?? previousValues.current.name,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const bounding = element.getBoundingClientRect?.();
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (activeFiber.stateNode || activeFiber.nameFiber) {
|
|
153
|
+
// Get the element from the fiber with a state node
|
|
154
|
+
const element = activeFiber.stateNode
|
|
155
|
+
? getElementFromFiber(activeFiber.stateNode)
|
|
156
|
+
: null;
|
|
157
|
+
// Get the name of the fiber node with a name
|
|
158
|
+
const fiberName = activeFiber.nameFiber
|
|
159
|
+
? getNameFromFiber(activeFiber.nameFiber)
|
|
160
|
+
: null;
|
|
161
|
+
|
|
162
|
+
if (!element) {
|
|
163
|
+
return {
|
|
164
|
+
rect: previousValues.current.rect,
|
|
165
|
+
name: fiberName ?? previousValues.current.name,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
179
168
|
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
rect: previousValues.current.rect,
|
|
183
|
-
name: fiberName ?? previousValues.current.name,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
169
|
+
const bounding = element.getBoundingClientRect?.();
|
|
186
170
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
},
|
|
194
|
-
name: fiberName ?? previousValues.current.name,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
171
|
+
if (!bounding) {
|
|
172
|
+
return {
|
|
173
|
+
rect: previousValues.current.rect,
|
|
174
|
+
name: fiberName ?? previousValues.current.name,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
197
177
|
|
|
198
|
-
|
|
199
|
-
|
|
178
|
+
return {
|
|
179
|
+
rect: {
|
|
180
|
+
width: bounding.width,
|
|
181
|
+
height: bounding.height,
|
|
182
|
+
x: bounding.left,
|
|
183
|
+
y: bounding.top,
|
|
184
|
+
},
|
|
185
|
+
name: fiberName ?? previousValues.current.name,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
200
188
|
|
|
201
|
-
previousValues.current
|
|
202
|
-
|
|
203
|
-
name,
|
|
204
|
-
};
|
|
189
|
+
return previousValues.current;
|
|
190
|
+
}, [activeFiber, active]);
|
|
205
191
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (e.key === "Shift" && activeFiber.stateNode) {
|
|
211
|
-
e.stopPropagation();
|
|
212
|
-
e.preventDefault();
|
|
192
|
+
previousValues.current = {
|
|
193
|
+
rect,
|
|
194
|
+
name,
|
|
195
|
+
};
|
|
213
196
|
|
|
214
|
-
|
|
197
|
+
React.useEffect(() => {
|
|
198
|
+
if (active) {
|
|
199
|
+
const listener = (e: KeyboardEvent) => {
|
|
200
|
+
// if user presses shift, toggle the derived state and set the active fiber to the parent
|
|
201
|
+
if (e.key === "Shift" && activeFiber.stateNode) {
|
|
202
|
+
e.stopPropagation();
|
|
203
|
+
e.preventDefault();
|
|
215
204
|
|
|
216
|
-
|
|
205
|
+
const parent = getParentOfFiber(activeFiber.nameFiber);
|
|
217
206
|
|
|
218
|
-
|
|
219
|
-
setActiveFiber({
|
|
220
|
-
...fibers,
|
|
221
|
-
derived: true,
|
|
222
|
-
});
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
};
|
|
207
|
+
const fibers = selectAppropriateFiber(parent);
|
|
227
208
|
|
|
228
|
-
|
|
229
|
-
|
|
209
|
+
if (fibers.nameFiber && fibers.stateNode) {
|
|
210
|
+
setActiveFiber({
|
|
211
|
+
...fibers,
|
|
212
|
+
derived: true,
|
|
213
|
+
});
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
230
216
|
}
|
|
231
|
-
|
|
232
|
-
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
document.addEventListener("keydown", listener);
|
|
220
|
+
return () => document.removeEventListener("keydown", listener);
|
|
221
|
+
}
|
|
222
|
+
return () => 0;
|
|
223
|
+
}, [activeFiber, active]);
|
|
224
|
+
|
|
225
|
+
React.useEffect(() => {
|
|
226
|
+
if (active) {
|
|
227
|
+
let previousTarget: HTMLElement | null = null;
|
|
228
|
+
const listener = debounce((e: MouseEvent) => {
|
|
229
|
+
if (e?.target) {
|
|
230
|
+
if (previousTarget === e.target) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
pickFiber(e.target as HTMLElement);
|
|
234
|
+
previousTarget = e.target as HTMLElement;
|
|
235
|
+
}
|
|
236
|
+
}, 50);
|
|
233
237
|
|
|
234
|
-
|
|
235
|
-
if (active) {
|
|
236
|
-
let previousTarget: HTMLElement | null = null;
|
|
237
|
-
const listener = debounce((e: MouseEvent) => {
|
|
238
|
-
if (e?.target) {
|
|
239
|
-
if (previousTarget === e.target) {
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
pickFiber(e.target as HTMLElement);
|
|
243
|
-
previousTarget = e.target as HTMLElement;
|
|
244
|
-
}
|
|
245
|
-
}, 50);
|
|
238
|
+
document.addEventListener("mousemove", listener);
|
|
246
239
|
|
|
247
|
-
|
|
240
|
+
return () => document.removeEventListener("mousemove", listener);
|
|
241
|
+
}
|
|
242
|
+
return () => 0;
|
|
243
|
+
}, [active, pickFiber]);
|
|
248
244
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}, [active, pickFiber]);
|
|
254
|
-
|
|
255
|
-
return {
|
|
256
|
-
rect,
|
|
257
|
-
name,
|
|
258
|
-
};
|
|
245
|
+
return {
|
|
246
|
+
rect,
|
|
247
|
+
name,
|
|
248
|
+
};
|
|
259
249
|
};
|