@swarm.ing/pieui 2.1.5 → 2.1.7

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.
@@ -17,6 +17,6 @@ import { PieCardProps } from './types';
17
17
  * Cleanup runs automatically on unmount or when `data.name`/the support
18
18
  * flags change.
19
19
  */
20
- declare const PieCard: <TStored = unknown>({ card, data, children, useSocketioSupport, useCentrifugeSupport, useMittSupport, centrifugeChannel, methods, stored, }: PieCardProps<TStored>) => string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
20
+ declare const PieCard: <TStored = unknown>({ card, data, children, useSocketioSupport, useCentrifugeSupport, useMittSupport, centrifugeChannel, methods, stored, onResync, }: PieCardProps<TStored>) => string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
21
21
  export default PieCard;
22
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PieCard/index.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,OAAO,GAAI,OAAO,GAAG,OAAO,EAAG,yHAUlC,YAAY,CAAC,OAAO,CAAC,gWAiMvB,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PieCard/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,OAAO,GAAI,OAAO,GAAG,OAAO,EAAG,mIAWlC,YAAY,CAAC,OAAO,CAAC,gWAgPvB,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -63,5 +63,16 @@ export interface PieCardProps<TStored = unknown> {
63
63
  * can be submitted as part of a surrounding form.
64
64
  */
65
65
  stored?: TStored;
66
+ /**
67
+ * Invoked when a Centrifuge subscription reconnects but cannot recover
68
+ * the full stream of missed publications (the disconnect outlived the
69
+ * server history buffer, or the channel has no history). The card should
70
+ * respond by refetching its current state so the UI does not stay stale.
71
+ * `reason` is `'gap'` for a failed recovery. No-op by default.
72
+ */
73
+ onResync?: (info: {
74
+ channel: string;
75
+ reason: 'gap';
76
+ }) => void;
66
77
  }
67
78
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/PieCard/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO;IAC3C,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,IAAI,EAAE,WAAW,CAAA;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAA;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/PieCard/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO;IAC3C,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,IAAI,EAAE,WAAW,CAAA;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAA;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,CAAA;CAChE"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{useContext as p,useEffect as m,useRef as ko}from"react";import{createContext as Ro,useContext as _o}from"react";var j=globalThis,F=(o,U)=>{let I=Symbol.for(o);if(!(I in j))j[I]=U();return j[I]};var Ko=F("@swarm.ing/pieui:context:pieConfig",()=>Ro(null)),Vo=()=>{let o=_o(Ko);if(!o)throw Error("usePieConfig must be used within PieConfigProvider");return o};var M=()=>{let{enableRenderingLog:o}=Vo();return o},n=M;import{createContext as Co}from"react";import{Centrifuge as $f}from"centrifuge";var Gf=F("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var Mo=F("@swarm.ing/pieui:context:centrifuge",()=>Co(null)),s=Mo;import{io as Df}from"socket.io-client";import{createContext as Eo}from"react";var Wf=F("@swarm.ing/pieui:socket-cache",()=>new Map);var No=F("@swarm.ing/pieui:context:socket",()=>Eo(null)),a=No;import Kf from"mitt";import{createContext as yo,useCallback as Mf,useContext as Ef}from"react";var xo=F("@swarm.ing/pieui:context:mitt",()=>yo(null));var N=xo;import{jsx as po,jsxs as mo,Fragment as jo}from"react/jsx-runtime";var bo=({card:o,data:U,children:I,useSocketioSupport:T=!1,useCentrifugeSupport:z=!1,useMittSupport:f=!1,centrifugeChannel:Z=void 0,methods:L=void 0,stored:O=void 0})=>{let H=n(),B=ko(L);if(B.current=L,H)console.log("[PieCard] Rendering card:",o),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:T,centrifuge:z,mitt:f,centrifugeChannel:Z}),console.log("[PieCard] Methods:",L?Object.keys(L):"none"),console.log("[PieCard] Has children:",!!I);let A=p(a),$=p(s),w=p(N);if(m(()=>{if(!A||!T||!B.current||!U.name){if(H&&T)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!A,useSocketioSupport:T,hasMethods:!!B.current,hasDataName:!!U?.name});return}let X=Object.keys(B.current??{}).map((G)=>{let D=`pie${G}_${U.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${D}`);let Y=(_)=>{B.current?.[G]?.(_)};return A.on(D,Y),[D,Y]});return()=>{X.forEach(([G,D])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${G}`);A.off(G,D)})}},[A,U.name,T]),m(()=>{if(!$||!z||!Z||!U.name){if(H&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!$,useCentrifugeSupport:z,hasCentrifugeChannel:!!Z,hasMethods:!!B.current,hasDataName:!!U?.name});return}let X=Object.keys(B.current??{}).map((G)=>{let D=`pie${G}_${U.name}_${Z}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${D}`);let Y=$.newSubscription(D);return Y.on("publication",(_)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${D}:`,_.data);B.current?.[G]?.(_.data)}),Y.subscribe(),Y});return()=>{X.forEach((G)=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");G.unsubscribe(),$.removeSubscription(G)})}},[$,Z,U.name,z]),m(()=>{if(!w||!f||!U.name){if(H&&f)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!w,useMittSupport:f,hasMethods:!!B.current,hasDataName:!!U?.name});return}let P=Object.keys(B.current??{}),X={};return P.forEach((G)=>{let D=`pie${G}_${U.name}`,Y=(_)=>{if(H)console.log(`[PieCard] Mitt registering event: ${D}`);B.current?.[G]?.(_)};X[D]=Y,w.on(D,Y)}),()=>{Object.entries(X).forEach(([G,D])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${G}`);w.off(G,D)})}},[w,U.name,f]),H)console.log("[PieCard] Rendering complete, returning children");if(O!==void 0)return mo(jo,{children:[po("input",{type:"hidden",name:U.name,value:JSON.stringify(O)}),I]});return I},J=bo;import{lazy as So}from"react";var E=new Map;function go(o,U){return U.catch(()=>{if(E.get(o)===U)E.delete(o)}),E.set(o,U),U}function t(o,U){return So(()=>{if(E.has(U))return E.get(U);return go(U,o().then((I)=>I))})}var e=F("@swarm.ing/pieui:component-registry",()=>new Map),vo=(o)=>{if(!o.name)throw Error("Component registration requires a name");if(!o.component&&!o.loader)throw Error(`Component "${o.name}" requires component or loader`);let U={name:o.name,component:o.component,loader:o.loader,metadata:o.metadata,fallback:o.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=t(U.loader,o.name),U.isLazy=!0;return U};function q(o){let U=vo(o);return e.set(U.name,U),U.component}var y=(o)=>{return e.get(o)};import{useContext as oo,memo as oU}from"react";import{createContext as lo}from"react";import{jsx as io,Fragment as ro}from"react/jsx-runtime";var co=F("@swarm.ing/pieui:context:fallback",()=>lo(io(ro,{}))),K=co;import{createContext as uo}from"react";var ho=F("@swarm.ing/pieui:context:lazyError",()=>uo(void 0)),x=ho;import{Component as no,Suspense as so}from"react";import{jsx as eo}from"react/jsx-runtime";var ao=2,to=400;class V extends no{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){if(this.props.onError?.(o),this.state.attempt<ao){let U=to*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((I)=>({failed:!1,attempt:I.attempt+1}))},U)}}componentDidUpdate(o){if(o.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 eo(so,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as S}from"react/jsx-runtime";function UU({uiConfig:o,setUiAjaxConfiguration:U}){let I=oo(K),T=oo(x),z=M();if(z)console.log("[UI] Rendering component:",o.card),console.log("[UI] Component data:",o.data),console.log("[UI] Component content:",o.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let f=y(o.card);if(!f?.component){if(z)console.warn(`[UI] Component not found in registry: ${o.card}`),console.log("[UI] Returning fallback component");return I}if(z)console.log("[UI] Found component in registry:",{name:f.name,isLazy:f.isLazy,hasMetadata:!!f.metadata});let Z=f.component,L=S(Z,{data:o.data,content:o.content,setUiAjaxConfiguration:U});if(f.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",f.name);return S(V,{name:f.name,fallback:f.fallback?S(f.fallback,{}):I,onError:T,children:L})}if(z)console.log("[UI] Rendering component directly:",f.name);return L}var R=oU(UU);import{useContext as Uo}from"react";import{createContext as fU}from"react";var IU=F("@swarm.ing/pieui:context:uiRenderer",()=>fU(null)),W=IU;import{jsx as k}from"react/jsx-runtime";function fo({uiConfig:o,setUiAjaxConfiguration:U}){let I=Uo(K),T=Uo(x),z=M();if(z)console.log("[UILoading] Rendering fallback for:",o.card),console.log("[UILoading] Component data:",o.data),console.log("[UILoading] Component content:",o.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let f=y(o.card);if(!f?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${o.card}`),console.log("[UILoading] Returning fallback component");return I}if(z)console.log("[UILoading] Found component in registry:",{name:f.name,isLazy:f.isLazy,hasMetadata:!!f.metadata,hasFallback:!!f.fallback});if(f.fallback){if(z)console.log("[UILoading] Rendering fallback for:",f.name);let O=f.fallback;return k(O,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",f.name);let Z=f.component,L=k(W.Provider,{value:fo,children:k(Z,{data:o.data,content:o.content,setUiAjaxConfiguration:U})});if(f.isLazy)return k(V,{name:f.name,fallback:I,onError:T,children:L});return L}var TU=fo;import{useContext as zU}from"react";import{jsx as g}from"react/jsx-runtime";var HU=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,sx:z}=o,f=zU(W)??R;return g(J,{card:T,data:o,children:g("div",{style:z,id:T,children:U.map((Z,L)=>{return g(f,{uiConfig:Z,setUiAjaxConfiguration:I},`children-${L}`)})})})},Io=HU;var ZU=q({name:"SequenceCard",component:Io,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as LU}from"react";import{jsx as To}from"react/jsx-runtime";var PU=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T}=o,z=LU(W)??R;return To(J,{card:T,data:o,children:U.map((f,Z)=>{return To(z,{uiConfig:f,setUiAjaxConfiguration:I},`children-${Z}`)})})},zo=PU;var OU=q({name:"UnionCard",component:zo,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as $U,useState as qU}from"react";import GU from"html-react-parser";import{useCallback as b,useEffect as wU,useRef as v,useState as AU}from"react";function BU(){let o=new AudioContext,U=o.createOscillator(),I=U.connect(o.createMediaStreamDestination());U.start();let T=I.stream.getAudioTracks()[0];return T.enabled=!1,T}function l(o=null,U){let[I,T]=AU(!1),z=v(null),f=v(null),Z=v(null),L=b(async(A,$=!0)=>{if(z.current)O();let w=new RTCPeerConnection;if(w.onconnectionstatechange=()=>{if(w.connectionState==="connected")T(!0);else if(["disconnected","failed","closed"].includes(w.connectionState))T(!1)},w.ontrack=(Q)=>{if(o)o.srcObject=Q.streams[0]},$){let Q=await navigator.mediaDevices.getUserMedia({audio:!0});w.addTrack(Q.getTracks()[0],Q)}else{let Q=BU();w.addTrack(Q)}let P=w.createDataChannel("oai-events");f.current=P,Z.current=new Promise((Q)=>{P.addEventListener("open",()=>{Q()})});let X=await w.createOffer();await w.setLocalDescription(X);let _=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:X.sdp,headers:{Authorization:`Bearer ${A}`,"Content-Type":"application/sdp"}})).text();await w.setRemoteDescription({type:"answer",sdp:_}),z.current=w,await Z.current},[o]),O=b(()=>{let A=f.current;if(A)A.close();z.current?.getSenders()?.forEach(($)=>$.track?.stop()),z.current?.close(),T(!1),z.current=null,f.current=null,Z.current=null},[o]),H=b((A)=>{let $=f.current;if(!$){console.error("Data channel is not ready",A);return}let w=new Date().toLocaleTimeString();if(A.event_id=A.event_id||crypto.randomUUID(),$.send(JSON.stringify(A)),!A.timestamp)A.timestamp=w;U?.(A)},[U,o]),B=b((A)=>{if(!f.current){console.error("Data channel is not ready");return}let w=()=>{H({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:A}]}}),H({type:"response.create"})};if(Z.current)Z.current.then(w);else w()},[U,o]);return wU(()=>{let A=f.current;if(!A)return;let $=(w)=>{let P=JSON.parse(w.data);if(!P.timestamp)P.timestamp=new Date().toLocaleTimeString();U?.(P)};return A.addEventListener("message",$),()=>{A.removeEventListener("message",$)}},[U,o]),{isSessionActive:I,startSession:L,stopSession:O,sendTextMessage:B}}import{jsx as FU}from"react/jsx-runtime";var JU=({data:o})=>{let{html:U,useSocketioSupport:I,useCentrifugeSupport:T,useMittSupport:z,centrifugeChannel:f}=o,[Z,L]=qU(U),{isSessionActive:O,startSession:H,sendTextMessage:B}=l(null,(P)=>{if(console.log(P.type,P.type==="response.output_text.delta"&&P.delta),P.type==="response.output_text.delta"&&P.delta)L((X)=>X+P.delta)});return $U(()=>{L(U)},[U]),FU(J,{card:"HTMLEmbedCard",data:o,methods:{update:(P)=>{L(P.value)},generateUsingAI:async(P)=>{try{if(!O&&P.token)await H(P.token,!1);B(P.prompt)}catch(X){console.error("Failed to generate using AI",X)}},initializeAI:async(P)=>{if(!O&&P.token)await H(P.token,!1)}},useCentrifugeSupport:T,useSocketioSupport:I,useMittSupport:z,centrifugeChannel:f,children:GU(Z)})},Ho=JU;var DU=q({name:"HTMLEmbedCard",component:Ho,metadata:{author:"Swarm.ing"}});import{useEffect as QU,useState as XU}from"react";import{jsx as Zo}from"react/jsx-runtime";var YU=({data:o})=>{let{name:U,value:I,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:f,centrifugeChannel:Z}=o,[L,O]=XU(I);return QU(()=>{O(I)},[I]),Zo(J,{card:"HiddenCard",data:o,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:f,centrifugeChannel:Z,methods:{update:({value:H})=>{O(H)}},children:Zo("input",{type:"hidden",id:U,name:U,value:L})})},Lo=YU;var WU=q({name:"HiddenCard",component:Lo,metadata:{author:"Swarm.ing"}});import{useContext as Po,useEffect as KU}from"react";import{createContext as RU}from"react";var _U=F("@swarm.ing/pieui:context:navigate",()=>RU(void 0)),C=_U;import{jsx as MU,Fragment as CU}from"react/jsx-runtime";var VU=({data:o})=>{let{url:U}=o,I=Po(C),T=Po(K);return KU(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else I?.(U)},[U,I]),MU(CU,{children:T})},Oo=VU;var EU=q({name:"AutoRedirectCard",component:Oo,metadata:{author:"Swarm.ing"}});import{Bounce as NU,Slide as yU,Zoom as xU,Flip as kU}from"react-toastify";import{toast as bU,ToastContainer as jU}from"react-toastify";import{useContext as pU,useMemo as mU,useRef as SU}from"react";import{jsx as c,Fragment as dU}from"react/jsx-runtime";var gU={bounce:NU,slide:yU,zoom:xU,flip:kU},vU=(o)=>{let U={...o,type:o.alertType,transition:o.transition?gU[o.transition]:void 0,position:o.position??"bottom-right",autoClose:o.autoClose??3000,style:{backgroundColor:"black",...o.sx}};bU(o.message,U)},lU=(o)=>{console.log("Log event",o)},cU=(o)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(o.title,{body:o.message??o.subtitle,icon:o.icon,silent:o.silent})}catch(T){console.error("[IOEventsCard] Failed to show notification",T)}},I=window.Notification.permission;if(I==="granted"){U();return}if(I==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((T)=>{if(T==="granted")U()})},rU=({data:o})=>{let{useCentrifugeSupport:U,useSocketioSupport:I,useMittSupport:T,centrifugeChannel:z}=o,f=pU(C),Z=SU(f);Z.current=f;let L=mU(()=>({alert:vU,log:lU,push:cU,redirect:(O)=>{if(O.to){let H=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()},reload:(O)=>{if(O.to){let H=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()}}),[]);return c(dU,{children:c(J,{card:"IOEventsCard",data:o,useCentrifugeSupport:U,useSocketioSupport:I,useMittSupport:T,centrifugeChannel:z,methods:L,children:c(jU,{})})})},wo=rU;var iU=q({name:"IOEventsCard",component:wo,metadata:{author:"Swarm.ing"}});import{useEffect as Ao,useState as uU}from"react";import{jsx as Bo}from"react/jsx-runtime";var hU=({data:o})=>{let{name:U,key:I,value:T,useSocketioSupport:z,useCentrifugeSupport:f,useMittSupport:Z,centrifugeChannel:L}=o,[O,H]=uU(T);return Ao(()=>{H(T)},[T]),Ao(()=>{if(typeof window>"u")return;sessionStorage.setItem(I,O)},[I,O]),Bo(J,{card:"SessionStorageCard",data:o,useSocketioSupport:z,useCentrifugeSupport:f,useMittSupport:Z,centrifugeChannel:L,methods:{update:({value:B})=>{H(B)},remove:()=>{sessionStorage.removeItem(I),H("")}},children:Bo("input",{type:"hidden",id:U,name:U,value:O})})},$o=hU;var nU=q({name:"SessionStorageCard",component:$o,metadata:{author:"PieData"}});import{useEffect as qo,useState as sU}from"react";import{jsx as Go}from"react/jsx-runtime";var aU=({data:o})=>{let{name:U,key:I,value:T,useSocketioSupport:z,useCentrifugeSupport:f,useMittSupport:Z,centrifugeChannel:L}=o,[O,H]=sU(T);return qo(()=>{H(T)},[T]),qo(()=>{if(typeof window>"u")return;localStorage.setItem(I,O)},[I,O]),Go(J,{card:"DeviceStorageCard",data:o,useSocketioSupport:z,useCentrifugeSupport:f,useMittSupport:Z,centrifugeChannel:L,methods:{update:({value:B})=>{H(B)},remove:()=>{localStorage.removeItem(I),H("")}},children:Go("input",{type:"hidden",id:U,name:U,value:O})})},Jo=aU;var tU=q({name:"DeviceStorageCard",component:Jo,metadata:{author:"PieData"}});import{useCallback as r,useContext as d,useEffect as eU,useRef as of,useState as Fo}from"react";import{jsx as Do}from"react/jsx-runtime";var Uf=({data:o,content:U})=>{let{useLoader:I,noReturn:T,returnType:z,useSocketioSupport:f,useCentrifugeSupport:Z,useMittSupport:L,centrifugeChannel:O}=o,H=d(K),B=d(W)??R,[A,$]=Fo(!1),[w,P]=Fo(null),X=of(U),G=d(N),D=r((Q)=>{if(Q===null)$(!0);else if($(!1),!T)X.current=Q;if(!T)P(Q)},[T]),Y=r((Q)=>{X.current=Q.content,P(Q.content)},[]),_=r((Q)=>{if(Q===null)$(!0);else if($(!1),!T)for(let h of Q)G?.emit(h.name,h.data)},[T,G]);if(eU(()=>{P(U),$(!1)},[U]),!w&&I)return H;return Do(J,{card:"AjaxGroupCard",data:o,methods:{changeContent:Y},useSocketioSupport:f,useCentrifugeSupport:Z,useMittSupport:L,centrifugeChannel:O,children:Do(B,{uiConfig:w??X.current,setUiAjaxConfiguration:z==="events"?_:D})})},Qo=Uf;var ff=q({name:"AjaxGroupCard",component:Qo,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as Xo}from"react";import{jsx as i}from"react/jsx-runtime";var If=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,url:z,sx:f}=o,Z=Xo(C),L=Xo(W)??R;return i(J,{card:T,data:o,children:i("div",{style:f,id:T,onClick:(H)=>{if(z)if(H.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else Z?.(z)},children:i(L,{setUiAjaxConfiguration:I,uiConfig:U})})})},Yo=If;var Tf=q({name:"BoxCard",component:Yo,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as zf}from"react";import{jsx as u}from"react/jsx-runtime";var Hf=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,sx:z}=o,f=zf(W)??R;return u(J,{card:T,data:o,children:u("div",{style:z,id:T,children:U.map((Z,L)=>{return u(f,{uiConfig:Z,setUiAjaxConfiguration:I},`children-${L}`)})})})},Wo=Hf;var Zf=q({name:"OneOfCard",component:Wo,metadata:{author:"Swarm.ing",description:"Different variants"}});export{OU as UnionCard,TU as UILoading,R as UI,nU as SessionStorageCard,ZU as SequenceCard,J as PieCard,Zf as OneOfCard,iU as IOEventsCard,WU as HiddenCard,DU as HTMLEmbedCard,tU as DeviceStorageCard,Tf as BoxCard,EU as AutoRedirectCard,ff as AjaxGroupCard};
2
+ import{useContext as S,useEffect as g,useRef as TU}from"react";import{createContext as NU,useContext as kU}from"react";var b=globalThis,X=(U,f)=>{let T=Symbol.for(U);if(!(T in b))b[T]=f();return b[T]};var yU=X("@swarm.ing/pieui:context:pieConfig",()=>NU(null)),jU=()=>{let U=kU(yU);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U};var N=()=>{let{enableRenderingLog:U}=jU();return U},t=N;import{createContext as mU}from"react";import{Centrifuge as XI}from"centrifuge";var YI=X("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var pU=X("@swarm.ing/pieui:context:centrifuge",()=>mU(null)),e=pU;import{io as KI}from"socket.io-client";import{createContext as xU}from"react";var RI=X("@swarm.ing/pieui:socket-cache",()=>new Map);var bU=X("@swarm.ing/pieui:context:socket",()=>xU(null)),UU=bU;import kI from"mitt";import{createContext as SU,useCallback as mI,useContext as pI}from"react";var gU=X("@swarm.ing/pieui:context:mitt",()=>SU(null));var y=gU;function fU(U){return U.wasRecovering===!0&&U.recovered===!1}function IU(U){return U.recoverable===!1}function oU(U,f,T){let o=U.getSubscription(f);if(o)return{subscription:o,createdHere:!1};return{subscription:U.newSubscription(f,T),createdHere:!0}}import{jsx as dU,jsxs as rU,Fragment as lU}from"react/jsx-runtime";var vU=({card:U,data:f,children:T,useSocketioSupport:o=!1,useCentrifugeSupport:z=!1,useMittSupport:I=!1,centrifugeChannel:Z=void 0,methods:O=void 0,stored:B=void 0,onResync:H=void 0})=>{let q=t(),P=TU(O);P.current=O;let Q=TU(H);if(Q.current=H,q)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",f),console.log("[PieCard] Component name:",f?.name),console.log("[PieCard] Real-time support:",{socketio:o,centrifuge:z,mitt:I,centrifugeChannel:Z}),console.log("[PieCard] Methods:",O?Object.keys(O):"none"),console.log("[PieCard] Has children:",!!T);let $=S(UU),L=S(e),w=S(y);if(g(()=>{if(!$||!o||!P.current||!f.name){if(q&&o)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!$,useSocketioSupport:o,hasMethods:!!P.current,hasDataName:!!f?.name});return}let K=Object.keys(P.current??{}).map((J)=>{let G=`pie${J}_${f.name}`;if(q)console.log(`[PieCard] Socket.IO registering event: ${G}`);let A=(_)=>{P.current?.[J]?.(_)};return $.on(G,A),[G,A]});return()=>{K.forEach(([J,G])=>{if(q)console.log(`[PieCard] Socket.IO unregistering event: ${J}`);$.off(J,G)})}},[$,f.name,o]),g(()=>{if(!L||!z||!Z||!f.name){if(q&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:z,hasCentrifugeChannel:!!Z,hasMethods:!!P.current,hasDataName:!!f?.name});return}let K=Object.keys(P.current??{}).map((J)=>{let G=`pie${J}_${f.name}_${Z}`;if(q)console.log(`[PieCard] Centrifuge subscribing to channel: ${G}`);let{subscription:A,createdHere:_}=oU(L,G,{recoverable:!0,positioned:!0}),s=(E)=>{if(q)console.log(`[PieCard] Centrifuge received data on ${G}:`,E.data);P.current?.[J]?.(E.data)},a=(E)=>{if(IU(E))console.warn(`[PieCard] Centrifuge channel ${G} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(fU(E)){if(q)console.log(`[PieCard] Centrifuge recovery gap on ${G}; requesting resync`);Q.current?.({channel:G,reason:"gap"})}};return A.on("publication",s),A.on("subscribed",a),A.subscribe(),{subscription:A,createdHere:_,onPublication:s,onSubscribed:a}});return()=>{K.forEach(({subscription:J,createdHere:G,onPublication:A,onSubscribed:_})=>{if(q)console.log("[PieCard] Centrifuge unsubscribing from channel");if(J.off("publication",A),J.off("subscribed",_),G)J.unsubscribe(),L.removeSubscription(J)})}},[L,Z,f.name,z]),g(()=>{if(!w||!I||!f.name){if(q&&I)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!w,useMittSupport:I,hasMethods:!!P.current,hasDataName:!!f?.name});return}let V=Object.keys(P.current??{}),K={};return V.forEach((J)=>{let G=`pie${J}_${f.name}`,A=(_)=>{if(q)console.log(`[PieCard] Mitt registering event: ${G}`);P.current?.[J]?.(_)};K[G]=A,w.on(G,A)}),()=>{Object.entries(K).forEach(([J,G])=>{if(q)console.log(`[PieCard] Mitt unregistering event: ${J}`);w.off(J,G)})}},[w,f.name,I]),q)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0)return rU(lU,{children:[dU("input",{type:"hidden",name:f.name,value:JSON.stringify(B)}),T]});return T},D=vU;import{lazy as uU}from"react";var k=new Map;function cU(U,f){return f.catch(()=>{if(k.get(U)===f)k.delete(U)}),k.set(U,f),f}function zU(U,f){return uU(()=>{if(k.has(f))return k.get(f);return cU(f,U().then((T)=>T))})}var ZU=X("@swarm.ing/pieui:component-registry",()=>new Map),hU=(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 f={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!f.component&&f.loader)f.component=zU(f.loader,U.name),f.isLazy=!0;return f};function F(U){let f=hU(U);return ZU.set(f.name,f),f.component}var j=(U)=>{return ZU.get(U)};import{useContext as LU,memo as zf}from"react";import{createContext as iU}from"react";import{jsx as aU,Fragment as sU}from"react/jsx-runtime";var nU=X("@swarm.ing/pieui:context:fallback",()=>iU(aU(sU,{}))),C=nU;import{createContext as tU}from"react";var eU=X("@swarm.ing/pieui:context:lazyError",()=>tU(void 0)),m=eU;import{Component as Uf,Suspense as ff}from"react";import{jsx as Tf}from"react/jsx-runtime";var If=2,of=400;class M extends Uf{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<If){let f=of*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((T)=>({failed:!1,attempt:T.attempt+1}))},f)}}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 Tf(ff,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as v}from"react/jsx-runtime";function Zf({uiConfig:U,setUiAjaxConfiguration:f}){let T=LU(C),o=LU(m),z=N();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:",!!f);let I=j(U.card);if(!I?.component){if(z)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return T}if(z)console.log("[UI] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata});let Z=I.component,O=v(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:f});if(I.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",I.name);return v(M,{name:I.name,fallback:I.fallback?v(I.fallback,{}):T,onError:o,children:O})}if(z)console.log("[UI] Rendering component directly:",I.name);return O}var W=zf(Zf);import{useContext as OU}from"react";import{createContext as Lf}from"react";var Of=X("@swarm.ing/pieui:context:uiRenderer",()=>Lf(null)),Y=Of;import{jsx as p}from"react/jsx-runtime";function PU({uiConfig:U,setUiAjaxConfiguration:f}){let T=OU(C),o=OU(m),z=N();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:",!!f);let I=j(U.card);if(!I?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return T}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 B=I.fallback;return p(B,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",I.name);let Z=I.component,O=p(Y.Provider,{value:PU,children:p(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:f})});if(I.isLazy)return p(M,{name:I.name,fallback:T,onError:o,children:O});return O}var Pf=PU;import{useContext as Af}from"react";import{jsx as l}from"react/jsx-runtime";var Bf=({data:U,content:f,setUiAjaxConfiguration:T})=>{let{name:o,sx:z}=U,I=Af(Y)??W;return l(D,{card:o,data:U,children:l("div",{style:z,id:o,children:f.map((Z,O)=>{return l(I,{uiConfig:Z,setUiAjaxConfiguration:T},`children-${O}`)})})})},AU=Bf;var Hf=F({name:"SequenceCard",component:AU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as $f}from"react";import{jsx as BU}from"react/jsx-runtime";var qf=({data:U,content:f,setUiAjaxConfiguration:T})=>{let{name:o}=U,z=$f(Y)??W;return BU(D,{card:o,data:U,children:f.map((I,Z)=>{return BU(z,{uiConfig:I,setUiAjaxConfiguration:T},`children-${Z}`)})})},HU=qf;var Gf=F({name:"UnionCard",component:HU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as Qf,useState as Xf}from"react";import wf from"html-react-parser";import{useCallback as x,useEffect as Jf,useRef as d,useState as Ff}from"react";function Df(){let U=new AudioContext,f=U.createOscillator(),T=f.connect(U.createMediaStreamDestination());f.start();let o=T.stream.getAudioTracks()[0];return o.enabled=!1,o}function r(U=null,f){let[T,o]=Ff(!1),z=d(null),I=d(null),Z=d(null),O=x(async(P,Q=!0)=>{if(z.current)B();let $=new RTCPeerConnection;if($.onconnectionstatechange=()=>{if($.connectionState==="connected")o(!0);else if(["disconnected","failed","closed"].includes($.connectionState))o(!1)},$.ontrack=(A)=>{if(U)U.srcObject=A.streams[0]},Q){let A=await navigator.mediaDevices.getUserMedia({audio:!0});$.addTrack(A.getTracks()[0],A)}else{let A=Df();$.addTrack(A)}let L=$.createDataChannel("oai-events");I.current=L,Z.current=new Promise((A)=>{L.addEventListener("open",()=>{A()})});let w=await $.createOffer();await $.setLocalDescription(w);let G=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:w.sdp,headers:{Authorization:`Bearer ${P}`,"Content-Type":"application/sdp"}})).text();await $.setRemoteDescription({type:"answer",sdp:G}),z.current=$,await Z.current},[U]),B=x(()=>{let P=I.current;if(P)P.close();z.current?.getSenders()?.forEach((Q)=>Q.track?.stop()),z.current?.close(),o(!1),z.current=null,I.current=null,Z.current=null},[U]),H=x((P)=>{let Q=I.current;if(!Q){console.error("Data channel is not ready",P);return}let $=new Date().toLocaleTimeString();if(P.event_id=P.event_id||crypto.randomUUID(),Q.send(JSON.stringify(P)),!P.timestamp)P.timestamp=$;f?.(P)},[f,U]),q=x((P)=>{if(!I.current){console.error("Data channel is not ready");return}let $=()=>{H({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:P}]}}),H({type:"response.create"})};if(Z.current)Z.current.then($);else $()},[f,U]);return Jf(()=>{let P=I.current;if(!P)return;let Q=($)=>{let L=JSON.parse($.data);if(!L.timestamp)L.timestamp=new Date().toLocaleTimeString();f?.(L)};return P.addEventListener("message",Q),()=>{P.removeEventListener("message",Q)}},[f,U]),{isSessionActive:T,startSession:O,stopSession:B,sendTextMessage:q}}import{jsx as Wf}from"react/jsx-runtime";var Yf=({data:U})=>{let{html:f,useSocketioSupport:T,useCentrifugeSupport:o,useMittSupport:z,centrifugeChannel:I}=U,[Z,O]=Xf(f),{isSessionActive:B,startSession:H,sendTextMessage:q}=r(null,(L)=>{if(console.log(L.type,L.type==="response.output_text.delta"&&L.delta),L.type==="response.output_text.delta"&&L.delta)O((w)=>w+L.delta)});return Qf(()=>{O(f)},[f]),Wf(D,{card:"HTMLEmbedCard",data:U,methods:{update:(L)=>{O(L.value)},generateUsingAI:async(L)=>{try{if(!B&&L.token)await H(L.token,!1);q(L.prompt)}catch(w){console.error("Failed to generate using AI",w)}},initializeAI:async(L)=>{if(!B&&L.token)await H(L.token,!1)}},useCentrifugeSupport:o,useSocketioSupport:T,useMittSupport:z,centrifugeChannel:I,children:wf(Z)})},$U=Yf;var _f=F({name:"HTMLEmbedCard",component:$U,metadata:{author:"Swarm.ing"}});import{useEffect as Kf,useState as Cf}from"react";import{jsx as qU}from"react/jsx-runtime";var Vf=({data:U})=>{let{name:f,value:T,useSocketioSupport:o,useCentrifugeSupport:z,useMittSupport:I,centrifugeChannel:Z}=U,[O,B]=Cf(T);return Kf(()=>{B(T)},[T]),qU(D,{card:"HiddenCard",data:U,useSocketioSupport:o,useCentrifugeSupport:z,useMittSupport:I,centrifugeChannel:Z,methods:{update:({value:H})=>{B(H)}},children:qU("input",{type:"hidden",id:f,name:f,value:O})})},GU=Vf;var Mf=F({name:"HiddenCard",component:GU,metadata:{author:"Swarm.ing"}});import{useContext as JU,useEffect as Nf}from"react";import{createContext as Rf}from"react";var Ef=X("@swarm.ing/pieui:context:navigate",()=>Rf(void 0)),R=Ef;import{jsx as jf,Fragment as yf}from"react/jsx-runtime";var kf=({data:U})=>{let{url:f}=U,T=JU(R),o=JU(C);return Nf(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(f))window.location.href=f;else T?.(f)},[f,T]),jf(yf,{children:o})},FU=kf;var mf=F({name:"AutoRedirectCard",component:FU,metadata:{author:"Swarm.ing"}});import{Bounce as pf,Slide as xf,Zoom as bf,Flip as Sf}from"react-toastify";import{toast as gf,ToastContainer as vf}from"react-toastify";import{useContext as lf,useMemo as df,useRef as rf}from"react";import{jsx as u,Fragment as af}from"react/jsx-runtime";var uf={bounce:pf,slide:xf,zoom:bf,flip:Sf},cf=(U)=>{let f={...U,type:U.alertType,transition:U.transition?uf[U.transition]:void 0,position:U.position??"bottom-right",autoClose:U.autoClose??3000,style:{backgroundColor:"black",...U.sx}};gf(U.message,f)},hf=(U)=>{console.log("Log event",U)},nf=(U)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let f=()=>{try{new window.Notification(U.title,{body:U.message??U.subtitle,icon:U.icon,silent:U.silent})}catch(o){console.error("[IOEventsCard] Failed to show notification",o)}},T=window.Notification.permission;if(T==="granted"){f();return}if(T==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((o)=>{if(o==="granted")f()})},sf=({data:U})=>{let{useCentrifugeSupport:f,useSocketioSupport:T,useMittSupport:o,centrifugeChannel:z}=U,I=lf(R),Z=rf(I);Z.current=I;let O=df(()=>({alert:cf,log:hf,push:nf,redirect:(B)=>{if(B.to){let H=B.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()},reload:(B)=>{if(B.to){let H=B.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()}}),[]);return u(af,{children:u(D,{card:"IOEventsCard",data:U,useCentrifugeSupport:f,useSocketioSupport:T,useMittSupport:o,centrifugeChannel:z,methods:O,children:u(vf,{})})})},DU=sf;var tf=F({name:"IOEventsCard",component:DU,metadata:{author:"Swarm.ing"}});import{useEffect as QU,useState as ef}from"react";import{jsx as XU}from"react/jsx-runtime";var UI=({data:U})=>{let{name:f,key:T,value:o,useSocketioSupport:z,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:O}=U,[B,H]=ef(o);return QU(()=>{H(o)},[o]),QU(()=>{if(typeof window>"u")return;sessionStorage.setItem(T,B)},[T,B]),XU(D,{card:"SessionStorageCard",data:U,useSocketioSupport:z,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:O,methods:{update:({value:q})=>{H(q)},remove:()=>{sessionStorage.removeItem(T),H("")}},children:XU("input",{type:"hidden",id:f,name:f,value:B})})},wU=UI;var fI=F({name:"SessionStorageCard",component:wU,metadata:{author:"PieData"}});import{useEffect as YU,useState as II}from"react";import{jsx as WU}from"react/jsx-runtime";var oI=({data:U})=>{let{name:f,key:T,value:o,useSocketioSupport:z,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:O}=U,[B,H]=II(o);return YU(()=>{H(o)},[o]),YU(()=>{if(typeof window>"u")return;localStorage.setItem(T,B)},[T,B]),WU(D,{card:"DeviceStorageCard",data:U,useSocketioSupport:z,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:O,methods:{update:({value:q})=>{H(q)},remove:()=>{localStorage.removeItem(T),H("")}},children:WU("input",{type:"hidden",id:f,name:f,value:B})})},_U=oI;var TI=F({name:"DeviceStorageCard",component:_U,metadata:{author:"PieData"}});import{useCallback as c,useContext as h,useEffect as zI,useRef as ZI,useState as KU}from"react";import{jsx as CU}from"react/jsx-runtime";var LI=({data:U,content:f})=>{let{useLoader:T,noReturn:o,returnType:z,useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:O,centrifugeChannel:B}=U,H=h(C),q=h(Y)??W,[P,Q]=KU(!1),[$,L]=KU(null),w=ZI(f),V=h(y),K=c((A)=>{if(A===null)Q(!0);else if(Q(!1),!o)w.current=A;if(!o)L(A)},[o]),J=c((A)=>{w.current=A.content,L(A.content)},[]),G=c((A)=>{if(A===null)Q(!0);else if(Q(!1),!o)for(let _ of A)V?.emit(_.name,_.data)},[o,V]);if(zI(()=>{L(f),Q(!1)},[f]),!$&&T)return H;return CU(D,{card:"AjaxGroupCard",data:U,methods:{changeContent:J},useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:O,centrifugeChannel:B,children:CU(q,{uiConfig:$??w.current,setUiAjaxConfiguration:z==="events"?G:K})})},VU=LI;var OI=F({name:"AjaxGroupCard",component:VU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as MU}from"react";import{jsx as i}from"react/jsx-runtime";var PI=({data:U,content:f,setUiAjaxConfiguration:T})=>{let{name:o,url:z,sx:I}=U,Z=MU(R),O=MU(Y)??W;return i(D,{card:o,data:U,children:i("div",{style:I,id:o,onClick:(H)=>{if(z)if(H.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else Z?.(z)},children:i(O,{setUiAjaxConfiguration:T,uiConfig:f})})})},RU=PI;var AI=F({name:"BoxCard",component:RU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as BI}from"react";import{jsx as n}from"react/jsx-runtime";var HI=({data:U,content:f,setUiAjaxConfiguration:T})=>{let{name:o,sx:z}=U,I=BI(Y)??W;return n(D,{card:o,data:U,children:n("div",{style:z,id:o,children:f.map((Z,O)=>{return n(I,{uiConfig:Z,setUiAjaxConfiguration:T},`children-${O}`)})})})},EU=HI;var $I=F({name:"OneOfCard",component:EU,metadata:{author:"Swarm.ing",description:"Different variants"}});export{Gf as UnionCard,Pf as UILoading,W as UI,fI as SessionStorageCard,Hf as SequenceCard,D as PieCard,$I as OneOfCard,tf as IOEventsCard,Mf as HiddenCard,_f as HTMLEmbedCard,TI as DeviceStorageCard,AI as BoxCard,mf as AutoRedirectCard,OI as AjaxGroupCard};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- var LU=Object.create;var{getPrototypeOf:PU,defineProperty:j,getOwnPropertyNames:Go,getOwnPropertyDescriptor:OU}=Object,Jo=Object.prototype.hasOwnProperty;var Fo=(o,U,f)=>{f=o!=null?LU(PU(o)):{};let I=U||!o||!o.__esModule?j(f,"default",{value:o,enumerable:!0}):f;for(let z of Go(o))if(!Jo.call(I,z))j(I,z,{get:()=>o[z],enumerable:!0});return I},qo=new WeakMap,wU=(o)=>{var U=qo.get(o),f;if(U)return U;if(U=j({},"__esModule",{value:!0}),o&&typeof o==="object"||typeof o==="function")Go(o).map((I)=>!Jo.call(U,I)&&j(U,I,{get:()=>o[I],enumerable:!(f=OU(o,I))||f.enumerable}));return qo.set(o,U),U};var AU=(o,U)=>{for(var f in U)j(o,f,{get:U[f],enumerable:!0,configurable:!0,set:(I)=>U[f]=()=>I})};var uU={};AU(uU,{UnionCard:()=>mo,UILoading:()=>yo,UI:()=>_,SessionStorageCard:()=>to,SequenceCard:()=>bo,PieCard:()=>q,OneOfCard:()=>ZU,IOEventsCard:()=>so,HiddenCard:()=>ro,HTMLEmbedCard:()=>lo,DeviceStorageCard:()=>oU,BoxCard:()=>TU,AutoRedirectCard:()=>ho,AjaxGroupCard:()=>fU});module.exports=wU(uU);var C=require("react");var r=require("react");var zo=globalThis,F=(o,U)=>{let f=Symbol.for(o);if(!(f in zo))zo[f]=U();return zo[f]};var BU=F("@swarm.ing/pieui:context:pieConfig",()=>r.createContext(null)),$U=()=>{let o=r.useContext(BU);if(!o)throw Error("usePieConfig must be used within PieConfigProvider");return o};var p=()=>{let{enableRenderingLog:o}=$U();return o},Do=p;var Qo=require("react"),qU=require("centrifuge");var eU=F("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var GU=F("@swarm.ing/pieui:context:centrifuge",()=>Qo.createContext(null)),Xo=GU;var JU=require("socket.io-client"),Yo=require("react");var If=F("@swarm.ing/pieui:socket-cache",()=>new Map);var FU=F("@swarm.ing/pieui:context:socket",()=>Yo.createContext(null)),Wo=FU;var DU=Fo(require("mitt")),d=require("react");var QU=F("@swarm.ing/pieui:context:mitt",()=>d.createContext(null));var i=QU;var N=require("react/jsx-runtime"),XU=({card:o,data:U,children:f,useSocketioSupport:I=!1,useCentrifugeSupport:z=!1,useMittSupport:T=!1,centrifugeChannel:Z=void 0,methods:L=void 0,stored:O=void 0})=>{let H=Do(),B=C.useRef(L);if(B.current=L,H)console.log("[PieCard] Rendering card:",o),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:I,centrifuge:z,mitt:T,centrifugeChannel:Z}),console.log("[PieCard] Methods:",L?Object.keys(L):"none"),console.log("[PieCard] Has children:",!!f);let A=C.useContext(Wo),$=C.useContext(Xo),w=C.useContext(i);if(C.useEffect(()=>{if(!A||!I||!B.current||!U.name){if(H&&I)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!A,useSocketioSupport:I,hasMethods:!!B.current,hasDataName:!!U?.name});return}let X=Object.keys(B.current??{}).map((J)=>{let D=`pie${J}_${U.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${D}`);let R=(V)=>{B.current?.[J]?.(V)};return A.on(D,R),[D,R]});return()=>{X.forEach(([J,D])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${J}`);A.off(J,D)})}},[A,U.name,I]),C.useEffect(()=>{if(!$||!z||!Z||!U.name){if(H&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!$,useCentrifugeSupport:z,hasCentrifugeChannel:!!Z,hasMethods:!!B.current,hasDataName:!!U?.name});return}let X=Object.keys(B.current??{}).map((J)=>{let D=`pie${J}_${U.name}_${Z}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${D}`);let R=$.newSubscription(D);return R.on("publication",(V)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${D}:`,V.data);B.current?.[J]?.(V.data)}),R.subscribe(),R});return()=>{X.forEach((J)=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");J.unsubscribe(),$.removeSubscription(J)})}},[$,Z,U.name,z]),C.useEffect(()=>{if(!w||!T||!U.name){if(H&&T)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!w,useMittSupport:T,hasMethods:!!B.current,hasDataName:!!U?.name});return}let P=Object.keys(B.current??{}),X={};return P.forEach((J)=>{let D=`pie${J}_${U.name}`,R=(V)=>{if(H)console.log(`[PieCard] Mitt registering event: ${D}`);B.current?.[J]?.(V)};X[D]=R,w.on(D,R)}),()=>{Object.entries(X).forEach(([J,D])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${J}`);w.off(J,D)})}},[w,U.name,T]),H)console.log("[PieCard] Rendering complete, returning children");if(O!==void 0)return N.jsxs(N.Fragment,{children:[N.jsx("input",{type:"hidden",name:U.name,value:JSON.stringify(O)}),f]});return f},q=XU;var Ro=require("react"),m=new Map;function YU(o,U){return U.catch(()=>{if(m.get(o)===U)m.delete(o)}),m.set(o,U),U}function _o(o,U){return Ro.lazy(()=>{if(m.has(U))return m.get(U);return YU(U,o().then((f)=>f))})}var Ko=F("@swarm.ing/pieui:component-registry",()=>new Map),WU=(o)=>{if(!o.name)throw Error("Component registration requires a name");if(!o.component&&!o.loader)throw Error(`Component "${o.name}" requires component or loader`);let U={name:o.name,component:o.component,loader:o.loader,metadata:o.metadata,fallback:o.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=_o(U.loader,o.name),U.isLazy=!0;return U};function G(o){let U=WU(o);return Ko.set(U.name,U),U.component}var u=(o)=>{return Ko.get(o)};var S=require("react");var Vo=require("react");var h=require("react/jsx-runtime"),RU=F("@swarm.ing/pieui:context:fallback",()=>Vo.createContext(h.jsx(h.Fragment,{}))),M=RU;var Co=require("react");var _U=F("@swarm.ing/pieui:context:lazyError",()=>Co.createContext(void 0)),n=_U;var s=require("react"),Mo=require("react/jsx-runtime"),KU=2,VU=400;class y extends s.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){if(this.props.onError?.(o),this.state.attempt<KU){let U=VU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((f)=>({failed:!1,attempt:f.attempt+1}))},U)}}componentDidUpdate(o){if(o.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 Mo.jsx(s.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var a=require("react/jsx-runtime");function CU({uiConfig:o,setUiAjaxConfiguration:U}){let f=S.useContext(M),I=S.useContext(n),z=p();if(z)console.log("[UI] Rendering component:",o.card),console.log("[UI] Component data:",o.data),console.log("[UI] Component content:",o.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let T=u(o.card);if(!T?.component){if(z)console.warn(`[UI] Component not found in registry: ${o.card}`),console.log("[UI] Returning fallback component");return f}if(z)console.log("[UI] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata});let Z=T.component,L=a.jsx(Z,{data:o.data,content:o.content,setUiAjaxConfiguration:U});if(T.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",T.name);return a.jsx(y,{name:T.name,fallback:T.fallback?a.jsx(T.fallback,{}):f,onError:I,children:L})}if(z)console.log("[UI] Rendering component directly:",T.name);return L}var _=S.memo(CU);var Ho=require("react");var Eo=require("react");var MU=F("@swarm.ing/pieui:context:uiRenderer",()=>Eo.createContext(null)),K=MU;var g=require("react/jsx-runtime");function No({uiConfig:o,setUiAjaxConfiguration:U}){let f=Ho.useContext(M),I=Ho.useContext(n),z=p();if(z)console.log("[UILoading] Rendering fallback for:",o.card),console.log("[UILoading] Component data:",o.data),console.log("[UILoading] Component content:",o.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let T=u(o.card);if(!T?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${o.card}`),console.log("[UILoading] Returning fallback component");return f}if(z)console.log("[UILoading] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata,hasFallback:!!T.fallback});if(T.fallback){if(z)console.log("[UILoading] Rendering fallback for:",T.name);let O=T.fallback;return g.jsx(O,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",T.name);let Z=T.component,L=g.jsx(K.Provider,{value:No,children:g.jsx(Z,{data:o.data,content:o.content,setUiAjaxConfiguration:U})});if(T.isLazy)return g.jsx(y,{name:T.name,fallback:f,onError:I,children:L});return L}var yo=No;var xo=require("react");var t=require("react/jsx-runtime"),EU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,sx:z}=o,T=xo.useContext(K)??_;return t.jsx(q,{card:I,data:o,children:t.jsx("div",{style:z,id:I,children:U.map((Z,L)=>{return t.jsx(T,{uiConfig:Z,setUiAjaxConfiguration:f},`children-${L}`)})})})},ko=EU;var bo=G({name:"SequenceCard",component:ko,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var jo=require("react");var Zo=require("react/jsx-runtime"),NU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I}=o,z=jo.useContext(K)??_;return Zo.jsx(q,{card:I,data:o,children:U.map((T,Z)=>{return Zo.jsx(z,{uiConfig:T,setUiAjaxConfiguration:f},`children-${Z}`)})})},po=NU;var mo=G({name:"UnionCard",component:po,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var e=require("react"),So=Fo(require("html-react-parser"));var W=require("react");function yU(){let o=new AudioContext,U=o.createOscillator(),f=U.connect(o.createMediaStreamDestination());U.start();let I=f.stream.getAudioTracks()[0];return I.enabled=!1,I}function Lo(o=null,U){let[f,I]=W.useState(!1),z=W.useRef(null),T=W.useRef(null),Z=W.useRef(null),L=W.useCallback(async(A,$=!0)=>{if(z.current)O();let w=new RTCPeerConnection;if(w.onconnectionstatechange=()=>{if(w.connectionState==="connected")I(!0);else if(["disconnected","failed","closed"].includes(w.connectionState))I(!1)},w.ontrack=(Q)=>{if(o)o.srcObject=Q.streams[0]},$){let Q=await navigator.mediaDevices.getUserMedia({audio:!0});w.addTrack(Q.getTracks()[0],Q)}else{let Q=yU();w.addTrack(Q)}let P=w.createDataChannel("oai-events");T.current=P,Z.current=new Promise((Q)=>{P.addEventListener("open",()=>{Q()})});let X=await w.createOffer();await w.setLocalDescription(X);let V=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:X.sdp,headers:{Authorization:`Bearer ${A}`,"Content-Type":"application/sdp"}})).text();await w.setRemoteDescription({type:"answer",sdp:V}),z.current=w,await Z.current},[o]),O=W.useCallback(()=>{let A=T.current;if(A)A.close();z.current?.getSenders()?.forEach(($)=>$.track?.stop()),z.current?.close(),I(!1),z.current=null,T.current=null,Z.current=null},[o]),H=W.useCallback((A)=>{let $=T.current;if(!$){console.error("Data channel is not ready",A);return}let w=new Date().toLocaleTimeString();if(A.event_id=A.event_id||crypto.randomUUID(),$.send(JSON.stringify(A)),!A.timestamp)A.timestamp=w;U?.(A)},[U,o]),B=W.useCallback((A)=>{if(!T.current){console.error("Data channel is not ready");return}let w=()=>{H({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:A}]}}),H({type:"response.create"})};if(Z.current)Z.current.then(w);else w()},[U,o]);return W.useEffect(()=>{let A=T.current;if(!A)return;let $=(w)=>{let P=JSON.parse(w.data);if(!P.timestamp)P.timestamp=new Date().toLocaleTimeString();U?.(P)};return A.addEventListener("message",$),()=>{A.removeEventListener("message",$)}},[U,o]),{isSessionActive:f,startSession:L,stopSession:O,sendTextMessage:B}}var vo=require("react/jsx-runtime"),xU=({data:o})=>{let{html:U,useSocketioSupport:f,useCentrifugeSupport:I,useMittSupport:z,centrifugeChannel:T}=o,[Z,L]=e.useState(U),{isSessionActive:O,startSession:H,sendTextMessage:B}=Lo(null,(P)=>{if(console.log(P.type,P.type==="response.output_text.delta"&&P.delta),P.type==="response.output_text.delta"&&P.delta)L((X)=>X+P.delta)});return e.useEffect(()=>{L(U)},[U]),vo.jsx(q,{card:"HTMLEmbedCard",data:o,methods:{update:(P)=>{L(P.value)},generateUsingAI:async(P)=>{try{if(!O&&P.token)await H(P.token,!1);B(P.prompt)}catch(X){console.error("Failed to generate using AI",X)}},initializeAI:async(P)=>{if(!O&&P.token)await H(P.token,!1)}},useCentrifugeSupport:I,useSocketioSupport:f,useMittSupport:z,centrifugeChannel:T,children:So.default(Z)})},go=xU;var lo=G({name:"HTMLEmbedCard",component:go,metadata:{author:"Swarm.ing"}});var oo=require("react");var Po=require("react/jsx-runtime"),kU=({data:o})=>{let{name:U,value:f,useSocketioSupport:I,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:Z}=o,[L,O]=oo.useState(f);return oo.useEffect(()=>{O(f)},[f]),Po.jsx(q,{card:"HiddenCard",data:o,useSocketioSupport:I,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:Z,methods:{update:({value:H})=>{O(H)}},children:Po.jsx("input",{type:"hidden",id:U,name:U,value:L})})},co=kU;var ro=G({name:"HiddenCard",component:co,metadata:{author:"Swarm.ing"}});var v=require("react");var io=require("react");var bU=F("@swarm.ing/pieui:context:navigate",()=>io.createContext(void 0)),x=bU;var Uo=require("react/jsx-runtime"),jU=({data:o})=>{let{url:U}=o,f=v.useContext(x),I=v.useContext(M);return v.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else f?.(U)},[U,f]),Uo.jsx(Uo.Fragment,{children:I})},uo=jU;var ho=G({name:"AutoRedirectCard",component:uo,metadata:{author:"Swarm.ing"}});var E=require("react-toastify"),fo=require("react-toastify");var b=require("react");var k=require("react/jsx-runtime"),pU={bounce:E.Bounce,slide:E.Slide,zoom:E.Zoom,flip:E.Flip},mU=(o)=>{let U={...o,type:o.alertType,transition:o.transition?pU[o.transition]:void 0,position:o.position??"bottom-right",autoClose:o.autoClose??3000,style:{backgroundColor:"black",...o.sx}};fo.toast(o.message,U)},SU=(o)=>{console.log("Log event",o)},gU=(o)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(o.title,{body:o.message??o.subtitle,icon:o.icon,silent:o.silent})}catch(I){console.error("[IOEventsCard] Failed to show notification",I)}},f=window.Notification.permission;if(f==="granted"){U();return}if(f==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((I)=>{if(I==="granted")U()})},vU=({data:o})=>{let{useCentrifugeSupport:U,useSocketioSupport:f,useMittSupport:I,centrifugeChannel:z}=o,T=b.useContext(x),Z=b.useRef(T);Z.current=T;let L=b.useMemo(()=>({alert:mU,log:SU,push:gU,redirect:(O)=>{if(O.to){let H=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()},reload:(O)=>{if(O.to){let H=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()}}),[]);return k.jsx(k.Fragment,{children:k.jsx(q,{card:"IOEventsCard",data:o,useCentrifugeSupport:U,useSocketioSupport:f,useMittSupport:I,centrifugeChannel:z,methods:L,children:k.jsx(fo.ToastContainer,{})})})},no=vU;var so=G({name:"IOEventsCard",component:no,metadata:{author:"Swarm.ing"}});var l=require("react");var Oo=require("react/jsx-runtime"),lU=({data:o})=>{let{name:U,key:f,value:I,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:L}=o,[O,H]=l.useState(I);return l.useEffect(()=>{H(I)},[I]),l.useEffect(()=>{if(typeof window>"u")return;sessionStorage.setItem(f,O)},[f,O]),Oo.jsx(q,{card:"SessionStorageCard",data:o,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:L,methods:{update:({value:B})=>{H(B)},remove:()=>{sessionStorage.removeItem(f),H("")}},children:Oo.jsx("input",{type:"hidden",id:U,name:U,value:O})})},ao=lU;var to=G({name:"SessionStorageCard",component:ao,metadata:{author:"PieData"}});var c=require("react");var wo=require("react/jsx-runtime"),cU=({data:o})=>{let{name:U,key:f,value:I,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:L}=o,[O,H]=c.useState(I);return c.useEffect(()=>{H(I)},[I]),c.useEffect(()=>{if(typeof window>"u")return;localStorage.setItem(f,O)},[f,O]),wo.jsx(q,{card:"DeviceStorageCard",data:o,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:L,methods:{update:({value:B})=>{H(B)},remove:()=>{localStorage.removeItem(f),H("")}},children:wo.jsx("input",{type:"hidden",id:U,name:U,value:O})})},eo=cU;var oU=G({name:"DeviceStorageCard",component:eo,metadata:{author:"PieData"}});var Y=require("react");var Ao=require("react/jsx-runtime"),rU=({data:o,content:U})=>{let{useLoader:f,noReturn:I,returnType:z,useSocketioSupport:T,useCentrifugeSupport:Z,useMittSupport:L,centrifugeChannel:O}=o,H=Y.useContext(M),B=Y.useContext(K)??_,[A,$]=Y.useState(!1),[w,P]=Y.useState(null),X=Y.useRef(U),J=Y.useContext(i),D=Y.useCallback((Q)=>{if(Q===null)$(!0);else if($(!1),!I)X.current=Q;if(!I)P(Q)},[I]),R=Y.useCallback((Q)=>{X.current=Q.content,P(Q.content)},[]),V=Y.useCallback((Q)=>{if(Q===null)$(!0);else if($(!1),!I)for(let $o of Q)J?.emit($o.name,$o.data)},[I,J]);if(Y.useEffect(()=>{P(U),$(!1)},[U]),!w&&f)return H;return Ao.jsx(q,{card:"AjaxGroupCard",data:o,methods:{changeContent:R},useSocketioSupport:T,useCentrifugeSupport:Z,useMittSupport:L,centrifugeChannel:O,children:Ao.jsx(B,{uiConfig:w??X.current,setUiAjaxConfiguration:z==="events"?V:D})})},UU=rU;var fU=G({name:"AjaxGroupCard",component:UU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var Bo=require("react");var Io=require("react/jsx-runtime"),dU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,url:z,sx:T}=o,Z=Bo.useContext(x),L=Bo.useContext(K)??_;return Io.jsx(q,{card:I,data:o,children:Io.jsx("div",{style:T,id:I,onClick:(H)=>{if(z)if(H.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else Z?.(z)},children:Io.jsx(L,{setUiAjaxConfiguration:f,uiConfig:U})})})},IU=dU;var TU=G({name:"BoxCard",component:IU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var zU=require("react");var To=require("react/jsx-runtime"),iU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,sx:z}=o,T=zU.useContext(K)??_;return To.jsx(q,{card:I,data:o,children:To.jsx("div",{style:z,id:I,children:U.map((Z,L)=>{return To.jsx(T,{uiConfig:Z,setUiAjaxConfiguration:f},`children-${L}`)})})})},HU=iU;var ZU=G({name:"OneOfCard",component:HU,metadata:{author:"Swarm.ing",description:"Different variants"}});
2
+ var $f=Object.create;var{getPrototypeOf:qf,defineProperty:b,getOwnPropertyNames:QU,getOwnPropertyDescriptor:Gf}=Object,XU=Object.prototype.hasOwnProperty;var wU=(U,f,o)=>{o=U!=null?$f(qf(U)):{};let I=f||!U||!U.__esModule?b(o,"default",{value:U,enumerable:!0}):o;for(let z of QU(U))if(!XU.call(I,z))b(I,z,{get:()=>U[z],enumerable:!0});return I},DU=new WeakMap,Jf=(U)=>{var f=DU.get(U),o;if(f)return f;if(f=b({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")QU(U).map((I)=>!XU.call(f,I)&&b(f,I,{get:()=>U[I],enumerable:!(o=Gf(U,I))||o.enumerable}));return DU.set(U,f),f};var Ff=(U,f)=>{for(var o in f)b(U,o,{get:f[o],enumerable:!0,configurable:!0,set:(I)=>f[o]=()=>I})};var ef={};Ff(ef,{UnionCard:()=>rU,UILoading:()=>bU,UI:()=>_,SessionStorageCard:()=>of,SequenceCard:()=>vU,PieCard:()=>F,OneOfCard:()=>Hf,IOEventsCard:()=>ff,HiddenCard:()=>sU,HTMLEmbedCard:()=>iU,DeviceStorageCard:()=>zf,BoxCard:()=>Pf,AutoRedirectCard:()=>eU,AjaxGroupCard:()=>Lf});module.exports=Jf(ef);var C=require("react");var c=require("react");var LU=globalThis,X=(U,f)=>{let o=Symbol.for(U);if(!(o in LU))LU[o]=f();return LU[o]};var Df=X("@swarm.ing/pieui:context:pieConfig",()=>c.createContext(null)),Qf=()=>{let U=c.useContext(Df);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U};var S=()=>{let{enableRenderingLog:U}=Qf();return U},YU=S;var WU=require("react"),Xf=require("centrifuge");var zI=X("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var wf=X("@swarm.ing/pieui:context:centrifuge",()=>WU.createContext(null)),_U=wf;var Yf=require("socket.io-client"),KU=require("react");var PI=X("@swarm.ing/pieui:socket-cache",()=>new Map);var Wf=X("@swarm.ing/pieui:context:socket",()=>KU.createContext(null)),CU=Wf;var _f=wU(require("mitt")),h=require("react");var Kf=X("@swarm.ing/pieui:context:mitt",()=>h.createContext(null));var i=Kf;function VU(U){return U.wasRecovering===!0&&U.recovered===!1}function MU(U){return U.recoverable===!1}function RU(U,f,o){let I=U.getSubscription(f);if(I)return{subscription:I,createdHere:!1};return{subscription:U.newSubscription(f,o),createdHere:!0}}var k=require("react/jsx-runtime"),Cf=({card:U,data:f,children:o,useSocketioSupport:I=!1,useCentrifugeSupport:z=!1,useMittSupport:T=!1,centrifugeChannel:Z=void 0,methods:O=void 0,stored:B=void 0,onResync:H=void 0})=>{let q=YU(),P=C.useRef(O);P.current=O;let Q=C.useRef(H);if(Q.current=H,q)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",f),console.log("[PieCard] Component name:",f?.name),console.log("[PieCard] Real-time support:",{socketio:I,centrifuge:z,mitt:T,centrifugeChannel:Z}),console.log("[PieCard] Methods:",O?Object.keys(O):"none"),console.log("[PieCard] Has children:",!!o);let $=C.useContext(CU),L=C.useContext(_U),w=C.useContext(i);if(C.useEffect(()=>{if(!$||!I||!P.current||!f.name){if(q&&I)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!$,useSocketioSupport:I,hasMethods:!!P.current,hasDataName:!!f?.name});return}let M=Object.keys(P.current??{}).map((J)=>{let G=`pie${J}_${f.name}`;if(q)console.log(`[PieCard] Socket.IO registering event: ${G}`);let A=(V)=>{P.current?.[J]?.(V)};return $.on(G,A),[G,A]});return()=>{M.forEach(([J,G])=>{if(q)console.log(`[PieCard] Socket.IO unregistering event: ${J}`);$.off(J,G)})}},[$,f.name,I]),C.useEffect(()=>{if(!L||!z||!Z||!f.name){if(q&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:z,hasCentrifugeChannel:!!Z,hasMethods:!!P.current,hasDataName:!!f?.name});return}let M=Object.keys(P.current??{}).map((J)=>{let G=`pie${J}_${f.name}_${Z}`;if(q)console.log(`[PieCard] Centrifuge subscribing to channel: ${G}`);let{subscription:A,createdHere:V}=RU(L,G,{recoverable:!0,positioned:!0}),JU=(x)=>{if(q)console.log(`[PieCard] Centrifuge received data on ${G}:`,x.data);P.current?.[J]?.(x.data)},FU=(x)=>{if(MU(x))console.warn(`[PieCard] Centrifuge channel ${G} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(VU(x)){if(q)console.log(`[PieCard] Centrifuge recovery gap on ${G}; requesting resync`);Q.current?.({channel:G,reason:"gap"})}};return A.on("publication",JU),A.on("subscribed",FU),A.subscribe(),{subscription:A,createdHere:V,onPublication:JU,onSubscribed:FU}});return()=>{M.forEach(({subscription:J,createdHere:G,onPublication:A,onSubscribed:V})=>{if(q)console.log("[PieCard] Centrifuge unsubscribing from channel");if(J.off("publication",A),J.off("subscribed",V),G)J.unsubscribe(),L.removeSubscription(J)})}},[L,Z,f.name,z]),C.useEffect(()=>{if(!w||!T||!f.name){if(q&&T)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!w,useMittSupport:T,hasMethods:!!P.current,hasDataName:!!f?.name});return}let N=Object.keys(P.current??{}),M={};return N.forEach((J)=>{let G=`pie${J}_${f.name}`,A=(V)=>{if(q)console.log(`[PieCard] Mitt registering event: ${G}`);P.current?.[J]?.(V)};M[G]=A,w.on(G,A)}),()=>{Object.entries(M).forEach(([J,G])=>{if(q)console.log(`[PieCard] Mitt unregistering event: ${J}`);w.off(J,G)})}},[w,f.name,T]),q)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0)return k.jsxs(k.Fragment,{children:[k.jsx("input",{type:"hidden",name:f.name,value:JSON.stringify(B)}),o]});return o},F=Cf;var EU=require("react"),g=new Map;function Vf(U,f){return f.catch(()=>{if(g.get(U)===f)g.delete(U)}),g.set(U,f),f}function NU(U,f){return EU.lazy(()=>{if(g.has(f))return g.get(f);return Vf(f,U().then((o)=>o))})}var kU=X("@swarm.ing/pieui:component-registry",()=>new Map),Mf=(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 f={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!f.component&&f.loader)f.component=NU(f.loader,U.name),f.isLazy=!0;return f};function D(U){let f=Mf(U);return kU.set(f.name,f),f.component}var n=(U)=>{return kU.get(U)};var v=require("react");var yU=require("react");var s=require("react/jsx-runtime"),Rf=X("@swarm.ing/pieui:context:fallback",()=>yU.createContext(s.jsx(s.Fragment,{}))),R=Rf;var jU=require("react");var Ef=X("@swarm.ing/pieui:context:lazyError",()=>jU.createContext(void 0)),a=Ef;var t=require("react"),mU=require("react/jsx-runtime"),Nf=2,kf=400;class y extends t.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<Nf){let f=kf*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((o)=>({failed:!1,attempt:o.attempt+1}))},f)}}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 mU.jsx(t.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var e=require("react/jsx-runtime");function yf({uiConfig:U,setUiAjaxConfiguration:f}){let o=v.useContext(R),I=v.useContext(a),z=S();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:",!!f);let T=n(U.card);if(!T?.component){if(z)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return o}if(z)console.log("[UI] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata});let Z=T.component,O=e.jsx(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:f});if(T.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",T.name);return e.jsx(y,{name:T.name,fallback:T.fallback?e.jsx(T.fallback,{}):o,onError:I,children:O})}if(z)console.log("[UI] Rendering component directly:",T.name);return O}var _=v.memo(yf);var OU=require("react");var pU=require("react");var jf=X("@swarm.ing/pieui:context:uiRenderer",()=>pU.createContext(null)),K=jf;var l=require("react/jsx-runtime");function xU({uiConfig:U,setUiAjaxConfiguration:f}){let o=OU.useContext(R),I=OU.useContext(a),z=S();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:",!!f);let T=n(U.card);if(!T?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return o}if(z)console.log("[UILoading] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata,hasFallback:!!T.fallback});if(T.fallback){if(z)console.log("[UILoading] Rendering fallback for:",T.name);let B=T.fallback;return l.jsx(B,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",T.name);let Z=T.component,O=l.jsx(K.Provider,{value:xU,children:l.jsx(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:f})});if(T.isLazy)return l.jsx(y,{name:T.name,fallback:o,onError:I,children:O});return O}var bU=xU;var SU=require("react");var UU=require("react/jsx-runtime"),mf=({data:U,content:f,setUiAjaxConfiguration:o})=>{let{name:I,sx:z}=U,T=SU.useContext(K)??_;return UU.jsx(F,{card:I,data:U,children:UU.jsx("div",{style:z,id:I,children:f.map((Z,O)=>{return UU.jsx(T,{uiConfig:Z,setUiAjaxConfiguration:o},`children-${O}`)})})})},gU=mf;var vU=D({name:"SequenceCard",component:gU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var lU=require("react");var PU=require("react/jsx-runtime"),pf=({data:U,content:f,setUiAjaxConfiguration:o})=>{let{name:I}=U,z=lU.useContext(K)??_;return PU.jsx(F,{card:I,data:U,children:f.map((T,Z)=>{return PU.jsx(z,{uiConfig:T,setUiAjaxConfiguration:o},`children-${Z}`)})})},dU=pf;var rU=D({name:"UnionCard",component:dU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var fU=require("react"),uU=wU(require("html-react-parser"));var W=require("react");function xf(){let U=new AudioContext,f=U.createOscillator(),o=f.connect(U.createMediaStreamDestination());f.start();let I=o.stream.getAudioTracks()[0];return I.enabled=!1,I}function AU(U=null,f){let[o,I]=W.useState(!1),z=W.useRef(null),T=W.useRef(null),Z=W.useRef(null),O=W.useCallback(async(P,Q=!0)=>{if(z.current)B();let $=new RTCPeerConnection;if($.onconnectionstatechange=()=>{if($.connectionState==="connected")I(!0);else if(["disconnected","failed","closed"].includes($.connectionState))I(!1)},$.ontrack=(A)=>{if(U)U.srcObject=A.streams[0]},Q){let A=await navigator.mediaDevices.getUserMedia({audio:!0});$.addTrack(A.getTracks()[0],A)}else{let A=xf();$.addTrack(A)}let L=$.createDataChannel("oai-events");T.current=L,Z.current=new Promise((A)=>{L.addEventListener("open",()=>{A()})});let w=await $.createOffer();await $.setLocalDescription(w);let G=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:w.sdp,headers:{Authorization:`Bearer ${P}`,"Content-Type":"application/sdp"}})).text();await $.setRemoteDescription({type:"answer",sdp:G}),z.current=$,await Z.current},[U]),B=W.useCallback(()=>{let P=T.current;if(P)P.close();z.current?.getSenders()?.forEach((Q)=>Q.track?.stop()),z.current?.close(),I(!1),z.current=null,T.current=null,Z.current=null},[U]),H=W.useCallback((P)=>{let Q=T.current;if(!Q){console.error("Data channel is not ready",P);return}let $=new Date().toLocaleTimeString();if(P.event_id=P.event_id||crypto.randomUUID(),Q.send(JSON.stringify(P)),!P.timestamp)P.timestamp=$;f?.(P)},[f,U]),q=W.useCallback((P)=>{if(!T.current){console.error("Data channel is not ready");return}let $=()=>{H({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:P}]}}),H({type:"response.create"})};if(Z.current)Z.current.then($);else $()},[f,U]);return W.useEffect(()=>{let P=T.current;if(!P)return;let Q=($)=>{let L=JSON.parse($.data);if(!L.timestamp)L.timestamp=new Date().toLocaleTimeString();f?.(L)};return P.addEventListener("message",Q),()=>{P.removeEventListener("message",Q)}},[f,U]),{isSessionActive:o,startSession:O,stopSession:B,sendTextMessage:q}}var hU=require("react/jsx-runtime"),bf=({data:U})=>{let{html:f,useSocketioSupport:o,useCentrifugeSupport:I,useMittSupport:z,centrifugeChannel:T}=U,[Z,O]=fU.useState(f),{isSessionActive:B,startSession:H,sendTextMessage:q}=AU(null,(L)=>{if(console.log(L.type,L.type==="response.output_text.delta"&&L.delta),L.type==="response.output_text.delta"&&L.delta)O((w)=>w+L.delta)});return fU.useEffect(()=>{O(f)},[f]),hU.jsx(F,{card:"HTMLEmbedCard",data:U,methods:{update:(L)=>{O(L.value)},generateUsingAI:async(L)=>{try{if(!B&&L.token)await H(L.token,!1);q(L.prompt)}catch(w){console.error("Failed to generate using AI",w)}},initializeAI:async(L)=>{if(!B&&L.token)await H(L.token,!1)}},useCentrifugeSupport:I,useSocketioSupport:o,useMittSupport:z,centrifugeChannel:T,children:uU.default(Z)})},cU=bf;var iU=D({name:"HTMLEmbedCard",component:cU,metadata:{author:"Swarm.ing"}});var IU=require("react");var BU=require("react/jsx-runtime"),Sf=({data:U})=>{let{name:f,value:o,useSocketioSupport:I,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:Z}=U,[O,B]=IU.useState(o);return IU.useEffect(()=>{B(o)},[o]),BU.jsx(F,{card:"HiddenCard",data:U,useSocketioSupport:I,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:Z,methods:{update:({value:H})=>{B(H)}},children:BU.jsx("input",{type:"hidden",id:f,name:f,value:O})})},nU=Sf;var sU=D({name:"HiddenCard",component:nU,metadata:{author:"Swarm.ing"}});var d=require("react");var aU=require("react");var gf=X("@swarm.ing/pieui:context:navigate",()=>aU.createContext(void 0)),j=gf;var oU=require("react/jsx-runtime"),vf=({data:U})=>{let{url:f}=U,o=d.useContext(j),I=d.useContext(R);return d.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(f))window.location.href=f;else o?.(f)},[f,o]),oU.jsx(oU.Fragment,{children:I})},tU=vf;var eU=D({name:"AutoRedirectCard",component:tU,metadata:{author:"Swarm.ing"}});var E=require("react-toastify"),TU=require("react-toastify");var p=require("react");var m=require("react/jsx-runtime"),lf={bounce:E.Bounce,slide:E.Slide,zoom:E.Zoom,flip:E.Flip},df=(U)=>{let f={...U,type:U.alertType,transition:U.transition?lf[U.transition]:void 0,position:U.position??"bottom-right",autoClose:U.autoClose??3000,style:{backgroundColor:"black",...U.sx}};TU.toast(U.message,f)},rf=(U)=>{console.log("Log event",U)},uf=(U)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let f=()=>{try{new window.Notification(U.title,{body:U.message??U.subtitle,icon:U.icon,silent:U.silent})}catch(I){console.error("[IOEventsCard] Failed to show notification",I)}},o=window.Notification.permission;if(o==="granted"){f();return}if(o==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((I)=>{if(I==="granted")f()})},cf=({data:U})=>{let{useCentrifugeSupport:f,useSocketioSupport:o,useMittSupport:I,centrifugeChannel:z}=U,T=p.useContext(j),Z=p.useRef(T);Z.current=T;let O=p.useMemo(()=>({alert:df,log:rf,push:uf,redirect:(B)=>{if(B.to){let H=B.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()},reload:(B)=>{if(B.to){let H=B.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(H))window.location.href=H;else Z.current?.(H)}else window.location.reload()}}),[]);return m.jsx(m.Fragment,{children:m.jsx(F,{card:"IOEventsCard",data:U,useCentrifugeSupport:f,useSocketioSupport:o,useMittSupport:I,centrifugeChannel:z,methods:O,children:m.jsx(TU.ToastContainer,{})})})},Uf=cf;var ff=D({name:"IOEventsCard",component:Uf,metadata:{author:"Swarm.ing"}});var r=require("react");var HU=require("react/jsx-runtime"),hf=({data:U})=>{let{name:f,key:o,value:I,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:O}=U,[B,H]=r.useState(I);return r.useEffect(()=>{H(I)},[I]),r.useEffect(()=>{if(typeof window>"u")return;sessionStorage.setItem(o,B)},[o,B]),HU.jsx(F,{card:"SessionStorageCard",data:U,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:O,methods:{update:({value:q})=>{H(q)},remove:()=>{sessionStorage.removeItem(o),H("")}},children:HU.jsx("input",{type:"hidden",id:f,name:f,value:B})})},If=hf;var of=D({name:"SessionStorageCard",component:If,metadata:{author:"PieData"}});var u=require("react");var $U=require("react/jsx-runtime"),nf=({data:U})=>{let{name:f,key:o,value:I,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:O}=U,[B,H]=u.useState(I);return u.useEffect(()=>{H(I)},[I]),u.useEffect(()=>{if(typeof window>"u")return;localStorage.setItem(o,B)},[o,B]),$U.jsx(F,{card:"DeviceStorageCard",data:U,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:Z,centrifugeChannel:O,methods:{update:({value:q})=>{H(q)},remove:()=>{localStorage.removeItem(o),H("")}},children:$U.jsx("input",{type:"hidden",id:f,name:f,value:B})})},Tf=nf;var zf=D({name:"DeviceStorageCard",component:Tf,metadata:{author:"PieData"}});var Y=require("react");var qU=require("react/jsx-runtime"),sf=({data:U,content:f})=>{let{useLoader:o,noReturn:I,returnType:z,useSocketioSupport:T,useCentrifugeSupport:Z,useMittSupport:O,centrifugeChannel:B}=U,H=Y.useContext(R),q=Y.useContext(K)??_,[P,Q]=Y.useState(!1),[$,L]=Y.useState(null),w=Y.useRef(f),N=Y.useContext(i),M=Y.useCallback((A)=>{if(A===null)Q(!0);else if(Q(!1),!I)w.current=A;if(!I)L(A)},[I]),J=Y.useCallback((A)=>{w.current=A.content,L(A.content)},[]),G=Y.useCallback((A)=>{if(A===null)Q(!0);else if(Q(!1),!I)for(let V of A)N?.emit(V.name,V.data)},[I,N]);if(Y.useEffect(()=>{L(f),Q(!1)},[f]),!$&&o)return H;return qU.jsx(F,{card:"AjaxGroupCard",data:U,methods:{changeContent:J},useSocketioSupport:T,useCentrifugeSupport:Z,useMittSupport:O,centrifugeChannel:B,children:qU.jsx(q,{uiConfig:$??w.current,setUiAjaxConfiguration:z==="events"?G:M})})},Zf=sf;var Lf=D({name:"AjaxGroupCard",component:Zf,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var GU=require("react");var zU=require("react/jsx-runtime"),af=({data:U,content:f,setUiAjaxConfiguration:o})=>{let{name:I,url:z,sx:T}=U,Z=GU.useContext(j),O=GU.useContext(K)??_;return zU.jsx(F,{card:I,data:U,children:zU.jsx("div",{style:T,id:I,onClick:(H)=>{if(z)if(H.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else Z?.(z)},children:zU.jsx(O,{setUiAjaxConfiguration:o,uiConfig:f})})})},Of=af;var Pf=D({name:"BoxCard",component:Of,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var Af=require("react");var ZU=require("react/jsx-runtime"),tf=({data:U,content:f,setUiAjaxConfiguration:o})=>{let{name:I,sx:z}=U,T=Af.useContext(K)??_;return ZU.jsx(F,{card:I,data:U,children:ZU.jsx("div",{style:z,id:I,children:f.map((Z,O)=>{return ZU.jsx(T,{uiConfig:Z,setUiAjaxConfiguration:o},`children-${O}`)})})})},Bf=tf;var Hf=D({name:"OneOfCard",component:Bf,metadata:{author:"Swarm.ing",description:"Different variants"}});
package/dist/index.esm.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{useContext as qU,useEffect as OU,useRef as SZ}from"react";import{createContext as MZ,useContext as RZ}from"react";var YU=globalThis,K=(U,Z)=>{let H=Symbol.for(U);if(!(H in YU))YU[H]=Z();return YU[H]};var p=K("@swarm.ing/pieui:context:pieConfig",()=>MZ(null)),u=()=>{let U=RZ(p);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},d=()=>{let{apiServer:U}=u();return U},r=d,t=()=>{let{centrifugeServer:U}=u();return U};var x=()=>{let{enableRenderingLog:U}=u();return U},jU=x;var BU="__piedemo__";import{createContext as LZ}from"react";import{Centrifuge as fU}from"centrifuge";var CU=K("@swarm.ing/pieui:centrifuge-cache",()=>new Map),a=(U,Z)=>{if(!Z)return null;let H=`${U}::${Z}`,$=CU.get(H);if($)return $;async function J(){let T=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!T.ok){if(T.status===401||T.status===403)throw new fU.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${T.status}`)}return(await T.json()).token}let z=new fU(Z,{getToken:J});return CU.set(H,z),z},wZ=K("@swarm.ing/pieui:context:centrifuge",()=>LZ(null)),y=wZ;import{io as NZ}from"socket.io-client";import{createContext as EZ}from"react";var xU=K("@swarm.ing/pieui:socket-cache",()=>new Map),e=(U)=>{let Z=xU.get(U);if(Z)return Z;let H=NZ(U,{autoConnect:!1,transports:["websocket"]});return xU.set(U,H),H},jZ=K("@swarm.ing/pieui:context:socket",()=>EZ(null)),k=jZ;import fZ from"mitt";import{createContext as CZ,useCallback as xZ,useContext as yZ}from"react";function g(){return K("@swarm.ing/pieui:mitt-emitter",()=>fZ())}var yU=K("@swarm.ing/pieui:context:mitt",()=>CZ(null));function kZ(U){let Z=yZ(yU);return xZ((H,$)=>{(Z??g()).emit(`pie${H}_${U}`,$)},[U,Z])}var S=yU;import{jsx as mZ,jsxs as hZ,Fragment as vZ}from"react/jsx-runtime";var bZ=({card:U,data:Z,children:H,useSocketioSupport:$=!1,useCentrifugeSupport:J=!1,useMittSupport:z=!1,centrifugeChannel:T=void 0,methods:I=void 0,stored:G=void 0})=>{let X=jU(),D=SZ(I);if(D.current=I,X)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",Z),console.log("[PieCard] Component name:",Z?.name),console.log("[PieCard] Real-time support:",{socketio:$,centrifuge:J,mitt:z,centrifugeChannel:T}),console.log("[PieCard] Methods:",I?Object.keys(I):"none"),console.log("[PieCard] Has children:",!!H);let Q=qU(k),V=qU(y),Y=qU(S);if(OU(()=>{if(!Q||!$||!D.current||!Z.name){if(X&&$)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!Q,useSocketioSupport:$,hasMethods:!!D.current,hasDataName:!!Z?.name});return}let W=Object.keys(D.current??{}).map((B)=>{let O=`pie${B}_${Z.name}`;if(X)console.log(`[PieCard] Socket.IO registering event: ${O}`);let A=(_)=>{D.current?.[B]?.(_)};return Q.on(O,A),[O,A]});return()=>{W.forEach(([B,O])=>{if(X)console.log(`[PieCard] Socket.IO unregistering event: ${B}`);Q.off(B,O)})}},[Q,Z.name,$]),OU(()=>{if(!V||!J||!T||!Z.name){if(X&&J)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!V,useCentrifugeSupport:J,hasCentrifugeChannel:!!T,hasMethods:!!D.current,hasDataName:!!Z?.name});return}let W=Object.keys(D.current??{}).map((B)=>{let O=`pie${B}_${Z.name}_${T}`;if(X)console.log(`[PieCard] Centrifuge subscribing to channel: ${O}`);let A=V.newSubscription(O);return A.on("publication",(_)=>{if(X)console.log(`[PieCard] Centrifuge received data on ${O}:`,_.data);D.current?.[B]?.(_.data)}),A.subscribe(),A});return()=>{W.forEach((B)=>{if(X)console.log("[PieCard] Centrifuge unsubscribing from channel");B.unsubscribe(),V.removeSubscription(B)})}},[V,T,Z.name,J]),OU(()=>{if(!Y||!z||!Z.name){if(X&&z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!Y,useMittSupport:z,hasMethods:!!D.current,hasDataName:!!Z?.name});return}let q=Object.keys(D.current??{}),W={};return q.forEach((B)=>{let O=`pie${B}_${Z.name}`,A=(_)=>{if(X)console.log(`[PieCard] Mitt registering event: ${O}`);D.current?.[B]?.(_)};W[O]=A,Y.on(O,A)}),()=>{Object.entries(W).forEach(([B,O])=>{if(X)console.log(`[PieCard] Mitt unregistering event: ${B}`);Y.off(B,O)})}},[Y,Z.name,z]),X)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return hZ(vZ,{children:[mZ("input",{type:"hidden",name:Z.name,value:JSON.stringify(G)}),H]});return H},M=bZ;import{lazy as pZ}from"react";var v=new Map;function kU(U,Z){return Z.catch(()=>{if(v.get(U)===Z)v.delete(U)}),v.set(U,Z),Z}function QU(U,Z){return pZ(()=>{if(v.has(Z))return v.get(Z);return kU(Z,U().then((H)=>H))})}var SU=async(U,Z)=>{if(!Z)return;if(v.has(U))return v.get(U);return kU(U,Z().then((H)=>H))};var f=K("@swarm.ing/pieui:component-registry",()=>new Map),gZ=(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 Z={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!Z.component&&Z.loader)Z.component=QU(Z.loader,U.name),Z.isLazy=!0;return Z};function F(U){let Z=gZ(U);return f.set(Z.name,Z),Z.component}var cZ=(U)=>{U.forEach((Z)=>F(Z))},uZ=(U)=>{f.delete(U)},dZ=(U)=>{return f.has(U)},oZ=(U)=>{return f.get(U)?.metadata},o=(U)=>{return f.get(U)},lZ=()=>{return Array.from(f.keys())},iZ=()=>{return f.size},vU=()=>Array.from(f.values()).filter((U)=>U.isLazy&&typeof U.loader==="function").map((U)=>U.name),mU=(U)=>{let Z=f.get(U);if(!Z?.isLazy||typeof Z.loader!=="function")return;return SU(U,Z.loader)},bU=!1,sZ=()=>{if(bU||typeof window>"u")return;bU=!0;let U=navigator.connection;if(U?.saveData)return;if(U?.effectiveType&&["slow-2g","2g"].includes(U.effectiveType))return;let Z=vU(),H="requestIdleCallback"in window?(J)=>window.requestIdleCallback(J,{timeout:2000}):(J)=>window.setTimeout(J,300),$=(J)=>{if(J>=Z.length)return;H(()=>{Promise.resolve().then(()=>mU(Z[J])).catch(()=>{}).finally(()=>$(J+1))})};$(0)};import{useContext as hU,memo as TH}from"react";import{createContext as nZ}from"react";import{jsx as aZ,Fragment as tZ}from"react/jsx-runtime";var rZ=K("@swarm.ing/pieui:context:fallback",()=>nZ(aZ(tZ,{}))),N=rZ;import{createContext as eZ}from"react";var UH=K("@swarm.ing/pieui:context:lazyError",()=>eZ(void 0)),b=UH;import{Component as ZH,Suspense as HH}from"react";import{jsx as JH}from"react/jsx-runtime";var $H=2,zH=400;class c extends ZH{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<$H){let Z=zH*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},Z)}}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 JH(HH,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as WU}from"react/jsx-runtime";function GH({uiConfig:U,setUiAjaxConfiguration:Z}){let H=hU(N),$=hU(b),J=x();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:",!!Z);let z=o(U.card);if(!z?.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:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata});let T=z.component,I=WU(T,{data:U.data,content:U.content,setUiAjaxConfiguration:Z});if(z.isLazy){if(J)console.log("[UI] Rendering lazy component with Suspense:",z.name);return WU(c,{name:z.name,fallback:z.fallback?WU(z.fallback,{}):H,onError:$,children:I})}if(J)console.log("[UI] Rendering component directly:",z.name);return I}var w=TH(GH);import{useContext as pU}from"react";import{createContext as IH}from"react";var XH=K("@swarm.ing/pieui:context:uiRenderer",()=>IH(null)),E=XH;import{jsx as UU}from"react/jsx-runtime";function gU({uiConfig:U,setUiAjaxConfiguration:Z}){let H=pU(N),$=pU(b),J=x();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:",!!Z);let z=o(U.card);if(!z?.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:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata,hasFallback:!!z.fallback});if(z.fallback){if(J)console.log("[UILoading] Rendering fallback for:",z.name);let G=z.fallback;return UU(G,{})}if(J)console.log("[UILoading] No fallback, rendering full component:",z.name);let T=z.component,I=UU(E.Provider,{value:gU,children:UU(T,{data:U.data,content:U.content,setUiAjaxConfiguration:Z})});if(z.isLazy)return UU(c,{name:z.name,fallback:H,onError:$,children:I});return I}var DU=gU;import{useContext as YH}from"react";import{jsx as VU}from"react/jsx-runtime";var BH=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,sx:J}=U,z=YH(E)??w;return VU(M,{card:$,data:U,children:VU("div",{style:J,id:$,children:Z.map((T,I)=>{return VU(z,{uiConfig:T,setUiAjaxConfiguration:H},`children-${I}`)})})})},cU=BH;var qH=F({name:"SequenceCard",component:cU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as OH}from"react";import{jsx as uU}from"react/jsx-runtime";var QH=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$}=U,J=OH(E)??w;return uU(M,{card:$,data:U,children:Z.map((z,T)=>{return uU(J,{uiConfig:z,setUiAjaxConfiguration:H},`children-${T}`)})})},dU=QH;var WH=F({name:"UnionCard",component:dU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as FH,useState as KH}from"react";import AH from"html-react-parser";import{useCallback as ZU,useEffect as DH,useRef as _U,useState as VH}from"react";function _H(){let U=new AudioContext,Z=U.createOscillator(),H=Z.connect(U.createMediaStreamDestination());Z.start();let $=H.stream.getAudioTracks()[0];return $.enabled=!1,$}function FU(U=null,Z){let[H,$]=VH(!1),J=_U(null),z=_U(null),T=_U(null),I=ZU(async(Q,V=!0)=>{if(J.current)G();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")$(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))$(!1)},Y.ontrack=(P)=>{if(U)U.srcObject=P.streams[0]},V){let P=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack(P.getTracks()[0],P)}else{let P=_H();Y.addTrack(P)}let q=Y.createDataChannel("oai-events");z.current=q,T.current=new Promise((P)=>{q.addEventListener("open",()=>{P()})});let W=await Y.createOffer();await Y.setLocalDescription(W);let _=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:W.sdp,headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:_}),J.current=Y,await T.current},[U]),G=ZU(()=>{let Q=z.current;if(Q)Q.close();J.current?.getSenders()?.forEach((V)=>V.track?.stop()),J.current?.close(),$(!1),J.current=null,z.current=null,T.current=null},[U]),X=ZU((Q)=>{let V=z.current;if(!V){console.error("Data channel is not ready",Q);return}let Y=new Date().toLocaleTimeString();if(Q.event_id=Q.event_id||crypto.randomUUID(),V.send(JSON.stringify(Q)),!Q.timestamp)Q.timestamp=Y;Z?.(Q)},[Z,U]),D=ZU((Q)=>{if(!z.current){console.error("Data channel is not ready");return}let Y=()=>{X({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:Q}]}}),X({type:"response.create"})};if(T.current)T.current.then(Y);else Y()},[Z,U]);return DH(()=>{let Q=z.current;if(!Q)return;let V=(Y)=>{let q=JSON.parse(Y.data);if(!q.timestamp)q.timestamp=new Date().toLocaleTimeString();Z?.(q)};return Q.addEventListener("message",V),()=>{Q.removeEventListener("message",V)}},[Z,U]),{isSessionActive:H,startSession:I,stopSession:G,sendTextMessage:D}}import{jsx as MH}from"react/jsx-runtime";var PH=({data:U})=>{let{html:Z,useSocketioSupport:H,useCentrifugeSupport:$,useMittSupport:J,centrifugeChannel:z}=U,[T,I]=KH(Z),{isSessionActive:G,startSession:X,sendTextMessage:D}=FU(null,(q)=>{if(console.log(q.type,q.type==="response.output_text.delta"&&q.delta),q.type==="response.output_text.delta"&&q.delta)I((W)=>W+q.delta)});return FH(()=>{I(Z)},[Z]),MH(M,{card:"HTMLEmbedCard",data:U,methods:{update:(q)=>{I(q.value)},generateUsingAI:async(q)=>{try{if(!G&&q.token)await X(q.token,!1);D(q.prompt)}catch(W){console.error("Failed to generate using AI",W)}},initializeAI:async(q)=>{if(!G&&q.token)await X(q.token,!1)}},useCentrifugeSupport:$,useSocketioSupport:H,useMittSupport:J,centrifugeChannel:z,children:AH(T)})},oU=PH;var RH=F({name:"HTMLEmbedCard",component:oU,metadata:{author:"Swarm.ing"}});import{useEffect as LH,useState as wH}from"react";import{jsx as lU}from"react/jsx-runtime";var NH=({data:U})=>{let{name:Z,value:H,useSocketioSupport:$,useCentrifugeSupport:J,useMittSupport:z,centrifugeChannel:T}=U,[I,G]=wH(H);return LH(()=>{G(H)},[H]),lU(M,{card:"HiddenCard",data:U,useSocketioSupport:$,useCentrifugeSupport:J,useMittSupport:z,centrifugeChannel:T,methods:{update:({value:X})=>{G(X)}},children:lU("input",{type:"hidden",id:Z,name:Z,value:I})})},iU=NH;var EH=F({name:"HiddenCard",component:iU,metadata:{author:"Swarm.ing"}});import{useContext as sU,useEffect as CH}from"react";import{createContext as jH}from"react";var fH=K("@swarm.ing/pieui:context:navigate",()=>jH(void 0)),C=fH;import{jsx as kH,Fragment as yH}from"react/jsx-runtime";var xH=({data:U})=>{let{url:Z}=U,H=sU(C),$=sU(N);return CH(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Z))window.location.href=Z;else H?.(Z)},[Z,H]),kH(yH,{children:$})},nU=xH;var SH=F({name:"AutoRedirectCard",component:nU,metadata:{author:"Swarm.ing"}});import{Bounce as bH,Slide as vH,Zoom as mH,Flip as hH}from"react-toastify";import{toast as pH,ToastContainer as gH}from"react-toastify";import{useContext as cH,useMemo as uH,useRef as dH}from"react";import{jsx as KU,Fragment as rH}from"react/jsx-runtime";var oH={bounce:bH,slide:vH,zoom:mH,flip:hH},lH=(U)=>{let Z={...U,type:U.alertType,transition:U.transition?oH[U.transition]:void 0,position:U.position??"bottom-right",autoClose:U.autoClose??3000,style:{backgroundColor:"black",...U.sx}};pH(U.message,Z)},iH=(U)=>{console.log("Log event",U)},sH=(U)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let Z=()=>{try{new window.Notification(U.title,{body:U.message??U.subtitle,icon:U.icon,silent:U.silent})}catch($){console.error("[IOEventsCard] Failed to show notification",$)}},H=window.Notification.permission;if(H==="granted"){Z();return}if(H==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then(($)=>{if($==="granted")Z()})},nH=({data:U})=>{let{useCentrifugeSupport:Z,useSocketioSupport:H,useMittSupport:$,centrifugeChannel:J}=U,z=cH(C),T=dH(z);T.current=z;let I=uH(()=>({alert:lH,log:iH,push:sH,redirect:(G)=>{if(G.to){let X=G.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(X))window.location.href=X;else T.current?.(X)}else window.location.reload()},reload:(G)=>{if(G.to){let X=G.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(X))window.location.href=X;else T.current?.(X)}else window.location.reload()}}),[]);return KU(rH,{children:KU(M,{card:"IOEventsCard",data:U,useCentrifugeSupport:Z,useSocketioSupport:H,useMittSupport:$,centrifugeChannel:J,methods:I,children:KU(gH,{})})})},rU=nH;var tH=F({name:"IOEventsCard",component:rU,metadata:{author:"Swarm.ing"}});import{useEffect as tU,useState as aH}from"react";import{jsx as aU}from"react/jsx-runtime";var eH=({data:U})=>{let{name:Z,key:H,value:$,useSocketioSupport:J,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:I}=U,[G,X]=aH($);return tU(()=>{X($)},[$]),tU(()=>{if(typeof window>"u")return;sessionStorage.setItem(H,G)},[H,G]),aU(M,{card:"SessionStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:I,methods:{update:({value:D})=>{X(D)},remove:()=>{sessionStorage.removeItem(H),X("")}},children:aU("input",{type:"hidden",id:Z,name:Z,value:G})})},eU=eH;var U$=F({name:"SessionStorageCard",component:eU,metadata:{author:"PieData"}});import{useEffect as UZ,useState as Z$}from"react";import{jsx as ZZ}from"react/jsx-runtime";var H$=({data:U})=>{let{name:Z,key:H,value:$,useSocketioSupport:J,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:I}=U,[G,X]=Z$($);return UZ(()=>{X($)},[$]),UZ(()=>{if(typeof window>"u")return;localStorage.setItem(H,G)},[H,G]),ZZ(M,{card:"DeviceStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:I,methods:{update:({value:D})=>{X(D)},remove:()=>{localStorage.removeItem(H),X("")}},children:ZZ("input",{type:"hidden",id:Z,name:Z,value:G})})},HZ=H$;var $$=F({name:"DeviceStorageCard",component:HZ,metadata:{author:"PieData"}});import{useCallback as AU,useContext as PU,useEffect as z$,useRef as J$,useState as $Z}from"react";import{jsx as zZ}from"react/jsx-runtime";var T$=({data:U,content:Z})=>{let{useLoader:H,noReturn:$,returnType:J,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:I,centrifugeChannel:G}=U,X=PU(N),D=PU(E)??w,[Q,V]=$Z(!1),[Y,q]=$Z(null),W=J$(Z),B=PU(S),O=AU((P)=>{if(P===null)V(!0);else if(V(!1),!$)W.current=P;if(!$)q(P)},[$]),A=AU((P)=>{W.current=P.content,q(P.content)},[]),_=AU((P)=>{if(P===null)V(!0);else if(V(!1),!$)for(let s of P)B?.emit(s.name,s.data)},[$,B]);if(z$(()=>{q(Z),V(!1)},[Z]),!Y&&H)return X;return zZ(M,{card:"AjaxGroupCard",data:U,methods:{changeContent:A},useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:I,centrifugeChannel:G,children:zZ(D,{uiConfig:Y??W.current,setUiAjaxConfiguration:J==="events"?_:O})})},JZ=T$;var G$=F({name:"AjaxGroupCard",component:JZ,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as TZ}from"react";import{jsx as MU}from"react/jsx-runtime";var I$=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,url:J,sx:z}=U,T=TZ(C),I=TZ(E)??w;return MU(M,{card:$,data:U,children:MU("div",{style:z,id:$,onClick:(X)=>{if(J)if(X.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))window.location.href=J;else T?.(J)},children:MU(I,{setUiAjaxConfiguration:H,uiConfig:Z})})})},GZ=I$;var X$=F({name:"BoxCard",component:GZ,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as Y$}from"react";import{jsx as RU}from"react/jsx-runtime";var B$=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,sx:J}=U,z=Y$(E)??w;return RU(M,{card:$,data:U,children:RU("div",{style:J,id:$,children:Z.map((T,I)=>{return RU(z,{uiConfig:T,setUiAjaxConfiguration:H},`children-${I}`)})})})},IZ=B$;var q$=F({name:"OneOfCard",component:IZ,metadata:{author:"Swarm.ing",description:"Different variants"}});import{useMemo as i}from"react";import{QueryClient as E$,QueryClientProvider as j$,useQuery as f$}from"@tanstack/react-query";import{useContext as A$,useEffect as P$}from"react";import{useEffect as O$,useState as Q$}from"react";var HU=new Map,$U=new Map;function zU(U,Z){let H=`${U}::${Z}`,$=U?HU.get(H):void 0,[J,z]=Q$($??null);return O$(()=>{if(!U)return;if(HU.has(H)){z(HU.get(H));return}let T=$U.get(H);if(!T)T=fetch(U+`api/support/${Z}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return HU.set(H,G),$U.delete(H),G}).catch((G)=>{throw $U.delete(H),G}),$U.set(H,T);let I=!1;return T.then((G)=>{if(!I)z(G)}).catch(()=>{}),()=>{I=!0}},[U,Z,H]),J}var W$=(U)=>{let Z=document.cookie?document.cookie.split(";"):[];for(let H of Z){let $=H.indexOf("=");if(($===-1?H:H.slice(0,$)).trim()===U){let z=$===-1?"":H.slice($+1).trim();try{return decodeURIComponent(z)}catch{return z}}}return null},D$={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,Z){return(U==="local"?window.localStorage:window.sessionStorage).getItem(Z)},readCookie:W$,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let Z=document.getElementsByName(U);if(!Z.length)return null;let H=Z[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()}},XZ=D$;var V$={};function m(){return V$}var YZ=new Map;var BZ=(U)=>{return YZ.has(U)?YZ.get(U):null};var qZ,_$={isClient(){return!0},readSid(){return qZ},setSid(U){qZ=U},readWebStorage(U,Z){let H=m(),$=U==="local"?H.storage:H.sessionStorage;return $?$.getItem(Z):null},async readWebStorageAsync(U,Z){let H=m(),$=U==="local"?H.asyncStorage:H.asyncSessionStorage;if($)return $.getItem(Z);let J=U==="local"?H.storage:H.sessionStorage;return J?J.getItem(Z):null},readCookie(U){let Z=m();return Z.getCookie?Z.getCookie(U):null},readUrlParams(U){let Z=m();return Z.getRouteParams?Z.getRouteParams(U):[]},readDomInput(U){let Z=m();return Z.getInput?Z.getInput(U):BZ(U)},submitGlobalForm(){m().submitForm?.()}},OZ=_$;var F$=typeof navigator<"u"&&navigator.product==="ReactNative",K$=F$?OZ:XZ,R=K$;var l=K("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function QZ(){l.resolve?.()}function LU(){if(!R.isClient())return Promise.resolve();if(R.readSid()!==void 0)return Promise.resolve();if(!l.promise)l.promise=new Promise((U)=>{l.resolve=()=>{U()}});return l.promise}var M$=({children:U})=>{let Z=A$(k),H=r(),$=zU(H,"socketIO"),J=(z)=>{if(R.isClient())R.setSid(z.sid),QZ(),console.log(`SocketIO initialized: ${R.readSid()}`)};return P$(()=>{if(!Z)return;let z=()=>{console.log("SocketIO connected")},T=(I)=>{console.log(`SocketIO disconnected: ${I}`),Z.connect()};if($)Z.on("pieinit",J),Z.on("connect",z),Z.on("disconnect",T),Z.connect();return()=>{if($)Z.off("pieinit",J),Z.off("connect",z),Z.off("disconnect",T),Z.disconnect()}},[Z,$]),U},JU=M$;import{useContext as R$,useEffect as L$}from"react";var w$=({children:U})=>{let Z=R$(y),H=r(),$=zU(H,"centrifuge");return L$(()=>{if(!Z)return;let J=()=>{console.log("Centrifuge connected")},z=(T)=>{console.log("Centrifuge disconnected:",T)};if($)Z.on("connected",J),Z.on("disconnected",z),Z.connect();return()=>{if($)Z.disconnect()}},[Z,$]),U},TU=w$;import{createAxiosDateTransformer as C$}from"axios-date-transformer";import{jsx as N$}from"react/jsx-runtime";function WZ(U,Z,H){if(!Z)return H;let $=U.replace(/^\//,""),J=Z[$];if(!J)return H;return N$(DU,{uiConfig:J})}import{jsx as L,Fragment as k$}from"react/jsx-runtime";var x$=({location:U,fallback:Z,piecache:H,onError:$,queryOptions:J,disableGlobalForm:z})=>{let T=d(),I=t(),G=x(),X=i(()=>C$({baseURL:T||""}),[T]),D=i(()=>g(),[]),Q=i(()=>T?e(T):null,[T]),V=i(()=>T?a(T,I):null,[T,I]),{data:Y,isLoading:q,error:W}=f$({queryKey:["uiConfig",U.pathname+U.search,T],enabled:!!T,queryFn:async()=>{let O=new URLSearchParams(U.search);O.set("__pieroot","web");let A="/api/content"+U.pathname+"?"+O.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",A);let _=await X.get(A,{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:(O)=>Math.min(1000*2**O,30000),...J}),B=WZ(U.pathname,H,Z);if(!T)return B??null;if(G)console.log("[PieRoot] Rendering with location:",U),console.log("[PieRoot] API_SERVER:",T),console.log("[PieRoot] CENTRIFUGE_SERVER:",I),console.log("[PieRoot] Fallback provided:",!!Z),console.log("[PieRoot] Piecache provided:",!!H);if(W){if(G)console.error("[PieRoot] Error fetching UI configuration:",W),console.error("[PieRoot] Error details:",{message:W.message,status:W.response?.status,data:W.response?.data});return $?.(W),B}if(q||!Y){if(G)console.log("[PieRoot] Loading state:",{isLoading:q,hasUiConfiguration:!!Y});return B}if(G)console.log("[PieRoot] UI configuration loaded successfully:",Y),console.log("[PieRoot] Rendering UI with configuration");return L(S.Provider,{value:D,children:L(k.Provider,{value:Q,children:L(y.Provider,{value:V,children:L(N.Provider,{value:Z??L(k$,{}),children:L(JU,{children:L(TU,{children:z?L(w,{uiConfig:Y}):L("form",{id:"piedata_global_form",action:T+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:L(w,{uiConfig:Y})})})})})})})})},y$=(U)=>{let Z=i(()=>new E$,[]),H=U.queryClient??Z;return L(C.Provider,{value:U.onNavigate,children:L(p.Provider,{value:U.config,children:L(b.Provider,{value:U.onError,children:L(j$,{client:H,children:L(x$,{...U})})})})})},wU=y$;import{useMemo as NU,useState as S$}from"react";import{QueryClient as b$,QueryClientProvider as v$}from"@tanstack/react-query";import{jsx as j,Fragment as p$}from"react/jsx-runtime";var m$=({location:U,fallback:Z,children:H,disableGlobalForm:$})=>{let J=d(),z=t(),T=x(),I=NU(()=>g(),[]),G=NU(()=>J?e(J):null,[J]),X=NU(()=>J?a(J,z):null,[J,z]);if(T)console.log("[PieRoot] Rendering with location:",U),console.log("[PieRoot] API_SERVER:",J),console.log("[PieRoot] CENTRIFUGE_SERVER:",z),console.log("[PieRoot] Fallback provided:",!!Z);return j(S.Provider,{value:I,children:j(k.Provider,{value:G,children:j(y.Provider,{value:X,children:j(N.Provider,{value:Z??j(p$,{}),children:j(JU,{children:j(TU,{children:$?H:j("form",{id:"piedata_global_form",action:J+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:H})})})})})})})},h$=(U)=>{let[Z]=S$(()=>new b$),H=U.queryClient??Z;return j(C.Provider,{value:U.onNavigate,children:j(p.Provider,{value:U.config,children:j(b.Provider,{value:U.onError,children:j(v$,{client:H,children:j(m$,{...U})})})})})},g$=h$;import{useMemo as c$}from"react";import{jsx as DZ}from"react/jsx-runtime";var u$=DZ("div",{style:{padding:16,fontFamily:"system-ui, sans-serif",color:"#888"},children:"Loading card…"}),d$=({apiServer:U,pathname:Z="/",search:H="",centrifugeServer:$,fallback:J,enableRenderingLog:z=!1})=>{let T=U??(typeof process<"u"?process.env.PIE_API_SERVER:void 0)??"",I=c$(()=>({apiServer:T,centrifugeServer:$,enableRenderingLog:z,pageProcessor:"web"}),[T,$,z]);return DZ(wU,{location:{pathname:Z,search:H},config:I,fallback:J??u$,onNavigate:(X)=>{if(typeof window<"u")window.history.pushState(null,"",X)}})},o$=d$;import{useMemo as l$}from"react";var i$=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],s$=new Set(["telegram:cloud","telegram:secure"]),GU=(U)=>{if(U==="sid")return{source:"sid",key:"sid"};for(let Z of i$){let H=Z+":";if(U.startsWith(H))return{source:Z,key:U.slice(H.length)}}return{source:"dom",key:U}},VZ=(U,Z=!1)=>{let{source:H,key:$}=GU(U);if(H==="sid"){let z=R.readSid();if(!z)throw Error("SocketIO isn't initialized properly");return[z]}if(H==="localStorage"||H==="sessionStorage")try{let z=R.readWebStorage(H==="localStorage"?"local":"session",$);if(z===null){if(Z)console.warn(`No ${H} value found for key ${$}`);return[]}return[z]}catch(z){if(Z)console.warn(`Failed to read ${H} key ${$}:`,z);return[]}if(H==="cookie"){let z=R.readCookie($);if(z===null){if(Z)console.warn(`No cookie found for key ${$}`);return[]}return[z]}if(H==="url"){let z=R.readUrlParams($);if(!z.length&&Z)console.warn(`No URL query param found for key ${$}`);return z}if(s$.has(H)){if(Z)console.warn(`Source ${H} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let J=R.readDomInput($);if(J===null){if(Z)console.warn(`No input found with name ${$}`);return[]}return J},n$=(U,Z,H)=>{let $=window.Telegram?.WebApp,J=U==="telegram:cloud"?$?.CloudStorage:$?.SecureStorage,z=U==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!J){if(H)console.warn(`${z} is not available`);return Promise.resolve([])}return new Promise((T)=>{try{J.getItem(Z,(I,G)=>{if(I){if(H)console.warn(`Failed to read ${z} key ${Z}:`,I);T([]);return}if(G==null||G===""){if(H)console.warn(`No ${z} value found for key ${Z}`);T([]);return}T([G])})}catch(I){if(H)console.warn(`Failed to read ${z} key ${Z}:`,I);T([])}})},_Z=async(U,Z=!1)=>{let{source:H,key:$}=GU(U);if(H==="telegram:cloud"||H==="telegram:secure")return n$(H,$,Z);if((H==="localStorage"||H==="sessionStorage")&&R.readWebStorageAsync)try{let J=await R.readWebStorageAsync(H==="localStorage"?"local":"session",$);if(J===null){if(Z)console.warn(`No ${H} value found for key ${$}`);return[]}return[J]}catch(J){if(Z)console.warn(`Failed to read ${H} key ${$}:`,J);return[]}return VZ(U,Z)},r$=(U,Z={},H=[],$,J)=>{let z=J?.renderingLogEnabled??!1,T=J?.timeout,I=J?.retryPolicy,G=I?.maxRetries??0,X=I?.baseDelay??1000,D=I?.retryOn??[502,503,504];if(z)console.log("Registering AJAX: ",$,Z,H);return async(Q={})=>{if(!R.isClient()){if(z)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let V=J?.apiServer;if(!V){if(z)console.warn("AJAX skipped: apiServer is missing");return}if(!$||!U){if(z)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(H.includes("sid"))await LU();let Y=new FormData;for(let[B,O]of Object.entries({...Z,...Q}))Y.append(B,O);for(let B of H){let{key:O}=GU(B);for(let A of await _Z(B,z))Y.append(O,A)}let q=V+"api/ajax_content"+$;U(null);let W;for(let B=0;B<=G;B++){if(B>0){let _=X*2**(B-1);if(z)console.log(`AJAX retry ${B}/${G} after ${_}ms`);await new Promise((P)=>setTimeout(P,_))}let O=T!=null?new AbortController:null,A=O&&setTimeout(()=>O.abort(),T);try{let _=await fetch(q,{method:"POST",body:Y,signal:O?.signal});if(A)clearTimeout(A);if(!_.ok&&D.includes(_.status)&&B<G){W=Error(`HTTP ${_.status}`);continue}let s=(_.headers.get("content-type")||"").includes("application/json");if(!!_.body?.getReader&&!s){let n=_.body.getReader(),FZ=new TextDecoder,h="";while(!0){let{done:IU,value:KZ}=await n.read();if(IU)break;h+=FZ.decode(KZ,{stream:!0});let EU=h.split(`
3
- `);h=EU.pop()??"";for(let AZ of EU){let XU=AZ.trim();if(!XU)continue;try{let PZ=JSON.parse(XU);U([PZ])}catch{if(z)console.warn("Failed to parse streamed line:",XU)}}}if(h.trim())try{let IU=JSON.parse(h);U([IU])}catch{if(z)console.warn("Failed to parse final streamed line:",h)}return{}}else{let n=await _.json();return U(n),n}}catch(_){if(A)clearTimeout(A);if(W=_,B<G)continue;if(z)console.error("AJAX request failed:",_);return U(null),_}}if(z)console.error("AJAX request failed after retries:",W);return U(null),W}},t$=(U,Z={},H=[],$,J)=>{let{apiServer:z,enableRenderingLog:T}=u(),I=JSON.stringify(Z),G=JSON.stringify(H),X=JSON.stringify(J);return l$(()=>r$(U,Z,H,$,{apiServer:z,renderingLogEnabled:T,timeout:J?.timeout,retryPolicy:J?.retryPolicy}),[U,I,G,$,z,T,X])};import{clsx as a$}from"clsx";import{twMerge as e$}from"tailwind-merge";function Uz(...U){return e$(a$(U))}var Zz=()=>{R.submitGlobalForm()};var Hz=(U,Z)=>`${U}${BU}${Z}`;export{kZ as usePieEmit,t$ as useAjaxSubmit,uZ as unregisterComponent,QU as trackLazy,Zz as submitGlobalForm,f as registry,F as registerPieComponent,cZ as registerMultipleComponents,_Z as readAjaxKeyAsync,VZ as readAjaxKey,mU as preloadComponent,sZ as prefetchLazyComponents,Hz as pieName,GU as parseDepName,dZ as hasComponent,iZ as getRegistrySize,o as getRegistryEntry,vU as getLazyComponentNames,g as getEmitter,oZ as getComponentMeta,lZ as getAllRegisteredComponents,Uz as cn,WH as UnionCard,E as UIRendererContext,DU as UILoading,w as UI,k as SocketIOContext,U$ as SessionStorageCard,qH as SequenceCard,wU as PieRoot,o$ as PiePreviewRoot,p as PieConfigContext,M as PieCard,g$ as PieBaseRoot,BU as PIEBREAK,q$ as OneOfCard,S as MittContext,tH as IOEventsCard,EH as HiddenCard,RH as HTMLEmbedCard,N as FallbackContext,$$ as DeviceStorageCard,y as CentrifugeIOContext,X$ as BoxCard,SH as AutoRedirectCard,G$ as AjaxGroupCard};
2
+ import{useContext as QU,useEffect as WU,useRef as pU}from"react";import{createContext as EZ,useContext as jZ}from"react";var qU=globalThis,A=(U,Z)=>{let $=Symbol.for(U);if(!($ in qU))qU[$]=Z();return qU[$]};var d=A("@swarm.ing/pieui:context:pieConfig",()=>EZ(null)),l=()=>{let U=jZ(d);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},i=()=>{let{apiServer:U}=l();return U},t=i,a=()=>{let{centrifugeServer:U}=l();return U};var k=()=>{let{enableRenderingLog:U}=l();return U},fU=k;var OU="__piedemo__";import{createContext as CZ}from"react";import{Centrifuge as xU}from"centrifuge";var kU=A("@swarm.ing/pieui:centrifuge-cache",()=>new Map),e=(U,Z)=>{if(!Z)return null;let $=`${U}::${Z}`,z=kU.get($);if(z)return z;async function T(){let J=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!J.ok){if(J.status===401||J.status===403)throw new xU.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${J.status}`)}return(await J.json()).token}let H=new xU(Z,{getToken:T});return kU.set($,H),H},fZ=A("@swarm.ing/pieui:context:centrifuge",()=>CZ(null)),y=fZ;import{io as xZ}from"socket.io-client";import{createContext as kZ}from"react";var yU=A("@swarm.ing/pieui:socket-cache",()=>new Map),UU=(U)=>{let Z=yU.get(U);if(Z)return Z;let $=xZ(U,{autoConnect:!1,transports:["websocket"]});return yU.set(U,$),$},yZ=A("@swarm.ing/pieui:context:socket",()=>kZ(null)),S=yZ;import SZ from"mitt";import{createContext as bZ,useCallback as vZ,useContext as mZ}from"react";function c(){return A("@swarm.ing/pieui:mitt-emitter",()=>SZ())}var SU=A("@swarm.ing/pieui:context:mitt",()=>bZ(null));function pZ(U){let Z=mZ(SU);return vZ(($,z)=>{(Z??c()).emit(`pie${$}_${U}`,z)},[U,Z])}var b=SU;function bU(U){return U.wasRecovering===!0&&U.recovered===!1}function vU(U){return U.recoverable===!1}function mU(U,Z,$){let z=U.getSubscription(Z);if(z)return{subscription:z,createdHere:!1};return{subscription:U.newSubscription(Z,$),createdHere:!0}}import{jsx as uZ,jsxs as dZ,Fragment as gZ}from"react/jsx-runtime";var hZ=({card:U,data:Z,children:$,useSocketioSupport:z=!1,useCentrifugeSupport:T=!1,useMittSupport:H=!1,centrifugeChannel:J=void 0,methods:G=void 0,stored:I=void 0,onResync:Y=void 0})=>{let D=fU(),O=pU(G);O.current=G;let V=pU(Y);if(V.current=Y,D)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",Z),console.log("[PieCard] Component name:",Z?.name),console.log("[PieCard] Real-time support:",{socketio:z,centrifuge:T,mitt:H,centrifugeChannel:J}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!$);let B=QU(S),q=QU(y),_=QU(b);if(WU(()=>{if(!B||!z||!O.current||!Z.name){if(D&&z)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!B,useSocketioSupport:z,hasMethods:!!O.current,hasDataName:!!Z?.name});return}let P=Object.keys(O.current??{}).map((W)=>{let X=`pie${W}_${Z.name}`;if(D)console.log(`[PieCard] Socket.IO registering event: ${X}`);let Q=(C)=>{O.current?.[W]?.(C)};return B.on(X,Q),[X,Q]});return()=>{P.forEach(([W,X])=>{if(D)console.log(`[PieCard] Socket.IO unregistering event: ${W}`);B.off(W,X)})}},[B,Z.name,z]),WU(()=>{if(!q||!T||!J||!Z.name){if(D&&T)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!q,useCentrifugeSupport:T,hasCentrifugeChannel:!!J,hasMethods:!!O.current,hasDataName:!!Z?.name});return}let P=Object.keys(O.current??{}).map((W)=>{let X=`pie${W}_${Z.name}_${J}`;if(D)console.log(`[PieCard] Centrifuge subscribing to channel: ${X}`);let{subscription:Q,createdHere:C}=mU(q,X,{recoverable:!0,positioned:!0}),XU=(p)=>{if(D)console.log(`[PieCard] Centrifuge received data on ${X}:`,p.data);O.current?.[W]?.(p.data)},m=(p)=>{if(vU(p))console.warn(`[PieCard] Centrifuge channel ${X} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(bU(p)){if(D)console.log(`[PieCard] Centrifuge recovery gap on ${X}; requesting resync`);V.current?.({channel:X,reason:"gap"})}};return Q.on("publication",XU),Q.on("subscribed",m),Q.subscribe(),{subscription:Q,createdHere:C,onPublication:XU,onSubscribed:m}});return()=>{P.forEach(({subscription:W,createdHere:X,onPublication:Q,onSubscribed:C})=>{if(D)console.log("[PieCard] Centrifuge unsubscribing from channel");if(W.off("publication",Q),W.off("subscribed",C),X)W.unsubscribe(),q.removeSubscription(W)})}},[q,J,Z.name,T]),WU(()=>{if(!_||!H||!Z.name){if(D&&H)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!_,useMittSupport:H,hasMethods:!!O.current,hasDataName:!!Z?.name});return}let F=Object.keys(O.current??{}),P={};return F.forEach((W)=>{let X=`pie${W}_${Z.name}`,Q=(C)=>{if(D)console.log(`[PieCard] Mitt registering event: ${X}`);O.current?.[W]?.(C)};P[X]=Q,_.on(X,Q)}),()=>{Object.entries(P).forEach(([W,X])=>{if(D)console.log(`[PieCard] Mitt unregistering event: ${W}`);_.off(W,X)})}},[_,Z.name,H]),D)console.log("[PieCard] Rendering complete, returning children");if(I!==void 0)return dZ(gZ,{children:[uZ("input",{type:"hidden",name:Z.name,value:JSON.stringify(I)}),$]});return $},M=hZ;import{lazy as cZ}from"react";var h=new Map;function hU(U,Z){return Z.catch(()=>{if(h.get(U)===Z)h.delete(U)}),h.set(U,Z),Z}function DU(U,Z){return cZ(()=>{if(h.has(Z))return h.get(Z);return hU(Z,U().then(($)=>$))})}var gU=async(U,Z)=>{if(!Z)return;if(h.has(U))return h.get(U);return hU(U,Z().then(($)=>$))};var f=A("@swarm.ing/pieui:component-registry",()=>new Map),oZ=(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 Z={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!Z.component&&Z.loader)Z.component=DU(Z.loader,U.name),Z.isLazy=!0;return Z};function K(U){let Z=oZ(U);return f.set(Z.name,Z),Z.component}var lZ=(U)=>{U.forEach((Z)=>K(Z))},iZ=(U)=>{f.delete(U)},sZ=(U)=>{return f.has(U)},rZ=(U)=>{return f.get(U)?.metadata},s=(U)=>{return f.get(U)},nZ=()=>{return Array.from(f.keys())},tZ=()=>{return f.size},dU=()=>Array.from(f.values()).filter((U)=>U.isLazy&&typeof U.loader==="function").map((U)=>U.name),cU=(U)=>{let Z=f.get(U);if(!Z?.isLazy||typeof Z.loader!=="function")return;return gU(U,Z.loader)},uU=!1,aZ=()=>{if(uU||typeof window>"u")return;uU=!0;let U=navigator.connection;if(U?.saveData)return;if(U?.effectiveType&&["slow-2g","2g"].includes(U.effectiveType))return;let Z=dU(),$="requestIdleCallback"in window?(T)=>window.requestIdleCallback(T,{timeout:2000}):(T)=>window.setTimeout(T,300),z=(T)=>{if(T>=Z.length)return;$(()=>{Promise.resolve().then(()=>cU(Z[T])).catch(()=>{}).finally(()=>z(T+1))})};z(0)};import{useContext as oU,memo as Y$}from"react";import{createContext as eZ}from"react";import{jsx as $$,Fragment as Z$}from"react/jsx-runtime";var U$=A("@swarm.ing/pieui:context:fallback",()=>eZ($$(Z$,{}))),N=U$;import{createContext as z$}from"react";var H$=A("@swarm.ing/pieui:context:lazyError",()=>z$(void 0)),v=H$;import{Component as T$,Suspense as J$}from"react";import{jsx as X$}from"react/jsx-runtime";var I$=2,G$=400;class o extends T${state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<I$){let Z=G$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState(($)=>({failed:!1,attempt:$.attempt+1}))},Z)}}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 X$(J$,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as _U}from"react/jsx-runtime";function B$({uiConfig:U,setUiAjaxConfiguration:Z}){let $=oU(N),z=oU(v),T=k();if(T)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:",!!Z);let H=s(U.card);if(!H?.component){if(T)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return $}if(T)console.log("[UI] Found component in registry:",{name:H.name,isLazy:H.isLazy,hasMetadata:!!H.metadata});let J=H.component,G=_U(J,{data:U.data,content:U.content,setUiAjaxConfiguration:Z});if(H.isLazy){if(T)console.log("[UI] Rendering lazy component with Suspense:",H.name);return _U(o,{name:H.name,fallback:H.fallback?_U(H.fallback,{}):$,onError:z,children:G})}if(T)console.log("[UI] Rendering component directly:",H.name);return G}var w=Y$(B$);import{useContext as lU}from"react";import{createContext as q$}from"react";var O$=A("@swarm.ing/pieui:context:uiRenderer",()=>q$(null)),E=O$;import{jsx as ZU}from"react/jsx-runtime";function iU({uiConfig:U,setUiAjaxConfiguration:Z}){let $=lU(N),z=lU(v),T=k();if(T)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:",!!Z);let H=s(U.card);if(!H?.component){if(T)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return $}if(T)console.log("[UILoading] Found component in registry:",{name:H.name,isLazy:H.isLazy,hasMetadata:!!H.metadata,hasFallback:!!H.fallback});if(H.fallback){if(T)console.log("[UILoading] Rendering fallback for:",H.name);let I=H.fallback;return ZU(I,{})}if(T)console.log("[UILoading] No fallback, rendering full component:",H.name);let J=H.component,G=ZU(E.Provider,{value:iU,children:ZU(J,{data:U.data,content:U.content,setUiAjaxConfiguration:Z})});if(H.isLazy)return ZU(o,{name:H.name,fallback:$,onError:z,children:G});return G}var VU=iU;import{useContext as Q$}from"react";import{jsx as FU}from"react/jsx-runtime";var W$=({data:U,content:Z,setUiAjaxConfiguration:$})=>{let{name:z,sx:T}=U,H=Q$(E)??w;return FU(M,{card:z,data:U,children:FU("div",{style:T,id:z,children:Z.map((J,G)=>{return FU(H,{uiConfig:J,setUiAjaxConfiguration:$},`children-${G}`)})})})},sU=W$;var D$=K({name:"SequenceCard",component:sU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as _$}from"react";import{jsx as rU}from"react/jsx-runtime";var V$=({data:U,content:Z,setUiAjaxConfiguration:$})=>{let{name:z}=U,T=_$(E)??w;return rU(M,{card:z,data:U,children:Z.map((H,J)=>{return rU(T,{uiConfig:H,setUiAjaxConfiguration:$},`children-${J}`)})})},nU=V$;var F$=K({name:"UnionCard",component:nU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as M$,useState as R$}from"react";import L$ from"html-react-parser";import{useCallback as $U,useEffect as K$,useRef as KU,useState as A$}from"react";function P$(){let U=new AudioContext,Z=U.createOscillator(),$=Z.connect(U.createMediaStreamDestination());Z.start();let z=$.stream.getAudioTracks()[0];return z.enabled=!1,z}function AU(U=null,Z){let[$,z]=A$(!1),T=KU(null),H=KU(null),J=KU(null),G=$U(async(O,V=!0)=>{if(T.current)I();let B=new RTCPeerConnection;if(B.onconnectionstatechange=()=>{if(B.connectionState==="connected")z(!0);else if(["disconnected","failed","closed"].includes(B.connectionState))z(!1)},B.ontrack=(Q)=>{if(U)U.srcObject=Q.streams[0]},V){let Q=await navigator.mediaDevices.getUserMedia({audio:!0});B.addTrack(Q.getTracks()[0],Q)}else{let Q=P$();B.addTrack(Q)}let q=B.createDataChannel("oai-events");H.current=q,J.current=new Promise((Q)=>{q.addEventListener("open",()=>{Q()})});let _=await B.createOffer();await B.setLocalDescription(_);let X=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:_.sdp,headers:{Authorization:`Bearer ${O}`,"Content-Type":"application/sdp"}})).text();await B.setRemoteDescription({type:"answer",sdp:X}),T.current=B,await J.current},[U]),I=$U(()=>{let O=H.current;if(O)O.close();T.current?.getSenders()?.forEach((V)=>V.track?.stop()),T.current?.close(),z(!1),T.current=null,H.current=null,J.current=null},[U]),Y=$U((O)=>{let V=H.current;if(!V){console.error("Data channel is not ready",O);return}let B=new Date().toLocaleTimeString();if(O.event_id=O.event_id||crypto.randomUUID(),V.send(JSON.stringify(O)),!O.timestamp)O.timestamp=B;Z?.(O)},[Z,U]),D=$U((O)=>{if(!H.current){console.error("Data channel is not ready");return}let B=()=>{Y({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:O}]}}),Y({type:"response.create"})};if(J.current)J.current.then(B);else B()},[Z,U]);return K$(()=>{let O=H.current;if(!O)return;let V=(B)=>{let q=JSON.parse(B.data);if(!q.timestamp)q.timestamp=new Date().toLocaleTimeString();Z?.(q)};return O.addEventListener("message",V),()=>{O.removeEventListener("message",V)}},[Z,U]),{isSessionActive:$,startSession:G,stopSession:I,sendTextMessage:D}}import{jsx as N$}from"react/jsx-runtime";var w$=({data:U})=>{let{html:Z,useSocketioSupport:$,useCentrifugeSupport:z,useMittSupport:T,centrifugeChannel:H}=U,[J,G]=R$(Z),{isSessionActive:I,startSession:Y,sendTextMessage:D}=AU(null,(q)=>{if(console.log(q.type,q.type==="response.output_text.delta"&&q.delta),q.type==="response.output_text.delta"&&q.delta)G((_)=>_+q.delta)});return M$(()=>{G(Z)},[Z]),N$(M,{card:"HTMLEmbedCard",data:U,methods:{update:(q)=>{G(q.value)},generateUsingAI:async(q)=>{try{if(!I&&q.token)await Y(q.token,!1);D(q.prompt)}catch(_){console.error("Failed to generate using AI",_)}},initializeAI:async(q)=>{if(!I&&q.token)await Y(q.token,!1)}},useCentrifugeSupport:z,useSocketioSupport:$,useMittSupport:T,centrifugeChannel:H,children:L$(J)})},tU=w$;var E$=K({name:"HTMLEmbedCard",component:tU,metadata:{author:"Swarm.ing"}});import{useEffect as j$,useState as C$}from"react";import{jsx as aU}from"react/jsx-runtime";var f$=({data:U})=>{let{name:Z,value:$,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:H,centrifugeChannel:J}=U,[G,I]=C$($);return j$(()=>{I($)},[$]),aU(M,{card:"HiddenCard",data:U,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:H,centrifugeChannel:J,methods:{update:({value:Y})=>{I(Y)}},children:aU("input",{type:"hidden",id:Z,name:Z,value:G})})},eU=f$;var x$=K({name:"HiddenCard",component:eU,metadata:{author:"Swarm.ing"}});import{useContext as UZ,useEffect as S$}from"react";import{createContext as k$}from"react";var y$=A("@swarm.ing/pieui:context:navigate",()=>k$(void 0)),x=y$;import{jsx as m$,Fragment as v$}from"react/jsx-runtime";var b$=({data:U})=>{let{url:Z}=U,$=UZ(x),z=UZ(N);return S$(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Z))window.location.href=Z;else $?.(Z)},[Z,$]),m$(v$,{children:z})},ZZ=b$;var p$=K({name:"AutoRedirectCard",component:ZZ,metadata:{author:"Swarm.ing"}});import{Bounce as h$,Slide as g$,Zoom as u$,Flip as d$}from"react-toastify";import{toast as c$,ToastContainer as o$}from"react-toastify";import{useContext as l$,useMemo as i$,useRef as s$}from"react";import{jsx as PU,Fragment as Uz}from"react/jsx-runtime";var r$={bounce:h$,slide:g$,zoom:u$,flip:d$},n$=(U)=>{let Z={...U,type:U.alertType,transition:U.transition?r$[U.transition]:void 0,position:U.position??"bottom-right",autoClose:U.autoClose??3000,style:{backgroundColor:"black",...U.sx}};c$(U.message,Z)},t$=(U)=>{console.log("Log event",U)},a$=(U)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let Z=()=>{try{new window.Notification(U.title,{body:U.message??U.subtitle,icon:U.icon,silent:U.silent})}catch(z){console.error("[IOEventsCard] Failed to show notification",z)}},$=window.Notification.permission;if($==="granted"){Z();return}if($==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((z)=>{if(z==="granted")Z()})},e$=({data:U})=>{let{useCentrifugeSupport:Z,useSocketioSupport:$,useMittSupport:z,centrifugeChannel:T}=U,H=l$(x),J=s$(H);J.current=H;let G=i$(()=>({alert:n$,log:t$,push:a$,redirect:(I)=>{if(I.to){let Y=I.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Y))window.location.href=Y;else J.current?.(Y)}else window.location.reload()},reload:(I)=>{if(I.to){let Y=I.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Y))window.location.href=Y;else J.current?.(Y)}else window.location.reload()}}),[]);return PU(Uz,{children:PU(M,{card:"IOEventsCard",data:U,useCentrifugeSupport:Z,useSocketioSupport:$,useMittSupport:z,centrifugeChannel:T,methods:G,children:PU(o$,{})})})},$Z=e$;var Zz=K({name:"IOEventsCard",component:$Z,metadata:{author:"Swarm.ing"}});import{useEffect as zZ,useState as $z}from"react";import{jsx as HZ}from"react/jsx-runtime";var zz=({data:U})=>{let{name:Z,key:$,value:z,useSocketioSupport:T,useCentrifugeSupport:H,useMittSupport:J,centrifugeChannel:G}=U,[I,Y]=$z(z);return zZ(()=>{Y(z)},[z]),zZ(()=>{if(typeof window>"u")return;sessionStorage.setItem($,I)},[$,I]),HZ(M,{card:"SessionStorageCard",data:U,useSocketioSupport:T,useCentrifugeSupport:H,useMittSupport:J,centrifugeChannel:G,methods:{update:({value:D})=>{Y(D)},remove:()=>{sessionStorage.removeItem($),Y("")}},children:HZ("input",{type:"hidden",id:Z,name:Z,value:I})})},TZ=zz;var Hz=K({name:"SessionStorageCard",component:TZ,metadata:{author:"PieData"}});import{useEffect as JZ,useState as Tz}from"react";import{jsx as IZ}from"react/jsx-runtime";var Jz=({data:U})=>{let{name:Z,key:$,value:z,useSocketioSupport:T,useCentrifugeSupport:H,useMittSupport:J,centrifugeChannel:G}=U,[I,Y]=Tz(z);return JZ(()=>{Y(z)},[z]),JZ(()=>{if(typeof window>"u")return;localStorage.setItem($,I)},[$,I]),IZ(M,{card:"DeviceStorageCard",data:U,useSocketioSupport:T,useCentrifugeSupport:H,useMittSupport:J,centrifugeChannel:G,methods:{update:({value:D})=>{Y(D)},remove:()=>{localStorage.removeItem($),Y("")}},children:IZ("input",{type:"hidden",id:Z,name:Z,value:I})})},GZ=Jz;var Iz=K({name:"DeviceStorageCard",component:GZ,metadata:{author:"PieData"}});import{useCallback as MU,useContext as RU,useEffect as Gz,useRef as Xz,useState as XZ}from"react";import{jsx as YZ}from"react/jsx-runtime";var Yz=({data:U,content:Z})=>{let{useLoader:$,noReturn:z,returnType:T,useSocketioSupport:H,useCentrifugeSupport:J,useMittSupport:G,centrifugeChannel:I}=U,Y=RU(N),D=RU(E)??w,[O,V]=XZ(!1),[B,q]=XZ(null),_=Xz(Z),F=RU(b),P=MU((Q)=>{if(Q===null)V(!0);else if(V(!1),!z)_.current=Q;if(!z)q(Q)},[z]),W=MU((Q)=>{_.current=Q.content,q(Q.content)},[]),X=MU((Q)=>{if(Q===null)V(!0);else if(V(!1),!z)for(let C of Q)F?.emit(C.name,C.data)},[z,F]);if(Gz(()=>{q(Z),V(!1)},[Z]),!B&&$)return Y;return YZ(M,{card:"AjaxGroupCard",data:U,methods:{changeContent:W},useSocketioSupport:H,useCentrifugeSupport:J,useMittSupport:G,centrifugeChannel:I,children:YZ(D,{uiConfig:B??_.current,setUiAjaxConfiguration:T==="events"?X:P})})},BZ=Yz;var Bz=K({name:"AjaxGroupCard",component:BZ,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as qZ}from"react";import{jsx as LU}from"react/jsx-runtime";var qz=({data:U,content:Z,setUiAjaxConfiguration:$})=>{let{name:z,url:T,sx:H}=U,J=qZ(x),G=qZ(E)??w;return LU(M,{card:z,data:U,children:LU("div",{style:H,id:z,onClick:(Y)=>{if(T)if(Y.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(T))window.location.href=T;else J?.(T)},children:LU(G,{setUiAjaxConfiguration:$,uiConfig:Z})})})},OZ=qz;var Oz=K({name:"BoxCard",component:OZ,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as Qz}from"react";import{jsx as wU}from"react/jsx-runtime";var Wz=({data:U,content:Z,setUiAjaxConfiguration:$})=>{let{name:z,sx:T}=U,H=Qz(E)??w;return wU(M,{card:z,data:U,children:wU("div",{style:T,id:z,children:Z.map((J,G)=>{return wU(H,{uiConfig:J,setUiAjaxConfiguration:$},`children-${G}`)})})})},QZ=Wz;var Dz=K({name:"OneOfCard",component:QZ,metadata:{author:"Swarm.ing",description:"Different variants"}});import{useMemo as n}from"react";import{QueryClient as xz,QueryClientProvider as kz,useQuery as yz}from"@tanstack/react-query";import{useContext as Lz,useEffect as wz}from"react";import{useEffect as _z,useState as Vz}from"react";var zU=new Map,HU=new Map;function TU(U,Z){let $=`${U}::${Z}`,z=U?zU.get($):void 0,[T,H]=Vz(z??null);return _z(()=>{if(!U)return;if(zU.has($)){H(zU.get($));return}let J=HU.get($);if(!J)J=fetch(U+`api/support/${Z}`,{method:"GET"}).then((I)=>I.json()).then((I)=>{return zU.set($,I),HU.delete($),I}).catch((I)=>{throw HU.delete($),I}),HU.set($,J);let G=!1;return J.then((I)=>{if(!G)H(I)}).catch(()=>{}),()=>{G=!0}},[U,Z,$]),T}var Fz=(U)=>{let Z=document.cookie?document.cookie.split(";"):[];for(let $ of Z){let z=$.indexOf("=");if((z===-1?$:$.slice(0,z)).trim()===U){let H=z===-1?"":$.slice(z+1).trim();try{return decodeURIComponent(H)}catch{return H}}}return null},Kz={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,Z){return(U==="local"?window.localStorage:window.sessionStorage).getItem(Z)},readCookie:Fz,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let Z=document.getElementsByName(U);if(!Z.length)return null;let $=Z[0];if($ instanceof HTMLInputElement){if($.type==="file"&&$.files)return Array.from($.files);return[$.value]}if($ instanceof HTMLTextAreaElement)return[$.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},WZ=Kz;var Az={};function g(){return Az}var DZ=new Map;var _Z=(U)=>{return DZ.has(U)?DZ.get(U):null};var VZ,Pz={isClient(){return!0},readSid(){return VZ},setSid(U){VZ=U},readWebStorage(U,Z){let $=g(),z=U==="local"?$.storage:$.sessionStorage;return z?z.getItem(Z):null},async readWebStorageAsync(U,Z){let $=g(),z=U==="local"?$.asyncStorage:$.asyncSessionStorage;if(z)return z.getItem(Z);let T=U==="local"?$.storage:$.sessionStorage;return T?T.getItem(Z):null},readCookie(U){let Z=g();return Z.getCookie?Z.getCookie(U):null},readUrlParams(U){let Z=g();return Z.getRouteParams?Z.getRouteParams(U):[]},readDomInput(U){let Z=g();return Z.getInput?Z.getInput(U):_Z(U)},submitGlobalForm(){g().submitForm?.()}},FZ=Pz;var Mz=typeof navigator<"u"&&navigator.product==="ReactNative",Rz=Mz?FZ:WZ,R=Rz;var r=A("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function KZ(){r.resolve?.()}function NU(){if(!R.isClient())return Promise.resolve();if(R.readSid()!==void 0)return Promise.resolve();if(!r.promise)r.promise=new Promise((U)=>{r.resolve=()=>{U()}});return r.promise}var Nz=({children:U})=>{let Z=Lz(S),$=t(),z=TU($,"socketIO"),T=(H)=>{if(R.isClient())R.setSid(H.sid),KZ(),console.log(`SocketIO initialized: ${R.readSid()}`)};return wz(()=>{if(!Z)return;let H=()=>{console.log("SocketIO connected")},J=(G)=>{console.log(`SocketIO disconnected: ${G}`),Z.connect()};if(z)Z.on("pieinit",T),Z.on("connect",H),Z.on("disconnect",J),Z.connect();return()=>{if(z)Z.off("pieinit",T),Z.off("connect",H),Z.off("disconnect",J),Z.disconnect()}},[Z,z]),U},JU=Nz;import{useContext as Ez,useEffect as jz}from"react";var Cz=({children:U})=>{let Z=Ez(y),$=t(),z=TU($,"centrifuge");return jz(()=>{if(!Z)return;let T=()=>{console.log("Centrifuge connected")},H=(J)=>{console.log("Centrifuge disconnected:",J)};if(z)Z.on("connected",T),Z.on("disconnected",H),Z.connect();return()=>{if(z)Z.disconnect()}},[Z,z]),U},IU=Cz;import{createAxiosDateTransformer as Sz}from"axios-date-transformer";import{jsx as fz}from"react/jsx-runtime";function AZ(U,Z,$){if(!Z)return $;let z=U.replace(/^\//,""),T=Z[z];if(!T)return $;return fz(VU,{uiConfig:T})}import{jsx as L,Fragment as mz}from"react/jsx-runtime";var bz=({location:U,fallback:Z,piecache:$,onError:z,queryOptions:T,disableGlobalForm:H})=>{let J=i(),G=a(),I=k(),Y=n(()=>Sz({baseURL:J||""}),[J]),D=n(()=>c(),[]),O=n(()=>J?UU(J):null,[J]),V=n(()=>J?e(J,G):null,[J,G]),{data:B,isLoading:q,error:_}=yz({queryKey:["uiConfig",U.pathname+U.search,J],enabled:!!J,queryFn:async()=>{let P=new URLSearchParams(U.search);P.set("__pieroot","web");let W="/api/content"+U.pathname+"?"+P.toString();if(I)console.log("[PieRoot] Fetching UI configuration from:",W);let X=await Y.get(W,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(I)console.log("[PieRoot] Received UI configuration:",X.data);return X.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(P)=>Math.min(1000*2**P,30000),...T}),F=AZ(U.pathname,$,Z);if(!J)return F??null;if(I)console.log("[PieRoot] Rendering with location:",U),console.log("[PieRoot] API_SERVER:",J),console.log("[PieRoot] CENTRIFUGE_SERVER:",G),console.log("[PieRoot] Fallback provided:",!!Z),console.log("[PieRoot] Piecache provided:",!!$);if(_){if(I)console.error("[PieRoot] Error fetching UI configuration:",_),console.error("[PieRoot] Error details:",{message:_.message,status:_.response?.status,data:_.response?.data});return z?.(_),F}if(q||!B){if(I)console.log("[PieRoot] Loading state:",{isLoading:q,hasUiConfiguration:!!B});return F}if(I)console.log("[PieRoot] UI configuration loaded successfully:",B),console.log("[PieRoot] Rendering UI with configuration");return L(b.Provider,{value:D,children:L(S.Provider,{value:O,children:L(y.Provider,{value:V,children:L(N.Provider,{value:Z??L(mz,{}),children:L(JU,{children:L(IU,{children:H?L(w,{uiConfig:B}):L("form",{id:"piedata_global_form",action:J+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:L(w,{uiConfig:B})})})})})})})})},vz=(U)=>{let Z=n(()=>new xz,[]),$=U.queryClient??Z;return L(x.Provider,{value:U.onNavigate,children:L(d.Provider,{value:U.config,children:L(v.Provider,{value:U.onError,children:L(kz,{client:$,children:L(bz,{...U})})})})})},EU=vz;import{useMemo as jU,useState as pz}from"react";import{QueryClient as hz,QueryClientProvider as gz}from"@tanstack/react-query";import{jsx as j,Fragment as cz}from"react/jsx-runtime";var uz=({location:U,fallback:Z,children:$,disableGlobalForm:z})=>{let T=i(),H=a(),J=k(),G=jU(()=>c(),[]),I=jU(()=>T?UU(T):null,[T]),Y=jU(()=>T?e(T,H):null,[T,H]);if(J)console.log("[PieRoot] Rendering with location:",U),console.log("[PieRoot] API_SERVER:",T),console.log("[PieRoot] CENTRIFUGE_SERVER:",H),console.log("[PieRoot] Fallback provided:",!!Z);return j(b.Provider,{value:G,children:j(S.Provider,{value:I,children:j(y.Provider,{value:Y,children:j(N.Provider,{value:Z??j(cz,{}),children:j(JU,{children:j(IU,{children:z?$:j("form",{id:"piedata_global_form",action:T+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:$})})})})})})})},dz=(U)=>{let[Z]=pz(()=>new hz),$=U.queryClient??Z;return j(x.Provider,{value:U.onNavigate,children:j(d.Provider,{value:U.config,children:j(v.Provider,{value:U.onError,children:j(gz,{client:$,children:j(uz,{...U})})})})})},oz=dz;import{useMemo as lz}from"react";import{jsx as PZ}from"react/jsx-runtime";var iz=PZ("div",{style:{padding:16,fontFamily:"system-ui, sans-serif",color:"#888"},children:"Loading card…"}),sz=({apiServer:U,pathname:Z="/",search:$="",centrifugeServer:z,fallback:T,enableRenderingLog:H=!1})=>{let J=U??(typeof process<"u"?process.env.PIE_API_SERVER:void 0)??"",G=lz(()=>({apiServer:J,centrifugeServer:z,enableRenderingLog:H,pageProcessor:"web"}),[J,z,H]);return PZ(EU,{location:{pathname:Z,search:$},config:G,fallback:T??iz,onNavigate:(Y)=>{if(typeof window<"u")window.history.pushState(null,"",Y)}})},rz=sz;import{useMemo as nz}from"react";var tz=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],az=new Set(["telegram:cloud","telegram:secure"]),GU=(U)=>{if(U==="sid")return{source:"sid",key:"sid"};for(let Z of tz){let $=Z+":";if(U.startsWith($))return{source:Z,key:U.slice($.length)}}return{source:"dom",key:U}},MZ=(U,Z=!1)=>{let{source:$,key:z}=GU(U);if($==="sid"){let H=R.readSid();if(!H)throw Error("SocketIO isn't initialized properly");return[H]}if($==="localStorage"||$==="sessionStorage")try{let H=R.readWebStorage($==="localStorage"?"local":"session",z);if(H===null){if(Z)console.warn(`No ${$} value found for key ${z}`);return[]}return[H]}catch(H){if(Z)console.warn(`Failed to read ${$} key ${z}:`,H);return[]}if($==="cookie"){let H=R.readCookie(z);if(H===null){if(Z)console.warn(`No cookie found for key ${z}`);return[]}return[H]}if($==="url"){let H=R.readUrlParams(z);if(!H.length&&Z)console.warn(`No URL query param found for key ${z}`);return H}if(az.has($)){if(Z)console.warn(`Source ${$} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let T=R.readDomInput(z);if(T===null){if(Z)console.warn(`No input found with name ${z}`);return[]}return T},ez=(U,Z,$)=>{let z=window.Telegram?.WebApp,T=U==="telegram:cloud"?z?.CloudStorage:z?.SecureStorage,H=U==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!T){if($)console.warn(`${H} is not available`);return Promise.resolve([])}return new Promise((J)=>{try{T.getItem(Z,(G,I)=>{if(G){if($)console.warn(`Failed to read ${H} key ${Z}:`,G);J([]);return}if(I==null||I===""){if($)console.warn(`No ${H} value found for key ${Z}`);J([]);return}J([I])})}catch(G){if($)console.warn(`Failed to read ${H} key ${Z}:`,G);J([])}})},RZ=async(U,Z=!1)=>{let{source:$,key:z}=GU(U);if($==="telegram:cloud"||$==="telegram:secure")return ez($,z,Z);if(($==="localStorage"||$==="sessionStorage")&&R.readWebStorageAsync)try{let T=await R.readWebStorageAsync($==="localStorage"?"local":"session",z);if(T===null){if(Z)console.warn(`No ${$} value found for key ${z}`);return[]}return[T]}catch(T){if(Z)console.warn(`Failed to read ${$} key ${z}:`,T);return[]}return MZ(U,Z)},UH=(U,Z={},$=[],z,T)=>{let H=T?.renderingLogEnabled??!1,J=T?.timeout,G=T?.retryPolicy,I=G?.maxRetries??0,Y=G?.baseDelay??1000,D=G?.retryOn??[502,503,504];if(H)console.log("Registering AJAX: ",z,Z,$);return async(O={})=>{if(!R.isClient()){if(H)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let V=T?.apiServer;if(!V){if(H)console.warn("AJAX skipped: apiServer is missing");return}if(!z||!U){if(H)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if($.includes("sid"))await NU();let B=new FormData;for(let[F,P]of Object.entries({...Z,...O}))B.append(F,P);for(let F of $){let{key:P}=GU(F);for(let W of await RZ(F,H))B.append(P,W)}let q=V+"api/ajax_content"+z;U(null);let _;for(let F=0;F<=I;F++){if(F>0){let X=Y*2**(F-1);if(H)console.log(`AJAX retry ${F}/${I} after ${X}ms`);await new Promise((Q)=>setTimeout(Q,X))}let P=J!=null?new AbortController:null,W=P&&setTimeout(()=>P.abort(),J);try{let X=await fetch(q,{method:"POST",body:B,signal:P?.signal});if(W)clearTimeout(W);if(!X.ok&&D.includes(X.status)&&F<I){_=Error(`HTTP ${X.status}`);continue}let C=(X.headers.get("content-type")||"").includes("application/json");if(!!X.body?.getReader&&!C){let m=X.body.getReader(),p=new TextDecoder,u="";while(!0){let{done:YU,value:LZ}=await m.read();if(YU)break;u+=p.decode(LZ,{stream:!0});let CU=u.split(`
3
+ `);u=CU.pop()??"";for(let wZ of CU){let BU=wZ.trim();if(!BU)continue;try{let NZ=JSON.parse(BU);U([NZ])}catch{if(H)console.warn("Failed to parse streamed line:",BU)}}}if(u.trim())try{let YU=JSON.parse(u);U([YU])}catch{if(H)console.warn("Failed to parse final streamed line:",u)}return{}}else{let m=await X.json();return U(m),m}}catch(X){if(W)clearTimeout(W);if(_=X,F<I)continue;if(H)console.error("AJAX request failed:",X);return U(null),X}}if(H)console.error("AJAX request failed after retries:",_);return U(null),_}},ZH=(U,Z={},$=[],z,T)=>{let{apiServer:H,enableRenderingLog:J}=l(),G=JSON.stringify(Z),I=JSON.stringify($),Y=JSON.stringify(T);return nz(()=>UH(U,Z,$,z,{apiServer:H,renderingLogEnabled:J,timeout:T?.timeout,retryPolicy:T?.retryPolicy}),[U,G,I,z,H,J,Y])};import{clsx as $H}from"clsx";import{twMerge as zH}from"tailwind-merge";function HH(...U){return zH($H(U))}var TH=()=>{R.submitGlobalForm()};var JH=(U,Z)=>`${U}${OU}${Z}`;export{pZ as usePieEmit,ZH as useAjaxSubmit,iZ as unregisterComponent,DU as trackLazy,TH as submitGlobalForm,f as registry,K as registerPieComponent,lZ as registerMultipleComponents,RZ as readAjaxKeyAsync,MZ as readAjaxKey,cU as preloadComponent,aZ as prefetchLazyComponents,JH as pieName,GU as parseDepName,sZ as hasComponent,tZ as getRegistrySize,s as getRegistryEntry,dU as getLazyComponentNames,c as getEmitter,rZ as getComponentMeta,nZ as getAllRegisteredComponents,HH as cn,F$ as UnionCard,E as UIRendererContext,VU as UILoading,w as UI,S as SocketIOContext,Hz as SessionStorageCard,D$ as SequenceCard,EU as PieRoot,rz as PiePreviewRoot,d as PieConfigContext,M as PieCard,oz as PieBaseRoot,OU as PIEBREAK,Dz as OneOfCard,b as MittContext,Zz as IOEventsCard,x$ as HiddenCard,E$ as HTMLEmbedCard,N as FallbackContext,Iz as DeviceStorageCard,y as CentrifugeIOContext,Oz as BoxCard,p$ as AutoRedirectCard,Bz as AjaxGroupCard};