@yoltra/devtools-ui 0.2.0 → 0.4.0

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/README.es.md CHANGED
@@ -1,4 +1,4 @@
1
- ![Yoltra logo](../../assets/yoltra-logo.png)
1
+ ![Yoltra logo](https://yoltra.dev/assets/yoltra-logo.png)
2
2
 
3
3
  # @yoltra/devtools-ui
4
4
 
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![Yoltra logo](../../assets/yoltra-logo.png)
1
+ ![Yoltra logo](https://yoltra.dev/assets/yoltra-logo.png)
2
2
 
3
3
  # @yoltra/devtools-ui
4
4
 
@@ -1,7 +1,23 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),b=require("@yoltra/devtools-protocol"),Y=()=>{},Q=a.createContext({status:"disconnected",send:Y,subscribe:()=>Y,disconnect:Y,reconnect:Y});var U={exports:{}},M={};var se;function pe(){if(se)return M;se=1;var e=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function n(o,r,c){var i=null;if(c!==void 0&&(i=""+c),r.key!==void 0&&(i=""+r.key),"key"in r){c={};for(var u in r)u!=="key"&&(c[u]=r[u])}else c=r;return r=c.ref,{$$typeof:e,type:o,key:i,ref:r!==void 0?r:null,props:c}}return M.Fragment=s,M.jsx=n,M.jsxs=n,M}var V={};var oe;function Re(){return oe||(oe=1,process.env.NODE_ENV!=="production"&&(function(){function e(t){if(t==null)return null;if(typeof t=="function")return t.$$typeof===de?null:t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case p:return"Fragment";case N:return"Profiler";case v:return"StrictMode";case k:return"Suspense";case x:return"SuspenseList";case fe:return"Activity"}if(typeof t=="object")switch(typeof t.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),t.$$typeof){case C:return"Portal";case E:return(t.displayName||"Context")+".Provider";case w:return(t._context.displayName||"Context")+".Consumer";case m:var l=t.render;return t=t.displayName,t||(t=l.displayName||l.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case A:return l=t.displayName||null,l!==null?l:e(t.type)||"Memo";case D:l=t._payload,t=t._init;try{return e(t(l))}catch{}}return null}function s(t){return""+t}function n(t){try{s(t);var l=!1}catch{l=!0}if(l){l=console;var T=l.error,y=typeof Symbol=="function"&&Symbol.toStringTag&&t[Symbol.toStringTag]||t.constructor.name||"Object";return T.call(l,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",y),s(t)}}function o(t){if(t===p)return"<>";if(typeof t=="object"&&t!==null&&t.$$typeof===D)return"<...>";try{var l=e(t);return l?"<"+l+">":"<...>"}catch{return"<...>"}}function r(){var t=q.A;return t===null?null:t.getOwner()}function c(){return Error("react-stack-top-frame")}function i(t){if(K.call(t,"key")){var l=Object.getOwnPropertyDescriptor(t,"key").get;if(l&&l.isReactWarning)return!1}return t.key!==void 0}function u(t,l){function T(){Z||(Z=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",l))}T.isReactWarning=!0,Object.defineProperty(t,"key",{get:T,configurable:!0})}function d(){var t=e(this.type);return ee[t]||(ee[t]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),t=this.props.ref,t!==void 0?t:null}function f(t,l,T,y,g,I,$,J){return T=I.ref,t={$$typeof:O,type:t,key:l,props:I,_owner:g},(T!==void 0?T:null)!==null?Object.defineProperty(t,"ref",{enumerable:!1,get:d}):Object.defineProperty(t,"ref",{enumerable:!1,value:null}),t._store={},Object.defineProperty(t._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(t,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(t,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:$}),Object.defineProperty(t,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:J}),Object.freeze&&(Object.freeze(t.props),Object.freeze(t)),t}function S(t,l,T,y,g,I,$,J){var _=l.children;if(_!==void 0)if(y)if(Ee(_)){for(y=0;y<_.length;y++)h(_[y]);Object.freeze&&Object.freeze(_)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else h(_);if(K.call(l,"key")){_=e(t);var j=Object.keys(l).filter(function(Se){return Se!=="key"});y=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",ne[_+y]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),h=require("@yoltra/devtools-protocol"),Y=()=>{},Q=u.createContext({status:"disconnected",extensionId:"",send:Y,subscribe:()=>Y,disconnect:Y,reconnect:Y});var U={exports:{}},M={};/**
2
+ * @license React
3
+ * react-jsx-runtime.production.js
4
+ *
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var se;function pe(){if(se)return M;se=1;var e=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function r(o,t,c){var a=null;if(c!==void 0&&(a=""+c),t.key!==void 0&&(a=""+t.key),"key"in t){c={};for(var i in t)i!=="key"&&(c[i]=t[i])}else c=t;return t=c.ref,{$$typeof:e,type:o,key:a,ref:t!==void 0?t:null,props:c}}return M.Fragment=s,M.jsx=r,M.jsxs=r,M}var V={};/**
10
+ * @license React
11
+ * react-jsx-runtime.development.js
12
+ *
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var oe;function Re(){return oe||(oe=1,process.env.NODE_ENV!=="production"&&(function(){function e(n){if(n==null)return null;if(typeof n=="function")return n.$$typeof===de?null:n.displayName||n.name||null;if(typeof n=="string")return n;switch(n){case N:return"Fragment";case m:return"Profiler";case S:return"StrictMode";case E:return"Suspense";case C:return"SuspenseList";case fe:return"Activity"}if(typeof n=="object")switch(typeof n.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),n.$$typeof){case T:return"Portal";case x:return(n.displayName||"Context")+".Provider";case I:return(n._context.displayName||"Context")+".Consumer";case k:var d=n.render;return n=n.displayName,n||(n=d.displayName||d.name||"",n=n!==""?"ForwardRef("+n+")":"ForwardRef"),n;case A:return d=n.displayName||null,d!==null?d:e(n.type)||"Memo";case D:d=n._payload,n=n._init;try{return e(n(d))}catch{}}return null}function s(n){return""+n}function r(n){try{s(n);var d=!1}catch{d=!0}if(d){d=console;var p=d.error,y=typeof Symbol=="function"&&Symbol.toStringTag&&n[Symbol.toStringTag]||n.constructor.name||"Object";return p.call(d,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",y),s(n)}}function o(n){if(n===N)return"<>";if(typeof n=="object"&&n!==null&&n.$$typeof===D)return"<...>";try{var d=e(n);return d?"<"+d+">":"<...>"}catch{return"<...>"}}function t(){var n=q.A;return n===null?null:n.getOwner()}function c(){return Error("react-stack-top-frame")}function a(n){if(K.call(n,"key")){var d=Object.getOwnPropertyDescriptor(n,"key").get;if(d&&d.isReactWarning)return!1}return n.key!==void 0}function i(n,d){function p(){Z||(Z=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",d))}p.isReactWarning=!0,Object.defineProperty(n,"key",{get:p,configurable:!0})}function l(){var n=e(this.type);return ee[n]||(ee[n]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),n=this.props.ref,n!==void 0?n:null}function R(n,d,p,y,P,w,$,J){return p=w.ref,n={$$typeof:O,type:n,key:d,props:w,_owner:P},(p!==void 0?p:null)!==null?Object.defineProperty(n,"ref",{enumerable:!1,get:l}):Object.defineProperty(n,"ref",{enumerable:!1,value:null}),n._store={},Object.defineProperty(n._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(n,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(n,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:$}),Object.defineProperty(n,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:J}),Object.freeze&&(Object.freeze(n.props),Object.freeze(n)),n}function f(n,d,p,y,P,w,$,J){var _=d.children;if(_!==void 0)if(y)if(Ee(_)){for(y=0;y<_.length;y++)v(_[y]);Object.freeze&&Object.freeze(_)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else v(_);if(K.call(d,"key")){_=e(n);var j=Object.keys(d).filter(function(Se){return Se!=="key"});y=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",ne[_+y]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
18
  let props = %s;
3
19
  <%s {...props} />
4
20
  React keys must be passed directly to JSX without using spread:
5
21
  let props = %s;
6
- <%s key={someKey} {...props} />`,y,_,j,_),ne[_+y]=!0)}if(_=null,T!==void 0&&(n(T),_=""+T),i(l)&&(n(l.key),_=""+l.key),"key"in l){T={};for(var W in l)W!=="key"&&(T[W]=l[W])}else T=l;return _&&u(T,typeof t=="function"?t.displayName||t.name||"Unknown":t),f(t,_,I,g,r(),T,$,J)}function h(t){typeof t=="object"&&t!==null&&t.$$typeof===O&&t._store&&(t._store.validated=1)}var R=a,O=Symbol.for("react.transitional.element"),C=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),N=Symbol.for("react.profiler"),w=Symbol.for("react.consumer"),E=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),k=Symbol.for("react.suspense"),x=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),D=Symbol.for("react.lazy"),fe=Symbol.for("react.activity"),de=Symbol.for("react.client.reference"),q=R.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,K=Object.prototype.hasOwnProperty,Ee=Array.isArray,X=console.createTask?console.createTask:function(){return null};R={react_stack_bottom_frame:function(t){return t()}};var Z,ee={},te=R.react_stack_bottom_frame.bind(R,c)(),re=X(o(c)),ne={};V.Fragment=p,V.jsx=function(t,l,T,y,g){var I=1e4>q.recentlyCreatedOwnerStacks++;return S(t,l,T,!1,y,g,I?Error("react-stack-top-frame"):te,I?X(o(t)):re)},V.jsxs=function(t,l,T,y,g){var I=1e4>q.recentlyCreatedOwnerStacks++;return S(t,l,T,!0,y,g,I?Error("react-stack-top-frame"):te,I?X(o(t)):re)}})()),V}var ce;function Te(){return ce||(ce=1,process.env.NODE_ENV==="production"?U.exports=pe():U.exports=Re()),U.exports}var ve=Te();const be={timeTravel:!0,eventReplay:!0,stateExplorer:!0,eventEmit:!0,performanceMetrics:!0},he=750,me=3e4;function Oe({config:e,children:s}){const[n,o]=a.useState("disconnected"),r=a.useRef(null),c=a.useRef(new Set),i=a.useRef(0),u=a.useRef(null),d=a.useRef(crypto.randomUUID()),f=a.useRef(e);f.current=e;const S=a.useCallback(()=>{const v=f.current,w=`ws://${v.host??"localhost"}:${v.port}`,E=v.WebSocket??(typeof globalThis.WebSocket<"u"?globalThis.WebSocket:void 0);if(!E){console.error("[Yoltra DevTools] No WebSocket implementation available. In Node.js, pass { WebSocket } from 'ws' via config.WebSocket.");return}o("connecting");try{const m=new E(w);r.current=m,m.onopen=()=>{i.current=0;const k=JSON.stringify({type:"HANDSHAKE_REQUEST",protocolVersion:b.PROTOCOL_VERSION,role:b.DevtoolsRole.EXTENSION,extension:{id:d.current,name:v.extensionName??"DevTools UI",capabilities:be}});m.send(k)},m.onmessage=k=>{try{const x=typeof k.data=="string"?k.data:String(k.data),A=JSON.parse(x);if(A.type==="HANDSHAKE_RESPONSE"){A.success?o("connected"):m.close();return}c.current.forEach(D=>D(A))}catch{}},m.onclose=()=>{r.current=null,o("disconnected");const k=v.autoReconnect??!0,x=v.maxReconnectAttempts??1/0;if(k&&i.current<x){const A=i.current++,D=Math.min(he*Math.pow(2,A)+Math.random()*500,me);u.current=setTimeout(S,D)}},m.onerror=()=>{}}catch{o("disconnected")}},[]),h=a.useCallback(()=>{u.current&&(clearTimeout(u.current),u.current=null),i.current=1/0,r.current?.close(),r.current=null,o("disconnected")},[]),R=a.useCallback(()=>{i.current=0,r.current?.close(),r.current=null,S()},[S]),O=a.useCallback(v=>{const N=r.current;N&&N.readyState===1&&N.send(JSON.stringify(v))},[]),C=a.useCallback(v=>(c.current.add(v),()=>{c.current.delete(v)}),[]);a.useEffect(()=>(S(),()=>{u.current&&clearTimeout(u.current),i.current=1/0,r.current?.close()}),[S]);const p={status:n,send:O,subscribe:C,disconnect:h,reconnect:R};return ve.jsx(Q.Provider,{value:p,children:s})}function P(){return a.useContext(Q)}function ye(e){const{send:s}=P();return{emit:a.useCallback((o,r,c)=>{e&&s({type:"EMIT_TO_STORE",storeId:e,event:{channel:o,type:r,payload:c},timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION})},[e,s])}}const _e=2e3;function Ne(e,s){const{subscribe:n}=P(),o=s?.maxEntries??_e,r=a.useRef(new Map),c=a.useRef(o);c.current=o;const[,i]=a.useState(0);a.useEffect(()=>n(S=>{if(S.type!=="STORE_EVENT")return;const h=S.storeId,R={event:S.event,storeId:h,patches:S.patches,snapshotVersion:S.snapshotVersion,committed:S.committed,timestamp:S.timestamp},C=[...r.current.get(h)??[],R];r.current.set(h,C.length>c.current?C.slice(C.length-c.current):C),i(p=>p+1)}),[n]);const u=a.useCallback(()=>{e&&(r.current.delete(e),i(f=>f+1))},[e]);return{entries:e?r.current.get(e)??[]:[],clear:u}}function ke(e){const{send:s}=P();return{replay:a.useCallback((o,r)=>{e&&s({type:"EVENT_REPLAY",storeId:e,snapshot:o,events:r.map(c=>({id:c.event.id,channel:c.event.channel,type:c.event.type,payload:c.event.payload})),timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION})},[e,s])}}function Ce(e,s){const{send:n,subscribe:o}=P(),[r,c]=a.useState(null),[i,u]=a.useState(!1),d=s?.refreshIntervalMs??2e3,f=a.useRef(null),S=a.useCallback(()=>{e&&(u(!0),n({type:"REQUEST_METRICS",storeId:e,timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION}))},[e,n]);return a.useEffect(()=>{if(!e){c(null);return}S();const h=o(R=>{R.type==="STORE_METRICS"&&R.storeId===e&&(c(R.metrics),u(!1))});return d>0&&(f.current=setInterval(S,d)),()=>{h(),f.current&&(clearInterval(f.current),f.current=null)}},[e,o,S,d]),{metrics:r,loading:i,refresh:S}}function Ae(){const{subscribe:e}=P(),[s,n]=a.useState([]);return a.useEffect(()=>e(r=>{switch(r.type){case"STORE_REGISTRY":n(r.stores);break;case"STORE_CONNECTED":n(c=>c.some(u=>u.id===r.store.id)?c.map(u=>u.id===r.store.id?{...u,status:"connected"}:u):[...c,{id:r.store.id,name:r.store.name,status:"connected",capabilities:r.store.capabilities,connectedAt:r.timestamp}]);break;case"STORE_DISCONNECTED":n(c=>c.map(i=>i.id===r.storeId?{...i,status:"disconnected"}:i));break}}),[e]),s}function F(e,s){let n=structuredClone(e);for(const o of s){const r=Ie(o.path);switch(o.op){case"add":n=z(n,r,o.value,!0);break;case"replace":n=z(n,r,o.value,!1);break;case"remove":n=le(n,r);break}}return n}function Ie(e){return e===""||e==="/"?[]:e.slice(1).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~"))}const ie=new Set(["__proto__","constructor","prototype"]);function z(e,s,n,o){if(s.length===0)return n;const r=Array.isArray(e)?[...e]:{...e},[c,...i]=s;if(ie.has(c))return r;if(i.length===0)if(o&&Array.isArray(r)){const u=c==="-"?r.length:Number(c);Number.isInteger(u)&&u>=0&&u<=r.length?r.splice(u,0,n):r[c]=n}else r[c]=n;else r[c]=z(r[c]??{},i,n,o);return r}function le(e,s){if(s.length===0)return;const n=Array.isArray(e)?[...e]:{...e},[o,...r]=s;return ie.has(o)||(r.length===0?Array.isArray(n)?n.splice(Number(o),1):delete n[o]:n[o]=le(n[o],r)),n}function we(e){const s=e.scheduler??{setInterval:(r,c)=>setInterval(r,c),clearInterval:r=>clearInterval(r)};let n=s.setInterval(()=>{if(e.isSettled()){o();return}e.request()},e.intervalMs);function o(){n!==null&&(s.clearInterval(n),n=null)}return o}const xe=1500;function Pe(e){const{send:s,subscribe:n}=P(),[o,r]=a.useState(null),[c,i]=a.useState(0),[u,d]=a.useState(!1),f=a.useRef(0),S=a.useRef([]),h=a.useRef(null),R=a.useCallback(()=>{h.current?.(),h.current=null},[]),O=a.useCallback(()=>{e&&(d(!0),s({type:"REQUEST_STATE",storeId:e,timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION}))},[e,s]);return a.useEffect(()=>{if(!e){r(null),i(0),f.current=0;return}O(),h.current=we({request:O,isSettled:()=>f.current!==0,intervalMs:xe});const C=n(p=>{if(p.type==="STATE_SNAPSHOT"&&p.storeId===e){R(),r(p.state),i(p.version),f.current=p.version,d(!1);const v=S.current.filter(N=>N.version>p.version).sort((N,w)=>N.version-w.version);if(S.current=[],v.length>0){r(w=>{let E=w;for(const m of v)E=F(E,m.patches);return E});const N=v[v.length-1].version;i(N),f.current=N}return}if(p.type==="STORE_EVENT"&&p.storeId===e&&p.committed){if(f.current===0){S.current.push({patches:p.patches,version:p.snapshotVersion});return}if(p.snapshotVersion<=f.current)return;r(v=>F(v,p.patches)),i(p.snapshotVersion),f.current=p.snapshotVersion}});return()=>{C(),R(),S.current=[]}},[e,n,O,R]),{state:o,version:c,loading:u,refresh:O}}function ge(e){const{send:s,subscribe:n}=P(),[o,r]=a.useState(null),[c,i]=a.useState(!1),u=a.useCallback(()=>{e&&(i(!0),s({type:"REQUEST_SUBSCRIPTIONS",storeId:e,timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION}))},[e,s]);return a.useEffect(()=>{if(!e){r(null);return}return u(),n(f=>{f.type==="STORE_SUBSCRIPTIONS"&&f.storeId===e&&(r({atomic:f.atomic,event:f.event,coarse:f.coarse,effects:f.effects,middleware:f.middleware,reducers:f.reducers}),i(!1))})},[e,n,u]),{data:o,loading:c,refresh:u}}function ae(e,s){const{isTimeTraveling:n,currentIndex:o,entryCount:r}=s,c=r-1;if(e==="back"){const d=(n?o:c)-1;return d>=0?{kind:"jump",index:d}:{kind:"none"}}if(!n)return{kind:"none"};const i=o+1;return i>c?{kind:"resume"}:{kind:"jump",index:i}}function De(e,s,n=!0){const{send:o,subscribe:r}=P(),[c,i]=a.useState(-1),[u,d]=a.useState(!1),[f,S]=a.useState(null),h=a.useRef(null);a.useEffect(()=>{if(h.current=null,S(null),!!e)return r(E=>{E.type==="STATE_SNAPSHOT"&&E.storeId===e&&h.current===null&&(h.current={state:E.state,version:E.version})})},[e,r]);const R=a.useCallback(E=>{const m=h.current;if(!m)return null;let k=m.state;for(let x=0;x<=E;x++){const A=s[x];if(!A)break;A.snapshotVersion<=m.version||(k=F(k,A.patches))}return k},[s]),O=a.useCallback(E=>{if(!e||!n||E<0||E>=s.length)return;S(k=>k??s.length),i(E),d(!0);const m=s[E];o({type:"TIME_TRAVEL",storeId:e,state:R(E),snapshotVersion:m.snapshotVersion,timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION})},[e,s,o,R,n]),C=a.useCallback(()=>{if(d(!1),i(-1),S(null),n&&e&&s.length>0){const E=s.length-1,m=s[E];o({type:"TIME_TRAVEL",storeId:e,state:R(E),snapshotVersion:m.snapshotVersion,timestamp:new Date().toISOString(),sourceId:"",sourceRole:b.DevtoolsRole.EXTENSION})}},[e,s,o,R,n]),p=f??s.length,v=a.useCallback(()=>{const E=ae("back",{isTimeTraveling:u,currentIndex:c,entryCount:p});E.kind==="jump"&&O(E.index)},[u,c,p,O]),N=a.useCallback(()=>{const E=ae("forward",{isTimeTraveling:u,currentIndex:c,entryCount:p});E.kind==="jump"?O(E.index):E.kind==="resume"&&C()},[u,c,p,O,C]),w=a.useMemo(()=>R(u?c:s.length-1),[R,u,c,s.length]);return{currentIndex:c,isTimeTraveling:u,previewState:w,frameCount:f,jumpTo:O,stepBack:v,stepForward:N,resume:C}}const G=0,B=1,je=2,L=3;function H(){return{timestamp:new Date().toISOString(),sourceId:"loopback-hub",sourceRole:b.DevtoolsRole.HUB}}function ue(e){return e.split(".")[0]??"0"}class Me{constructor(){this.peers=new Set}add(s){const n={role:null,id:null,deliver:s,closed:!1};return this.peers.add(n),n}remove(s){if(this.peers.delete(s)&&(s.closed=!0,s.role===b.DevtoolsRole.STORE&&s.id)){const n=JSON.stringify({type:"STORE_DISCONNECTED",storeId:s.id,reason:"disconnected",...H()});this.eachExtension(o=>o.deliver(n))}}receive(s,n){if(s.closed)return;let o;try{o=JSON.parse(n)}catch{return}if(!(o===null||typeof o!="object"||typeof o.type!="string")){if(s.role===null){this.handshake(s,o);return}if(s.role===b.DevtoolsRole.STORE)this.eachExtension(r=>r.deliver(n));else if(typeof o.storeId=="string")for(const r of this.peers)r.role===b.DevtoolsRole.STORE&&r.id===o.storeId&&r.deliver(n)}}handshake(s,n){if(n.type!=="HANDSHAKE_REQUEST")return;const o=n.role,r=o===b.DevtoolsRole.STORE?n.store?.id:o===b.DevtoolsRole.EXTENSION?n.extension?.id:void 0,i=ue(String(n.protocolVersion??""))===ue(b.PROTOCOL_VERSION)&&typeof r=="string";if(s.deliver(JSON.stringify({type:"HANDSHAKE_RESPONSE",success:i,protocolVersion:b.PROTOCOL_VERSION,...H(),...i?{}:{error:"Loopback handshake rejected (version or id mismatch)"}})),!!i)if(s.role=o,s.id=r,o===b.DevtoolsRole.STORE){s.storeInfo={name:n.store?.name??r,capabilities:n.store?.capabilities};const u=JSON.stringify({type:"STORE_CONNECTED",store:{id:r,name:s.storeInfo.name,capabilities:s.storeInfo.capabilities},...H()});this.eachExtension(d=>d.deliver(u))}else{const u=[...this.peers].filter(d=>d.role===b.DevtoolsRole.STORE&&d.storeInfo).map(d=>({id:d.id,name:d.storeInfo.name,status:"connected",capabilities:d.storeInfo.capabilities,connectedAt:new Date().toISOString()}));s.deliver(JSON.stringify({type:"STORE_REGISTRY",stores:u,...H()}))}}eachExtension(s){for(const n of this.peers)n.role===b.DevtoolsRole.EXTENSION&&s(n)}}function Ve(){const e=new Me,s=(r,c)=>{let i=G;const u=e.add(d=>c.onMessage(d));return queueMicrotask(()=>{i=B,c.onOpen()}),{get readyState(){return i},send:d=>e.receive(u,d),close:()=>{i!==L&&(i=L,e.remove(u),c.onClose())},dispose:()=>{u.closed=!0}}},o=class o{constructor(c){this.onopen=null,this.onmessage=null,this.onclose=null,this.onerror=null,this.readyState=G,this.peer=e.add(i=>this.onmessage?.({data:i})),queueMicrotask(()=>{this.readyState=B,this.onopen?.()})}send(c){e.receive(this.peer,c)}close(){this.readyState!==L&&(this.readyState=L,e.remove(this.peer),this.onclose?.())}};o.CONNECTING=G,o.OPEN=B,o.CLOSING=je,o.CLOSED=L;let n=o;return{agentSocketFactory:s,WebSocket:n}}exports.HubContext=Q;exports.HubProvider=Oe;exports.applyPatches=F;exports.createLoopbackHub=Ve;exports.useEventEmitter=ye;exports.useEventLog=Ne;exports.useEventReplay=ke;exports.useHubConnection=P;exports.useStoreMetrics=Ce;exports.useStoreRegistry=Ae;exports.useStoreState=Pe;exports.useStoreSubscriptions=ge;exports.useTimeTravel=De;
22
+ <%s key={someKey} {...props} />`,y,_,j,_),ne[_+y]=!0)}if(_=null,p!==void 0&&(r(p),_=""+p),a(d)&&(r(d.key),_=""+d.key),"key"in d){p={};for(var W in d)W!=="key"&&(p[W]=d[W])}else p=d;return _&&i(p,typeof n=="function"?n.displayName||n.name||"Unknown":n),R(n,_,w,P,t(),p,$,J)}function v(n){typeof n=="object"&&n!==null&&n.$$typeof===O&&n._store&&(n._store.validated=1)}var b=u,O=Symbol.for("react.transitional.element"),T=Symbol.for("react.portal"),N=Symbol.for("react.fragment"),S=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),I=Symbol.for("react.consumer"),x=Symbol.for("react.context"),k=Symbol.for("react.forward_ref"),E=Symbol.for("react.suspense"),C=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),D=Symbol.for("react.lazy"),fe=Symbol.for("react.activity"),de=Symbol.for("react.client.reference"),q=b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,K=Object.prototype.hasOwnProperty,Ee=Array.isArray,X=console.createTask?console.createTask:function(){return null};b={react_stack_bottom_frame:function(n){return n()}};var Z,ee={},te=b.react_stack_bottom_frame.bind(b,c)(),re=X(o(c)),ne={};V.Fragment=N,V.jsx=function(n,d,p,y,P){var w=1e4>q.recentlyCreatedOwnerStacks++;return f(n,d,p,!1,y,P,w?Error("react-stack-top-frame"):te,w?X(o(n)):re)},V.jsxs=function(n,d,p,y,P){var w=1e4>q.recentlyCreatedOwnerStacks++;return f(n,d,p,!0,y,P,w?Error("react-stack-top-frame"):te,w?X(o(n)):re)}})()),V}var ce;function ve(){return ce||(ce=1,process.env.NODE_ENV==="production"?U.exports=pe():U.exports=Re()),U.exports}var Te=ve();const he={timeTravel:!0,eventReplay:!0,stateExplorer:!0,eventEmit:!0,performanceMetrics:!0},be=750,me=3e4;function Oe({config:e,children:s}){const[r,o]=u.useState("disconnected"),t=u.useRef(null),c=u.useRef(new Set),a=u.useRef(0),i=u.useRef(null),l=u.useRef(crypto.randomUUID()),R=u.useRef(e);R.current=e;const f=u.useCallback(()=>{const S=R.current,I=`ws://${S.host??"localhost"}:${S.port}`,x=S.WebSocket??(typeof globalThis.WebSocket<"u"?globalThis.WebSocket:void 0);if(!x){console.error("[Yoltra DevTools] No WebSocket implementation available. In Node.js, pass { WebSocket } from 'ws' via config.WebSocket.");return}o("connecting");try{const k=new x(I);t.current=k,k.onopen=()=>{a.current=0;const E=JSON.stringify({type:"HANDSHAKE_REQUEST",protocolVersion:h.PROTOCOL_VERSION,role:h.DevtoolsRole.EXTENSION,extension:{id:l.current,name:S.extensionName??"DevTools UI",capabilities:he}});k.send(E)},k.onmessage=E=>{try{const C=typeof E.data=="string"?E.data:String(E.data),A=JSON.parse(C);if(A.type==="HANDSHAKE_RESPONSE"){A.success?o("connected"):k.close();return}c.current.forEach(D=>D(A))}catch{}},k.onclose=()=>{t.current=null,o("disconnected");const E=S.autoReconnect??!0,C=S.maxReconnectAttempts??1/0;if(E&&a.current<C){const A=a.current++,D=Math.min(be*Math.pow(2,A)+Math.random()*500,me);i.current=setTimeout(f,D)}},k.onerror=()=>{}}catch{o("disconnected")}},[]),v=u.useCallback(()=>{i.current&&(clearTimeout(i.current),i.current=null),a.current=1/0,t.current?.close(),t.current=null,o("disconnected")},[]),b=u.useCallback(()=>{a.current=0,t.current?.close(),t.current=null,f()},[f]),O=u.useCallback(S=>{const m=t.current;m&&m.readyState===1&&m.send(JSON.stringify(S))},[]),T=u.useCallback(S=>(c.current.add(S),()=>{c.current.delete(S)}),[]);u.useEffect(()=>(f(),()=>{i.current&&clearTimeout(i.current),a.current=1/0,t.current?.close()}),[f]);const N={status:r,extensionId:l.current,send:O,subscribe:T,disconnect:v,reconnect:b};return Te.jsx(Q.Provider,{value:N,children:s})}function g(){return u.useContext(Q)}function ye(e){const{send:s,extensionId:r}=g();return{emit:u.useCallback((t,c,a)=>{e&&s({type:"EMIT_TO_STORE",storeId:e,event:{channel:t,type:c,payload:a},timestamp:new Date().toISOString(),sourceId:r,sourceRole:h.DevtoolsRole.EXTENSION})},[e,s,r])}}const _e=2e3;function Ne(e,s){const{subscribe:r}=g(),o=s?.maxEntries??_e,t=u.useRef(new Map),c=u.useRef(o);c.current=o;const[,a]=u.useState(0);u.useEffect(()=>r(f=>{if(f.type!=="STORE_EVENT")return;const v=f.storeId,b={event:f.event,storeId:v,patches:f.patches,snapshotVersion:f.snapshotVersion,committed:f.committed,timestamp:f.timestamp},T=[...t.current.get(v)??[],b];t.current.set(v,T.length>c.current?T.slice(T.length-c.current):T),a(N=>N+1)}),[r]);const i=u.useCallback(()=>{e&&(t.current.delete(e),a(R=>R+1))},[e]);return{entries:e?t.current.get(e)??[]:[],clear:i}}function ke(e){const{send:s,extensionId:r}=g();return{replay:u.useCallback((t,c)=>{e&&s({type:"EVENT_REPLAY",storeId:e,snapshot:t,events:c.map(a=>({id:a.event.id,channel:a.event.channel,type:a.event.type,payload:a.event.payload})),timestamp:new Date().toISOString(),sourceId:r,sourceRole:h.DevtoolsRole.EXTENSION})},[e,s,r])}}function Ie(e,s){const{send:r,subscribe:o,extensionId:t}=g(),[c,a]=u.useState(null),[i,l]=u.useState(!1),R=s?.refreshIntervalMs??2e3,f=u.useRef(null),v=u.useCallback(()=>{e&&(l(!0),r({type:"REQUEST_METRICS",storeId:e,timestamp:new Date().toISOString(),sourceId:t,sourceRole:h.DevtoolsRole.EXTENSION}))},[e,r,t]);return u.useEffect(()=>{if(!e){a(null);return}v();const b=o(O=>{O.type==="STORE_METRICS"&&O.storeId===e&&(a(O.metrics),l(!1))});return R>0&&(f.current=setInterval(v,R)),()=>{b(),f.current&&(clearInterval(f.current),f.current=null)}},[e,o,v,R]),{metrics:c,loading:i,refresh:v}}function Ce(){const{subscribe:e}=g(),[s,r]=u.useState([]);return u.useEffect(()=>e(t=>{switch(t.type){case"STORE_REGISTRY":r(t.stores);break;case"STORE_CONNECTED":r(c=>c.some(i=>i.id===t.store.id)?c.map(i=>i.id===t.store.id?{...i,status:"connected"}:i):[...c,{id:t.store.id,name:t.store.name,status:"connected",capabilities:t.store.capabilities,connectedAt:t.timestamp}]);break;case"STORE_DISCONNECTED":r(c=>c.map(a=>a.id===t.storeId?{...a,status:"disconnected"}:a));break}}),[e]),s}function F(e,s){let r=e;for(const o of s){const t=Ae(o.path);switch(o.op){case"add":r=z(r,t,o.value,!0);break;case"replace":r=z(r,t,o.value,!1);break;case"remove":r=le(r,t);break}}return r}function Ae(e){return e===""||e==="/"?[]:e.slice(1).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~"))}const ie=new Set(["__proto__","constructor","prototype"]);function z(e,s,r,o){if(s.length===0)return r;const t=Array.isArray(e)?[...e]:{...e},[c,...a]=s;if(ie.has(c))return t;if(a.length===0)if(o&&Array.isArray(t)){const i=c==="-"?t.length:Number(c);Number.isInteger(i)&&i>=0&&i<=t.length?t.splice(i,0,r):t[c]=r}else t[c]=r;else t[c]=z(t[c]??{},a,r,o);return t}function le(e,s){if(s.length===0)return;const r=Array.isArray(e)?[...e]:{...e},[o,...t]=s;return ie.has(o)||(t.length===0?Array.isArray(r)?r.splice(Number(o),1):delete r[o]:r[o]=le(r[o],t)),r}function xe(e){const s=e.scheduler??{setInterval:(t,c)=>setInterval(t,c),clearInterval:t=>clearInterval(t)};let r=s.setInterval(()=>{if(e.isSettled()){o();return}e.request()},e.intervalMs);function o(){r!==null&&(s.clearInterval(r),r=null)}return o}const we=1500;function ge(e){const{send:s,subscribe:r,extensionId:o}=g(),[t,c]=u.useState(null),[a,i]=u.useState(0),[l,R]=u.useState(!1),f=u.useRef(0),v=u.useRef([]),b=u.useRef(null),O=u.useCallback(()=>{b.current?.(),b.current=null},[]),T=u.useCallback(()=>{e&&(R(!0),s({type:"REQUEST_STATE",storeId:e,timestamp:new Date().toISOString(),sourceId:o,sourceRole:h.DevtoolsRole.EXTENSION}))},[e,s,o]);return u.useEffect(()=>{if(!e){c(null),i(0),f.current=0;return}T(),b.current=xe({request:T,isSettled:()=>f.current!==0,intervalMs:we});const N=r(S=>{if(S.type==="STATE_SNAPSHOT"&&S.storeId===e){O(),c(S.state),i(S.version),f.current=S.version,R(!1);const m=v.current.filter(I=>I.version>S.version).sort((I,x)=>I.version-x.version);if(v.current=[],m.length>0){c(x=>{let k=x;for(const E of m)k=F(k,E.patches);return k});const I=m[m.length-1].version;i(I),f.current=I}return}if(S.type==="STORE_EVENT"&&S.storeId===e&&S.committed){if(f.current===0){v.current.push({patches:S.patches,version:S.snapshotVersion});return}if(S.snapshotVersion<=f.current)return;c(m=>F(m,S.patches)),i(S.snapshotVersion),f.current=S.snapshotVersion}});return()=>{N(),O(),v.current=[]}},[e,r,T,O]),{state:t,version:a,loading:l,refresh:T}}function Pe(e){const{send:s,subscribe:r,extensionId:o}=g(),[t,c]=u.useState(null),[a,i]=u.useState(!1),l=u.useCallback(()=>{e&&(i(!0),s({type:"REQUEST_SUBSCRIPTIONS",storeId:e,timestamp:new Date().toISOString(),sourceId:o,sourceRole:h.DevtoolsRole.EXTENSION}))},[e,s,o]);return u.useEffect(()=>{if(!e){c(null);return}return l(),r(f=>{f.type==="STORE_SUBSCRIPTIONS"&&f.storeId===e&&(c({atomic:f.atomic,event:f.event,coarse:f.coarse,effects:f.effects,middleware:f.middleware,reducers:f.reducers}),i(!1))})},[e,r,l]),{data:t,loading:a,refresh:l}}function ae(e,s){const{isTimeTraveling:r,currentIndex:o,entryCount:t}=s,c=t-1;if(e==="back"){const l=(r?o:c)-1;return l>=0?{kind:"jump",index:l}:{kind:"none"}}if(!r)return{kind:"none"};const a=o+1;return a>c?{kind:"resume"}:{kind:"jump",index:a}}function De(e){const{baseline:s,entries:r,index:o,cache:t}=e;if(s===null)return{state:null,cache:null};let c=0,a=s.state;t!==null&&t.index<=o&&r[t.index]===t.marker&&(c=t.index+1,a=t.state);for(let l=c;l<=o;l++){const R=r[l];if(R===void 0)break;R.snapshotVersion<=s.version||(a=F(a,R.patches))}const i=r[o];return{state:a,cache:o>=0&&i!==void 0?{index:o,state:a,marker:i}:null}}function je(e,s,r=!0){const{send:o,subscribe:t,extensionId:c}=g(),[a,i]=u.useState(-1),[l,R]=u.useState(!1),[f,v]=u.useState(null),b=u.useRef(null),O=u.useRef(null);u.useEffect(()=>{if(b.current=null,O.current=null,v(null),!!e)return t(E=>{E.type==="STATE_SNAPSHOT"&&E.storeId===e&&b.current===null&&(b.current={state:E.state,version:E.version})})},[e,t]);const T=u.useCallback(E=>{const{state:C,cache:A}=De({baseline:b.current,entries:s,index:E,cache:O.current});return O.current=A,C},[s]),N=u.useCallback(E=>{if(!e||!r||E<0||E>=s.length)return;v(A=>A??s.length),i(E),R(!0);const C=s[E];o({type:"TIME_TRAVEL",storeId:e,state:T(E),snapshotVersion:C.snapshotVersion,timestamp:new Date().toISOString(),sourceId:c,sourceRole:h.DevtoolsRole.EXTENSION})},[e,s,o,T,r,c]),S=u.useCallback(()=>{if(R(!1),i(-1),v(null),r&&e&&s.length>0){const E=s.length-1,C=s[E];o({type:"TIME_TRAVEL",storeId:e,state:T(E),snapshotVersion:C.snapshotVersion,timestamp:new Date().toISOString(),sourceId:c,sourceRole:h.DevtoolsRole.EXTENSION})}},[e,s,o,T,r,c]),m=f??s.length,I=u.useCallback(()=>{const E=ae("back",{isTimeTraveling:l,currentIndex:a,entryCount:m});E.kind==="jump"&&N(E.index)},[l,a,m,N]),x=u.useCallback(()=>{const E=ae("forward",{isTimeTraveling:l,currentIndex:a,entryCount:m});E.kind==="jump"?N(E.index):E.kind==="resume"&&S()},[l,a,m,N,S]),k=u.useMemo(()=>T(l?a:s.length-1),[T,l,a,s.length]);return{currentIndex:a,isTimeTraveling:l,previewState:k,frameCount:f,jumpTo:N,stepBack:I,stepForward:x,resume:S}}const G=0,B=1,Me=2,L=3;function H(){return{timestamp:new Date().toISOString(),sourceId:"loopback-hub",sourceRole:h.DevtoolsRole.HUB}}function ue(e){return e.split(".")[0]??"0"}class Ve{constructor(){this.peers=new Set}add(s){const r={role:null,id:null,deliver:s,closed:!1};return this.peers.add(r),r}remove(s){if(this.peers.delete(s)&&(s.closed=!0,s.role===h.DevtoolsRole.STORE&&s.id)){const r=JSON.stringify({type:"STORE_DISCONNECTED",storeId:s.id,reason:"disconnected",...H()});this.eachExtension(o=>o.deliver(r))}}receive(s,r){if(s.closed)return;let o;try{o=JSON.parse(r)}catch{return}if(!(o===null||typeof o!="object"||typeof o.type!="string")){if(s.role===null){this.handshake(s,o);return}if(s.role===h.DevtoolsRole.STORE)this.eachExtension(t=>t.deliver(r));else if(typeof o.storeId=="string")for(const t of this.peers)t.role===h.DevtoolsRole.STORE&&t.id===o.storeId&&t.deliver(r)}}handshake(s,r){if(r.type!=="HANDSHAKE_REQUEST")return;const o=r.role,t=o===h.DevtoolsRole.STORE?r.store?.id:o===h.DevtoolsRole.EXTENSION?r.extension?.id:void 0,a=ue(String(r.protocolVersion??""))===ue(h.PROTOCOL_VERSION)&&typeof t=="string";if(s.deliver(JSON.stringify({type:"HANDSHAKE_RESPONSE",success:a,negotiatedVersion:h.PROTOCOL_VERSION,...H(),...a?{}:{error:"Loopback handshake rejected (version or id mismatch)"}})),!!a)if(s.role=o,s.id=t,o===h.DevtoolsRole.STORE){s.storeInfo={name:r.store?.name??t,capabilities:r.store?.capabilities};const i=JSON.stringify({type:"STORE_CONNECTED",store:{id:t,name:s.storeInfo.name,capabilities:s.storeInfo.capabilities},...H()});this.eachExtension(l=>l.deliver(i))}else{const i=[...this.peers].filter(l=>l.role===h.DevtoolsRole.STORE&&l.storeInfo).map(l=>({id:l.id,name:l.storeInfo.name,status:"connected",capabilities:l.storeInfo.capabilities,connectedAt:new Date().toISOString()}));s.deliver(JSON.stringify({type:"STORE_REGISTRY",stores:i,...H()}))}}eachExtension(s){for(const r of this.peers)r.role===h.DevtoolsRole.EXTENSION&&s(r)}}function Le(){const e=new Ve,s=(t,c)=>{let a=G;const i=e.add(l=>c.onMessage(l));return queueMicrotask(()=>{a=B,c.onOpen()}),{get readyState(){return a},send:l=>e.receive(i,l),close:()=>{a!==L&&(a=L,e.remove(i),c.onClose())},dispose:()=>{i.closed=!0}}},o=class o{constructor(c){this.onopen=null,this.onmessage=null,this.onclose=null,this.onerror=null,this.readyState=G,this.peer=e.add(a=>this.onmessage?.({data:a})),queueMicrotask(()=>{this.readyState=B,this.onopen?.()})}send(c){e.receive(this.peer,c)}close(){this.readyState!==L&&(this.readyState=L,e.remove(this.peer),this.onclose?.())}};o.CONNECTING=G,o.OPEN=B,o.CLOSING=Me,o.CLOSED=L;let r=o;return{agentSocketFactory:s,WebSocket:r}}exports.HubContext=Q;exports.HubProvider=Oe;exports.applyPatches=F;exports.createLoopbackHub=Le;exports.useEventEmitter=ye;exports.useEventLog=Ne;exports.useEventReplay=ke;exports.useHubConnection=g;exports.useStoreMetrics=Ie;exports.useStoreRegistry=Ce;exports.useStoreState=ge;exports.useStoreSubscriptions=Pe;exports.useTimeTravel=je;
7
23
  //# sourceMappingURL=devtools-ui.cjs.js.map