@refinedev/devtools 2.0.2 → 2.0.4

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/index.mjs CHANGED
@@ -1,5 +1,376 @@
1
1
  "use client"
2
- import u from"react";import _ from"react";import T from"react";import S from"react";import{DevToolsContext as ie}from"@refinedev/devtools-shared";import{getElementFromFiber as L,getFiberFromElement as q,getFirstFiberHasName as J,getFirstStateNodeFiber as Q,getNameFromFiber as A,getParentOfFiber as N}from"@aliemir/dom-to-fiber-utils";var ee=e=>e?e.child:null,te=e=>{let t=e;for(;t;){let r=L(t);if(r&&r instanceof HTMLElement)return r;t=ee(t)}return null},oe=e=>{let t=e;for(;t;){let r=L(t);if(r&&r instanceof HTMLElement)return r;t=N(t)}return null},ne=e=>{let t=te(e);return t?[t,"child"]:(t=oe(e),t?[t,"parent"]:[document.body,"body"])},re=(e,t)=>{let r=e,n=null,i=null,o=!1;for(;!o&&r;)n=J(r),i=Q(n),o=t.includes(A(n)??""),o||(r=N(r));return i&&n?{stateNode:i,nameFiber:n}:{stateNode:null,nameFiber:null}},O=e=>e.filter(t=>t.element.offsetWidth>0&&t.element.offsetHeight>0),V=e=>{let t=[];return e.forEach(r=>{t.find(i=>i.element===r.element&&i.name===r.name)||t.push(r)}),t},D=(e,t)=>{var o;if(!e)return[];let r=[],n=q(e),i=re(n,t);if(i.nameFiber){let[s]=ne(i.nameFiber),c=A(i.nameFiber);s&&c&&r.push({element:s,name:c})}for(let s=0;s<(((o=e==null?void 0:e.children)==null?void 0:o.length)??0);s++)r.push(...D(e.children[s],t));return r};var B=e=>{let{httpUrl:t}=S.useContext(ie),[r,n]=S.useState([]),i=S.useCallback(async()=>(await(await fetch(`${t}/api/unique-trace-items`)).json()).data,[t]),o=S.useCallback(async()=>{let s=await i(),c=D(document.body,s),a=O(c),d=V(a);n(d)},[i]);return S.useEffect(()=>{e&&o()},[e,o]),{selectableElements:r}};import le from"react";var b=({children:e})=>(le.useEffect(()=>{let t=document.createElement("style");return t.innerHTML=e,document.head.appendChild(t),()=>{document.head.removeChild(t)}},[e]),null);import h from"react";import Z from"lodash-es/debounce.js";import{createPortal as se}from"react-dom";import P from"react";var U=e=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16",fill:"none",...e},P.createElement("path",{fill:"#0FBDBD",fillRule:"evenodd",d:"M9 1a1 1 0 0 0-2 0v2.1A5.006 5.006 0 0 0 3.1 7H1a1 1 0 0 0 0 2h2.1A5.006 5.006 0 0 0 7 12.9V15a1 1 0 1 0 2 0v-2.1A5.006 5.006 0 0 0 12.9 9H15a1 1 0 1 0 0-2h-2.1A5.006 5.006 0 0 0 9 3.1V1Zm2 7a3 3 0 1 0-6 0 3 3 0 0 0 6 0Z",clipRule:"evenodd"})),z=e=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16",fill:"none",...e},P.createElement("path",{fill:"#14141F",fillRule:"evenodd",d:"M9 1a1 1 0 0 0-2 0v2.1A5.006 5.006 0 0 0 3.1 7H1a1 1 0 0 0 0 2h2.1A5.006 5.006 0 0 0 7 12.9V15a1 1 0 1 0 2 0v-2.1A5.006 5.006 0 0 0 12.9 9H15a1 1 0 1 0 0-2h-2.1A5.006 5.006 0 0 0 9 3.1V1Zm2 7a3 3 0 1 0-6 0 3 3 0 0 0 6 0Z",clipRule:"evenodd"}));var M=22,k=(e,t)=>{let{top:r,left:n,width:i,height:o}=e.getBoundingClientRect(),{scrollLeft:s,scrollTop:c}=t.documentElement,a=n+s-Math.max(0,M-i)/2,d=r+c-Math.max(0,M-o)/2;return{left:a,top:d,width:Math.max(M,i),height:Math.max(M,o)}},ae=({element:e,name:t,onSelect:r})=>{let[n]=h.useState(()=>k(e,document)),i=h.useRef(null);h.useEffect(()=>{let s=Z(()=>{var d;let a=k(e,document);["left","top","width","height"].forEach(g=>{var l;(l=i.current)==null||l.style.setProperty(g,`${a[g]}px`)}),(d=i.current)==null||d.style.setProperty("opacity","1")},200,{leading:!1,trailing:!0}),c=Z(()=>{var a;(a=i.current)==null||a.style.setProperty("opacity","0")},200,{leading:!0,trailing:!1});return document.addEventListener("scroll",s),document.addEventListener("scroll",c),()=>{document.removeEventListener("scroll",s),document.removeEventListener("scroll",c)}},[e]);let o=h.useMemo(()=>{let s={width:22,height:22},c=t.length*7.5,a={width:s.width+c,height:s.height},d=4;return n.top-a.height>0&&n.left+a.width<window.innerWidth&&n.width>a.width?{left:d/2,top:a.height*-1-d}:n.height>=a.height*1.5&&n.width>=a.width*1.5?{left:0+d,top:0+d}:n.left-a.width>0?{right:n.width+d,top:0-1}:n.left+n.width+a.width<window.innerWidth?{left:n.width+d,top:0-1}:n.top+n.height+a.height<document.documentElement.scrollHeight?{left:0-1,top:n.height+d}:{left:0,top:0}},[n,t.length]);return h.createElement("button",{type:"button",className:"selector-xray-box",onClick:s=>{s==null||s.preventDefault(),s==null||s.stopPropagation(),r(t)},ref:i,style:{position:"absolute",...n}},h.createElement("div",{style:{position:"absolute",...o},className:"selector-xray-info"},h.createElement("span",{className:"selector-xray-info-icon"},h.createElement(z,{width:12,height:12,style:{pointerEvents:"none"}})),h.createElement("span",{className:"selector-xray-info-title"},` ${t}`)))},W=({elements:e,onSelect:t})=>{let[r,n]=h.useState(null);return h.useEffect(()=>{if(!r){let i=document.createElement("div");return i.id="selector-box-root",document.body.appendChild(i),n(i),()=>{document.body.removeChild(i),n(null)}}return()=>0},[]),r?h.createElement(h.Fragment,null,se(e.map((i,o)=>h.createElement(ae,{key:`selector-element-${o}-${i.name}`,...i,onSelect:t})),r),h.createElement(b,null,`
2
+
3
+ // src/panel.tsx
4
+ import React10 from "react";
5
+
6
+ // src/components/devtools-pin.tsx
7
+ import React7 from "react";
8
+
9
+ // src/components/devtools-selector.tsx
10
+ import React5 from "react";
11
+
12
+ // src/utilities/use-selector.tsx
13
+ import React from "react";
14
+ import { DevToolsContext } from "@refinedev/devtools-shared";
15
+
16
+ // src/utilities/selector-helpers.ts
17
+ import {
18
+ getElementFromFiber,
19
+ getFiberFromElement,
20
+ getFirstFiberHasName,
21
+ getFirstStateNodeFiber,
22
+ getNameFromFiber,
23
+ getParentOfFiber
24
+ } from "@aliemir/dom-to-fiber-utils";
25
+ var getChildOfFiber = (fiber) => {
26
+ if (!fiber) {
27
+ return null;
28
+ }
29
+ return fiber.child;
30
+ };
31
+ var getFirstHTMLElementFromFiberByChild = (fiber) => {
32
+ let child = fiber;
33
+ while (child) {
34
+ const element = getElementFromFiber(child);
35
+ if (element && element instanceof HTMLElement) {
36
+ return element;
37
+ }
38
+ child = getChildOfFiber(child);
39
+ }
40
+ return null;
41
+ };
42
+ var getFirstHTMLElementFromFiberByParent = (fiber) => {
43
+ let parent = fiber;
44
+ while (parent) {
45
+ const element = getElementFromFiber(parent);
46
+ if (element && element instanceof HTMLElement) {
47
+ return element;
48
+ }
49
+ parent = getParentOfFiber(parent);
50
+ }
51
+ return null;
52
+ };
53
+ var getFirstHTMLElementFromFiber = (fiber) => {
54
+ let element = getFirstHTMLElementFromFiberByChild(fiber);
55
+ if (element) {
56
+ return [element, "child"];
57
+ }
58
+ element = getFirstHTMLElementFromFiberByParent(fiber);
59
+ if (element) {
60
+ return [element, "parent"];
61
+ }
62
+ return [document.body, "body"];
63
+ };
64
+ var selectFiber = (start, activeTraceItems) => {
65
+ let fiber = start;
66
+ let firstParentOfNodeWithName = null;
67
+ let fiberWithStateNode = null;
68
+ let acceptedName = false;
69
+ while (!acceptedName && fiber) {
70
+ firstParentOfNodeWithName = getFirstFiberHasName(fiber);
71
+ fiberWithStateNode = getFirstStateNodeFiber(firstParentOfNodeWithName);
72
+ acceptedName = activeTraceItems.includes(
73
+ getNameFromFiber(firstParentOfNodeWithName) ?? ""
74
+ );
75
+ if (!acceptedName) {
76
+ fiber = getParentOfFiber(fiber);
77
+ }
78
+ }
79
+ if (fiberWithStateNode && firstParentOfNodeWithName) {
80
+ return {
81
+ stateNode: fiberWithStateNode,
82
+ nameFiber: firstParentOfNodeWithName
83
+ };
84
+ }
85
+ return {
86
+ stateNode: null,
87
+ nameFiber: null
88
+ };
89
+ };
90
+ var filterInvisibleNodes = (nodes) => {
91
+ return nodes.filter(
92
+ (item) => item.element.offsetWidth > 0 && item.element.offsetHeight > 0
93
+ );
94
+ };
95
+ var getUniqueNodes = (nodes) => {
96
+ const uniques = [];
97
+ nodes.forEach((node) => {
98
+ const isElementExist = uniques.find(
99
+ (item) => item.element === node.element && item.name === node.name
100
+ );
101
+ if (!isElementExist) {
102
+ uniques.push(node);
103
+ }
104
+ });
105
+ return uniques;
106
+ };
107
+ var traverseDom = (node, activeTraceItems) => {
108
+ var _a;
109
+ if (!node) {
110
+ return [];
111
+ }
112
+ const items = [];
113
+ const fiber = getFiberFromElement(node);
114
+ const targetFiber = selectFiber(fiber, activeTraceItems);
115
+ if (targetFiber.nameFiber) {
116
+ const [element] = getFirstHTMLElementFromFiber(targetFiber.nameFiber);
117
+ const name = getNameFromFiber(targetFiber.nameFiber);
118
+ if (element && name) {
119
+ items.push({
120
+ element,
121
+ name
122
+ });
123
+ }
124
+ }
125
+ for (let i = 0; i < (((_a = node == null ? void 0 : node.children) == null ? void 0 : _a.length) ?? 0); i++) {
126
+ items.push(
127
+ ...traverseDom(node.children[i], activeTraceItems)
128
+ );
129
+ }
130
+ return items;
131
+ };
132
+
133
+ // src/utilities/use-selector.tsx
134
+ var useSelector = (active) => {
135
+ const { httpUrl } = React.useContext(DevToolsContext);
136
+ const [selectableElements, setSelectableElements] = React.useState([]);
137
+ const fetchTraceItems = React.useCallback(async () => {
138
+ const response = await fetch(`${httpUrl}/api/unique-trace-items`);
139
+ const data = await response.json();
140
+ return data.data;
141
+ }, [httpUrl]);
142
+ const prepareSelector = React.useCallback(async () => {
143
+ const fetchedTraceItems = await fetchTraceItems();
144
+ const traversedNodes = traverseDom(document.body, fetchedTraceItems);
145
+ const filterInvisible = filterInvisibleNodes(traversedNodes);
146
+ const uniqueNodes = getUniqueNodes(filterInvisible);
147
+ setSelectableElements(uniqueNodes);
148
+ }, [fetchTraceItems]);
149
+ React.useEffect(() => {
150
+ if (active) {
151
+ prepareSelector();
152
+ }
153
+ }, [active, prepareSelector]);
154
+ return {
155
+ selectableElements
156
+ };
157
+ };
158
+
159
+ // src/components/apply-styles.tsx
160
+ import React2 from "react";
161
+ var ApplyStyles = ({ children }) => {
162
+ React2.useEffect(() => {
163
+ const element = document.createElement("style");
164
+ element.innerHTML = children;
165
+ document.head.appendChild(element);
166
+ return () => {
167
+ document.head.removeChild(element);
168
+ };
169
+ }, [children]);
170
+ return null;
171
+ };
172
+
173
+ // src/components/selectable-elements.tsx
174
+ import React4 from "react";
175
+ import debounce from "lodash-es/debounce.js";
176
+ import { createPortal } from "react-dom";
177
+
178
+ // src/components/icons/selector-button.tsx
179
+ import React3 from "react";
180
+ var SelectorButtonIcon = (props) => /* @__PURE__ */ React3.createElement(
181
+ "svg",
182
+ {
183
+ xmlns: "http://www.w3.org/2000/svg",
184
+ width: 16,
185
+ height: 16,
186
+ viewBox: "0 0 16 16",
187
+ fill: "none",
188
+ ...props
189
+ },
190
+ /* @__PURE__ */ React3.createElement(
191
+ "path",
192
+ {
193
+ fill: "#0FBDBD",
194
+ fillRule: "evenodd",
195
+ d: "M9 1a1 1 0 0 0-2 0v2.1A5.006 5.006 0 0 0 3.1 7H1a1 1 0 0 0 0 2h2.1A5.006 5.006 0 0 0 7 12.9V15a1 1 0 1 0 2 0v-2.1A5.006 5.006 0 0 0 12.9 9H15a1 1 0 1 0 0-2h-2.1A5.006 5.006 0 0 0 9 3.1V1Zm2 7a3 3 0 1 0-6 0 3 3 0 0 0 6 0Z",
196
+ clipRule: "evenodd"
197
+ }
198
+ )
199
+ );
200
+ var SelectorIcon = (props) => /* @__PURE__ */ React3.createElement(
201
+ "svg",
202
+ {
203
+ xmlns: "http://www.w3.org/2000/svg",
204
+ width: 16,
205
+ height: 16,
206
+ viewBox: "0 0 16 16",
207
+ fill: "none",
208
+ ...props
209
+ },
210
+ /* @__PURE__ */ React3.createElement(
211
+ "path",
212
+ {
213
+ fill: "#14141F",
214
+ fillRule: "evenodd",
215
+ d: "M9 1a1 1 0 0 0-2 0v2.1A5.006 5.006 0 0 0 3.1 7H1a1 1 0 0 0 0 2h2.1A5.006 5.006 0 0 0 7 12.9V15a1 1 0 1 0 2 0v-2.1A5.006 5.006 0 0 0 12.9 9H15a1 1 0 1 0 0-2h-2.1A5.006 5.006 0 0 0 9 3.1V1Zm2 7a3 3 0 1 0-6 0 3 3 0 0 0 6 0Z",
216
+ clipRule: "evenodd"
217
+ }
218
+ )
219
+ );
220
+
221
+ // src/components/selectable-elements.tsx
222
+ var MIN_SIZE = 22;
223
+ var getPosition = (element, document2) => {
224
+ const { top, left, width, height } = element.getBoundingClientRect();
225
+ const { scrollLeft, scrollTop } = document2.documentElement;
226
+ const positionLeft = left + scrollLeft - Math.max(0, MIN_SIZE - width) / 2;
227
+ const positionTop = top + scrollTop - Math.max(0, MIN_SIZE - height) / 2;
228
+ return {
229
+ left: positionLeft,
230
+ top: positionTop,
231
+ width: Math.max(MIN_SIZE, width),
232
+ height: Math.max(MIN_SIZE, height)
233
+ };
234
+ };
235
+ var SelectableElement = ({
236
+ element,
237
+ name,
238
+ onSelect
239
+ }) => {
240
+ const [position] = React4.useState(() => getPosition(element, document));
241
+ const elementRef = React4.useRef(null);
242
+ React4.useEffect(() => {
243
+ const onScroll = debounce(
244
+ () => {
245
+ var _a;
246
+ const nextPos = getPosition(element, document);
247
+ ["left", "top", "width", "height"].forEach((prop) => {
248
+ var _a2;
249
+ (_a2 = elementRef.current) == null ? void 0 : _a2.style.setProperty(prop, `${nextPos[prop]}px`);
250
+ });
251
+ (_a = elementRef.current) == null ? void 0 : _a.style.setProperty("opacity", "1");
252
+ },
253
+ 200,
254
+ {
255
+ leading: false,
256
+ trailing: true
257
+ }
258
+ );
259
+ const opacityOnScroll = debounce(
260
+ () => {
261
+ var _a;
262
+ (_a = elementRef.current) == null ? void 0 : _a.style.setProperty("opacity", "0");
263
+ },
264
+ 200,
265
+ {
266
+ leading: true,
267
+ trailing: false
268
+ }
269
+ );
270
+ document.addEventListener("scroll", onScroll);
271
+ document.addEventListener("scroll", opacityOnScroll);
272
+ return () => {
273
+ document.removeEventListener("scroll", onScroll);
274
+ document.removeEventListener("scroll", opacityOnScroll);
275
+ };
276
+ }, [element]);
277
+ const placement = React4.useMemo(() => {
278
+ const tooltipBaseSize = { width: 22, height: 22 };
279
+ const nameWidth = name.length * 7.5;
280
+ const tooltipSize = {
281
+ width: tooltipBaseSize.width + nameWidth,
282
+ height: tooltipBaseSize.height
283
+ };
284
+ const gap = 4;
285
+ if (position.top - tooltipSize.height > 0 && position.left + tooltipSize.width < window.innerWidth && position.width > tooltipSize.width) {
286
+ return { left: gap / 2, top: tooltipSize.height * -1 - gap };
287
+ }
288
+ if (position.height >= tooltipSize.height * 1.5 && position.width >= tooltipSize.width * 1.5) {
289
+ return { left: 0 + gap, top: 0 + gap };
290
+ }
291
+ if (position.left - tooltipSize.width > 0) {
292
+ return { right: position.width + gap, top: 0 - 1 };
293
+ }
294
+ if (position.left + position.width + tooltipSize.width < window.innerWidth) {
295
+ return { left: position.width + gap, top: 0 - 1 };
296
+ }
297
+ if (position.top + position.height + tooltipSize.height < document.documentElement.scrollHeight) {
298
+ return { left: 0 - 1, top: position.height + gap };
299
+ }
300
+ return { left: 0, top: 0 };
301
+ }, [position, name.length]);
302
+ return /* @__PURE__ */ React4.createElement(
303
+ "button",
304
+ {
305
+ type: "button",
306
+ className: "selector-xray-box",
307
+ onClick: (event) => {
308
+ event == null ? void 0 : event.preventDefault();
309
+ event == null ? void 0 : event.stopPropagation();
310
+ onSelect(name);
311
+ },
312
+ ref: elementRef,
313
+ style: {
314
+ position: "absolute",
315
+ ...position
316
+ }
317
+ },
318
+ /* @__PURE__ */ React4.createElement(
319
+ "div",
320
+ {
321
+ style: {
322
+ position: "absolute",
323
+ ...placement
324
+ },
325
+ className: "selector-xray-info"
326
+ },
327
+ /* @__PURE__ */ React4.createElement("span", { className: "selector-xray-info-icon" }, /* @__PURE__ */ React4.createElement(
328
+ SelectorIcon,
329
+ {
330
+ width: 12,
331
+ height: 12,
332
+ style: { pointerEvents: "none" }
333
+ }
334
+ )),
335
+ /* @__PURE__ */ React4.createElement("span", { className: "selector-xray-info-title" }, ` ${name}`)
336
+ )
337
+ );
338
+ };
339
+ var SelectableElements = ({
340
+ elements,
341
+ onSelect
342
+ }) => {
343
+ const [selectorBoxRoot, setSelectorBoxRoot] = React4.useState(null);
344
+ React4.useEffect(() => {
345
+ if (!selectorBoxRoot) {
346
+ const element = document.createElement("div");
347
+ element.id = "selector-box-root";
348
+ document.body.appendChild(element);
349
+ setSelectorBoxRoot(element);
350
+ return () => {
351
+ document.body.removeChild(element);
352
+ setSelectorBoxRoot(null);
353
+ };
354
+ }
355
+ return () => 0;
356
+ }, []);
357
+ if (!selectorBoxRoot)
358
+ return null;
359
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, createPortal(
360
+ elements.map((element, idx) => /* @__PURE__ */ React4.createElement(
361
+ SelectableElement,
362
+ {
363
+ key: `selector-element-${idx}-${element.name}`,
364
+ ...element,
365
+ onSelect
366
+ }
367
+ )),
368
+ selectorBoxRoot
369
+ ), /* @__PURE__ */ React4.createElement(
370
+ ApplyStyles,
371
+ null,
372
+ /* css */
373
+ `
3
374
  .selector-xray-box {
4
375
  display: flex;
5
376
  margin: 0;
@@ -58,7 +429,43 @@ import u from"react";import _ from"react";import T from"react";import S from"rea
58
429
  .selector-xray-box:hover .selector-xray-info-title {
59
430
  z-index: 90;
60
431
  }
61
- `)):null};var Y=({active:e,setActive:t,onHighlight:r,icon:n,style:i})=>{let{selectableElements:o}=B(e);return T.createElement("div",{style:i},T.createElement("div",{role:"button",title:"Element Selector",className:"refine-devtools-selector-button",onClick:c=>{var a;c.preventDefault(),c.stopPropagation(),(a=document==null?void 0:document.activeElement)==null||a.blur(),t(d=>!d)}},n),e&&T.createElement(W,{elements:o,onSelect:c=>{r(c),t(!1)}}),T.createElement(b,null,`
432
+ `
433
+ ));
434
+ };
435
+
436
+ // src/components/devtools-selector.tsx
437
+ var DevtoolsSelector = ({
438
+ active,
439
+ setActive,
440
+ onHighlight,
441
+ icon,
442
+ style
443
+ }) => {
444
+ const { selectableElements } = useSelector(active);
445
+ const onSelect = (name) => {
446
+ onHighlight(name);
447
+ setActive(false);
448
+ };
449
+ return /* @__PURE__ */ React5.createElement("div", { style }, /* @__PURE__ */ React5.createElement(
450
+ "div",
451
+ {
452
+ role: "button",
453
+ title: "Element Selector",
454
+ className: "refine-devtools-selector-button",
455
+ onClick: (event) => {
456
+ var _a;
457
+ event.preventDefault();
458
+ event.stopPropagation();
459
+ (_a = document == null ? void 0 : document.activeElement) == null ? void 0 : _a.blur();
460
+ setActive((active2) => !active2);
461
+ }
462
+ },
463
+ icon
464
+ ), active && /* @__PURE__ */ React5.createElement(SelectableElements, { elements: selectableElements, onSelect }), /* @__PURE__ */ React5.createElement(
465
+ ApplyStyles,
466
+ null,
467
+ /* css */
468
+ `
62
469
  .refine-devtools-selector-button {
63
470
  padding: 0;
64
471
  margin: 0;
@@ -72,7 +479,85 @@ import u from"react";import _ from"react";import T from"react";import S from"rea
72
479
  .refine-devtools-selector-button:hover {
73
480
  transform: rotate(180deg);
74
481
  }
75
- `))};import*as E from"react";var $=e=>E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:157,height:25,viewBox:"0 0 157 25",fill:"none",...e},E.createElement("g",null,E.createElement("path",{fill:"#1D1E30",d:"M17 1h123v24H17z"}),E.createElement("path",{fill:"#1D1E30",d:"M6.265 9.205A12 12 0 0 1 17.649 1H25v24H1L6.265 9.205ZM150.735 9.205A12 12 0 0 0 139.351 1H132v24h24l-5.265-15.795Z"}),E.createElement("path",{fill:"currentColor",d:"M25 14.333A1.333 1.333 0 1 1 25 17a1.333 1.333 0 0 1 0-2.667Z"}),E.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M23.211 20.578a4 4 0 0 0 3.578 0l4-2A4 4 0 0 0 33 15v-4a4 4 0 0 0-2.211-3.578l-4-2a4 4 0 0 0-3.578 0l-4 2A4 4 0 0 0 17 11v4a4 4 0 0 0 2.211 3.578l4 2Zm-.878-4.911a2.667 2.667 0 0 0 5.334 0v-5.334a2.667 2.667 0 0 0-5.334 0v5.334Z",clipRule:"evenodd"}),E.createElement("path",{fill:"#CFD7E2",d:"M42.152 17a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h4.2c.288 0 .56.056.816.168a2.135 2.135 0 0 1 1.14 1.128c.112.256.168.532.168.828v3.984c0 .296-.056.572-.168.828a2.135 2.135 0 0 1-1.14 1.128 2.014 2.014 0 0 1-.816.168h-4.2Zm1.38-1.644h2.82a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-3.984a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.82v4.944Zm13.18-5.196a.244.244 0 0 1-.253.252h-4.44v1.656h4.02c.072 0 .132.024.18.072a.227.227 0 0 1 .084.18v1.128a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072h-4.02v1.644h4.44c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072h-5.832a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h5.832c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.128ZM63.014 17h-2.232a.387.387 0 0 1-.216-.072.356.356 0 0 1-.144-.168l-1.716-4.296a.853.853 0 0 1-.072-.24 1.783 1.783 0 0 1-.024-.264V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h1.128c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v2.616c0 .072.008.156.024.252s.04.176.072.24l1.284 3.216h.528l1.284-3.216a.853.853 0 0 0 .072-.24c.016-.096.024-.18.024-.252V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.128c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v2.928c0 .072-.008.16-.024.264a.853.853 0 0 1-.072.24l-1.716 4.296a.356.356 0 0 1-.144.168.387.387 0 0 1-.216.072ZM73.29 8.768c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v1.128a.227.227 0 0 1-.084.18.244.244 0 0 1-.18.072h-2.208v6.324a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072H69.69a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192v-6.324H67.23a.287.287 0 0 1-.192-.072.244.244 0 0 1-.072-.18V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h6.06Zm6.507.012c.296 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.296 0-.572-.056-.828-.168a2.171 2.171 0 0 1-1.128-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.128-1.128c.256-.112.532-.168.828-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.336-.132h-2.34a.497.497 0 0 0-.348.132.455.455 0 0 0-.132.336v3.996c0 .136.044.248.132.336a.497.497 0 0 0 .348.132h2.34a.455.455 0 0 0 .336-.132.436.436 0 0 0 .144-.336v-3.996Zm7.888-2.112c.295 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.297 0-.573-.056-.829-.168a2.171 2.171 0 0 1-1.127-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.127-1.128c.257-.112.532-.168.829-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.337-.132h-2.34a.497.497 0 0 0-.347.132.455.455 0 0 0-.133.336v3.996c0 .136.044.248.133.336a.497.497 0 0 0 .347.132h2.34a.455.455 0 0 0 .337-.132.436.436 0 0 0 .143-.336v-3.996ZM98.294 17H92.68a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v6.324h4.236c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072Zm7.336-5.76a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192v-.084a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.352a.46.46 0 0 0-.336.144.455.455 0 0 0-.132.336v.696c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352c.288 0 .56.056.816.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v.696c0 .296-.056.572-.168.828a2.171 2.171 0 0 1-1.128 1.128 2.014 2.014 0 0 1-.816.168h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.043 2.043 0 0 1-.168-.828v-.084c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v.084c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-.696a.455.455 0 0 0-.132-.336.455.455 0 0 0-.336-.132h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.099 2.099 0 0 1-.168-.828v-.696c0-.296.056-.572.168-.828a2.171 2.171 0 0 1 1.128-1.128c.256-.112.528-.168.816-.168h2.352c.288 0 .56.056.816.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.532.168.828v.084a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072h-1.128Z"})));var G=({onClick:e,onSelectorHighlight:t,selectorActive:r,setSelectorActive:n})=>_.createElement("div",{role:"button",className:"devtools-selector-pin-box",onClick:e},_.createElement($,null),_.createElement(Y,{style:{position:"absolute",top:5,right:18,width:"16px",height:"16px"},icon:_.createElement(U,{width:16,height:16,style:{pointerEvents:"none"}}),onHighlight:t,active:r,setActive:n}),_.createElement(b,null,`
482
+ `
483
+ ));
484
+ };
485
+
486
+ // src/components/icons/devtools-icon.tsx
487
+ import * as React6 from "react";
488
+ var DevtoolsIcon = (props) => /* @__PURE__ */ React6.createElement(
489
+ "svg",
490
+ {
491
+ xmlns: "http://www.w3.org/2000/svg",
492
+ width: 157,
493
+ height: 25,
494
+ viewBox: "0 0 157 25",
495
+ fill: "none",
496
+ ...props
497
+ },
498
+ /* @__PURE__ */ React6.createElement("g", null, /* @__PURE__ */ React6.createElement("path", { fill: "#1D1E30", d: "M17 1h123v24H17z" }), /* @__PURE__ */ React6.createElement(
499
+ "path",
500
+ {
501
+ fill: "#1D1E30",
502
+ d: "M6.265 9.205A12 12 0 0 1 17.649 1H25v24H1L6.265 9.205ZM150.735 9.205A12 12 0 0 0 139.351 1H132v24h24l-5.265-15.795Z"
503
+ }
504
+ ), /* @__PURE__ */ React6.createElement(
505
+ "path",
506
+ {
507
+ fill: "currentColor",
508
+ d: "M25 14.333A1.333 1.333 0 1 1 25 17a1.333 1.333 0 0 1 0-2.667Z"
509
+ }
510
+ ), /* @__PURE__ */ React6.createElement(
511
+ "path",
512
+ {
513
+ fill: "currentColor",
514
+ fillRule: "evenodd",
515
+ d: "M23.211 20.578a4 4 0 0 0 3.578 0l4-2A4 4 0 0 0 33 15v-4a4 4 0 0 0-2.211-3.578l-4-2a4 4 0 0 0-3.578 0l-4 2A4 4 0 0 0 17 11v4a4 4 0 0 0 2.211 3.578l4 2Zm-.878-4.911a2.667 2.667 0 0 0 5.334 0v-5.334a2.667 2.667 0 0 0-5.334 0v5.334Z",
516
+ clipRule: "evenodd"
517
+ }
518
+ ), /* @__PURE__ */ React6.createElement(
519
+ "path",
520
+ {
521
+ fill: "#CFD7E2",
522
+ d: "M42.152 17a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h4.2c.288 0 .56.056.816.168a2.135 2.135 0 0 1 1.14 1.128c.112.256.168.532.168.828v3.984c0 .296-.056.572-.168.828a2.135 2.135 0 0 1-1.14 1.128 2.014 2.014 0 0 1-.816.168h-4.2Zm1.38-1.644h2.82a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-3.984a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.82v4.944Zm13.18-5.196a.244.244 0 0 1-.253.252h-4.44v1.656h4.02c.072 0 .132.024.18.072a.227.227 0 0 1 .084.18v1.128a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072h-4.02v1.644h4.44c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072h-5.832a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h5.832c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.128ZM63.014 17h-2.232a.387.387 0 0 1-.216-.072.356.356 0 0 1-.144-.168l-1.716-4.296a.853.853 0 0 1-.072-.24 1.783 1.783 0 0 1-.024-.264V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h1.128c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v2.616c0 .072.008.156.024.252s.04.176.072.24l1.284 3.216h.528l1.284-3.216a.853.853 0 0 0 .072-.24c.016-.096.024-.18.024-.252V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.128c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v2.928c0 .072-.008.16-.024.264a.853.853 0 0 1-.072.24l-1.716 4.296a.356.356 0 0 1-.144.168.387.387 0 0 1-.216.072ZM73.29 8.768c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v1.128a.227.227 0 0 1-.084.18.244.244 0 0 1-.18.072h-2.208v6.324a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072H69.69a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192v-6.324H67.23a.287.287 0 0 1-.192-.072.244.244 0 0 1-.072-.18V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h6.06Zm6.507.012c.296 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.296 0-.572-.056-.828-.168a2.171 2.171 0 0 1-1.128-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.128-1.128c.256-.112.532-.168.828-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.336-.132h-2.34a.497.497 0 0 0-.348.132.455.455 0 0 0-.132.336v3.996c0 .136.044.248.132.336a.497.497 0 0 0 .348.132h2.34a.455.455 0 0 0 .336-.132.436.436 0 0 0 .144-.336v-3.996Zm7.888-2.112c.295 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.297 0-.573-.056-.829-.168a2.171 2.171 0 0 1-1.127-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.127-1.128c.257-.112.532-.168.829-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.337-.132h-2.34a.497.497 0 0 0-.347.132.455.455 0 0 0-.133.336v3.996c0 .136.044.248.133.336a.497.497 0 0 0 .347.132h2.34a.455.455 0 0 0 .337-.132.436.436 0 0 0 .143-.336v-3.996ZM98.294 17H92.68a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v6.324h4.236c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072Zm7.336-5.76a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192v-.084a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.352a.46.46 0 0 0-.336.144.455.455 0 0 0-.132.336v.696c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352c.288 0 .56.056.816.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v.696c0 .296-.056.572-.168.828a2.171 2.171 0 0 1-1.128 1.128 2.014 2.014 0 0 1-.816.168h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.043 2.043 0 0 1-.168-.828v-.084c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v.084c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-.696a.455.455 0 0 0-.132-.336.455.455 0 0 0-.336-.132h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.099 2.099 0 0 1-.168-.828v-.696c0-.296.056-.572.168-.828a2.171 2.171 0 0 1 1.128-1.128c.256-.112.528-.168.816-.168h2.352c.288 0 .56.056.816.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.532.168.828v.084a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072h-1.128Z"
523
+ }
524
+ ))
525
+ );
526
+
527
+ // src/components/devtools-pin.tsx
528
+ var DevtoolsPin = ({
529
+ onClick,
530
+ onSelectorHighlight,
531
+ selectorActive,
532
+ setSelectorActive
533
+ }) => {
534
+ return /* @__PURE__ */ React7.createElement("div", { role: "button", className: "devtools-selector-pin-box", onClick }, /* @__PURE__ */ React7.createElement(DevtoolsIcon, null), /* @__PURE__ */ React7.createElement(
535
+ DevtoolsSelector,
536
+ {
537
+ style: {
538
+ position: "absolute",
539
+ top: 5,
540
+ right: 18,
541
+ width: "16px",
542
+ height: "16px"
543
+ },
544
+ icon: /* @__PURE__ */ React7.createElement(
545
+ SelectorButtonIcon,
546
+ {
547
+ width: 16,
548
+ height: 16,
549
+ style: { pointerEvents: "none" }
550
+ }
551
+ ),
552
+ onHighlight: onSelectorHighlight,
553
+ active: selectorActive,
554
+ setActive: setSelectorActive
555
+ }
556
+ ), /* @__PURE__ */ React7.createElement(
557
+ ApplyStyles,
558
+ null,
559
+ /* css */
560
+ `
76
561
  .devtools-selector-pin-box {
77
562
  z-index: 9999;
78
563
  position: relative;
@@ -95,18 +580,521 @@ import u from"react";import _ from"react";import T from"react";import S from"rea
95
580
  .devtools-selector-pin-box:hover {
96
581
  color: #0FBDBD;
97
582
  }
98
- `));import m from"react";var X=e=>e?"scaleX(1) translateY(0)":"scaleX(0) translateY(25vw)";var ce=()=>typeof window<"u"?window.innerWidth*.7:1007.9999999999999,de=()=>typeof window<"u"?window.innerHeight*.7:630;var H=e=>{switch(e){case"left":return{left:"calc(50px + 10px)",top:"50%",transform:"translateY(-50%)"};case"right":return{right:"calc(50px + 10px)",top:"50%",transform:"translateY(-50%)"};case"top":return{left:"50%",top:"calc(50px + 10px)",transform:"translateX(-50%)"};case"bottom":return{left:"50%",bottom:"calc(50px + 10px)",transform:"translateX(-50%)"}}},C=e=>{switch(e){case"left":case"right":return-70+(typeof window<"u"?window.innerWidth:1440)-10;case"top":case"bottom":return-10+(typeof window<"u"?window.innerWidth:1440)-10}},I=e=>{switch(e){case"left":case"right":return-10+(typeof window<"u"?window.innerHeight:900)-10;case"top":case"bottom":return-70+(typeof window<"u"?window.innerHeight:900)-10}},R=(e,t)=>{let r={width:ce(),height:de()},n=C(e),i=I(e),o=Math.min(n,(t??r).width),s=Math.min(i,(t??r).height);return{width:o,height:s}},v=e=>{let t=Math.round(e);return t%2===0?t:t+1};import w from"react";var F=e=>w.createElement("svg",{width:10,height:26,viewBox:"0 0 10 26",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},w.createElement("rect",{x:.5,y:.5,width:9,height:25,rx:4.5,fill:"#1D1E30"}),w.createElement("path",{d:"M7 5C7 6.10457 6.10457 7 5 7C3.89543 7 3 6.10457 3 5C3 3.89543 3.89543 3 5 3C6.10457 3 7 3.89543 7 5Z",fill:"#303450"}),w.createElement("path",{d:"M7 13C7 14.1046 6.10457 15 5 15C3.89543 15 3 14.1046 3 13C3 11.8954 3.89543 11 5 11C6.10457 11 7 11.8954 7 13Z",fill:"#303450"}),w.createElement("path",{d:"M7 21C7 22.1046 6.10457 23 5 23C3.89543 23 3 22.1046 3 21C3 19.8954 3.89543 19 5 19C6.10457 19 7 19.8954 7 21Z",fill:"#303450"}),w.createElement("rect",{x:.5,y:.5,width:9,height:25,rx:4.5,stroke:"#303450"}));var K=({placement:e,visible:t,children:r})=>{let[n,i]=m.useState(!1),[o,s]=m.useState(null),[c,a]=m.useState(null),[d,g]=m.useState(()=>{let l=R(e);return{width:v(l.width),height:v(l.height)}});return m.useEffect(()=>{let l=()=>{g(x=>{let f=R(e,x);return{width:v(f.width),height:v(f.height)}})};return l(),window.addEventListener("resize",l),()=>{window.removeEventListener("resize",l)}},[e]),m.useEffect(()=>{let l=()=>{s(null)};if(o!==null)return window.addEventListener("mouseup",l),()=>{window.removeEventListener("mouseup",l)}},[o]),m.useEffect(()=>{let l=document.body.style.cursor;return o!=null&&o.includes("x")?document.body.style.cursor="col-resize":o!=null&&o.includes("y")&&(document.body.style.cursor="row-resize"),()=>{document.body.style.cursor=l}},[o]),m.useEffect(()=>{let l=x=>{if((o==null?void 0:o[1])==="x"){let f=x.clientX-((c==null?void 0:c.x)??x.clientX),p=d.width+(o==="lx"?-f:f)*2;g(y=>({...y,width:v(Math.min(C(e),Math.max(640,p)))}))}else if((o==null?void 0:o[1])==="y"){let f=x.clientY-((c==null?void 0:c.y)??x.clientY),p=d.height+(o==="ty"?-f:f)*1;g(y=>({...y,height:v(Math.min(I(e),Math.max(360,p)))}))}};if(o!==null)return window.addEventListener("mousemove",l),()=>{window.removeEventListener("mousemove",l)}},[o,e]),m.createElement("div",{style:{position:"absolute",borderRadius:"8px",boxShadow:"0 0 10px rgba(0, 0, 0, 0.5)",border:"1px solid rgba(0, 0, 0, 0.5)",transitionProperty:"transform, opacity",transitionTimingFunction:"ease-in-out",transitionDuration:"0.2s",...H(e),opacity:t?1:0,transform:`${H(e).transform} ${X(t??!1)}`,...d},onMouseEnter:()=>{i(!0)},onMouseLeave:()=>{i(!1)}},r({resizing:o}),m.createElement(m.Fragment,null,m.createElement("div",{style:{position:"absolute",left:0,top:"50%",width:"10px",height:"26px",transform:"translateY(-13px) translateX(-5px)",cursor:"col-resize",transition:"opacity ease-in-out 0.2s",pointerEvents:n||o?"auto":"none",opacity:n||o?1:0},onMouseDown:l=>{s("lx"),a({x:l.clientX,y:l.clientY}),l.preventDefault()}},m.createElement(F,null)),m.createElement("div",{style:{position:"absolute",right:0,top:"50%",width:"10px",height:"26px",transform:"translateY(-13px) translateX(5px)",cursor:"col-resize",transition:"opacity ease-in-out 0.2s",pointerEvents:n||o?"auto":"none",opacity:n||o?1:0},onMouseDown:l=>{s("rx"),a({x:l.clientX,y:l.clientY}),l.preventDefault()}},m.createElement(F,null)),m.createElement("div",{style:{position:"absolute",left:"50%",top:0,width:"26px",height:"10px",transform:"translateY(-5px) translateX(-13px)",cursor:"row-resize",transition:"opacity ease-in-out 0.2s",pointerEvents:n||o?"auto":"none",opacity:n||o?1:0},onMouseDown:l=>{s("ty"),a({x:l.clientX,y:l.clientY}),l.preventDefault()}},m.createElement(F,{style:{transform:"rotate(90deg)",transformOrigin:"13px 13px"}})),m.createElement("div",{style:{position:"absolute",left:"50%",bottom:0,width:"26px",height:"10px",transform:"translateY(5px) translateX(-13px)",cursor:"row-resize",transition:"opacity ease-in-out 0.2s",pointerEvents:n||o?"auto":"none",opacity:n||o?1:0},onMouseDown:l=>{s("by"),a({x:l.clientX,y:l.clientY}),l.preventDefault()}},m.createElement(F,{style:{transform:"rotate(90deg)",transformOrigin:"13px 13px"}}))))};import{DevToolsContext as ue,DevtoolsEvent as he,send as fe}from"@refinedev/devtools-shared";var ge=1500,xe=process.env.NODE_ENV!=="development"?()=>null:()=>{let[e,t]=u.useState(!1),[r,n]=u.useState(!1),[i]=u.useState("bottom"),{httpUrl:o,ws:s}=u.useContext(ue),[c,a]=u.useState(0),[d,g]=u.useState(!1),[l,x]=u.useState("loading"),f=u.useCallback(p=>{s&&fe(s,he.DEVTOOLS_HIGHLIGHT_IN_MONITOR,{name:p}),n(!0)},[s]);return u.useEffect(()=>{d&&n(!1)},[d]),u.useEffect(()=>{typeof window<"u"&&t(!0)},[]),u.useEffect(()=>{if(e){a(window.innerWidth);let p=()=>{a(window.innerWidth)};return window.addEventListener("resize",p),()=>{window.removeEventListener("resize",p)}}return()=>{}},[e]),u.useEffect(()=>{if(l!=="loaded"){let p=y=>{y.data.type==="refine-devtools-iframe-loaded"&&x("loaded")};return window.addEventListener("message",p),()=>{window.removeEventListener("message",p)}}return()=>0},[]),u.useEffect(()=>{let p;return l==="loading"&&(p=window.setTimeout(()=>{x("failed"),p&&clearInterval(p)},ge)),()=>{typeof p<"u"&&clearInterval(p)}},[l]),e?u.createElement("div",{style:{position:"fixed",left:`${Math.round(c/2)}px`,transform:"translateX(-50%)",bottom:0,zIndex:99999}},u.createElement(G,{onClick:()=>{n(p=>!p),g(!1)},onSelectorHighlight:f,selectorActive:d,setSelectorActive:g}),u.createElement(K,{visible:r,placement:i},({resizing:p})=>u.createElement("iframe",{allow:"clipboard-write;",src:o,srcDoc:o?l==="failed"?ve:void 0:Ee,style:{width:"100%",height:"100%",border:"none",borderRadius:"7px",pointerEvents:p?"none":"auto",background:"#14141F"}}))):null},Ee=`
583
+ `
584
+ ));
585
+ };
586
+
587
+ // src/components/resizable-pane.tsx
588
+ import React9 from "react";
589
+
590
+ // src/utilities/index.ts
591
+ var getPanelToggleTransforms = (visible) => {
592
+ return visible ? "scaleX(1) translateY(0)" : "scaleX(0) translateY(25vw)";
593
+ };
594
+ var SIZE = 50;
595
+ var BUFFER = 10;
596
+ var PREFERRED_DEFAULT_WIDTH = () => typeof window !== "undefined" ? window.innerWidth * 0.7 : 1440 * 0.7;
597
+ var PREFERRED_DEFAULT_HEIGHT = () => typeof window !== "undefined" ? window.innerHeight * 0.7 : 900 * 0.7;
598
+ var MIN_PANEL_WIDTH = 640;
599
+ var MIN_PANEL_HEIGHT = 360;
600
+ var getPanelPosition = (placement) => {
601
+ switch (placement) {
602
+ case "left":
603
+ return {
604
+ left: `calc(${SIZE}px + ${BUFFER}px)`,
605
+ top: "50%",
606
+ transform: "translateY(-50%)"
607
+ };
608
+ case "right":
609
+ return {
610
+ right: `calc(${SIZE}px + ${BUFFER}px)`,
611
+ top: "50%",
612
+ transform: "translateY(-50%)"
613
+ };
614
+ case "top":
615
+ return {
616
+ left: "50%",
617
+ top: `calc(${SIZE}px + ${BUFFER}px)`,
618
+ transform: "translateX(-50%)"
619
+ };
620
+ case "bottom":
621
+ return {
622
+ left: "50%",
623
+ bottom: `calc(${SIZE}px + ${BUFFER}px)`,
624
+ transform: "translateX(-50%)"
625
+ };
626
+ }
627
+ };
628
+ var getMaxPanelWidth = (placement) => {
629
+ switch (placement) {
630
+ case "left":
631
+ case "right":
632
+ return -BUFFER - SIZE - BUFFER + (typeof window !== "undefined" ? window.innerWidth : 1440) - BUFFER;
633
+ case "top":
634
+ case "bottom":
635
+ return -BUFFER + (typeof window !== "undefined" ? window.innerWidth : 1440) - BUFFER;
636
+ }
637
+ };
638
+ var getMaxPanelHeight = (placement) => {
639
+ switch (placement) {
640
+ case "left":
641
+ case "right":
642
+ return -BUFFER + (typeof window !== "undefined" ? window.innerHeight : 900) - BUFFER;
643
+ case "top":
644
+ case "bottom":
645
+ return -BUFFER - SIZE - BUFFER + (typeof window !== "undefined" ? window.innerHeight : 900) - BUFFER;
646
+ }
647
+ };
648
+ var getDefaultPanelSize = (placement, preferredSize) => {
649
+ const defaultPreferred = {
650
+ width: PREFERRED_DEFAULT_WIDTH(),
651
+ height: PREFERRED_DEFAULT_HEIGHT()
652
+ };
653
+ const maxPanelWidth = getMaxPanelWidth(placement);
654
+ const maxPanelHeight = getMaxPanelHeight(placement);
655
+ const width = Math.min(
656
+ maxPanelWidth,
657
+ (preferredSize ?? defaultPreferred).width
658
+ );
659
+ const height = Math.min(
660
+ maxPanelHeight,
661
+ (preferredSize ?? defaultPreferred).height
662
+ );
663
+ return {
664
+ width,
665
+ height
666
+ };
667
+ };
668
+ var roundToEven = (num) => {
669
+ const rounded = Math.round(num);
670
+ return rounded % 2 === 0 ? rounded : rounded + 1;
671
+ };
672
+
673
+ // src/components/icons/resize-handle-icon.tsx
674
+ import React8 from "react";
675
+ var ResizeHandleIcon = (props) => /* @__PURE__ */ React8.createElement(
676
+ "svg",
677
+ {
678
+ width: 10,
679
+ height: 26,
680
+ viewBox: "0 0 10 26",
681
+ fill: "none",
682
+ xmlns: "http://www.w3.org/2000/svg",
683
+ ...props
684
+ },
685
+ /* @__PURE__ */ React8.createElement("rect", { x: 0.5, y: 0.5, width: 9, height: 25, rx: 4.5, fill: "#1D1E30" }),
686
+ /* @__PURE__ */ React8.createElement(
687
+ "path",
688
+ {
689
+ d: "M7 5C7 6.10457 6.10457 7 5 7C3.89543 7 3 6.10457 3 5C3 3.89543 3.89543 3 5 3C6.10457 3 7 3.89543 7 5Z",
690
+ fill: "#303450"
691
+ }
692
+ ),
693
+ /* @__PURE__ */ React8.createElement(
694
+ "path",
695
+ {
696
+ d: "M7 13C7 14.1046 6.10457 15 5 15C3.89543 15 3 14.1046 3 13C3 11.8954 3.89543 11 5 11C6.10457 11 7 11.8954 7 13Z",
697
+ fill: "#303450"
698
+ }
699
+ ),
700
+ /* @__PURE__ */ React8.createElement(
701
+ "path",
702
+ {
703
+ d: "M7 21C7 22.1046 6.10457 23 5 23C3.89543 23 3 22.1046 3 21C3 19.8954 3.89543 19 5 19C6.10457 19 7 19.8954 7 21Z",
704
+ fill: "#303450"
705
+ }
706
+ ),
707
+ /* @__PURE__ */ React8.createElement("rect", { x: 0.5, y: 0.5, width: 9, height: 25, rx: 4.5, stroke: "#303450" })
708
+ );
709
+
710
+ // src/components/resizable-pane.tsx
711
+ var ResizablePane = ({ placement, visible, children }) => {
712
+ const [hover, setHover] = React9.useState(false);
713
+ const [resizing, setResizing] = React9.useState(null);
714
+ const [resizePosition, setResizePosition] = React9.useState(null);
715
+ const [panelSize, setPanelSize] = React9.useState(() => {
716
+ const defaultSize = getDefaultPanelSize(placement);
717
+ return {
718
+ width: roundToEven(defaultSize.width),
719
+ height: roundToEven(defaultSize.height)
720
+ };
721
+ });
722
+ React9.useEffect(() => {
723
+ const handleResize = () => {
724
+ setPanelSize((p) => {
725
+ const defaultSize = getDefaultPanelSize(placement, p);
726
+ return {
727
+ width: roundToEven(defaultSize.width),
728
+ height: roundToEven(defaultSize.height)
729
+ };
730
+ });
731
+ };
732
+ handleResize();
733
+ window.addEventListener("resize", handleResize);
734
+ return () => {
735
+ window.removeEventListener("resize", handleResize);
736
+ };
737
+ }, [placement]);
738
+ React9.useEffect(() => {
739
+ const handleMouseUp = () => {
740
+ setResizing(null);
741
+ };
742
+ if (resizing !== null) {
743
+ window.addEventListener("mouseup", handleMouseUp);
744
+ return () => {
745
+ window.removeEventListener("mouseup", handleMouseUp);
746
+ };
747
+ }
748
+ return;
749
+ }, [resizing]);
750
+ React9.useEffect(() => {
751
+ const currentCursor = document.body.style.cursor;
752
+ if (resizing == null ? void 0 : resizing.includes("x")) {
753
+ document.body.style.cursor = "col-resize";
754
+ } else if (resizing == null ? void 0 : resizing.includes("y")) {
755
+ document.body.style.cursor = "row-resize";
756
+ }
757
+ return () => {
758
+ document.body.style.cursor = currentCursor;
759
+ };
760
+ }, [resizing]);
761
+ React9.useEffect(() => {
762
+ const handleMouseMove = (e) => {
763
+ if ((resizing == null ? void 0 : resizing[1]) === "x") {
764
+ const diff = e.clientX - ((resizePosition == null ? void 0 : resizePosition.x) ?? e.clientX);
765
+ const newWidth = panelSize.width + (resizing === "lx" ? -diff : diff) * 2;
766
+ setPanelSize((p) => ({
767
+ ...p,
768
+ width: roundToEven(
769
+ Math.min(
770
+ getMaxPanelWidth(placement),
771
+ Math.max(MIN_PANEL_WIDTH, newWidth)
772
+ )
773
+ )
774
+ }));
775
+ } else if ((resizing == null ? void 0 : resizing[1]) === "y") {
776
+ const diff = e.clientY - ((resizePosition == null ? void 0 : resizePosition.y) ?? e.clientY);
777
+ const newHeight = panelSize.height + (resizing === "ty" ? -diff : diff) * 1;
778
+ setPanelSize((p) => ({
779
+ ...p,
780
+ height: roundToEven(
781
+ Math.min(
782
+ getMaxPanelHeight(placement),
783
+ Math.max(MIN_PANEL_HEIGHT, newHeight)
784
+ )
785
+ )
786
+ }));
787
+ }
788
+ };
789
+ if (resizing !== null) {
790
+ window.addEventListener("mousemove", handleMouseMove);
791
+ return () => {
792
+ window.removeEventListener("mousemove", handleMouseMove);
793
+ };
794
+ }
795
+ return;
796
+ }, [resizing, placement]);
797
+ return /* @__PURE__ */ React9.createElement(
798
+ "div",
799
+ {
800
+ style: {
801
+ position: "absolute",
802
+ borderRadius: "8px",
803
+ boxShadow: "0 0 10px rgba(0, 0, 0, 0.5)",
804
+ border: "1px solid rgba(0, 0, 0, 0.5)",
805
+ transitionProperty: "transform, opacity",
806
+ transitionTimingFunction: "ease-in-out",
807
+ transitionDuration: "0.2s",
808
+ ...getPanelPosition(placement),
809
+ opacity: visible ? 1 : 0,
810
+ transform: `${getPanelPosition(placement).transform} ${getPanelToggleTransforms(visible ?? false)}`,
811
+ ...panelSize
812
+ },
813
+ onMouseEnter: () => {
814
+ setHover(true);
815
+ },
816
+ onMouseLeave: () => {
817
+ setHover(false);
818
+ }
819
+ },
820
+ children({ resizing }),
821
+ /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(
822
+ "div",
823
+ {
824
+ style: {
825
+ position: "absolute",
826
+ left: 0,
827
+ top: "50%",
828
+ width: "10px",
829
+ height: "26px",
830
+ transform: "translateY(-13px) translateX(-5px)",
831
+ cursor: "col-resize",
832
+ transition: "opacity ease-in-out 0.2s",
833
+ pointerEvents: hover || resizing ? "auto" : "none",
834
+ opacity: hover || resizing ? 1 : 0
835
+ },
836
+ onMouseDown: (event) => {
837
+ setResizing("lx");
838
+ setResizePosition({
839
+ x: event.clientX,
840
+ y: event.clientY
841
+ });
842
+ event.preventDefault();
843
+ }
844
+ },
845
+ /* @__PURE__ */ React9.createElement(ResizeHandleIcon, null)
846
+ ), /* @__PURE__ */ React9.createElement(
847
+ "div",
848
+ {
849
+ style: {
850
+ position: "absolute",
851
+ right: 0,
852
+ top: "50%",
853
+ width: "10px",
854
+ height: "26px",
855
+ transform: "translateY(-13px) translateX(5px)",
856
+ cursor: "col-resize",
857
+ transition: "opacity ease-in-out 0.2s",
858
+ pointerEvents: hover || resizing ? "auto" : "none",
859
+ opacity: hover || resizing ? 1 : 0
860
+ },
861
+ onMouseDown: (event) => {
862
+ setResizing("rx");
863
+ setResizePosition({
864
+ x: event.clientX,
865
+ y: event.clientY
866
+ });
867
+ event.preventDefault();
868
+ }
869
+ },
870
+ /* @__PURE__ */ React9.createElement(ResizeHandleIcon, null)
871
+ ), /* @__PURE__ */ React9.createElement(
872
+ "div",
873
+ {
874
+ style: {
875
+ position: "absolute",
876
+ left: "50%",
877
+ top: 0,
878
+ width: "26px",
879
+ height: "10px",
880
+ transform: "translateY(-5px) translateX(-13px)",
881
+ cursor: "row-resize",
882
+ transition: "opacity ease-in-out 0.2s",
883
+ pointerEvents: hover || resizing ? "auto" : "none",
884
+ opacity: hover || resizing ? 1 : 0
885
+ },
886
+ onMouseDown: (event) => {
887
+ setResizing("ty");
888
+ setResizePosition({
889
+ x: event.clientX,
890
+ y: event.clientY
891
+ });
892
+ event.preventDefault();
893
+ }
894
+ },
895
+ /* @__PURE__ */ React9.createElement(
896
+ ResizeHandleIcon,
897
+ {
898
+ style: {
899
+ transform: "rotate(90deg)",
900
+ transformOrigin: "13px 13px"
901
+ }
902
+ }
903
+ )
904
+ ), /* @__PURE__ */ React9.createElement(
905
+ "div",
906
+ {
907
+ style: {
908
+ position: "absolute",
909
+ left: "50%",
910
+ bottom: 0,
911
+ width: "26px",
912
+ height: "10px",
913
+ transform: "translateY(5px) translateX(-13px)",
914
+ cursor: "row-resize",
915
+ transition: "opacity ease-in-out 0.2s",
916
+ pointerEvents: hover || resizing ? "auto" : "none",
917
+ opacity: hover || resizing ? 1 : 0
918
+ },
919
+ onMouseDown: (event) => {
920
+ setResizing("by");
921
+ setResizePosition({
922
+ x: event.clientX,
923
+ y: event.clientY
924
+ });
925
+ event.preventDefault();
926
+ }
927
+ },
928
+ /* @__PURE__ */ React9.createElement(
929
+ ResizeHandleIcon,
930
+ {
931
+ style: {
932
+ transform: "rotate(90deg)",
933
+ transformOrigin: "13px 13px"
934
+ }
935
+ }
936
+ )
937
+ ))
938
+ );
939
+ };
940
+
941
+ // src/panel.tsx
942
+ import {
943
+ DevToolsContext as DevToolsContext2,
944
+ DevtoolsEvent,
945
+ send
946
+ } from "@refinedev/devtools-shared";
947
+ var MAX_IFRAME_WAIT_TIME = 1500;
948
+ var DevtoolsPanel = process.env.NODE_ENV !== "development" ? () => null : () => {
949
+ const [browser, setBrowser] = React10.useState(false);
950
+ const [visible, setVisible] = React10.useState(false);
951
+ const [placement] = React10.useState("bottom");
952
+ const { httpUrl, ws } = React10.useContext(DevToolsContext2);
953
+ const [width, setWidth] = React10.useState(0);
954
+ const [selectorActive, setSelectorActive] = React10.useState(false);
955
+ const [iframeStatus, setIframeStatus] = React10.useState("loading");
956
+ const onSelectorHighlight = React10.useCallback(
957
+ (name) => {
958
+ if (ws) {
959
+ send(ws, DevtoolsEvent.DEVTOOLS_HIGHLIGHT_IN_MONITOR, {
960
+ name
961
+ });
962
+ }
963
+ setVisible(true);
964
+ },
965
+ [ws]
966
+ );
967
+ React10.useEffect(() => {
968
+ if (selectorActive) {
969
+ setVisible(false);
970
+ }
971
+ }, [selectorActive]);
972
+ React10.useEffect(() => {
973
+ if (typeof window !== "undefined") {
974
+ setBrowser(true);
975
+ }
976
+ }, []);
977
+ React10.useEffect(() => {
978
+ if (browser) {
979
+ setWidth(window.innerWidth);
980
+ const onResize = () => {
981
+ setWidth(window.innerWidth);
982
+ };
983
+ window.addEventListener("resize", onResize);
984
+ return () => {
985
+ window.removeEventListener("resize", onResize);
986
+ };
987
+ }
988
+ return () => void 0;
989
+ }, [browser]);
990
+ React10.useEffect(() => {
991
+ if (iframeStatus !== "loaded") {
992
+ const onMessage = (event) => {
993
+ if (event.data.type === "refine-devtools-iframe-loaded") {
994
+ setIframeStatus("loaded");
995
+ }
996
+ };
997
+ window.addEventListener("message", onMessage);
998
+ return () => {
999
+ window.removeEventListener("message", onMessage);
1000
+ };
1001
+ }
1002
+ return () => 0;
1003
+ }, []);
1004
+ React10.useEffect(() => {
1005
+ let timeout;
1006
+ if (iframeStatus === "loading") {
1007
+ timeout = window.setTimeout(() => {
1008
+ setIframeStatus("failed");
1009
+ if (timeout) {
1010
+ clearInterval(timeout);
1011
+ }
1012
+ }, MAX_IFRAME_WAIT_TIME);
1013
+ }
1014
+ return () => {
1015
+ if (typeof timeout !== "undefined") {
1016
+ clearInterval(timeout);
1017
+ }
1018
+ };
1019
+ }, [iframeStatus]);
1020
+ if (!browser) {
1021
+ return null;
1022
+ }
1023
+ return /* @__PURE__ */ React10.createElement(
1024
+ "div",
1025
+ {
1026
+ style: {
1027
+ position: "fixed",
1028
+ left: `${Math.round(width / 2)}px`,
1029
+ transform: "translateX(-50%)",
1030
+ bottom: 0,
1031
+ zIndex: 99999
1032
+ }
1033
+ },
1034
+ /* @__PURE__ */ React10.createElement(
1035
+ DevtoolsPin,
1036
+ {
1037
+ onClick: () => {
1038
+ setVisible((v) => !v);
1039
+ setSelectorActive(false);
1040
+ },
1041
+ onSelectorHighlight,
1042
+ selectorActive,
1043
+ setSelectorActive
1044
+ }
1045
+ ),
1046
+ /* @__PURE__ */ React10.createElement(ResizablePane, { visible, placement }, ({ resizing }) => /* @__PURE__ */ React10.createElement(
1047
+ "iframe",
1048
+ {
1049
+ allow: "clipboard-write;",
1050
+ src: httpUrl,
1051
+ srcDoc: httpUrl ? iframeStatus === "failed" ? failedConnectionContent : void 0 : missingUrlContent,
1052
+ style: {
1053
+ width: "100%",
1054
+ height: "100%",
1055
+ border: "none",
1056
+ borderRadius: "7px",
1057
+ pointerEvents: resizing ? "none" : "auto",
1058
+ background: "#14141F"
1059
+ }
1060
+ }
1061
+ ))
1062
+ );
1063
+ };
1064
+ var missingUrlContent = `
99
1065
  <html style="height:100%;padding:0;margin:0;background:#14141F;">
100
1066
  <body style="background:#14141F;display:flex;justify-content:center;height:100%;padding:24px;margin:0;align-items:center;box-sizing:border-box;">
101
1067
  <h1 style="font-family:ui-monospace,monospace;font-weight:400;color:#CFD7E2;text-align:center;font-size:24px;">Could not connect to the devtools server.</h1>
102
1068
  </body>
103
1069
  </html>
104
- `,ve=`
1070
+ `;
1071
+ var failedConnectionContent = `
105
1072
  <html style="height:100%;padding:0;margin:0;background:#14141F;">
106
1073
  <body style="background:#14141F;display:flex;flex-direction:column;justify-content:center;height:100%;padding:24px;margin:0;align-items:center;box-sizing:border-box;">
107
1074
  <h1 style="max-width:480px;min-width:480px;font-family:ui-monospace,monospace;font-weight:400;color:#CFD7E2;text-align:left;font-size:24px;margin-bottom:12px;line-height:24px;">Devtools Server is unreachable.</h1>
108
1075
  <p style="max-width:480px;font-family:ui-monospace,monospace;font-weight:400;color:#6C7793;text-align:left;font-size:16px;line-height:32px;">Please make sure Refine Devtools is running and <code style="background:#303450;color:#A3ADC2;padding:3px 6px;border-radius:4px;">&lt;DevtoolsProvider /&gt;</code> has valid <code style="background:#303450;color:#A3ADC2;padding:3px 6px;border-radius:4px;">url</code> prop. Environment variables may not always be available in browser depending on your project setup.</p>
109
1076
  </body>
110
1077
  </html>
111
- `;import be from"react";import{DevToolsContextProvider as we}from"@refinedev/devtools-shared";var j=()=>{let t=(typeof process<"u"&&"env"in process?process.env.REFINE_DEVTOOLS_PORT||process.env.NEXT_PUBLIC_REFINE_DEVTOOLS_PORT||process.env.REACT_APP_REFINE_DEVTOOLS_PORT:typeof import.meta<"u"&&import.meta.env?import.meta.env.REFINE_DEVTOOLS_PORT||import.meta.env.VITE_REFINE_DEVTOOLS_PORT:null)||5001;return[`http://localhost:${t}`,`ws://localhost:${t}`]};var ye=process.env.NODE_ENV!=="development"?({children:e})=>e:({children:e,url:t=j()})=>be.createElement(we,{url:t},e);export{xe as DevtoolsPanel,ye as DevtoolsProvider};
1078
+ `;
1079
+
1080
+ // src/provider.tsx
1081
+ import React11 from "react";
1082
+ import { DevToolsContextProvider } from "@refinedev/devtools-shared";
1083
+
1084
+ // src/utilities/get-devtools-url-from-env.ts
1085
+ var DEFAULT_DEVTOOLS_PORT = 5001;
1086
+ var getDevtoolsUrlFromEnv = () => {
1087
+ const PORT_FROM_ENV = typeof process !== "undefined" && "env" in process ? process.env.REFINE_DEVTOOLS_PORT || process.env.NEXT_PUBLIC_REFINE_DEVTOOLS_PORT || process.env.REACT_APP_REFINE_DEVTOOLS_PORT : typeof import.meta !== "undefined" && import.meta.env ? import.meta.env.REFINE_DEVTOOLS_PORT || import.meta.env.VITE_REFINE_DEVTOOLS_PORT : null;
1088
+ const port = PORT_FROM_ENV || DEFAULT_DEVTOOLS_PORT;
1089
+ return [`http://localhost:${port}`, `ws://localhost:${port}`];
1090
+ };
1091
+
1092
+ // src/provider.tsx
1093
+ var DevtoolsProvider = process.env.NODE_ENV !== "development" ? ({ children }) => children : ({ children, url = getDevtoolsUrlFromEnv() }) => {
1094
+ return /* @__PURE__ */ React11.createElement(DevToolsContextProvider, { url }, children);
1095
+ };
1096
+ export {
1097
+ DevtoolsPanel,
1098
+ DevtoolsProvider
1099
+ };
112
1100
  //# sourceMappingURL=index.mjs.map