@swarm.ing/pieui 2.1.4 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +595 -124
  2. package/dist/cli.js +2208 -14
  3. package/dist/code/commands/listEvents.d.ts.map +1 -1
  4. package/dist/code/commands/registry.d.ts.map +1 -1
  5. package/dist/components/PieCard/index.d.ts +1 -1
  6. package/dist/components/PieCard/index.d.ts.map +1 -1
  7. package/dist/components/PieCard/types/index.d.ts +11 -0
  8. package/dist/components/PieCard/types/index.d.ts.map +1 -1
  9. package/dist/components/index.esm.js +1 -1
  10. package/dist/components/index.js +1 -1
  11. package/dist/index.esm.js +2 -2
  12. package/dist/index.js +2 -2
  13. package/dist/max/index.esm.js +1 -1
  14. package/dist/max/index.js +1 -1
  15. package/dist/native/PieNativeRoot.d.ts +15 -0
  16. package/dist/native/PieNativeRoot.d.ts.map +1 -0
  17. package/dist/native/components/AutoRedirectCard.d.ts +10 -0
  18. package/dist/native/components/AutoRedirectCard.d.ts.map +1 -0
  19. package/dist/native/components/BoxCard.d.ts +13 -0
  20. package/dist/native/components/BoxCard.d.ts.map +1 -0
  21. package/dist/native/components/DeviceStorageCard.d.ts +12 -0
  22. package/dist/native/components/DeviceStorageCard.d.ts.map +1 -0
  23. package/dist/native/components/HTMLEmbedCard.d.ts +11 -0
  24. package/dist/native/components/HTMLEmbedCard.d.ts.map +1 -0
  25. package/dist/native/components/HiddenCard.d.ts +11 -0
  26. package/dist/native/components/HiddenCard.d.ts.map +1 -0
  27. package/dist/native/components/IOEventsCard.d.ts +11 -0
  28. package/dist/native/components/IOEventsCard.d.ts.map +1 -0
  29. package/dist/native/components/OneOfCard.d.ts +12 -0
  30. package/dist/native/components/OneOfCard.d.ts.map +1 -0
  31. package/dist/native/components/SequenceCard.d.ts +12 -0
  32. package/dist/native/components/SequenceCard.d.ts.map +1 -0
  33. package/dist/native/components/SessionStorageCard.d.ts +9 -0
  34. package/dist/native/components/SessionStorageCard.d.ts.map +1 -0
  35. package/dist/native/components/index.d.ts +13 -0
  36. package/dist/native/components/index.d.ts.map +1 -0
  37. package/dist/native/index.d.ts +41 -0
  38. package/dist/native/index.d.ts.map +1 -0
  39. package/dist/native/index.esm.js +3 -0
  40. package/dist/native/index.js +3 -0
  41. package/dist/platform/clientSources.d.ts +4 -0
  42. package/dist/platform/clientSources.d.ts.map +1 -0
  43. package/dist/platform/clientSources.native.d.ts +4 -0
  44. package/dist/platform/clientSources.native.d.ts.map +1 -0
  45. package/dist/platform/clientSources.web.d.ts +10 -0
  46. package/dist/platform/clientSources.web.d.ts.map +1 -0
  47. package/dist/platform/nativeConfig.d.ts +63 -0
  48. package/dist/platform/nativeConfig.d.ts.map +1 -0
  49. package/dist/platform/nativeFormStore.d.ts +12 -0
  50. package/dist/platform/nativeFormStore.d.ts.map +1 -0
  51. package/dist/platform/types.d.ts +39 -0
  52. package/dist/platform/types.d.ts.map +1 -0
  53. package/dist/providers/SocketIOInitProvider.d.ts.map +1 -1
  54. package/dist/telegram/index.esm.js +1 -1
  55. package/dist/telegram/index.js +1 -1
  56. package/dist/tests/centrifugeRecovery.test.d.ts +2 -0
  57. package/dist/tests/centrifugeRecovery.test.d.ts.map +1 -0
  58. package/dist/tests/clientSources.test.d.ts +2 -0
  59. package/dist/tests/clientSources.test.d.ts.map +1 -0
  60. package/dist/tests/clientSourcesNative.test.d.ts +12 -0
  61. package/dist/tests/clientSourcesNative.test.d.ts.map +1 -0
  62. package/dist/tests/piecardRecovery.test.d.ts +2 -0
  63. package/dist/tests/piecardRecovery.test.d.ts.map +1 -0
  64. package/dist/util/ajaxCommonUtils.d.ts.map +1 -1
  65. package/dist/util/centrifuge.d.ts +5 -0
  66. package/dist/util/centrifuge.d.ts.map +1 -1
  67. package/dist/util/centrifugeRecovery.d.ts +26 -0
  68. package/dist/util/centrifugeRecovery.d.ts.map +1 -0
  69. package/dist/util/globalForm.d.ts +4 -5
  70. package/dist/util/globalForm.d.ts.map +1 -1
  71. package/dist/util/waitForSidAvailable.d.ts.map +1 -1
  72. package/package.json +17 -4
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{lazy as LJ}from"react";var h=new Map;function p$($,J){return J.catch(()=>{if(h.get($)===J)h.delete($)}),h.set($,J),J}function B$($,J){return LJ(()=>{if(h.has(J))return h.get(J);return p$(J,$().then((Z)=>Z))})}var c$=async($,J)=>{if(!J)return;if(h.has($))return h.get($);return p$($,J().then((Z)=>Z))};var T$=globalThis,T=($,J)=>{let Z=Symbol.for($);if(!(Z in T$))T$[Z]=J();return T$[Z]};var y=T("@swarm.ing/pieui:component-registry",()=>new Map),PJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=B$(J.loader,$.name),J.isLazy=!0;return J};function a($){let J=PJ($);return y.set(J.name,J),J.component}var wJ=($)=>{$.forEach((J)=>a(J))},RJ=($)=>{y.delete($)},EJ=($)=>{return y.has($)},jJ=($)=>{return y.get($)?.metadata},l=($)=>{return y.get($)},NJ=()=>{return Array.from(y.keys())},kJ=()=>{return y.size},d$=()=>Array.from(y.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),l$=($)=>{let J=y.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return c$($,J.loader)},u$=!1,yJ=()=>{if(u$||typeof window>"u")return;u$=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=d$(),Z="requestIdleCallback"in window?(W)=>window.requestIdleCallback(W,{timeout:2000}):(W)=>window.setTimeout(W,300),Y=(W)=>{if(W>=J.length)return;Z(()=>{Promise.resolve().then(()=>l$(J[W])).catch(()=>{}).finally(()=>Y(W+1))})};Y(0)};import{useContext as JJ}from"react";import{Linking as qZ,Pressable as DZ,View as KZ}from"react-native";import{useContext as V$,useEffect as F$,useRef as e$}from"react";import{createContext as bJ,useContext as xJ}from"react";var c=T("@swarm.ing/pieui:context:pieConfig",()=>bJ(null)),s=()=>{let $=xJ(c);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},o=()=>{let{apiServer:$}=s();return $},t=o,e=()=>{let{centrifugeServer:$}=s();return $};var x=()=>{let{enableRenderingLog:$}=s();return $},s$=x;var U$="__piedemo__";import{createContext as SJ}from"react";import{Centrifuge as o$}from"centrifuge";var i$=T("@swarm.ing/pieui:centrifuge-cache",()=>new Map),$$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,Y=i$.get(Z);if(Y)return Y;async function W(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new o$.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let X=new o$(J,{getToken:W});return i$.set(Z,X),X},fJ=T("@swarm.ing/pieui:context:centrifuge",()=>SJ(null)),S=fJ;import{io as CJ}from"socket.io-client";import{createContext as vJ}from"react";var n$=T("@swarm.ing/pieui:socket-cache",()=>new Map),J$=($)=>{let J=n$.get($);if(J)return J;let Z=CJ($,{autoConnect:!1,transports:["websocket"]});return n$.set($,Z),Z},hJ=T("@swarm.ing/pieui:context:socket",()=>vJ(null)),f=hJ;import mJ from"mitt";import{createContext as gJ,useCallback as pJ,useContext as cJ}from"react";function u(){return T("@swarm.ing/pieui:mitt-emitter",()=>mJ())}var r$=T("@swarm.ing/pieui:context:mitt",()=>gJ(null));function uJ($){let J=cJ(r$);return pJ((Z,Y)=>{(J??u()).emit(`pie${Z}_${$}`,Y)},[$,J])}var C=r$;function a$($){return $.wasRecovering===!0&&$.recovered===!1}function t$($){return $.recoverable===!1}import{jsx as sJ,jsxs as oJ,Fragment as lJ}from"react/jsx-runtime";var dJ=({card:$,data:J,children:Z,useSocketioSupport:Y=!1,useCentrifugeSupport:W=!1,useMittSupport:X=!1,centrifugeChannel:z=void 0,methods:Q=void 0,stored:G=void 0,onResync:H=void 0})=>{let D=s$(),M=e$(Q);M.current=Q;let E=e$(H);if(E.current=H,D)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:Y,centrifuge:W,mitt:X,centrifugeChannel:z}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let I=V$(f),L=V$(S),U=V$(C);if(F$(()=>{if(!I||!Y||!M.current||!J.name){if(D&&Y)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!I,useSocketioSupport:Y,hasMethods:!!M.current,hasDataName:!!J?.name});return}let V=Object.keys(M.current??{}).map((q)=>{let _=`pie${q}_${J.name}`;if(D)console.log(`[PieCard] Socket.IO registering event: ${_}`);let B=(P)=>{M.current?.[q]?.(P)};return I.on(_,B),[_,B]});return()=>{V.forEach(([q,_])=>{if(D)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);I.off(q,_)})}},[I,J.name,Y]),F$(()=>{if(!L||!W||!z||!J.name){if(D&&W)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:W,hasCentrifugeChannel:!!z,hasMethods:!!M.current,hasDataName:!!J?.name});return}let V=Object.keys(M.current??{}).map((q)=>{let _=`pie${q}_${J.name}_${z}`;if(D)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let B=L.newSubscription(_,{recoverable:!0,positioned:!0});return B.on("publication",(P)=>{if(D)console.log(`[PieCard] Centrifuge received data on ${_}:`,P.data);M.current?.[q]?.(P.data)}),B.on("subscribed",(P)=>{if(t$(P))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(a$(P)){if(D)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);E.current?.({channel:_,reason:"gap"})}}),B.subscribe(),B});return()=>{V.forEach((q)=>{if(D)console.log("[PieCard] Centrifuge unsubscribing from channel");q.unsubscribe(),L.removeSubscription(q)})}},[L,z,J.name,W]),F$(()=>{if(!U||!X||!J.name){if(D&&X)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!U,useMittSupport:X,hasMethods:!!M.current,hasDataName:!!J?.name});return}let K=Object.keys(M.current??{}),V={};return K.forEach((q)=>{let _=`pie${q}_${J.name}`,B=(P)=>{if(D)console.log(`[PieCard] Mitt registering event: ${_}`);M.current?.[q]?.(P)};V[_]=B,U.on(_,B)}),()=>{Object.entries(V).forEach(([q,_])=>{if(D)console.log(`[PieCard] Mitt unregistering event: ${q}`);U.off(q,_)})}},[U,J.name,X]),D)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return oJ(lJ,{children:[sJ("input",{type:"hidden",name:J.name,value:JSON.stringify(G)}),Z]});return Z},F=dJ;import{useContext as $J,memo as WZ}from"react";import{createContext as iJ}from"react";import{jsx as aJ,Fragment as rJ}from"react/jsx-runtime";var nJ=T("@swarm.ing/pieui:context:fallback",()=>iJ(aJ(rJ,{}))),j=nJ;import{createContext as tJ}from"react";var eJ=T("@swarm.ing/pieui:context:lazyError",()=>tJ(void 0)),v=eJ;import{Component as $Z,Suspense as JZ}from"react";import{jsx as YZ}from"react/jsx-runtime";var ZZ=2,XZ=400;class d extends $Z{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<ZZ){let J=XZ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return YZ(JZ,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as I$}from"react/jsx-runtime";function zZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=$J(j),Y=$J(v),W=x();if(W)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let X=l($.card);if(!X?.component){if(W)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(W)console.log("[UI] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata});let z=X.component,Q=I$(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(X.isLazy){if(W)console.log("[UI] Rendering lazy component with Suspense:",X.name);return I$(d,{name:X.name,fallback:X.fallback?I$(X.fallback,{}):Z,onError:Y,children:Q})}if(W)console.log("[UI] Rendering component directly:",X.name);return Q}var w=WZ(zZ);import{createContext as QZ}from"react";var GZ=T("@swarm.ing/pieui:context:navigate",()=>QZ(void 0)),b=GZ;import{createContext as HZ}from"react";var _Z=T("@swarm.ing/pieui:context:uiRenderer",()=>HZ(null)),N=_Z;import{jsx as Z$}from"react/jsx-runtime";var BZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),TZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,url:W,sx:X}=$,z=JJ(b),Q=JJ(N)??w,G=()=>{if(!W)return;if(BZ(W))qZ.openURL(W).catch(()=>{});else z?.(W)},H=Z$(Q,{setUiAjaxConfiguration:Z,uiConfig:J});return Z$(F,{card:Y,data:$,children:W?Z$(DZ,{onPress:G,style:X,children:H}):Z$(KZ,{style:X,children:H})})},O$=TZ;import{useContext as UZ}from"react";import{View as VZ}from"react-native";import{jsx as M$}from"react/jsx-runtime";var FZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,sx:W}=$,X=UZ(N)??w;return M$(F,{card:Y,data:$,children:M$(VZ,{style:W,children:J.map((z,Q)=>M$(X,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},A$=FZ;import{useContext as IZ}from"react";import{View as OZ}from"react-native";import{jsx as L$}from"react/jsx-runtime";var MZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,sx:W}=$,X=IZ(N)??w;return L$(F,{card:Y,data:$,children:L$(OZ,{style:W,children:J.map((z,Q)=>L$(X,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},P$=MZ;import{useEffect as ZJ,useState as AZ}from"react";var X$=new Map,m=($,J)=>{X$.set($,J)},g=($)=>{X$.delete($)},w$=($)=>{return X$.has($)?X$.get($):null};import{jsx as PZ}from"react/jsx-runtime";var LZ=({data:$})=>{let{name:J,value:Z,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:X,centrifugeChannel:z}=$,[Q,G]=AZ(Z);return ZJ(()=>{G(Z)},[Z]),ZJ(()=>{return m(J,[Q]),()=>g(J)},[J,Q]),PZ(F,{card:"HiddenCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:X,centrifugeChannel:z,methods:{update:({value:H})=>{G(H)}}})},R$=LZ;import{useEffect as XJ,useState as EZ}from"react";var Y$={};function wZ($){Y$={...Y$,...$}}function R(){return Y$}function RZ(){Y$={}}import{jsx as NZ}from"react/jsx-runtime";var jZ=({data:$})=>{let{name:J,key:Z,value:Y,useSocketioSupport:W,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q}=$,[G,H]=EZ(Y);return XJ(()=>{H(Y)},[Y]),XJ(()=>{return R().storage?.setItem?.(Z,G),m(J,[G]),()=>g(J)},[Z,J,G]),NZ(F,{card:"DeviceStorageCard",data:$,useSocketioSupport:W,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:D})=>{H(D)},remove:()=>{R().storage?.removeItem?.(Z),H("")}}})},E$=jZ;import{useEffect as YJ,useState as kZ}from"react";import{jsx as bZ}from"react/jsx-runtime";var yZ=({data:$})=>{let{name:J,key:Z,value:Y,useSocketioSupport:W,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q}=$,[G,H]=kZ(Y);return YJ(()=>{H(Y)},[Y]),YJ(()=>{return R().sessionStorage?.setItem?.(Z,G),m(J,[G]),()=>g(J)},[Z,J,G]),bZ(F,{card:"SessionStorageCard",data:$,useSocketioSupport:W,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:D})=>{H(D)},remove:()=>{R().sessionStorage?.removeItem?.(Z),H("")}}})},j$=yZ;import{useContext as xZ,useMemo as SZ,useRef as fZ}from"react";import{Alert as CZ,Linking as vZ}from"react-native";import{jsx as gZ}from"react/jsx-runtime";var hZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),mZ=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:W}=$,X=xZ(b),z=fZ(X);z.current=X;let Q=SZ(()=>{let G=(H)=>{if(!H)return;if(hZ(H))vZ.openURL(H).catch(()=>{});else z.current?.(H)};return{alert:(H)=>CZ.alert(String(H.title??""),String(H.message??"")),log:(H)=>console.log("Log event",H),push:(H)=>console.warn("[IOEventsCard] push notifications are not supported on native",H?.title),redirect:(H)=>G(H.to),reload:(H)=>G(H.to)}},[]);return gZ(F,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:W,methods:Q})},N$=mZ;import{useEffect as pZ,useState as cZ}from"react";import{Text as uZ}from"react-native";import{jsx as WJ}from"react/jsx-runtime";var dZ=($)=>($??"").replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),lZ=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:X}=$,[z,Q]=cZ(J);return pZ(()=>{Q(J)},[J]),WJ(F,{card:"HTMLEmbedCard",data:$,methods:{update:(G)=>Q(G.value)},useCentrifugeSupport:Y,useSocketioSupport:Z,useMittSupport:W,centrifugeChannel:X,children:WJ(uZ,{children:dZ(z)})})},k$=lZ;import{useContext as zJ,useEffect as sZ}from"react";import{Linking as oZ}from"react-native";import{jsx as rZ,Fragment as nZ}from"react/jsx-runtime";var iZ=({data:$})=>{let{url:J}=$,Z=zJ(b),Y=zJ(j);return sZ(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))oZ.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),rZ(nZ,{children:Y})},y$=iZ;import{useContext as aZ}from"react";import{jsx as QJ}from"react/jsx-runtime";var tZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y}=$,W=aZ(N)??w;return QJ(F,{card:Y,data:$,children:J.map((X,z)=>{return QJ(W,{uiConfig:X,setUiAjaxConfiguration:Z},`children-${z}`)})})},b$=tZ;import{useCallback as x$,useContext as S$,useEffect as eZ,useRef as $0,useState as GJ}from"react";import{jsx as HJ}from"react/jsx-runtime";var J0=({data:$,content:J})=>{let{useLoader:Z,noReturn:Y,returnType:W,useSocketioSupport:X,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G}=$,H=S$(j),D=S$(N)??w,[M,E]=GJ(!1),[I,L]=GJ(null),U=$0(J),K=S$(C),V=x$((B)=>{if(B===null)E(!0);else if(E(!1),!Y)U.current=B;if(!Y)L(B)},[Y]),q=x$((B)=>{U.current=B.content,L(B.content)},[]),_=x$((B)=>{if(B===null)E(!0);else if(E(!1),!Y)for(let P of B)K?.emit(P.name,P.data)},[Y,K]);if(eZ(()=>{L(J),E(!1)},[J]),!I&&Z)return H;return HJ(F,{card:"AjaxGroupCard",data:$,methods:{changeContent:q},useSocketioSupport:X,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G,children:HJ(D,{uiConfig:I??U.current,setUiAjaxConfiguration:W==="events"?_:V})})},f$=J0;var Z0=[{name:"BoxCard",component:O$},{name:"SequenceCard",component:A$},{name:"OneOfCard",component:P$},{name:"HiddenCard",component:R$},{name:"DeviceStorageCard",component:E$},{name:"SessionStorageCard",component:j$},{name:"IOEventsCard",component:N$},{name:"HTMLEmbedCard",component:k$},{name:"AutoRedirectCard",component:y$},{name:"UnionCard",component:b$},{name:"AjaxGroupCard",component:f$}];for(let $ of Z0)a($);import{useMemo as v$,useState as U0}from"react";import{QueryClient as V0,QueryClientProvider as F0}from"@tanstack/react-query";import{useContext as _0,useEffect as q0}from"react";import{useEffect as X0,useState as Y0}from"react";var W$=new Map,z$=new Map;function Q$($,J){let Z=`${$}::${J}`,Y=$?W$.get(Z):void 0,[W,X]=Y0(Y??null);return X0(()=>{if(!$)return;if(W$.has(Z)){X(W$.get(Z));return}let z=z$.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return W$.set(Z,G),z$.delete(Z),G}).catch((G)=>{throw z$.delete(Z),G}),z$.set(Z,z);let Q=!1;return z.then((G)=>{if(!Q)X(G)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),W}var W0=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let Y=Z.indexOf("=");if((Y===-1?Z:Z.slice(0,Y)).trim()===$){let X=Y===-1?"":Z.slice(Y+1).trim();try{return decodeURIComponent(X)}catch{return X}}}return null},z0={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:W0,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},_J=z0;var qJ,Q0={isClient(){return!0},readSid(){return qJ},setSid($){qJ=$},readWebStorage($,J){let Z=R(),Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},async readWebStorageAsync($,J){let Z=R(),Y=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(Y)return Y.getItem(J);let W=$==="local"?Z.storage:Z.sessionStorage;return W?W.getItem(J):null},readCookie($){let J=R();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=R();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=R();return J.getInput?J.getInput($):w$($)},submitGlobalForm(){R().submitForm?.()}},DJ=Q0;var G0=typeof navigator<"u"&&navigator.product==="ReactNative",H0=G0?DJ:_J,O=H0;var i=T("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function KJ(){i.resolve?.()}function C$(){if(!O.isClient())return Promise.resolve();if(O.readSid()!==void 0)return Promise.resolve();if(!i.promise)i.promise=new Promise(($)=>{i.resolve=()=>{$()}});return i.promise}var D0=({children:$})=>{let J=_0(f),Z=t(),Y=Q$(Z,"socketIO"),W=(X)=>{if(O.isClient())O.setSid(X.sid),KJ(),console.log(`SocketIO initialized: ${O.readSid()}`)};return q0(()=>{if(!J)return;let X=()=>{console.log("SocketIO connected")},z=(Q)=>{console.log(`SocketIO disconnected: ${Q}`),J.connect()};if(Y)J.on("pieinit",W),J.on("connect",X),J.on("disconnect",z),J.connect();return()=>{if(Y)J.off("pieinit",W),J.off("connect",X),J.off("disconnect",z),J.disconnect()}},[J,Y]),$},G$=D0;import{useContext as K0,useEffect as B0}from"react";var T0=({children:$})=>{let J=K0(S),Z=t(),Y=Q$(Z,"centrifuge");return B0(()=>{if(!J)return;let W=()=>{console.log("Centrifuge connected")},X=(z)=>{console.log("Centrifuge disconnected:",z)};if(Y)J.on("connected",W),J.on("disconnected",X),J.connect();return()=>{if(Y)J.disconnect()}},[J,Y]),$},H$=T0;import{jsx as k,Fragment as M0}from"react/jsx-runtime";var I0=({location:$,fallback:J,children:Z,disableGlobalForm:Y})=>{let W=o(),X=e(),z=x(),Q=v$(()=>u(),[]),G=v$(()=>W?J$(W):null,[W]),H=v$(()=>W?$$(W,X):null,[W,X]);if(z)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",W),console.log("[PieRoot] CENTRIFUGE_SERVER:",X),console.log("[PieRoot] Fallback provided:",!!J);return k(C.Provider,{value:Q,children:k(f.Provider,{value:G,children:k(S.Provider,{value:H,children:k(j.Provider,{value:J??k(M0,{}),children:k(G$,{children:k(H$,{children:Y?Z:k("form",{id:"piedata_global_form",action:W+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},O0=($)=>{let[J]=U0(()=>new V0),Z=$.queryClient??J;return k(b.Provider,{value:$.onNavigate,children:k(c.Provider,{value:$.config,children:k(v.Provider,{value:$.onError,children:k(F0,{client:Z,children:k(I0,{...$})})})})})},h$=O0;import{jsx as L0}from"react/jsx-runtime";var A0=($)=>{return L0(h$,{...$,disableGlobalForm:!0})},P0=A0;import{useMemo as n}from"react";import{QueryClient as R0,QueryClientProvider as E0,useQuery as j0}from"@tanstack/react-query";import{createAxiosDateTransformer as N0}from"axios-date-transformer";import{useContext as BJ}from"react";import{jsx as _$}from"react/jsx-runtime";function TJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=BJ(j),Y=BJ(v),W=x();if(W)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let X=l($.card);if(!X?.component){if(W)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(W)console.log("[UILoading] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata,hasFallback:!!X.fallback});if(X.fallback){if(W)console.log("[UILoading] Rendering fallback for:",X.name);let G=X.fallback;return _$(G,{})}if(W)console.log("[UILoading] No fallback, rendering full component:",X.name);let z=X.component,Q=_$(N.Provider,{value:TJ,children:_$(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(X.isLazy)return _$(d,{name:X.name,fallback:Z,onError:Y,children:Q});return Q}var m$=TJ;import{jsx as w0}from"react/jsx-runtime";function UJ($,J,Z){if(!J)return Z;let Y=$.replace(/^\//,""),W=J[Y];if(!W)return Z;return w0(m$,{uiConfig:W})}import{jsx as A,Fragment as b0}from"react/jsx-runtime";var k0=({location:$,fallback:J,piecache:Z,onError:Y,queryOptions:W,disableGlobalForm:X})=>{let z=o(),Q=e(),G=x(),H=n(()=>N0({baseURL:z||""}),[z]),D=n(()=>u(),[]),M=n(()=>z?J$(z):null,[z]),E=n(()=>z?$$(z,Q):null,[z,Q]),{data:I,isLoading:L,error:U}=j0({queryKey:["uiConfig",$.pathname+$.search,z],enabled:!!z,queryFn:async()=>{let V=new URLSearchParams($.search);V.set("__pieroot","web");let q="/api/content"+$.pathname+"?"+V.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",q);let _=await H.get(q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(V)=>Math.min(1000*2**V,30000),...W}),K=UJ($.pathname,Z,J);if(!z)return K??null;if(G)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",z),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(U){if(G)console.error("[PieRoot] Error fetching UI configuration:",U),console.error("[PieRoot] Error details:",{message:U.message,status:U.response?.status,data:U.response?.data});return Y?.(U),K}if(L||!I){if(G)console.log("[PieRoot] Loading state:",{isLoading:L,hasUiConfiguration:!!I});return K}if(G)console.log("[PieRoot] UI configuration loaded successfully:",I),console.log("[PieRoot] Rendering UI with configuration");return A(C.Provider,{value:D,children:A(f.Provider,{value:M,children:A(S.Provider,{value:E,children:A(j.Provider,{value:J??A(b0,{}),children:A(G$,{children:A(H$,{children:X?A(w,{uiConfig:I}):A("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:A(w,{uiConfig:I})})})})})})})})},y0=($)=>{let J=n(()=>new R0,[]),Z=$.queryClient??J;return A(b.Provider,{value:$.onNavigate,children:A(c.Provider,{value:$.config,children:A(v.Provider,{value:$.onError,children:A(E0,{client:Z,children:A(k0,{...$})})})})})},x0=y0;import{useMemo as S0}from"react";var f0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],C0=new Set(["telegram:cloud","telegram:secure"]),q$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of f0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},VJ=($,J=!1)=>{let{source:Z,key:Y}=q$($);if(Z==="sid"){let X=O.readSid();if(!X)throw Error("SocketIO isn't initialized properly");return[X]}if(Z==="localStorage"||Z==="sessionStorage")try{let X=O.readWebStorage(Z==="localStorage"?"local":"session",Y);if(X===null){if(J)console.warn(`No ${Z} value found for key ${Y}`);return[]}return[X]}catch(X){if(J)console.warn(`Failed to read ${Z} key ${Y}:`,X);return[]}if(Z==="cookie"){let X=O.readCookie(Y);if(X===null){if(J)console.warn(`No cookie found for key ${Y}`);return[]}return[X]}if(Z==="url"){let X=O.readUrlParams(Y);if(!X.length&&J)console.warn(`No URL query param found for key ${Y}`);return X}if(C0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let W=O.readDomInput(Y);if(W===null){if(J)console.warn(`No input found with name ${Y}`);return[]}return W},v0=($,J,Z)=>{let Y=window.Telegram?.WebApp,W=$==="telegram:cloud"?Y?.CloudStorage:Y?.SecureStorage,X=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!W){if(Z)console.warn(`${X} is not available`);return Promise.resolve([])}return new Promise((z)=>{try{W.getItem(J,(Q,G)=>{if(Q){if(Z)console.warn(`Failed to read ${X} key ${J}:`,Q);z([]);return}if(G==null||G===""){if(Z)console.warn(`No ${X} value found for key ${J}`);z([]);return}z([G])})}catch(Q){if(Z)console.warn(`Failed to read ${X} key ${J}:`,Q);z([])}})},FJ=async($,J=!1)=>{let{source:Z,key:Y}=q$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return v0(Z,Y,J);if((Z==="localStorage"||Z==="sessionStorage")&&O.readWebStorageAsync)try{let W=await O.readWebStorageAsync(Z==="localStorage"?"local":"session",Y);if(W===null){if(J)console.warn(`No ${Z} value found for key ${Y}`);return[]}return[W]}catch(W){if(J)console.warn(`Failed to read ${Z} key ${Y}:`,W);return[]}return VJ($,J)},h0=($,J={},Z=[],Y,W)=>{let X=W?.renderingLogEnabled??!1,z=W?.timeout,Q=W?.retryPolicy,G=Q?.maxRetries??0,H=Q?.baseDelay??1000,D=Q?.retryOn??[502,503,504];if(X)console.log("Registering AJAX: ",Y,J,Z);return async(M={})=>{if(!O.isClient()){if(X)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let E=W?.apiServer;if(!E){if(X)console.warn("AJAX skipped: apiServer is missing");return}if(!Y||!$){if(X)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await C$();let I=new FormData;for(let[K,V]of Object.entries({...J,...M}))I.append(K,V);for(let K of Z){let{key:V}=q$(K);for(let q of await FJ(K,X))I.append(V,q)}let L=E+"api/ajax_content"+Y;$(null);let U;for(let K=0;K<=G;K++){if(K>0){let _=H*2**(K-1);if(X)console.log(`AJAX retry ${K}/${G} after ${_}ms`);await new Promise((B)=>setTimeout(B,_))}let V=z!=null?new AbortController:null,q=V&&setTimeout(()=>V.abort(),z);try{let _=await fetch(L,{method:"POST",body:I,signal:V?.signal});if(q)clearTimeout(q);if(!_.ok&&D.includes(_.status)&&K<G){U=Error(`HTTP ${_.status}`);continue}let P=(_.headers.get("content-type")||"").includes("application/json");if(!!_.body?.getReader&&!P){let r=_.body.getReader(),IJ=new TextDecoder,p="";while(!0){let{done:D$,value:OJ}=await r.read();if(D$)break;p+=IJ.decode(OJ,{stream:!0});let g$=p.split(`
3
+ `);p=g$.pop()??"";for(let MJ of g$){let K$=MJ.trim();if(!K$)continue;try{let AJ=JSON.parse(K$);$([AJ])}catch{if(X)console.warn("Failed to parse streamed line:",K$)}}}if(p.trim())try{let D$=JSON.parse(p);$([D$])}catch{if(X)console.warn("Failed to parse final streamed line:",p)}return{}}else{let r=await _.json();return $(r),r}}catch(_){if(q)clearTimeout(q);if(U=_,K<G)continue;if(X)console.error("AJAX request failed:",_);return $(null),_}}if(X)console.error("AJAX request failed after retries:",U);return $(null),U}},m0=($,J={},Z=[],Y,W)=>{let{apiServer:X,enableRenderingLog:z}=s(),Q=JSON.stringify(J),G=JSON.stringify(Z),H=JSON.stringify(W);return S0(()=>h0($,J,Z,Y,{apiServer:X,renderingLogEnabled:z,timeout:W?.timeout,retryPolicy:W?.retryPolicy}),[$,Q,G,Y,X,z,H])};var g0=()=>{O.submitGlobalForm()};var p0=($,J)=>`${$}${U$}${J}`;export{uJ as usePieEmit,m0 as useAjaxSubmit,RJ as unregisterComponent,B$ as trackLazy,g0 as submitGlobalForm,m as setNativeField,RZ as resetNativeClientSources,y as registry,a as registerPieComponent,wJ as registerMultipleComponents,w$ as readNativeField,FJ as readAjaxKeyAsync,VJ as readAjaxKey,l$ as preloadComponent,yJ as prefetchLazyComponents,p0 as pieName,q$ as parseDepName,EJ as hasComponent,kJ as getRegistrySize,l as getRegistryEntry,R as getNativeClientConfig,d$ as getLazyComponentNames,u as getEmitter,jJ as getComponentMeta,NJ as getAllRegisteredComponents,wZ as configureNativeClientSources,g as clearNativeField,b$ as UnionCard,N as UIRendererContext,m$ as UILoading,w as UI,f as SocketIOContext,j$ as SessionStorageCard,A$ as SequenceCard,x0 as PieRoot,P0 as PieNativeRoot,c as PieConfigContext,F as PieCard,h$ as PieBaseRoot,U$ as PIEBREAK,P$ as OneOfCard,C as MittContext,N$ as IOEventsCard,R$ as HiddenCard,k$ as HTMLEmbedCard,j as FallbackContext,E$ as DeviceStorageCard,S as CentrifugeIOContext,O$ as BoxCard,y$ as AutoRedirectCard,f$ as AjaxGroupCard};
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ var PZ=Object.create;var{getPrototypeOf:wZ,defineProperty:J$,getOwnPropertyNames:VJ,getOwnPropertyDescriptor:RZ}=Object,FJ=Object.prototype.hasOwnProperty;var EZ=($,J,Z)=>{Z=$!=null?PZ(wZ($)):{};let X=J||!$||!$.__esModule?J$(Z,"default",{value:$,enumerable:!0}):Z;for(let W of VJ($))if(!FJ.call(X,W))J$(X,W,{get:()=>$[W],enumerable:!0});return X},UJ=new WeakMap,jZ=($)=>{var J=UJ.get($),Z;if(J)return J;if(J=J$({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")VJ($).map((X)=>!FJ.call(J,X)&&J$(J,X,{get:()=>$[X],enumerable:!(Z=RZ($,X))||Z.enumerable}));return UJ.set($,J),J};var NZ=($,J)=>{for(var Z in J)J$($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(X)=>J[Z]=()=>X})};var F0={};NZ(F0,{usePieEmit:()=>hJ,useAjaxSubmit:()=>VZ,unregisterComponent:()=>PJ,trackLazy:()=>T$,submitGlobalForm:()=>FZ,setNativeField:()=>g,resetNativeClientSources:()=>tJ,registry:()=>b,registerPieComponent:()=>Z$,registerMultipleComponents:()=>LJ,readNativeField:()=>y$,readAjaxKeyAsync:()=>BJ,readAjaxKey:()=>KJ,preloadComponent:()=>WJ,prefetchLazyComponents:()=>NJ,pieName:()=>IZ,parseDepName:()=>K$,hasComponent:()=>wJ,getRegistrySize:()=>jJ,getRegistryEntry:()=>s,getNativeClientConfig:()=>w,getLazyComponentNames:()=>YJ,getEmitter:()=>d,getComponentMeta:()=>RJ,getAllRegisteredComponents:()=>EJ,configureNativeClientSources:()=>aJ,clearNativeField:()=>p,UnionCard:()=>c$,UIRendererContext:()=>k,UILoading:()=>$J,UI:()=>P,SocketIOContext:()=>f,SessionStorageCard:()=>f$,SequenceCard:()=>E$,PieRoot:()=>TZ,PieNativeRoot:()=>HZ,PieConfigContext:()=>u,PieCard:()=>U,PieBaseRoot:()=>e$,PIEBREAK:()=>I$,OneOfCard:()=>N$,MittContext:()=>C,IOEventsCard:()=>v$,HiddenCard:()=>b$,HTMLEmbedCard:()=>m$,FallbackContext:()=>N,DeviceStorageCard:()=>S$,CentrifugeIOContext:()=>S,BoxCard:()=>w$,AutoRedirectCard:()=>g$,AjaxGroupCard:()=>u$});module.exports=jZ(F0);var IJ=require("react"),c=new Map;function OJ($,J){return J.catch(()=>{if(c.get($)===J)c.delete($)}),c.set($,J),J}function T$($,J){return IJ.lazy(()=>{if(c.has(J))return c.get(J);return OJ(J,$().then((Z)=>Z))})}var MJ=async($,J)=>{if(!J)return;if(c.has($))return c.get($);return OJ($,J().then((Z)=>Z))};var XJ=globalThis,T=($,J)=>{let Z=Symbol.for($);if(!(Z in XJ))XJ[Z]=J();return XJ[Z]};var b=T("@swarm.ing/pieui:component-registry",()=>new Map),kZ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=T$(J.loader,$.name),J.isLazy=!0;return J};function Z$($){let J=kZ($);return b.set(J.name,J),J.component}var LJ=($)=>{$.forEach((J)=>Z$(J))},PJ=($)=>{b.delete($)},wJ=($)=>{return b.has($)},RJ=($)=>{return b.get($)?.metadata},s=($)=>{return b.get($)},EJ=()=>{return Array.from(b.keys())},jJ=()=>{return b.size},YJ=()=>Array.from(b.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),WJ=($)=>{let J=b.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return MJ($,J.loader)},AJ=!1,NJ=()=>{if(AJ||typeof window>"u")return;AJ=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=YJ(),Z="requestIdleCallback"in window?(W)=>window.requestIdleCallback(W,{timeout:2000}):(W)=>window.setTimeout(W,300),X=(W)=>{if(W>=J.length)return;Z(()=>{Promise.resolve().then(()=>WJ(J[W])).catch(()=>{}).finally(()=>X(W+1))})};X(0)};var QJ=require("react"),r=require("react-native");var x=require("react");var U$=require("react");var u=T("@swarm.ing/pieui:context:pieConfig",()=>U$.createContext(null)),X$=()=>{let $=U$.useContext(u);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},Y$=()=>{let{apiServer:$}=X$();return $},V$=Y$,F$=()=>{let{centrifugeServer:$}=X$();return $};var h=()=>{let{enableRenderingLog:$}=X$();return $},kJ=h;var I$="__piedemo__";var bJ=require("react"),zJ=require("centrifuge");var yJ=T("@swarm.ing/pieui:centrifuge-cache",()=>new Map),O$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=yJ.get(Z);if(X)return X;async function W(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new zJ.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let Y=new zJ.Centrifuge(J,{getToken:W});return yJ.set(Z,Y),Y},yZ=T("@swarm.ing/pieui:context:centrifuge",()=>bJ.createContext(null)),S=yZ;var SJ=require("socket.io-client"),fJ=require("react");var xJ=T("@swarm.ing/pieui:socket-cache",()=>new Map),M$=($)=>{let J=xJ.get($);if(J)return J;let Z=SJ.io($,{autoConnect:!1,transports:["websocket"]});return xJ.set($,Z),Z},bZ=T("@swarm.ing/pieui:context:socket",()=>fJ.createContext(null)),f=bZ;var CJ=EZ(require("mitt")),o=require("react");function d(){return T("@swarm.ing/pieui:mitt-emitter",()=>CJ.default())}var vJ=T("@swarm.ing/pieui:context:mitt",()=>o.createContext(null));function hJ($){let J=o.useContext(vJ);return o.useCallback((Z,X)=>{(J??d()).emit(`pie${Z}_${$}`,X)},[$,J])}var C=vJ;function mJ($){return $.wasRecovering===!0&&$.recovered===!1}function gJ($){return $.recoverable===!1}var i=require("react/jsx-runtime"),xZ=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:W=!1,useMittSupport:Y=!1,centrifugeChannel:z=void 0,methods:Q=void 0,stored:G=void 0,onResync:H=void 0})=>{let D=kJ(),A=x.useRef(Q);A.current=Q;let y=x.useRef(H);if(y.current=H,D)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:W,mitt:Y,centrifugeChannel:z}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let I=x.useContext(f),E=x.useContext(S),V=x.useContext(C);if(x.useEffect(()=>{if(!I||!X||!A.current||!J.name){if(D&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!I,useSocketioSupport:X,hasMethods:!!A.current,hasDataName:!!J?.name});return}let F=Object.keys(A.current??{}).map((q)=>{let _=`pie${q}_${J.name}`;if(D)console.log(`[PieCard] Socket.IO registering event: ${_}`);let B=(j)=>{A.current?.[q]?.(j)};return I.on(_,B),[_,B]});return()=>{F.forEach(([q,_])=>{if(D)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);I.off(q,_)})}},[I,J.name,X]),x.useEffect(()=>{if(!E||!W||!z||!J.name){if(D&&W)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!E,useCentrifugeSupport:W,hasCentrifugeChannel:!!z,hasMethods:!!A.current,hasDataName:!!J?.name});return}let F=Object.keys(A.current??{}).map((q)=>{let _=`pie${q}_${J.name}_${z}`;if(D)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let B=E.newSubscription(_,{recoverable:!0,positioned:!0});return B.on("publication",(j)=>{if(D)console.log(`[PieCard] Centrifuge received data on ${_}:`,j.data);A.current?.[q]?.(j.data)}),B.on("subscribed",(j)=>{if(gJ(j))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(mJ(j)){if(D)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);y.current?.({channel:_,reason:"gap"})}}),B.subscribe(),B});return()=>{F.forEach((q)=>{if(D)console.log("[PieCard] Centrifuge unsubscribing from channel");q.unsubscribe(),E.removeSubscription(q)})}},[E,z,J.name,W]),x.useEffect(()=>{if(!V||!Y||!J.name){if(D&&Y)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!V,useMittSupport:Y,hasMethods:!!A.current,hasDataName:!!J?.name});return}let K=Object.keys(A.current??{}),F={};return K.forEach((q)=>{let _=`pie${q}_${J.name}`,B=(j)=>{if(D)console.log(`[PieCard] Mitt registering event: ${_}`);A.current?.[q]?.(j)};F[_]=B,V.on(_,B)}),()=>{Object.entries(F).forEach(([q,_])=>{if(D)console.log(`[PieCard] Mitt unregistering event: ${q}`);V.off(q,_)})}},[V,J.name,Y]),D)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return i.jsxs(i.Fragment,{children:[i.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(G)}),Z]});return Z},U=xZ;var W$=require("react");var pJ=require("react");var A$=require("react/jsx-runtime"),SZ=T("@swarm.ing/pieui:context:fallback",()=>pJ.createContext(A$.jsx(A$.Fragment,{}))),N=SZ;var cJ=require("react");var fZ=T("@swarm.ing/pieui:context:lazyError",()=>cJ.createContext(void 0)),m=fZ;var L$=require("react"),uJ=require("react/jsx-runtime"),CZ=2,vZ=400;class n extends L$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<CZ){let J=vZ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return uJ.jsx(L$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var P$=require("react/jsx-runtime");function hZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=W$.useContext(N),X=W$.useContext(m),W=h();if(W)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let Y=s($.card);if(!Y?.component){if(W)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(W)console.log("[UI] Found component in registry:",{name:Y.name,isLazy:Y.isLazy,hasMetadata:!!Y.metadata});let z=Y.component,Q=P$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(Y.isLazy){if(W)console.log("[UI] Rendering lazy component with Suspense:",Y.name);return P$.jsx(n,{name:Y.name,fallback:Y.fallback?P$.jsx(Y.fallback,{}):Z,onError:X,children:Q})}if(W)console.log("[UI] Rendering component directly:",Y.name);return Q}var P=W$.memo(hZ);var dJ=require("react");var mZ=T("@swarm.ing/pieui:context:navigate",()=>dJ.createContext(void 0)),v=mZ;var lJ=require("react");var gZ=T("@swarm.ing/pieui:context:uiRenderer",()=>lJ.createContext(null)),k=gZ;var z$=require("react/jsx-runtime"),pZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),cZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,url:W,sx:Y}=$,z=QJ.useContext(v),Q=QJ.useContext(k)??P,G=()=>{if(!W)return;if(pZ(W))r.Linking.openURL(W).catch(()=>{});else z?.(W)},H=z$.jsx(Q,{setUiAjaxConfiguration:Z,uiConfig:J});return z$.jsx(U,{card:X,data:$,children:W?z$.jsx(r.Pressable,{onPress:G,style:Y,children:H}):z$.jsx(r.View,{style:Y,children:H})})},w$=cZ;var sJ=require("react"),oJ=require("react-native");var R$=require("react/jsx-runtime"),uZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:W}=$,Y=sJ.useContext(k)??P;return R$.jsx(U,{card:X,data:$,children:R$.jsx(oJ.View,{style:W,children:J.map((z,Q)=>R$.jsx(Y,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},E$=uZ;var iJ=require("react"),nJ=require("react-native");var j$=require("react/jsx-runtime"),dZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:W}=$,Y=iJ.useContext(k)??P;return j$.jsx(U,{card:X,data:$,children:j$.jsx(nJ.View,{style:W,children:J.map((z,Q)=>j$.jsx(Y,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},N$=dZ;var Q$=require("react");var k$=new Map,g=($,J)=>{k$.set($,J)},p=($)=>{k$.delete($)},y$=($)=>{return k$.has($)?k$.get($):null};var rJ=require("react/jsx-runtime"),lZ=({data:$})=>{let{name:J,value:Z,useSocketioSupport:X,useCentrifugeSupport:W,useMittSupport:Y,centrifugeChannel:z}=$,[Q,G]=Q$.useState(Z);return Q$.useEffect(()=>{G(Z)},[Z]),Q$.useEffect(()=>{return g(J,[Q]),()=>p(J)},[J,Q]),rJ.jsx(U,{card:"HiddenCard",data:$,useSocketioSupport:X,useCentrifugeSupport:W,useMittSupport:Y,centrifugeChannel:z,methods:{update:({value:H})=>{G(H)}}})},b$=lZ;var G$=require("react");var x$={};function aJ($){x$={...x$,...$}}function w(){return x$}function tJ(){x$={}}var eJ=require("react/jsx-runtime"),sZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:W,useCentrifugeSupport:Y,useMittSupport:z,centrifugeChannel:Q}=$,[G,H]=G$.useState(X);return G$.useEffect(()=>{H(X)},[X]),G$.useEffect(()=>{return w().storage?.setItem?.(Z,G),g(J,[G]),()=>p(J)},[Z,J,G]),eJ.jsx(U,{card:"DeviceStorageCard",data:$,useSocketioSupport:W,useCentrifugeSupport:Y,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:D})=>{H(D)},remove:()=>{w().storage?.removeItem?.(Z),H("")}}})},S$=sZ;var H$=require("react");var $Z=require("react/jsx-runtime"),oZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:W,useCentrifugeSupport:Y,useMittSupport:z,centrifugeChannel:Q}=$,[G,H]=H$.useState(X);return H$.useEffect(()=>{H(X)},[X]),H$.useEffect(()=>{return w().sessionStorage?.setItem?.(Z,G),g(J,[G]),()=>p(J)},[Z,J,G]),$Z.jsx(U,{card:"SessionStorageCard",data:$,useSocketioSupport:W,useCentrifugeSupport:Y,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:D})=>{H(D)},remove:()=>{w().sessionStorage?.removeItem?.(Z),H("")}}})},f$=oZ;var a=require("react"),C$=require("react-native");var JZ=require("react/jsx-runtime"),iZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),nZ=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:W}=$,Y=a.useContext(v),z=a.useRef(Y);z.current=Y;let Q=a.useMemo(()=>{let G=(H)=>{if(!H)return;if(iZ(H))C$.Linking.openURL(H).catch(()=>{});else z.current?.(H)};return{alert:(H)=>C$.Alert.alert(String(H.title??""),String(H.message??"")),log:(H)=>console.log("Log event",H),push:(H)=>console.warn("[IOEventsCard] push notifications are not supported on native",H?.title),redirect:(H)=>G(H.to),reload:(H)=>G(H.to)}},[]);return JZ.jsx(U,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:W,methods:Q})},v$=nZ;var h$=require("react"),ZZ=require("react-native");var GJ=require("react/jsx-runtime"),rZ=($)=>($??"").replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),aZ=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:X,useMittSupport:W,centrifugeChannel:Y}=$,[z,Q]=h$.useState(J);return h$.useEffect(()=>{Q(J)},[J]),GJ.jsx(U,{card:"HTMLEmbedCard",data:$,methods:{update:(G)=>Q(G.value)},useCentrifugeSupport:X,useSocketioSupport:Z,useMittSupport:W,centrifugeChannel:Y,children:GJ.jsx(ZZ.Text,{children:rZ(z)})})},m$=aZ;var _$=require("react"),XZ=require("react-native");var p$=require("react/jsx-runtime"),tZ=({data:$})=>{let{url:J}=$,Z=_$.useContext(v),X=_$.useContext(N);return _$.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))XZ.Linking.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),p$.jsx(p$.Fragment,{children:X})},g$=tZ;var YZ=require("react");var HJ=require("react/jsx-runtime"),eZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X}=$,W=YZ.useContext(k)??P;return HJ.jsx(U,{card:X,data:$,children:J.map((Y,z)=>{return HJ.jsx(W,{uiConfig:Y,setUiAjaxConfiguration:Z},`children-${z}`)})})},c$=eZ;var R=require("react");var _J=require("react/jsx-runtime"),$0=({data:$,content:J})=>{let{useLoader:Z,noReturn:X,returnType:W,useSocketioSupport:Y,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G}=$,H=R.useContext(N),D=R.useContext(k)??P,[A,y]=R.useState(!1),[I,E]=R.useState(null),V=R.useRef(J),K=R.useContext(C),F=R.useCallback((B)=>{if(B===null)y(!0);else if(y(!1),!X)V.current=B;if(!X)E(B)},[X]),q=R.useCallback((B)=>{V.current=B.content,E(B.content)},[]),_=R.useCallback((B)=>{if(B===null)y(!0);else if(y(!1),!X)for(let j of B)K?.emit(j.name,j.data)},[X,K]);if(R.useEffect(()=>{E(J),y(!1)},[J]),!I&&Z)return H;return _J.jsx(U,{card:"AjaxGroupCard",data:$,methods:{changeContent:q},useSocketioSupport:Y,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G,children:_J.jsx(D,{uiConfig:I??V.current,setUiAjaxConfiguration:W==="events"?_:F})})},u$=$0;var J0=[{name:"BoxCard",component:w$},{name:"SequenceCard",component:E$},{name:"OneOfCard",component:N$},{name:"HiddenCard",component:b$},{name:"DeviceStorageCard",component:S$},{name:"SessionStorageCard",component:f$},{name:"IOEventsCard",component:v$},{name:"HTMLEmbedCard",component:m$},{name:"AutoRedirectCard",component:g$},{name:"UnionCard",component:c$},{name:"AjaxGroupCard",component:u$}];for(let $ of J0)Z$($);var t=require("react"),t$=require("@tanstack/react-query");var i$=require("react");var s$=require("react"),d$=new Map,l$=new Map;function o$($,J){let Z=`${$}::${J}`,X=$?d$.get(Z):void 0,[W,Y]=s$.useState(X??null);return s$.useEffect(()=>{if(!$)return;if(d$.has(Z)){Y(d$.get(Z));return}let z=l$.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return d$.set(Z,G),l$.delete(Z),G}).catch((G)=>{throw l$.delete(Z),G}),l$.set(Z,z);let Q=!1;return z.then((G)=>{if(!Q)Y(G)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),W}var Z0=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let Y=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(Y)}catch{return Y}}}return null},X0={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:Z0,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},WZ=X0;var zZ,Y0={isClient(){return!0},readSid(){return zZ},setSid($){zZ=$},readWebStorage($,J){let Z=w(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=w(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let W=$==="local"?Z.storage:Z.sessionStorage;return W?W.getItem(J):null},readCookie($){let J=w();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=w();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=w();return J.getInput?J.getInput($):y$($)},submitGlobalForm(){w().submitForm?.()}},QZ=Y0;var W0=typeof navigator<"u"&&navigator.product==="ReactNative",z0=W0?QZ:WZ,O=z0;var q$=T("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function GZ(){q$.resolve?.()}function qJ(){if(!O.isClient())return Promise.resolve();if(O.readSid()!==void 0)return Promise.resolve();if(!q$.promise)q$.promise=new Promise(($)=>{q$.resolve=()=>{$()}});return q$.promise}var Q0=({children:$})=>{let J=i$.useContext(f),Z=V$(),X=o$(Z,"socketIO"),W=(Y)=>{if(O.isClient())O.setSid(Y.sid),GZ(),console.log(`SocketIO initialized: ${O.readSid()}`)};return i$.useEffect(()=>{if(!J)return;let Y=()=>{console.log("SocketIO connected")},z=(Q)=>{console.log(`SocketIO disconnected: ${Q}`),J.connect()};if(X)J.on("pieinit",W),J.on("connect",Y),J.on("disconnect",z),J.connect();return()=>{if(X)J.off("pieinit",W),J.off("connect",Y),J.off("disconnect",z),J.disconnect()}},[J,X]),$},n$=Q0;var r$=require("react");var G0=({children:$})=>{let J=r$.useContext(S),Z=V$(),X=o$(Z,"centrifuge");return r$.useEffect(()=>{if(!J)return;let W=()=>{console.log("Centrifuge connected")},Y=(z)=>{console.log("Centrifuge disconnected:",z)};if(X)J.on("connected",W),J.on("disconnected",Y),J.connect();return()=>{if(X)J.disconnect()}},[J,X]),$},a$=G0;var L=require("react/jsx-runtime"),H0=({location:$,fallback:J,children:Z,disableGlobalForm:X})=>{let W=Y$(),Y=F$(),z=h(),Q=t.useMemo(()=>d(),[]),G=t.useMemo(()=>W?M$(W):null,[W]),H=t.useMemo(()=>W?O$(W,Y):null,[W,Y]);if(z)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",W),console.log("[PieRoot] CENTRIFUGE_SERVER:",Y),console.log("[PieRoot] Fallback provided:",!!J);return L.jsx(C.Provider,{value:Q,children:L.jsx(f.Provider,{value:G,children:L.jsx(S.Provider,{value:H,children:L.jsx(N.Provider,{value:J??L.jsx(L.Fragment,{}),children:L.jsx(n$,{children:L.jsx(a$,{children:X?Z:L.jsx("form",{id:"piedata_global_form",action:W+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},_0=($)=>{let[J]=t.useState(()=>new t$.QueryClient),Z=$.queryClient??J;return L.jsx(v.Provider,{value:$.onNavigate,children:L.jsx(u.Provider,{value:$.config,children:L.jsx(m.Provider,{value:$.onError,children:L.jsx(t$.QueryClientProvider,{client:Z,children:L.jsx(H0,{...$})})})})})},e$=_0;var _Z=require("react/jsx-runtime"),q0=($)=>{return _Z.jsx(e$,{...$,disableGlobalForm:!0})},HZ=q0;var e=require("react"),$$=require("@tanstack/react-query");var BZ=require("axios-date-transformer");var DJ=require("react");var D$=require("react/jsx-runtime");function qZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=DJ.useContext(N),X=DJ.useContext(m),W=h();if(W)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let Y=s($.card);if(!Y?.component){if(W)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(W)console.log("[UILoading] Found component in registry:",{name:Y.name,isLazy:Y.isLazy,hasMetadata:!!Y.metadata,hasFallback:!!Y.fallback});if(Y.fallback){if(W)console.log("[UILoading] Rendering fallback for:",Y.name);let G=Y.fallback;return D$.jsx(G,{})}if(W)console.log("[UILoading] No fallback, rendering full component:",Y.name);let z=Y.component,Q=D$.jsx(k.Provider,{value:qZ,children:D$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(Y.isLazy)return D$.jsx(n,{name:Y.name,fallback:Z,onError:X,children:Q});return Q}var $J=qZ;var KZ=require("react/jsx-runtime");function DZ($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),W=J[X];if(!W)return Z;return KZ.jsx($J,{uiConfig:W})}var M=require("react/jsx-runtime"),D0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:W,disableGlobalForm:Y})=>{let z=Y$(),Q=F$(),G=h(),H=e.useMemo(()=>BZ.createAxiosDateTransformer({baseURL:z||""}),[z]),D=e.useMemo(()=>d(),[]),A=e.useMemo(()=>z?M$(z):null,[z]),y=e.useMemo(()=>z?O$(z,Q):null,[z,Q]),{data:I,isLoading:E,error:V}=$$.useQuery({queryKey:["uiConfig",$.pathname+$.search,z],enabled:!!z,queryFn:async()=>{let F=new URLSearchParams($.search);F.set("__pieroot","web");let q="/api/content"+$.pathname+"?"+F.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",q);let _=await H.get(q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(F)=>Math.min(1000*2**F,30000),...W}),K=DZ($.pathname,Z,J);if(!z)return K??null;if(G)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",z),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(V){if(G)console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data});return X?.(V),K}if(E||!I){if(G)console.log("[PieRoot] Loading state:",{isLoading:E,hasUiConfiguration:!!I});return K}if(G)console.log("[PieRoot] UI configuration loaded successfully:",I),console.log("[PieRoot] Rendering UI with configuration");return M.jsx(C.Provider,{value:D,children:M.jsx(f.Provider,{value:A,children:M.jsx(S.Provider,{value:y,children:M.jsx(N.Provider,{value:J??M.jsx(M.Fragment,{}),children:M.jsx(n$,{children:M.jsx(a$,{children:Y?M.jsx(P,{uiConfig:I}):M.jsx("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:M.jsx(P,{uiConfig:I})})})})})})})})},K0=($)=>{let J=e.useMemo(()=>new $$.QueryClient,[]),Z=$.queryClient??J;return M.jsx(v.Provider,{value:$.onNavigate,children:M.jsx(u.Provider,{value:$.config,children:M.jsx(m.Provider,{value:$.onError,children:M.jsx($$.QueryClientProvider,{client:Z,children:M.jsx(D0,{...$})})})})})},TZ=K0;var UZ=require("react");var B0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],T0=new Set(["telegram:cloud","telegram:secure"]),K$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of B0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},KJ=($,J=!1)=>{let{source:Z,key:X}=K$($);if(Z==="sid"){let Y=O.readSid();if(!Y)throw Error("SocketIO isn't initialized properly");return[Y]}if(Z==="localStorage"||Z==="sessionStorage")try{let Y=O.readWebStorage(Z==="localStorage"?"local":"session",X);if(Y===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[Y]}catch(Y){if(J)console.warn(`Failed to read ${Z} key ${X}:`,Y);return[]}if(Z==="cookie"){let Y=O.readCookie(X);if(Y===null){if(J)console.warn(`No cookie found for key ${X}`);return[]}return[Y]}if(Z==="url"){let Y=O.readUrlParams(X);if(!Y.length&&J)console.warn(`No URL query param found for key ${X}`);return Y}if(T0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let W=O.readDomInput(X);if(W===null){if(J)console.warn(`No input found with name ${X}`);return[]}return W},U0=($,J,Z)=>{let X=window.Telegram?.WebApp,W=$==="telegram:cloud"?X?.CloudStorage:X?.SecureStorage,Y=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!W){if(Z)console.warn(`${Y} is not available`);return Promise.resolve([])}return new Promise((z)=>{try{W.getItem(J,(Q,G)=>{if(Q){if(Z)console.warn(`Failed to read ${Y} key ${J}:`,Q);z([]);return}if(G==null||G===""){if(Z)console.warn(`No ${Y} value found for key ${J}`);z([]);return}z([G])})}catch(Q){if(Z)console.warn(`Failed to read ${Y} key ${J}:`,Q);z([])}})},BJ=async($,J=!1)=>{let{source:Z,key:X}=K$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return U0(Z,X,J);if((Z==="localStorage"||Z==="sessionStorage")&&O.readWebStorageAsync)try{let W=await O.readWebStorageAsync(Z==="localStorage"?"local":"session",X);if(W===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[W]}catch(W){if(J)console.warn(`Failed to read ${Z} key ${X}:`,W);return[]}return KJ($,J)},V0=($,J={},Z=[],X,W)=>{let Y=W?.renderingLogEnabled??!1,z=W?.timeout,Q=W?.retryPolicy,G=Q?.maxRetries??0,H=Q?.baseDelay??1000,D=Q?.retryOn??[502,503,504];if(Y)console.log("Registering AJAX: ",X,J,Z);return async(A={})=>{if(!O.isClient()){if(Y)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let y=W?.apiServer;if(!y){if(Y)console.warn("AJAX skipped: apiServer is missing");return}if(!X||!$){if(Y)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await qJ();let I=new FormData;for(let[K,F]of Object.entries({...J,...A}))I.append(K,F);for(let K of Z){let{key:F}=K$(K);for(let q of await BJ(K,Y))I.append(F,q)}let E=y+"api/ajax_content"+X;$(null);let V;for(let K=0;K<=G;K++){if(K>0){let _=H*2**(K-1);if(Y)console.log(`AJAX retry ${K}/${G} after ${_}ms`);await new Promise((B)=>setTimeout(B,_))}let F=z!=null?new AbortController:null,q=F&&setTimeout(()=>F.abort(),z);try{let _=await fetch(E,{method:"POST",body:I,signal:F?.signal});if(q)clearTimeout(q);if(!_.ok&&D.includes(_.status)&&K<G){V=Error(`HTTP ${_.status}`);continue}let j=(_.headers.get("content-type")||"").includes("application/json");if(!!_.body?.getReader&&!j){let B$=_.body.getReader(),OZ=new TextDecoder,l="";while(!0){let{done:JJ,value:MZ}=await B$.read();if(JJ)break;l+=OZ.decode(MZ,{stream:!0});let TJ=l.split(`
3
+ `);l=TJ.pop()??"";for(let AZ of TJ){let ZJ=AZ.trim();if(!ZJ)continue;try{let LZ=JSON.parse(ZJ);$([LZ])}catch{if(Y)console.warn("Failed to parse streamed line:",ZJ)}}}if(l.trim())try{let JJ=JSON.parse(l);$([JJ])}catch{if(Y)console.warn("Failed to parse final streamed line:",l)}return{}}else{let B$=await _.json();return $(B$),B$}}catch(_){if(q)clearTimeout(q);if(V=_,K<G)continue;if(Y)console.error("AJAX request failed:",_);return $(null),_}}if(Y)console.error("AJAX request failed after retries:",V);return $(null),V}},VZ=($,J={},Z=[],X,W)=>{let{apiServer:Y,enableRenderingLog:z}=X$(),Q=JSON.stringify(J),G=JSON.stringify(Z),H=JSON.stringify(W);return UZ.useMemo(()=>V0($,J,Z,X,{apiServer:Y,renderingLogEnabled:z,timeout:W?.timeout,retryPolicy:W?.retryPolicy}),[$,Q,G,X,Y,z,H])};var FZ=()=>{O.submitGlobalForm()};var IZ=($,J)=>`${$}${I$}${J}`;
@@ -0,0 +1,4 @@
1
+ import { ClientSources } from './types';
2
+ declare const clientSources: ClientSources;
3
+ export default clientSources;
4
+ //# sourceMappingURL=clientSources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAsBvC,QAAA,MAAM,aAAa,EAAE,aAEC,CAAA;AAEtB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { ClientSources } from './types';
2
+ export declare const nativeClientSources: ClientSources;
3
+ export default nativeClientSources;
4
+ //# sourceMappingURL=clientSources.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.native.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAevC,eAAO,MAAM,mBAAmB,EAAE,aAuCjC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import '../types';
2
+ import { ClientSources } from './types';
3
+ /**
4
+ * Browser/DOM implementation of {@link ClientSources}. Selected at runtime by
5
+ * the `clientSources` resolver on web and during SSR (its methods guard their
6
+ * own `typeof window`/`document` access).
7
+ */
8
+ export declare const webClientSources: ClientSources;
9
+ export default webClientSources;
10
+ //# sourceMappingURL=clientSources.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.web.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.web.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAmBvC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAyC9B,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Host-supplied wiring for the React Native `ClientSources` implementation.
3
+ *
4
+ * The library deliberately depends on no native modules. A React Native host
5
+ * injects its own sources here once at startup (e.g. MMKV for sync storage,
6
+ * the active navigation route for `url:` deps, an in-memory store for form
7
+ * fields). Every field is optional; an unconfigured source degrades to the
8
+ * same "missing value" semantics as the web implementation (`null` / `[]`).
9
+ */
10
+ /**
11
+ * Synchronous key/value store. `getItem` satisfies the synchronous
12
+ * {@link readAjaxKey} contract; the optional writers back the native
13
+ * `DeviceStorageCard` / `SessionStorageCard` so they can persist values
14
+ * (e.g. MMKV's `getString` / `set` / `delete`).
15
+ */
16
+ export interface NativeStorageAdapter {
17
+ getItem(key: string): string | null;
18
+ setItem?(key: string, value: string): void;
19
+ removeItem?(key: string): void;
20
+ }
21
+ /**
22
+ * Asynchronous key/value reader, for stores that are async-only such as
23
+ * `@react-native-async-storage/async-storage`. Used by the `readAjaxKeyAsync`
24
+ * submit path (which already awaits its sources).
25
+ */
26
+ export interface NativeAsyncStorageAdapter {
27
+ getItem(key: string): Promise<string | null>;
28
+ }
29
+ export interface NativeClientConfig {
30
+ /** Backs `localStorage:` dep sources synchronously (e.g. MMKV). */
31
+ storage?: NativeStorageAdapter;
32
+ /** Backs `sessionStorage:` dep sources synchronously. */
33
+ sessionStorage?: NativeStorageAdapter;
34
+ /**
35
+ * Async backing for `localStorage:` deps (e.g. AsyncStorage). Preferred by
36
+ * the async submit path; falls back to {@link storage} when absent.
37
+ */
38
+ asyncStorage?: NativeAsyncStorageAdapter;
39
+ /** Async backing for `sessionStorage:` deps; falls back to {@link sessionStorage}. */
40
+ asyncSessionStorage?: NativeAsyncStorageAdapter;
41
+ /** Backs `cookie:` dep sources. Usually unused on native. */
42
+ getCookie?: (name: string) => string | null;
43
+ /** Backs `url:` dep sources — typically the current route's query params. */
44
+ getRouteParams?: (key: string) => string[];
45
+ /**
46
+ * Backs plain (DOM) dep sources — the host resolves a field name to its
47
+ * current value(s) from whatever form-state store it uses. Return `null`
48
+ * when no field by that name exists (mirrors "element not found").
49
+ */
50
+ getInput?: (name: string) => Array<string | File> | null;
51
+ /** Performs the global submit (there is no HTML form on native). */
52
+ submitForm?: () => void;
53
+ }
54
+ /**
55
+ * Registers (merges) native client sources. Call once at app startup, before
56
+ * any Ajax submit runs. Repeated calls shallow-merge over previous config.
57
+ */
58
+ export declare function configureNativeClientSources(config: NativeClientConfig): void;
59
+ /** Returns the currently registered native client sources. */
60
+ export declare function getNativeClientConfig(): NativeClientConfig;
61
+ /** Test helper: clears all configured native sources back to empty. */
62
+ export declare function resetNativeClientSources(): void;
63
+ //# sourceMappingURL=nativeConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeConfig.d.ts","sourceRoot":"","sources":["../../src/platform/nativeConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1C,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,kBAAkB;IAC/B,mEAAmE;IACnE,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,yDAAyD;IACzD,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC;;;OAGG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAA;IACxC,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,yBAAyB,CAAA;IAC/C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAC3C,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAID;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAE7E;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,kBAAkB,CAE1D;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,12 @@
1
+ /** Registers (replaces) the current value(s) for a field name. */
2
+ export declare const setNativeField: (name: string, values: Array<string | File>) => void;
3
+ /** Removes a field from the store. */
4
+ export declare const clearNativeField: (name: string) => void;
5
+ /**
6
+ * Reads the value(s) registered for a field name, or `null` when no field by
7
+ * that name exists — mirroring "element not found" so the caller can warn.
8
+ */
9
+ export declare const readNativeField: (name: string) => Array<string | File> | null;
10
+ /** Test helper: empties the store. */
11
+ export declare const resetNativeFields: () => void;
12
+ //# sourceMappingURL=nativeFormStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeFormStore.d.ts","sourceRoot":"","sources":["../../src/platform/nativeFormStore.ts"],"names":[],"mappings":"AAYA,kEAAkE;AAClE,eAAO,MAAM,cAAc,GACvB,MAAM,MAAM,EACZ,QAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAC7B,IAEF,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,IAE/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GACxB,MAAM,MAAM,KACb,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAEzB,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The set of client-side capabilities the AJAX/form layer depends on. The web
3
+ * build supplies a DOM-backed implementation; React Native supplies its own.
4
+ * Methods are pure accessors — all logging/warning lives in the callers so the
5
+ * platform layer stays environment-agnostic.
6
+ */
7
+ export interface ClientSources {
8
+ /** True only when client-side APIs are usable (mirrors the SSR guard). */
9
+ isClient(): boolean;
10
+ /** SocketIO session id, or undefined when not yet initialized. */
11
+ readSid(): string | undefined;
12
+ /** Stores the SocketIO session id (web: `window.sid`; native: in-memory). */
13
+ setSid(sid: string): void;
14
+ /**
15
+ * Reads a value from local/session storage. May throw (e.g. blocked in
16
+ * private mode); the caller is responsible for catching.
17
+ */
18
+ readWebStorage(kind: 'local' | 'session', key: string): string | null;
19
+ /**
20
+ * Optional asynchronous storage read. Present only on platforms whose
21
+ * storage is async-only (e.g. React Native AsyncStorage). When defined,
22
+ * `readAjaxKeyAsync` prefers it over the synchronous {@link readWebStorage}
23
+ * for `localStorage:` / `sessionStorage:` deps. May reject; caller catches.
24
+ */
25
+ readWebStorageAsync?(kind: 'local' | 'session', key: string): Promise<string | null>;
26
+ /** Reads and URL-decodes a single cookie; null when absent. */
27
+ readCookie(name: string): string | null;
28
+ /** Reads every value for a repeated URL query param. */
29
+ readUrlParams(key: string): string[];
30
+ /**
31
+ * Reads DOM input(s) by name. Returns `null` when no element has that name
32
+ * (so the caller can warn), the selected `File`s for a file input, the
33
+ * `.value` for other inputs/textareas, or `[]` for an unsupported element.
34
+ */
35
+ readDomInput(name: string): Array<string | File> | null;
36
+ /** Submits the hidden global form (`#piedata_global_form`). No-op if unmounted. */
37
+ submitGlobalForm(): void;
38
+ }
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC1B,0EAA0E;IAC1E,QAAQ,IAAI,OAAO,CAAA;IACnB,kEAAkE;IAClE,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACrE;;;;;OAKG;IACH,mBAAmB,CAAC,CAChB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzB,+DAA+D;IAC/D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACvC,wDAAwD;IACxD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACpC;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACvD,mFAAmF;IACnF,gBAAgB,IAAI,IAAI,CAAA;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SocketIOInitProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SocketIOInitProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAA;AAOxD,QAAA,MAAM,oBAAoB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,cA2ClE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
1
+ {"version":3,"file":"SocketIOInitProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SocketIOInitProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAA;AAQxD,QAAA,MAAM,oBAAoB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,cA2ClE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{useMemo as w}from"react";import{QueryClient as F$,QueryClientProvider as G$,useQuery as Q$}from"@tanstack/react-query";import RU from"mitt";import{createContext as MU,useCallback as b$,useContext as v$}from"react";var h=globalThis,F=(U,$)=>{let H=Symbol.for(U);if(!(H in h))h[H]=$();return h[H]};function i(){return F("@swarm.ing/pieui:mitt-emitter",()=>RU())}var AU=F("@swarm.ing/pieui:context:mitt",()=>MU(null));var k=AU;import{io as EU}from"socket.io-client";import{createContext as NU}from"react";var r=F("@swarm.ing/pieui:socket-cache",()=>new Map),a=(U)=>{let $=r.get(U);if($)return $;let H=EU(U,{autoConnect:!1,transports:["websocket"]});return r.set(U,H),H},PU=F("@swarm.ing/pieui:context:socket",()=>NU(null)),M=PU;import{createContext as jU}from"react";import{Centrifuge as t}from"centrifuge";var e=F("@swarm.ing/pieui:centrifuge-cache",()=>new Map),UU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,B=e.get(H);if(B)return B;async function J(){let Z=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!Z.ok){if(Z.status===401||Z.status===403)throw new t.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${Z.status}`)}return(await Z.json()).token}let I=new t($,{getToken:J});return e.set(H,I),I},wU=F("@swarm.ing/pieui:context:centrifuge",()=>jU(null)),A=wU;import{useContext as vU,useEffect as CU}from"react";import{useEffect as kU,useState as xU}from"react";var x=new Map,f=new Map;function y(U,$){let H=`${U}::${$}`,B=U?x.get(H):void 0,[J,I]=xU(B??null);return kU(()=>{if(!U)return;if(x.has(H)){I(x.get(H));return}let Z=f.get(H);if(!Z)Z=fetch(U+`api/support/${$}`,{method:"GET"}).then((Y)=>Y.json()).then((Y)=>{return x.set(H,Y),f.delete(H),Y}).catch((Y)=>{throw f.delete(H),Y}),f.set(H,Z);let D=!1;return Z.then((Y)=>{if(!D)I(Y)}).catch(()=>{}),()=>{D=!0}},[U,$,H]),J}import{createContext as fU,useContext as yU}from"react";var l=F("@swarm.ing/pieui:context:pieConfig",()=>fU(null)),b=()=>{let U=yU(l);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},p=()=>{let{apiServer:U}=b();return U},v=p,$U=()=>{let{centrifugeServer:U}=b();return U};var R=()=>{let{enableRenderingLog:U}=b();return U},HU=R,IU=()=>{let{pageProcessor:U}=b();return U};var bU=F("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function JU(){bU.resolve?.()}var SU=({children:U})=>{let $=vU(M),H=v(),B=y(H,"socketIO"),J=(I)=>{if(typeof window<"u")window.sid=I.sid,JU(),console.log(`SocketIO initialized: ${window.sid}`)};return CU(()=>{if(!$)return;let I=()=>{console.log("SocketIO connected")},Z=(D)=>{console.log(`SocketIO disconnected: ${D}`),$.connect()};if(B)$.on("pieinit",J),$.on("connect",I),$.on("disconnect",Z),$.connect();return()=>{if(B)$.off("pieinit",J),$.off("connect",I),$.off("disconnect",Z),$.disconnect()}},[$,B]),U},ZU=SU;import{useContext as mU,useEffect as gU}from"react";var cU=({children:U})=>{let $=mU(A),H=v(),B=y(H,"centrifuge");return gU(()=>{if(!$)return;let J=()=>{console.log("Centrifuge connected")},I=(Z)=>{console.log("Centrifuge disconnected:",Z)};if(B)$.on("connected",J),$.on("disconnected",I),$.connect();return()=>{if(B)$.disconnect()}},[$,B]),U},BU=cU;import{createContext as hU}from"react";import{jsx as dU,Fragment as pU}from"react/jsx-runtime";var lU=F("@swarm.ing/pieui:context:fallback",()=>hU(dU(pU,{}))),E=lU;import{createContext as uU}from"react";var oU=F("@swarm.ing/pieui:context:lazyError",()=>uU(void 0)),N=oU;import{lazy as nU}from"react";var j=new Map;function sU(U,$){return $.catch(()=>{if(j.get(U)===$)j.delete(U)}),j.set(U,$),$}function XU(U,$){return nU(()=>{if(j.has($))return j.get($);return sU($,U().then((H)=>H))})}var YU=F("@swarm.ing/pieui:component-registry",()=>new Map),iU=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=XU($.loader,U.name),$.isLazy=!0;return $};function C(U){let $=iU(U);return YU.set($.name,$),$.component}var S=(U)=>{return YU.get(U)};import{useContext as zU,memo as $$}from"react";import{Component as rU,Suspense as aU}from"react";import{jsx as U$}from"react/jsx-runtime";var tU=2,eU=400;class P extends rU{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<tU){let $=eU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return U$(aU,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as d}from"react/jsx-runtime";function H$({uiConfig:U,setUiAjaxConfiguration:$}){let H=zU(E),B=zU(N),J=R();if(J)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let I=S(U.card);if(!I?.component){if(J)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(J)console.log("[UI] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata});let Z=I.component,D=d(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(I.isLazy){if(J)console.log("[UI] Rendering lazy component with Suspense:",I.name);return d(P,{name:I.name,fallback:I.fallback?d(I.fallback,{}):H,onError:B,children:D})}if(J)console.log("[UI] Rendering component directly:",I.name);return D}var u=$$(H$);import{createAxiosDateTransformer as T$}from"axios-date-transformer";import{useEffect as I$,useState as J$}from"react";var m=({onError:U}={})=>{let[$,H]=J$(null),B=IU();return I$(()=>{if(typeof window>"u")return;let J=window.Telegram?.WebApp;if(!J)return;try{J.ready?.()}catch(I){U?.()}if(B==="telegram_expanded"&&(J.platform==="ios"||J.platform==="android"))J.expand();H(J)},[]),$},Z$=()=>{let U=m();return[U?.initDataUnsafe,U?.initData]};import{createContext as B$}from"react";var X$=F("@swarm.ing/pieui:context:navigate",()=>B$(void 0)),DU=X$;import{useContext as GU}from"react";import{createContext as Y$}from"react";var z$=F("@swarm.ing/pieui:context:uiRenderer",()=>Y$(null)),FU=z$;import{jsx as g}from"react/jsx-runtime";function QU({uiConfig:U,setUiAjaxConfiguration:$}){let H=GU(E),B=GU(N),J=R();if(J)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let I=S(U.card);if(!I?.component){if(J)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(J)console.log("[UILoading] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata,hasFallback:!!I.fallback});if(I.fallback){if(J)console.log("[UILoading] Rendering fallback for:",I.name);let Y=I.fallback;return g(Y,{})}if(J)console.log("[UILoading] No fallback, rendering full component:",I.name);let Z=I.component,D=g(FU.Provider,{value:QU,children:g(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(I.isLazy)return g(P,{name:I.name,fallback:H,onError:B,children:D});return D}var TU=QU;import{jsx as D$}from"react/jsx-runtime";function qU(U,$,H){if(!$)return H;let B=U.replace(/^\//,""),J=$[B];if(!J)return H;return D$(TU,{uiConfig:J})}import{jsx as q,Fragment as K$}from"react/jsx-runtime";var q$=({location:U,fallback:$,piecache:H,onError:B,queryOptions:J,disableGlobalForm:I})=>{let Z=p(),D=$U(),Y=R(),G=w(()=>T$({baseURL:Z}),[Z]),X=w(()=>i(),[]),W=w(()=>Z?a(Z):null,[Z]),V=w(()=>Z?UU(Z,D):null,[Z,D]),L=m({onError:B}),{data:K,isLoading:O,error:z}=Q$({queryKey:["uiConfig",U.pathname+U.search,L?.initData],enabled:!!L?.initData,queryFn:async()=>{let T=new URLSearchParams(U.search);if(T.set("__pieroot","telegram"),L?.initData)T.set("initData",L.initData);let _="/api/content"+U.pathname+"?"+T.toString();if(Y)console.log("[PieRoot] Fetching UI configuration from:",_);let s=await G.get(_,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(Y)console.log("[PieRoot] Received UI configuration:",s.data);return s.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(T)=>Math.min(1000*2**T,30000),...J}),Q=qU(U.pathname,H,$);if(!Z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(z&&Y)return console.error("[PieRoot] Error fetching UI configuration:",z),console.error("[PieRoot] Error details:",{message:z.message,status:z.response?.status,data:z.response?.data}),B?.(z),Q;if(O||!K){if(Y)console.log("[PieRoot] Loading state:",{isLoading:O,hasUiConfiguration:!!K});return Q}if(Y)console.log("[PieRoot] UI configuration loaded successfully:",K),console.log("[PieRoot] Rendering UI with configuration");return q(k.Provider,{value:X,children:q(M.Provider,{value:W,children:q(A.Provider,{value:V,children:q(E.Provider,{value:$??q(K$,{}),children:q(ZU,{children:q(BU,{children:I?q(u,{uiConfig:K}):q("form",{id:"piedata_global_form",action:Z+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:q(u,{uiConfig:K})})})})})})})})},L$=(U)=>{let $=w(()=>new F$,[]),H=U.queryClient??$;return q(DU.Provider,{value:U.onNavigate,children:q(l.Provider,{value:U.config,children:q(N.Provider,{value:U.onError,children:q(G$,{client:H,children:q(q$,{...U})})})})})},O$=L$;import{useEffect as LU,useState as A$}from"react";import{useContext as o,useEffect as n,useRef as _$}from"react";import{jsx as R$,jsxs as M$,Fragment as V$}from"react/jsx-runtime";var W$=({card:U,data:$,children:H,useSocketioSupport:B=!1,useCentrifugeSupport:J=!1,useMittSupport:I=!1,centrifugeChannel:Z=void 0,methods:D=void 0,stored:Y=void 0})=>{let G=HU(),X=_$(D);if(X.current=D,G)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:B,centrifuge:J,mitt:I,centrifugeChannel:Z}),console.log("[PieCard] Methods:",D?Object.keys(D):"none"),console.log("[PieCard] Has children:",!!H);let W=o(M),V=o(A),L=o(k);if(n(()=>{if(!W||!B||!X.current||!$.name){if(G&&B)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!W,useSocketioSupport:B,hasMethods:!!X.current,hasDataName:!!$?.name});return}let O=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}`;if(G)console.log(`[PieCard] Socket.IO registering event: ${Q}`);let T=(_)=>{X.current?.[z]?.(_)};return W.on(Q,T),[Q,T]});return()=>{O.forEach(([z,Q])=>{if(G)console.log(`[PieCard] Socket.IO unregistering event: ${z}`);W.off(z,Q)})}},[W,$.name,B]),n(()=>{if(!V||!J||!Z||!$.name){if(G&&J)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!V,useCentrifugeSupport:J,hasCentrifugeChannel:!!Z,hasMethods:!!X.current,hasDataName:!!$?.name});return}let O=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}_${Z}`;if(G)console.log(`[PieCard] Centrifuge subscribing to channel: ${Q}`);let T=V.newSubscription(Q);return T.on("publication",(_)=>{if(G)console.log(`[PieCard] Centrifuge received data on ${Q}:`,_.data);X.current?.[z]?.(_.data)}),T.subscribe(),T});return()=>{O.forEach((z)=>{if(G)console.log("[PieCard] Centrifuge unsubscribing from channel");z.unsubscribe(),V.removeSubscription(z)})}},[V,Z,$.name,J]),n(()=>{if(!L||!I||!$.name){if(G&&I)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!L,useMittSupport:I,hasMethods:!!X.current,hasDataName:!!$?.name});return}let K=Object.keys(X.current??{}),O={};return K.forEach((z)=>{let Q=`pie${z}_${$.name}`,T=(_)=>{if(G)console.log(`[PieCard] Mitt registering event: ${Q}`);X.current?.[z]?.(_)};O[Q]=T,L.on(Q,T)}),()=>{Object.entries(O).forEach(([z,Q])=>{if(G)console.log(`[PieCard] Mitt unregistering event: ${z}`);L.off(z,Q)})}},[L,$.name,I]),G)console.log("[PieCard] Rendering complete, returning children");if(Y!==void 0)return M$(V$,{children:[R$("input",{type:"hidden",name:$.name,value:JSON.stringify(Y)}),H]});return H},c=W$;import{jsx as KU}from"react/jsx-runtime";var E$=({data:U})=>{let{name:$,key:H,value:B,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D}=U,[Y,G]=A$(B);return LU(()=>{G(B)},[B]),LU(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.CloudStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),KU(c,{card:"CloudStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.CloudStorage;if(X)X.removeItem(H);G("")}},children:KU("input",{type:"hidden",id:$,name:$,value:Y})})},OU=E$;var N$=C({name:"CloudStorageCard",component:OU,metadata:{author:"PieData"}});import{useEffect as _U,useState as P$}from"react";import{jsx as WU}from"react/jsx-runtime";var j$=({data:U})=>{let{name:$,key:H,value:B,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D}=U,[Y,G]=P$(B);return _U(()=>{G(B)},[B]),_U(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.SecureStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),WU(c,{card:"SecureStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.SecureStorage;if(X)X.removeItem(H);G("")}},children:WU("input",{type:"hidden",id:$,name:$,value:Y})})},VU=j$;var w$=C({name:"SecureStorageCard",component:VU,metadata:{author:"PieData"}});export{m as useWebApp,Z$ as useInitData,w$ as SecureStorageCard,O$ as PieTelegramRoot,N$ as CloudStorageCard};
2
+ import{useMemo as k}from"react";import{QueryClient as N$,QueryClientProvider as w$,useQuery as x$}from"@tanstack/react-query";import fU from"mitt";import{createContext as yU,useCallback as r$,useContext as a$}from"react";var u=globalThis,Q=(U,$)=>{let H=Symbol.for(U);if(!(H in u))u[H]=$();return u[H]};function t(){return Q("@swarm.ing/pieui:mitt-emitter",()=>fU())}var CU=Q("@swarm.ing/pieui:context:mitt",()=>yU(null));var f=CU;import{io as vU}from"socket.io-client";import{createContext as SU}from"react";var e=Q("@swarm.ing/pieui:socket-cache",()=>new Map),UU=(U)=>{let $=e.get(U);if($)return $;let H=vU(U,{autoConnect:!1,transports:["websocket"]});return e.set(U,H),H},mU=Q("@swarm.ing/pieui:context:socket",()=>SU(null)),R=mU;import{createContext as gU}from"react";import{Centrifuge as $U}from"centrifuge";var HU=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map),IU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,J=HU.get(H);if(J)return J;async function Z(){let X=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!X.ok){if(X.status===401||X.status===403)throw new $U.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${X.status}`)}return(await X.json()).token}let I=new $U($,{getToken:Z});return HU.set(H,I),I},hU=Q("@swarm.ing/pieui:context:centrifuge",()=>gU(null)),P=hU;import{useContext as tU,useEffect as eU}from"react";import{useEffect as pU,useState as dU}from"react";var y=new Map,C=new Map;function v(U,$){let H=`${U}::${$}`,J=U?y.get(H):void 0,[Z,I]=dU(J??null);return pU(()=>{if(!U)return;if(y.has(H)){I(y.get(H));return}let X=C.get(H);if(!X)X=fetch(U+`api/support/${$}`,{method:"GET"}).then((z)=>z.json()).then((z)=>{return y.set(H,z),C.delete(H),z}).catch((z)=>{throw C.delete(H),z}),C.set(H,X);let G=!1;return X.then((z)=>{if(!G)I(z)}).catch(()=>{}),()=>{G=!0}},[U,$,H]),Z}import{createContext as cU,useContext as lU}from"react";var o=Q("@swarm.ing/pieui:context:pieConfig",()=>cU(null)),S=()=>{let U=lU(o);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},s=()=>{let{apiServer:U}=S();return U},m=s,JU=()=>{let{centrifugeServer:U}=S();return U};var A=()=>{let{enableRenderingLog:U}=S();return U},ZU=A,XU=()=>{let{pageProcessor:U}=S();return U};var uU=(U)=>{let $=document.cookie?document.cookie.split(";"):[];for(let H of $){let J=H.indexOf("=");if((J===-1?H:H.slice(0,J)).trim()===U){let I=J===-1?"":H.slice(J+1).trim();try{return decodeURIComponent(I)}catch{return I}}}return null},oU={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid(U){if(typeof window<"u")window.sid=U},readWebStorage(U,$){return(U==="local"?window.localStorage:window.sessionStorage).getItem($)},readCookie:uU,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let $=document.getElementsByName(U);if(!$.length)return null;let H=$[0];if(H instanceof HTMLInputElement){if(H.type==="file"&&H.files)return Array.from(H.files);return[H.value]}if(H instanceof HTMLTextAreaElement)return[H.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},YU=oU;var sU={};function E(){return sU}var zU=new Map;var GU=(U)=>{return zU.has(U)?zU.get(U):null};var BU,nU={isClient(){return!0},readSid(){return BU},setSid(U){BU=U},readWebStorage(U,$){let H=E(),J=U==="local"?H.storage:H.sessionStorage;return J?J.getItem($):null},async readWebStorageAsync(U,$){let H=E(),J=U==="local"?H.asyncStorage:H.asyncSessionStorage;if(J)return J.getItem($);let Z=U==="local"?H.storage:H.sessionStorage;return Z?Z.getItem($):null},readCookie(U){let $=E();return $.getCookie?$.getCookie(U):null},readUrlParams(U){let $=E();return $.getRouteParams?$.getRouteParams(U):[]},readDomInput(U){let $=E();return $.getInput?$.getInput(U):GU(U)},submitGlobalForm(){E().submitForm?.()}},QU=nU;var iU=typeof navigator<"u"&&navigator.product==="ReactNative",rU=iU?QU:YU,g=rU;var aU=Q("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function _U(){aU.resolve?.()}var U$=({children:U})=>{let $=tU(R),H=m(),J=v(H,"socketIO"),Z=(I)=>{if(g.isClient())g.setSid(I.sid),_U(),console.log(`SocketIO initialized: ${g.readSid()}`)};return eU(()=>{if(!$)return;let I=()=>{console.log("SocketIO connected")},X=(G)=>{console.log(`SocketIO disconnected: ${G}`),$.connect()};if(J)$.on("pieinit",Z),$.on("connect",I),$.on("disconnect",X),$.connect();return()=>{if(J)$.off("pieinit",Z),$.off("connect",I),$.off("disconnect",X),$.disconnect()}},[$,J]),U},DU=U$;import{useContext as $$,useEffect as H$}from"react";var I$=({children:U})=>{let $=$$(P),H=m(),J=v(H,"centrifuge");return H$(()=>{if(!$)return;let Z=()=>{console.log("Centrifuge connected")},I=(X)=>{console.log("Centrifuge disconnected:",X)};if(J)$.on("connected",Z),$.on("disconnected",I),$.connect();return()=>{if(J)$.disconnect()}},[$,J]),U},FU=I$;import{createContext as J$}from"react";import{jsx as Y$,Fragment as X$}from"react/jsx-runtime";var Z$=Q("@swarm.ing/pieui:context:fallback",()=>J$(Y$(X$,{}))),j=Z$;import{createContext as z$}from"react";var G$=Q("@swarm.ing/pieui:context:lazyError",()=>z$(void 0)),N=G$;import{lazy as B$}from"react";var x=new Map;function Q$(U,$){return $.catch(()=>{if(x.get(U)===$)x.delete(U)}),x.set(U,$),$}function TU(U,$){return B$(()=>{if(x.has($))return x.get($);return Q$($,U().then((H)=>H))})}var KU=Q("@swarm.ing/pieui:component-registry",()=>new Map),_$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=TU($.loader,U.name),$.isLazy=!0;return $};function h(U){let $=_$(U);return KU.set($.name,$),$.component}var p=(U)=>{return KU.get(U)};import{useContext as LU,memo as q$}from"react";import{Component as D$,Suspense as F$}from"react";import{jsx as L$}from"react/jsx-runtime";var T$=2,K$=400;class w extends D${state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<T$){let $=K$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return L$(F$,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as n}from"react/jsx-runtime";function O$({uiConfig:U,setUiAjaxConfiguration:$}){let H=LU(j),J=LU(N),Z=A();if(Z)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let I=p(U.card);if(!I?.component){if(Z)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(Z)console.log("[UI] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata});let X=I.component,G=n(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(I.isLazy){if(Z)console.log("[UI] Rendering lazy component with Suspense:",I.name);return n(w,{name:I.name,fallback:I.fallback?n(I.fallback,{}):H,onError:J,children:G})}if(Z)console.log("[UI] Rendering component directly:",I.name);return G}var i=q$(O$);import{createAxiosDateTransformer as k$}from"axios-date-transformer";import{useEffect as W$,useState as V$}from"react";var d=({onError:U}={})=>{let[$,H]=V$(null),J=XU();return W$(()=>{if(typeof window>"u")return;let Z=window.Telegram?.WebApp;if(!Z)return;try{Z.ready?.()}catch(I){U?.()}if(J==="telegram_expanded"&&(Z.platform==="ios"||Z.platform==="android"))Z.expand();H(Z)},[]),$},M$=()=>{let U=d();return[U?.initDataUnsafe,U?.initData]};import{createContext as A$}from"react";var E$=Q("@swarm.ing/pieui:context:navigate",()=>A$(void 0)),qU=E$;import{useContext as WU}from"react";import{createContext as R$}from"react";var P$=Q("@swarm.ing/pieui:context:uiRenderer",()=>R$(null)),OU=P$;import{jsx as c}from"react/jsx-runtime";function VU({uiConfig:U,setUiAjaxConfiguration:$}){let H=WU(j),J=WU(N),Z=A();if(Z)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let I=p(U.card);if(!I?.component){if(Z)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(Z)console.log("[UILoading] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata,hasFallback:!!I.fallback});if(I.fallback){if(Z)console.log("[UILoading] Rendering fallback for:",I.name);let z=I.fallback;return c(z,{})}if(Z)console.log("[UILoading] No fallback, rendering full component:",I.name);let X=I.component,G=c(OU.Provider,{value:VU,children:c(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(I.isLazy)return c(w,{name:I.name,fallback:H,onError:J,children:G});return G}var MU=VU;import{jsx as j$}from"react/jsx-runtime";function AU(U,$,H){if(!$)return H;let J=U.replace(/^\//,""),Z=$[J];if(!Z)return H;return j$(MU,{uiConfig:Z})}import{jsx as D,Fragment as y$}from"react/jsx-runtime";var b$=({location:U,fallback:$,piecache:H,onError:J,queryOptions:Z,disableGlobalForm:I})=>{let X=s(),G=JU(),z=A(),K=k(()=>k$({baseURL:X}),[X]),Y=k(()=>t(),[]),F=k(()=>X?UU(X):null,[X]),b=k(()=>X?IU(X,G):null,[X,G]),q=d({onError:J}),{data:L,isLoading:M,error:O}=x$({queryKey:["uiConfig",U.pathname+U.search,q?.initData],enabled:!!q?.initData,queryFn:async()=>{let B=new URLSearchParams(U.search);if(B.set("__pieroot","telegram"),q?.initData)B.set("initData",q.initData);let _="/api/content"+U.pathname+"?"+B.toString();if(z)console.log("[PieRoot] Fetching UI configuration from:",_);let T=await K.get(_,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(z)console.log("[PieRoot] Received UI configuration:",T.data);return T.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(B)=>Math.min(1000*2**B,30000),...Z}),W=AU(U.pathname,H,$);if(!X)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(O&&z)return console.error("[PieRoot] Error fetching UI configuration:",O),console.error("[PieRoot] Error details:",{message:O.message,status:O.response?.status,data:O.response?.data}),J?.(O),W;if(M||!L){if(z)console.log("[PieRoot] Loading state:",{isLoading:M,hasUiConfiguration:!!L});return W}if(z)console.log("[PieRoot] UI configuration loaded successfully:",L),console.log("[PieRoot] Rendering UI with configuration");return D(f.Provider,{value:Y,children:D(R.Provider,{value:F,children:D(P.Provider,{value:b,children:D(j.Provider,{value:$??D(y$,{}),children:D(DU,{children:D(FU,{children:I?D(i,{uiConfig:L}):D("form",{id:"piedata_global_form",action:X+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:D(i,{uiConfig:L})})})})})})})})},f$=(U)=>{let $=k(()=>new N$,[]),H=U.queryClient??$;return D(qU.Provider,{value:U.onNavigate,children:D(o.Provider,{value:U.config,children:D(N.Provider,{value:U.onError,children:D(w$,{client:H,children:D(b$,{...U})})})})})},C$=f$;import{useEffect as jU,useState as h$}from"react";import{useContext as r,useEffect as a,useRef as PU}from"react";function EU(U){return U.wasRecovering===!0&&U.recovered===!1}function RU(U){return U.recoverable===!1}import{jsx as m$,jsxs as g$,Fragment as S$}from"react/jsx-runtime";var v$=({card:U,data:$,children:H,useSocketioSupport:J=!1,useCentrifugeSupport:Z=!1,useMittSupport:I=!1,centrifugeChannel:X=void 0,methods:G=void 0,stored:z=void 0,onResync:K=void 0})=>{let Y=ZU(),F=PU(G);F.current=G;let b=PU(K);if(b.current=K,Y)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:J,centrifuge:Z,mitt:I,centrifugeChannel:X}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!H);let q=r(R),L=r(P),M=r(f);if(a(()=>{if(!q||!J||!F.current||!$.name){if(Y&&J)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!q,useSocketioSupport:J,hasMethods:!!F.current,hasDataName:!!$?.name});return}let W=Object.keys(F.current??{}).map((B)=>{let _=`pie${B}_${$.name}`;if(Y)console.log(`[PieCard] Socket.IO registering event: ${_}`);let T=(V)=>{F.current?.[B]?.(V)};return q.on(_,T),[_,T]});return()=>{W.forEach(([B,_])=>{if(Y)console.log(`[PieCard] Socket.IO unregistering event: ${B}`);q.off(B,_)})}},[q,$.name,J]),a(()=>{if(!L||!Z||!X||!$.name){if(Y&&Z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:Z,hasCentrifugeChannel:!!X,hasMethods:!!F.current,hasDataName:!!$?.name});return}let W=Object.keys(F.current??{}).map((B)=>{let _=`pie${B}_${$.name}_${X}`;if(Y)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let T=L.newSubscription(_,{recoverable:!0,positioned:!0});return T.on("publication",(V)=>{if(Y)console.log(`[PieCard] Centrifuge received data on ${_}:`,V.data);F.current?.[B]?.(V.data)}),T.on("subscribed",(V)=>{if(RU(V))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(EU(V)){if(Y)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);b.current?.({channel:_,reason:"gap"})}}),T.subscribe(),T});return()=>{W.forEach((B)=>{if(Y)console.log("[PieCard] Centrifuge unsubscribing from channel");B.unsubscribe(),L.removeSubscription(B)})}},[L,X,$.name,Z]),a(()=>{if(!M||!I||!$.name){if(Y&&I)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!M,useMittSupport:I,hasMethods:!!F.current,hasDataName:!!$?.name});return}let O=Object.keys(F.current??{}),W={};return O.forEach((B)=>{let _=`pie${B}_${$.name}`,T=(V)=>{if(Y)console.log(`[PieCard] Mitt registering event: ${_}`);F.current?.[B]?.(V)};W[_]=T,M.on(_,T)}),()=>{Object.entries(W).forEach(([B,_])=>{if(Y)console.log(`[PieCard] Mitt unregistering event: ${B}`);M.off(B,_)})}},[M,$.name,I]),Y)console.log("[PieCard] Rendering complete, returning children");if(z!==void 0)return g$(S$,{children:[m$("input",{type:"hidden",name:$.name,value:JSON.stringify(z)}),H]});return H},l=v$;import{jsx as NU}from"react/jsx-runtime";var p$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:X,centrifugeChannel:G}=U,[z,K]=h$(J);return jU(()=>{K(J)},[J]),jU(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.CloudStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),NU(l,{card:"CloudStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:X,centrifugeChannel:G,methods:{update:({value:Y})=>{K(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.CloudStorage;if(Y)Y.removeItem(H);K("")}},children:NU("input",{type:"hidden",id:$,name:$,value:z})})},wU=p$;var d$=h({name:"CloudStorageCard",component:wU,metadata:{author:"PieData"}});import{useEffect as xU,useState as c$}from"react";import{jsx as kU}from"react/jsx-runtime";var l$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:X,centrifugeChannel:G}=U,[z,K]=c$(J);return xU(()=>{K(J)},[J]),xU(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.SecureStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),kU(l,{card:"SecureStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:X,centrifugeChannel:G,methods:{update:({value:Y})=>{K(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.SecureStorage;if(Y)Y.removeItem(H);K("")}},children:kU("input",{type:"hidden",id:$,name:$,value:z})})},bU=l$;var u$=h({name:"SecureStorageCard",component:bU,metadata:{author:"PieData"}});export{d as useWebApp,M$ as useInitData,u$ as SecureStorageCard,C$ as PieTelegramRoot,d$ as CloudStorageCard};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- var aU=Object.create;var{getPrototypeOf:tU,defineProperty:f,getOwnPropertyNames:QU,getOwnPropertyDescriptor:eU}=Object,TU=Object.prototype.hasOwnProperty;var U$=(U,$,H)=>{H=U!=null?aU(tU(U)):{};let J=$||!U||!U.__esModule?f(H,"default",{value:U,enumerable:!0}):H;for(let Z of QU(U))if(!TU.call(J,Z))f(J,Z,{get:()=>U[Z],enumerable:!0});return J},GU=new WeakMap,$$=(U)=>{var $=GU.get(U),H;if($)return $;if($=f({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")QU(U).map((J)=>!TU.call($,J)&&f($,J,{get:()=>U[J],enumerable:!(H=eU(U,J))||H.enumerable}));return GU.set(U,$),$};var H$=(U,$)=>{for(var H in $)f(U,H,{get:$[H],enumerable:!0,configurable:!0,set:(J)=>$[H]=()=>J})};var M$={};H$(M$,{useWebApp:()=>v,useInitData:()=>CU,SecureStorageCard:()=>rU,PieTelegramRoot:()=>oU,CloudStorageCard:()=>sU});module.exports=$$(M$);var w=require("react"),k=require("@tanstack/react-query");var qU=U$(require("mitt")),g=require("react");var IU=globalThis,F=(U,$)=>{let H=Symbol.for(U);if(!(H in IU))IU[H]=$();return IU[H]};function LU(){return F("@swarm.ing/pieui:mitt-emitter",()=>qU.default())}var I$=F("@swarm.ing/pieui:context:mitt",()=>g.createContext(null));var c=I$;var OU=require("socket.io-client"),_U=require("react");var KU=F("@swarm.ing/pieui:socket-cache",()=>new Map),WU=(U)=>{let $=KU.get(U);if($)return $;let H=OU.io(U,{autoConnect:!1,transports:["websocket"]});return KU.set(U,H),H},J$=F("@swarm.ing/pieui:context:socket",()=>_U.createContext(null)),A=J$;var RU=require("react"),JU=require("centrifuge");var VU=F("@swarm.ing/pieui:centrifuge-cache",()=>new Map),MU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,J=VU.get(H);if(J)return J;async function Z(){let B=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!B.ok){if(B.status===401||B.status===403)throw new JU.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${B.status}`)}return(await B.json()).token}let I=new JU.Centrifuge($,{getToken:Z});return VU.set(H,I),I},Z$=F("@swarm.ing/pieui:context:centrifuge",()=>RU.createContext(null)),E=Z$;var s=require("react");var p=require("react"),h=new Map,l=new Map;function d(U,$){let H=`${U}::${$}`,J=U?h.get(H):void 0,[Z,I]=p.useState(J??null);return p.useEffect(()=>{if(!U)return;if(h.has(H)){I(h.get(H));return}let B=l.get(H);if(!B)B=fetch(U+`api/support/${$}`,{method:"GET"}).then((Y)=>Y.json()).then((Y)=>{return h.set(H,Y),l.delete(H),Y}).catch((Y)=>{throw l.delete(H),Y}),l.set(H,B);let D=!1;return B.then((Y)=>{if(!D)I(Y)}).catch(()=>{}),()=>{D=!0}},[U,$,H]),Z}var u=require("react");var ZU=F("@swarm.ing/pieui:context:pieConfig",()=>u.createContext(null)),o=()=>{let U=u.useContext(ZU);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},BU=()=>{let{apiServer:U}=o();return U},n=BU,AU=()=>{let{centrifugeServer:U}=o();return U};var M=()=>{let{enableRenderingLog:U}=o();return U},EU=M,NU=()=>{let{pageProcessor:U}=o();return U};var B$=F("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function PU(){B$.resolve?.()}var X$=({children:U})=>{let $=s.useContext(A),H=n(),J=d(H,"socketIO"),Z=(I)=>{if(typeof window<"u")window.sid=I.sid,PU(),console.log(`SocketIO initialized: ${window.sid}`)};return s.useEffect(()=>{if(!$)return;let I=()=>{console.log("SocketIO connected")},B=(D)=>{console.log(`SocketIO disconnected: ${D}`),$.connect()};if(J)$.on("pieinit",Z),$.on("connect",I),$.on("disconnect",B),$.connect();return()=>{if(J)$.off("pieinit",Z),$.off("connect",I),$.off("disconnect",B),$.disconnect()}},[$,J]),U},jU=X$;var i=require("react");var Y$=({children:U})=>{let $=i.useContext(E),H=n(),J=d(H,"centrifuge");return i.useEffect(()=>{if(!$)return;let Z=()=>{console.log("Centrifuge connected")},I=(B)=>{console.log("Centrifuge disconnected:",B)};if(J)$.on("connected",Z),$.on("disconnected",I),$.connect();return()=>{if(J)$.disconnect()}},[$,J]),U},wU=Y$;var kU=require("react");var r=require("react/jsx-runtime"),z$=F("@swarm.ing/pieui:context:fallback",()=>kU.createContext(r.jsx(r.Fragment,{}))),N=z$;var xU=require("react");var D$=F("@swarm.ing/pieui:context:lazyError",()=>xU.createContext(void 0)),P=D$;var fU=require("react"),y=new Map;function F$(U,$){return $.catch(()=>{if(y.get(U)===$)y.delete(U)}),y.set(U,$),$}function yU(U,$){return fU.lazy(()=>{if(y.has($))return y.get($);return F$($,U().then((H)=>H))})}var bU=F("@swarm.ing/pieui:component-registry",()=>new Map),G$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=yU($.loader,U.name),$.isLazy=!0;return $};function a(U){let $=G$(U);return bU.set($.name,$),$.component}var t=(U)=>{return bU.get(U)};var b=require("react");var e=require("react"),vU=require("react/jsx-runtime"),Q$=2,T$=400;class j extends e.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<Q$){let $=T$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return vU.jsx(e.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var UU=require("react/jsx-runtime");function q$({uiConfig:U,setUiAjaxConfiguration:$}){let H=b.useContext(N),J=b.useContext(P),Z=M();if(Z)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let I=t(U.card);if(!I?.component){if(Z)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(Z)console.log("[UI] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata});let B=I.component,D=UU.jsx(B,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(I.isLazy){if(Z)console.log("[UI] Rendering lazy component with Suspense:",I.name);return UU.jsx(j,{name:I.name,fallback:I.fallback?UU.jsx(I.fallback,{}):H,onError:J,children:D})}if(Z)console.log("[UI] Rendering component directly:",I.name);return D}var XU=b.memo(q$);var uU=require("axios-date-transformer");var $U=require("react");var v=({onError:U}={})=>{let[$,H]=$U.useState(null),J=NU();return $U.useEffect(()=>{if(typeof window>"u")return;let Z=window.Telegram?.WebApp;if(!Z)return;try{Z.ready?.()}catch(I){U?.()}if(J==="telegram_expanded"&&(Z.platform==="ios"||Z.platform==="android"))Z.expand();H(Z)},[]),$},CU=()=>{let U=v();return[U?.initDataUnsafe,U?.initData]};var SU=require("react");var L$=F("@swarm.ing/pieui:context:navigate",()=>SU.createContext(void 0)),mU=L$;var YU=require("react");var gU=require("react");var K$=F("@swarm.ing/pieui:context:uiRenderer",()=>gU.createContext(null)),cU=K$;var C=require("react/jsx-runtime");function hU({uiConfig:U,setUiAjaxConfiguration:$}){let H=YU.useContext(N),J=YU.useContext(P),Z=M();if(Z)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let I=t(U.card);if(!I?.component){if(Z)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(Z)console.log("[UILoading] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata,hasFallback:!!I.fallback});if(I.fallback){if(Z)console.log("[UILoading] Rendering fallback for:",I.name);let Y=I.fallback;return C.jsx(Y,{})}if(Z)console.log("[UILoading] No fallback, rendering full component:",I.name);let B=I.component,D=C.jsx(cU.Provider,{value:hU,children:C.jsx(B,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(I.isLazy)return C.jsx(j,{name:I.name,fallback:H,onError:J,children:D});return D}var lU=hU;var dU=require("react/jsx-runtime");function pU(U,$,H){if(!$)return H;let J=U.replace(/^\//,""),Z=$[J];if(!Z)return H;return dU.jsx(lU,{uiConfig:Z})}var T=require("react/jsx-runtime"),O$=({location:U,fallback:$,piecache:H,onError:J,queryOptions:Z,disableGlobalForm:I})=>{let B=BU(),D=AU(),Y=M(),G=w.useMemo(()=>uU.createAxiosDateTransformer({baseURL:B}),[B]),X=w.useMemo(()=>LU(),[]),V=w.useMemo(()=>B?WU(B):null,[B]),R=w.useMemo(()=>B?MU(B,D):null,[B,D]),L=v({onError:J}),{data:O,isLoading:_,error:z}=k.useQuery({queryKey:["uiConfig",U.pathname+U.search,L?.initData],enabled:!!L?.initData,queryFn:async()=>{let q=new URLSearchParams(U.search);if(q.set("__pieroot","telegram"),L?.initData)q.set("initData",L.initData);let W="/api/content"+U.pathname+"?"+q.toString();if(Y)console.log("[PieRoot] Fetching UI configuration from:",W);let FU=await G.get(W,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(Y)console.log("[PieRoot] Received UI configuration:",FU.data);return FU.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(q)=>Math.min(1000*2**q,30000),...Z}),Q=pU(U.pathname,H,$);if(!B)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(z&&Y)return console.error("[PieRoot] Error fetching UI configuration:",z),console.error("[PieRoot] Error details:",{message:z.message,status:z.response?.status,data:z.response?.data}),J?.(z),Q;if(_||!O){if(Y)console.log("[PieRoot] Loading state:",{isLoading:_,hasUiConfiguration:!!O});return Q}if(Y)console.log("[PieRoot] UI configuration loaded successfully:",O),console.log("[PieRoot] Rendering UI with configuration");return T.jsx(c.Provider,{value:X,children:T.jsx(A.Provider,{value:V,children:T.jsx(E.Provider,{value:R,children:T.jsx(N.Provider,{value:$??T.jsx(T.Fragment,{}),children:T.jsx(jU,{children:T.jsx(wU,{children:I?T.jsx(XU,{uiConfig:O}):T.jsx("form",{id:"piedata_global_form",action:B+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:T.jsx(XU,{uiConfig:O})})})})})})})})},_$=(U)=>{let $=w.useMemo(()=>new k.QueryClient,[]),H=U.queryClient??$;return T.jsx(mU.Provider,{value:U.onNavigate,children:T.jsx(ZU.Provider,{value:U.config,children:T.jsx(P.Provider,{value:U.onError,children:T.jsx(k.QueryClientProvider,{client:H,children:T.jsx(O$,{...U})})})})})},oU=_$;var S=require("react");var K=require("react");var x=require("react/jsx-runtime"),W$=({card:U,data:$,children:H,useSocketioSupport:J=!1,useCentrifugeSupport:Z=!1,useMittSupport:I=!1,centrifugeChannel:B=void 0,methods:D=void 0,stored:Y=void 0})=>{let G=EU(),X=K.useRef(D);if(X.current=D,G)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:J,centrifuge:Z,mitt:I,centrifugeChannel:B}),console.log("[PieCard] Methods:",D?Object.keys(D):"none"),console.log("[PieCard] Has children:",!!H);let V=K.useContext(A),R=K.useContext(E),L=K.useContext(c);if(K.useEffect(()=>{if(!V||!J||!X.current||!$.name){if(G&&J)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:J,hasMethods:!!X.current,hasDataName:!!$?.name});return}let _=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}`;if(G)console.log(`[PieCard] Socket.IO registering event: ${Q}`);let q=(W)=>{X.current?.[z]?.(W)};return V.on(Q,q),[Q,q]});return()=>{_.forEach(([z,Q])=>{if(G)console.log(`[PieCard] Socket.IO unregistering event: ${z}`);V.off(z,Q)})}},[V,$.name,J]),K.useEffect(()=>{if(!R||!Z||!B||!$.name){if(G&&Z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!R,useCentrifugeSupport:Z,hasCentrifugeChannel:!!B,hasMethods:!!X.current,hasDataName:!!$?.name});return}let _=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}_${B}`;if(G)console.log(`[PieCard] Centrifuge subscribing to channel: ${Q}`);let q=R.newSubscription(Q);return q.on("publication",(W)=>{if(G)console.log(`[PieCard] Centrifuge received data on ${Q}:`,W.data);X.current?.[z]?.(W.data)}),q.subscribe(),q});return()=>{_.forEach((z)=>{if(G)console.log("[PieCard] Centrifuge unsubscribing from channel");z.unsubscribe(),R.removeSubscription(z)})}},[R,B,$.name,Z]),K.useEffect(()=>{if(!L||!I||!$.name){if(G&&I)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!L,useMittSupport:I,hasMethods:!!X.current,hasDataName:!!$?.name});return}let O=Object.keys(X.current??{}),_={};return O.forEach((z)=>{let Q=`pie${z}_${$.name}`,q=(W)=>{if(G)console.log(`[PieCard] Mitt registering event: ${Q}`);X.current?.[z]?.(W)};_[Q]=q,L.on(Q,q)}),()=>{Object.entries(_).forEach(([z,Q])=>{if(G)console.log(`[PieCard] Mitt unregistering event: ${z}`);L.off(z,Q)})}},[L,$.name,I]),G)console.log("[PieCard] Rendering complete, returning children");if(Y!==void 0)return x.jsxs(x.Fragment,{children:[x.jsx("input",{type:"hidden",name:$.name,value:JSON.stringify(Y)}),H]});return H},HU=W$;var zU=require("react/jsx-runtime"),V$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:B,centrifugeChannel:D}=U,[Y,G]=S.useState(J);return S.useEffect(()=>{G(J)},[J]),S.useEffect(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.CloudStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),zU.jsx(HU,{card:"CloudStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:B,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.CloudStorage;if(X)X.removeItem(H);G("")}},children:zU.jsx("input",{type:"hidden",id:$,name:$,value:Y})})},nU=V$;var sU=a({name:"CloudStorageCard",component:nU,metadata:{author:"PieData"}});var m=require("react");var DU=require("react/jsx-runtime"),R$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:B,centrifugeChannel:D}=U,[Y,G]=m.useState(J);return m.useEffect(()=>{G(J)},[J]),m.useEffect(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.SecureStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),DU.jsx(HU,{card:"SecureStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:I,useMittSupport:B,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.SecureStorage;if(X)X.removeItem(H);G("")}},children:DU.jsx("input",{type:"hidden",id:$,name:$,value:Y})})},iU=R$;var rU=a({name:"SecureStorageCard",component:iU,metadata:{author:"PieData"}});
2
+ var Y$=Object.create;var{getPrototypeOf:z$,defineProperty:y,getOwnPropertyNames:KU,getOwnPropertyDescriptor:G$}=Object,LU=Object.prototype.hasOwnProperty;var B$=(U,$,H)=>{H=U!=null?Y$(z$(U)):{};let I=$||!U||!U.__esModule?y(H,"default",{value:U,enumerable:!0}):H;for(let Z of KU(U))if(!LU.call(I,Z))y(I,Z,{get:()=>U[Z],enumerable:!0});return I},TU=new WeakMap,Q$=(U)=>{var $=TU.get(U),H;if($)return $;if($=y({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")KU(U).map((I)=>!LU.call($,I)&&y($,I,{get:()=>U[I],enumerable:!(H=G$(U,I))||H.enumerable}));return TU.set(U,$),$};var _$=(U,$)=>{for(var H in $)y(U,H,{get:$[H],enumerable:!0,configurable:!0,set:(I)=>$[H]=()=>I})};var g$={};_$(g$,{useWebApp:()=>S,useInitData:()=>lU,SecureStorageCard:()=>X$,PieTelegramRoot:()=>U$,CloudStorageCard:()=>J$});module.exports=Q$(g$);var k=require("react"),b=require("@tanstack/react-query");var qU=B$(require("mitt")),d=require("react");var YU=globalThis,Q=(U,$)=>{let H=Symbol.for(U);if(!(H in YU))YU[H]=$();return YU[H]};function OU(){return Q("@swarm.ing/pieui:mitt-emitter",()=>qU.default())}var D$=Q("@swarm.ing/pieui:context:mitt",()=>d.createContext(null));var c=D$;var VU=require("socket.io-client"),MU=require("react");var WU=Q("@swarm.ing/pieui:socket-cache",()=>new Map),AU=(U)=>{let $=WU.get(U);if($)return $;let H=VU.io(U,{autoConnect:!1,transports:["websocket"]});return WU.set(U,H),H},F$=Q("@swarm.ing/pieui:context:socket",()=>MU.createContext(null)),P=F$;var RU=require("react"),zU=require("centrifuge");var EU=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map),PU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,I=EU.get(H);if(I)return I;async function Z(){let X=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!X.ok){if(X.status===401||X.status===403)throw new zU.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${X.status}`)}return(await X.json()).token}let J=new zU.Centrifuge($,{getToken:Z});return EU.set(H,J),J},T$=Q("@swarm.ing/pieui:context:centrifuge",()=>RU.createContext(null)),j=T$;var t=require("react");var o=require("react"),l=new Map,u=new Map;function s(U,$){let H=`${U}::${$}`,I=U?l.get(H):void 0,[Z,J]=o.useState(I??null);return o.useEffect(()=>{if(!U)return;if(l.has(H)){J(l.get(H));return}let X=u.get(H);if(!X)X=fetch(U+`api/support/${$}`,{method:"GET"}).then((z)=>z.json()).then((z)=>{return l.set(H,z),u.delete(H),z}).catch((z)=>{throw u.delete(H),z}),u.set(H,X);let G=!1;return X.then((z)=>{if(!G)J(z)}).catch(()=>{}),()=>{G=!0}},[U,$,H]),Z}var n=require("react");var GU=Q("@swarm.ing/pieui:context:pieConfig",()=>n.createContext(null)),i=()=>{let U=n.useContext(GU);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},BU=()=>{let{apiServer:U}=i();return U},r=BU,jU=()=>{let{centrifugeServer:U}=i();return U};var E=()=>{let{enableRenderingLog:U}=i();return U},NU=E,wU=()=>{let{pageProcessor:U}=i();return U};var K$=(U)=>{let $=document.cookie?document.cookie.split(";"):[];for(let H of $){let I=H.indexOf("=");if((I===-1?H:H.slice(0,I)).trim()===U){let J=I===-1?"":H.slice(I+1).trim();try{return decodeURIComponent(J)}catch{return J}}}return null},L$={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid(U){if(typeof window<"u")window.sid=U},readWebStorage(U,$){return(U==="local"?window.localStorage:window.sessionStorage).getItem($)},readCookie:K$,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let $=document.getElementsByName(U);if(!$.length)return null;let H=$[0];if(H instanceof HTMLInputElement){if(H.type==="file"&&H.files)return Array.from(H.files);return[H.value]}if(H instanceof HTMLTextAreaElement)return[H.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},xU=L$;var q$={};function R(){return q$}var kU=new Map;var bU=(U)=>{return kU.has(U)?kU.get(U):null};var fU,O$={isClient(){return!0},readSid(){return fU},setSid(U){fU=U},readWebStorage(U,$){let H=R(),I=U==="local"?H.storage:H.sessionStorage;return I?I.getItem($):null},async readWebStorageAsync(U,$){let H=R(),I=U==="local"?H.asyncStorage:H.asyncSessionStorage;if(I)return I.getItem($);let Z=U==="local"?H.storage:H.sessionStorage;return Z?Z.getItem($):null},readCookie(U){let $=R();return $.getCookie?$.getCookie(U):null},readUrlParams(U){let $=R();return $.getRouteParams?$.getRouteParams(U):[]},readDomInput(U){let $=R();return $.getInput?$.getInput(U):bU(U)},submitGlobalForm(){R().submitForm?.()}},yU=O$;var W$=typeof navigator<"u"&&navigator.product==="ReactNative",V$=W$?yU:xU,a=V$;var M$=Q("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function CU(){M$.resolve?.()}var A$=({children:U})=>{let $=t.useContext(P),H=r(),I=s(H,"socketIO"),Z=(J)=>{if(a.isClient())a.setSid(J.sid),CU(),console.log(`SocketIO initialized: ${a.readSid()}`)};return t.useEffect(()=>{if(!$)return;let J=()=>{console.log("SocketIO connected")},X=(G)=>{console.log(`SocketIO disconnected: ${G}`),$.connect()};if(I)$.on("pieinit",Z),$.on("connect",J),$.on("disconnect",X),$.connect();return()=>{if(I)$.off("pieinit",Z),$.off("connect",J),$.off("disconnect",X),$.disconnect()}},[$,I]),U},vU=A$;var e=require("react");var E$=({children:U})=>{let $=e.useContext(j),H=r(),I=s(H,"centrifuge");return e.useEffect(()=>{if(!$)return;let Z=()=>{console.log("Centrifuge connected")},J=(X)=>{console.log("Centrifuge disconnected:",X)};if(I)$.on("connected",Z),$.on("disconnected",J),$.connect();return()=>{if(I)$.disconnect()}},[$,I]),U},SU=E$;var mU=require("react");var UU=require("react/jsx-runtime"),R$=Q("@swarm.ing/pieui:context:fallback",()=>mU.createContext(UU.jsx(UU.Fragment,{}))),N=R$;var gU=require("react");var P$=Q("@swarm.ing/pieui:context:lazyError",()=>gU.createContext(void 0)),w=P$;var hU=require("react"),C=new Map;function j$(U,$){return $.catch(()=>{if(C.get(U)===$)C.delete(U)}),C.set(U,$),$}function pU(U,$){return hU.lazy(()=>{if(C.has($))return C.get($);return j$($,U().then((H)=>H))})}var dU=Q("@swarm.ing/pieui:component-registry",()=>new Map),N$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=pU($.loader,U.name),$.isLazy=!0;return $};function $U(U){let $=N$(U);return dU.set($.name,$),$.component}var HU=(U)=>{return dU.get(U)};var v=require("react");var IU=require("react"),cU=require("react/jsx-runtime"),w$=2,x$=400;class x extends IU.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<w$){let $=x$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return cU.jsx(IU.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var JU=require("react/jsx-runtime");function k$({uiConfig:U,setUiAjaxConfiguration:$}){let H=v.useContext(N),I=v.useContext(w),Z=E();if(Z)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let J=HU(U.card);if(!J?.component){if(Z)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(Z)console.log("[UI] Found component in registry:",{name:J.name,isLazy:J.isLazy,hasMetadata:!!J.metadata});let X=J.component,G=JU.jsx(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(J.isLazy){if(Z)console.log("[UI] Rendering lazy component with Suspense:",J.name);return JU.jsx(x,{name:J.name,fallback:J.fallback?JU.jsx(J.fallback,{}):H,onError:I,children:G})}if(Z)console.log("[UI] Rendering component directly:",J.name);return G}var QU=v.memo(k$);var eU=require("axios-date-transformer");var ZU=require("react");var S=({onError:U}={})=>{let[$,H]=ZU.useState(null),I=wU();return ZU.useEffect(()=>{if(typeof window>"u")return;let Z=window.Telegram?.WebApp;if(!Z)return;try{Z.ready?.()}catch(J){U?.()}if(I==="telegram_expanded"&&(Z.platform==="ios"||Z.platform==="android"))Z.expand();H(Z)},[]),$},lU=()=>{let U=S();return[U?.initDataUnsafe,U?.initData]};var uU=require("react");var b$=Q("@swarm.ing/pieui:context:navigate",()=>uU.createContext(void 0)),oU=b$;var _U=require("react");var sU=require("react");var f$=Q("@swarm.ing/pieui:context:uiRenderer",()=>sU.createContext(null)),nU=f$;var m=require("react/jsx-runtime");function iU({uiConfig:U,setUiAjaxConfiguration:$}){let H=_U.useContext(N),I=_U.useContext(w),Z=E();if(Z)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let J=HU(U.card);if(!J?.component){if(Z)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(Z)console.log("[UILoading] Found component in registry:",{name:J.name,isLazy:J.isLazy,hasMetadata:!!J.metadata,hasFallback:!!J.fallback});if(J.fallback){if(Z)console.log("[UILoading] Rendering fallback for:",J.name);let z=J.fallback;return m.jsx(z,{})}if(Z)console.log("[UILoading] No fallback, rendering full component:",J.name);let X=J.component,G=m.jsx(nU.Provider,{value:iU,children:m.jsx(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(J.isLazy)return m.jsx(x,{name:J.name,fallback:H,onError:I,children:G});return G}var rU=iU;var tU=require("react/jsx-runtime");function aU(U,$,H){if(!$)return H;let I=U.replace(/^\//,""),Z=$[I];if(!Z)return H;return tU.jsx(rU,{uiConfig:Z})}var D=require("react/jsx-runtime"),y$=({location:U,fallback:$,piecache:H,onError:I,queryOptions:Z,disableGlobalForm:J})=>{let X=BU(),G=jU(),z=E(),K=k.useMemo(()=>eU.createAxiosDateTransformer({baseURL:X}),[X]),Y=k.useMemo(()=>OU(),[]),F=k.useMemo(()=>X?AU(X):null,[X]),p=k.useMemo(()=>X?PU(X,G):null,[X,G]),O=S({onError:I}),{data:L,isLoading:A,error:W}=b.useQuery({queryKey:["uiConfig",U.pathname+U.search,O?.initData],enabled:!!O?.initData,queryFn:async()=>{let B=new URLSearchParams(U.search);if(B.set("__pieroot","telegram"),O?.initData)B.set("initData",O.initData);let _="/api/content"+U.pathname+"?"+B.toString();if(z)console.log("[PieRoot] Fetching UI configuration from:",_);let T=await K.get(_,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(z)console.log("[PieRoot] Received UI configuration:",T.data);return T.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(B)=>Math.min(1000*2**B,30000),...Z}),V=aU(U.pathname,H,$);if(!X)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(W&&z)return console.error("[PieRoot] Error fetching UI configuration:",W),console.error("[PieRoot] Error details:",{message:W.message,status:W.response?.status,data:W.response?.data}),I?.(W),V;if(A||!L){if(z)console.log("[PieRoot] Loading state:",{isLoading:A,hasUiConfiguration:!!L});return V}if(z)console.log("[PieRoot] UI configuration loaded successfully:",L),console.log("[PieRoot] Rendering UI with configuration");return D.jsx(c.Provider,{value:Y,children:D.jsx(P.Provider,{value:F,children:D.jsx(j.Provider,{value:p,children:D.jsx(N.Provider,{value:$??D.jsx(D.Fragment,{}),children:D.jsx(vU,{children:D.jsx(SU,{children:J?D.jsx(QU,{uiConfig:L}):D.jsx("form",{id:"piedata_global_form",action:X+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:D.jsx(QU,{uiConfig:L})})})})})})})})},C$=(U)=>{let $=k.useMemo(()=>new b.QueryClient,[]),H=U.queryClient??$;return D.jsx(oU.Provider,{value:U.onNavigate,children:D.jsx(GU.Provider,{value:U.config,children:D.jsx(w.Provider,{value:U.onError,children:D.jsx(b.QueryClientProvider,{client:H,children:D.jsx(y$,{...U})})})})})},U$=C$;var g=require("react");var q=require("react");function $$(U){return U.wasRecovering===!0&&U.recovered===!1}function H$(U){return U.recoverable===!1}var f=require("react/jsx-runtime"),v$=({card:U,data:$,children:H,useSocketioSupport:I=!1,useCentrifugeSupport:Z=!1,useMittSupport:J=!1,centrifugeChannel:X=void 0,methods:G=void 0,stored:z=void 0,onResync:K=void 0})=>{let Y=NU(),F=q.useRef(G);F.current=G;let p=q.useRef(K);if(p.current=K,Y)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:I,centrifuge:Z,mitt:J,centrifugeChannel:X}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!H);let O=q.useContext(P),L=q.useContext(j),A=q.useContext(c);if(q.useEffect(()=>{if(!O||!I||!F.current||!$.name){if(Y&&I)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!O,useSocketioSupport:I,hasMethods:!!F.current,hasDataName:!!$?.name});return}let V=Object.keys(F.current??{}).map((B)=>{let _=`pie${B}_${$.name}`;if(Y)console.log(`[PieCard] Socket.IO registering event: ${_}`);let T=(M)=>{F.current?.[B]?.(M)};return O.on(_,T),[_,T]});return()=>{V.forEach(([B,_])=>{if(Y)console.log(`[PieCard] Socket.IO unregistering event: ${B}`);O.off(B,_)})}},[O,$.name,I]),q.useEffect(()=>{if(!L||!Z||!X||!$.name){if(Y&&Z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:Z,hasCentrifugeChannel:!!X,hasMethods:!!F.current,hasDataName:!!$?.name});return}let V=Object.keys(F.current??{}).map((B)=>{let _=`pie${B}_${$.name}_${X}`;if(Y)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let T=L.newSubscription(_,{recoverable:!0,positioned:!0});return T.on("publication",(M)=>{if(Y)console.log(`[PieCard] Centrifuge received data on ${_}:`,M.data);F.current?.[B]?.(M.data)}),T.on("subscribed",(M)=>{if(H$(M))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if($$(M)){if(Y)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);p.current?.({channel:_,reason:"gap"})}}),T.subscribe(),T});return()=>{V.forEach((B)=>{if(Y)console.log("[PieCard] Centrifuge unsubscribing from channel");B.unsubscribe(),L.removeSubscription(B)})}},[L,X,$.name,Z]),q.useEffect(()=>{if(!A||!J||!$.name){if(Y&&J)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!A,useMittSupport:J,hasMethods:!!F.current,hasDataName:!!$?.name});return}let W=Object.keys(F.current??{}),V={};return W.forEach((B)=>{let _=`pie${B}_${$.name}`,T=(M)=>{if(Y)console.log(`[PieCard] Mitt registering event: ${_}`);F.current?.[B]?.(M)};V[_]=T,A.on(_,T)}),()=>{Object.entries(V).forEach(([B,_])=>{if(Y)console.log(`[PieCard] Mitt unregistering event: ${B}`);A.off(B,_)})}},[A,$.name,J]),Y)console.log("[PieCard] Rendering complete, returning children");if(z!==void 0)return f.jsxs(f.Fragment,{children:[f.jsx("input",{type:"hidden",name:$.name,value:JSON.stringify(z)}),H]});return H},XU=v$;var DU=require("react/jsx-runtime"),S$=({data:U})=>{let{name:$,key:H,value:I,useSocketioSupport:Z,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:G}=U,[z,K]=g.useState(I);return g.useEffect(()=>{K(I)},[I]),g.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.CloudStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),DU.jsx(XU,{card:"CloudStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:G,methods:{update:({value:Y})=>{K(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.CloudStorage;if(Y)Y.removeItem(H);K("")}},children:DU.jsx("input",{type:"hidden",id:$,name:$,value:z})})},I$=S$;var J$=$U({name:"CloudStorageCard",component:I$,metadata:{author:"PieData"}});var h=require("react");var FU=require("react/jsx-runtime"),m$=({data:U})=>{let{name:$,key:H,value:I,useSocketioSupport:Z,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:G}=U,[z,K]=h.useState(I);return h.useEffect(()=>{K(I)},[I]),h.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.SecureStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),FU.jsx(XU,{card:"SecureStorageCard",data:U,useSocketioSupport:Z,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:G,methods:{update:({value:Y})=>{K(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.SecureStorage;if(Y)Y.removeItem(H);K("")}},children:FU.jsx("input",{type:"hidden",id:$,name:$,value:z})})},Z$=m$;var X$=$U({name:"SecureStorageCard",component:Z$,metadata:{author:"PieData"}});
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=centrifugeRecovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"centrifugeRecovery.test.d.ts","sourceRoot":"","sources":["../../src/tests/centrifugeRecovery.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clientSources.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.test.d.ts","sourceRoot":"","sources":["../../src/tests/clientSources.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Unit tests for the React Native `ClientSources` implementation
3
+ * (`platform/clientSources.native.ts`) and its host wiring
4
+ * (`platform/nativeConfig.ts`).
5
+ *
6
+ * The native implementation pulls no native modules — it reads from sources a
7
+ * host registers via `configureNativeClientSources`, with graceful empty
8
+ * defaults when unconfigured. These tests run in plain bun (no Metro / native
9
+ * runtime) by importing the `.native` module directly.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=clientSourcesNative.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSourcesNative.test.d.ts","sourceRoot":"","sources":["../../src/tests/clientSourcesNative.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=piecardRecovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piecardRecovery.test.d.ts","sourceRoot":"","sources":["../../src/tests/piecardRecovery.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ajaxCommonUtils.d.ts","sourceRoot":"","sources":["../../src/util/ajaxCommonUtils.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,0BAA0B,EAAe,MAAM,UAAU,CAAA;AAKlE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kJAAkJ;IAClJ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GACf,KAAK,GACL,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,KAAK,GACL,gBAAgB,GAChB,iBAAiB,CAAA;AAmBvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GACrB,SAAS,MAAM,KAChB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAWlC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,WAAW,GACpB,SAAS,MAAM,EACf,sBAAqB,OAAe,KACrC,KAAK,CAAC,MAAM,GAAG,IAAI,CA6ErB,CAAA;AA6ED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GACzB,SAAS,MAAM,EACf,sBAAqB,OAAe,KACrC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAM9B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,aAAa,GACtB,yBAAyB,0BAA0B,EACnD,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,YAAW,KAAK,CAAC,MAAM,CAAM,EAC7B,WAAW,MAAM,EACjB,UAAU,oBAAoB,MAahB,cAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBA2KtD,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GACtB,yBAAyB,0BAA0B,EACnD,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,YAAW,KAAK,CAAC,MAAM,CAAM,EAC7B,WAAW,MAAM,EACjB,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,oBAjM9B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBA6NjD,CAAA"}
1
+ {"version":3,"file":"ajaxCommonUtils.d.ts","sourceRoot":"","sources":["../../src/util/ajaxCommonUtils.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,0BAA0B,EAAe,MAAM,UAAU,CAAA;AAMlE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kJAAkJ;IAClJ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GACf,KAAK,GACL,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,KAAK,GACL,gBAAgB,GAChB,iBAAiB,CAAA;AAmBvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GACrB,SAAS,MAAM,KAChB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAWlC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,WAAW,GACpB,SAAS,MAAM,EACf,sBAAqB,OAAe,KACrC,KAAK,CAAC,MAAM,GAAG,IAAI,CAkErB,CAAA;AAwDD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GACzB,SAAS,MAAM,EACf,sBAAqB,OAAe,KACrC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CA6B9B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,aAAa,GACtB,yBAAyB,0BAA0B,EACnD,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,YAAW,KAAK,CAAC,MAAM,CAAM,EAC7B,WAAW,MAAM,EACjB,UAAU,oBAAoB,MAahB,cAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,iBA2KtD,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GACtB,yBAAyB,0BAA0B,EACnD,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,YAAW,KAAK,CAAC,MAAM,CAAM,EAC7B,WAAW,MAAM,EACjB,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,oBAjM9B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBA6NjD,CAAA"}
@@ -10,6 +10,11 @@ import { Centrifuge } from 'centrifuge';
10
10
  * calls with the same arguments always return the same instance — which is
11
11
  * important because `Centrifuge` holds a live WebSocket connection.
12
12
  *
13
+ * Message recovery (exact replay of missed publications on reconnect)
14
+ * requires history retention on the server namespace — see
15
+ * `docs/realtime-recovery.md`. PieCard requests recoverable subscriptions and
16
+ * provides a resync fallback for gaps the history buffer cannot cover.
17
+ *
13
18
  * @param apiServer Base URL of the PieUI API server (must end with `/`).
14
19
  * @param centrifugeServer WebSocket URL of the Centrifuge server. When
15
20
  * omitted, the function returns `null` and the
@@ -1 +1 @@
1
- {"version":3,"file":"centrifuge.d.ts","sourceRoot":"","sources":["../../src/util/centrifuge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQvC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GACtB,WAAW,MAAM,EACjB,mBAAmB,MAAM,KAC1B,UAAU,GAAG,IAgCf,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,4CAGxB,CAAA;AACD,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"centrifuge.d.ts","sourceRoot":"","sources":["../../src/util/centrifuge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,aAAa,GACtB,WAAW,MAAM,EACjB,mBAAmB,MAAM,KAC1B,UAAU,GAAG,IAgCf,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,4CAGxB,CAAA;AACD,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Subset of the Centrifuge `subscribed` event context relevant to message
3
+ * recovery. Mirrors the fields centrifuge-js v5 sets on resubscribe
4
+ * (see `SubscribedContext` in `centrifuge/build/types.d.ts`).
5
+ */
6
+ export interface RecoveryContext {
7
+ /** subscription is recoverable – server has history for this channel. */
8
+ recoverable?: boolean;
9
+ /** true when this `subscribed` followed a recovery attempt (a reconnect). */
10
+ wasRecovering?: boolean;
11
+ /** whether the recovery attempt restored the full missed stream. */
12
+ recovered?: boolean;
13
+ }
14
+ /**
15
+ * Returns true when a resubscribe tried to recover missed publications and
16
+ * failed — i.e. there is a gap the client could not fill, so the consumer
17
+ * must resync full state to avoid staying stale.
18
+ */
19
+ export declare function shouldResync(ctx: RecoveryContext): boolean;
20
+ /**
21
+ * Returns true when the server explicitly reports the channel as
22
+ * non-recoverable. In that case exact replay is impossible (no history
23
+ * configured) and only the resync fallback can prevent event loss.
24
+ */
25
+ export declare function isUnrecoverableChannel(ctx: RecoveryContext): boolean;
26
+ //# sourceMappingURL=centrifugeRecovery.d.ts.map