@swarm.ing/pieui 2.1.5 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +595 -124
- package/dist/components/PieCard/index.d.ts +1 -1
- package/dist/components/PieCard/index.d.ts.map +1 -1
- package/dist/components/PieCard/types/index.d.ts +11 -0
- package/dist/components/PieCard/types/index.d.ts.map +1 -1
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/dist/native/index.esm.js +2 -2
- package/dist/native/index.js +2 -2
- package/dist/telegram/index.esm.js +1 -1
- package/dist/telegram/index.js +1 -1
- package/dist/tests/centrifugeRecovery.test.d.ts +2 -0
- package/dist/tests/centrifugeRecovery.test.d.ts.map +1 -0
- package/dist/tests/piecardRecovery.test.d.ts +2 -0
- package/dist/tests/piecardRecovery.test.d.ts.map +1 -0
- package/dist/util/centrifuge.d.ts +5 -0
- package/dist/util/centrifuge.d.ts.map +1 -1
- package/dist/util/centrifugeRecovery.d.ts +26 -0
- package/dist/util/centrifugeRecovery.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PieCard/index.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,OAAO,GAAI,OAAO,GAAG,OAAO,EAAG,mIAWlC,YAAY,CAAC,OAAO,CAAC,gWAgOvB,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;
|
|
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 x,useEffect as S,useRef as oo}from"react";import{createContext as Vo,useContext as Mo}from"react";var j=globalThis,Q=(o,U)=>{let I=Symbol.for(o);if(!(I in j))j[I]=U();return j[I]};var Ro=Q("@swarm.ing/pieui:context:pieConfig",()=>Vo(null)),Eo=()=>{let o=Mo(Ro);if(!o)throw Error("usePieConfig must be used within PieConfigProvider");return o};var E=()=>{let{enableRenderingLog:o}=Eo();return o},n=E;import{createContext as No}from"react";import{Centrifuge as Gf}from"centrifuge";var Ff=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var po=Q("@swarm.ing/pieui:context:centrifuge",()=>No(null)),s=po;import{io as Xf}from"socket.io-client";import{createContext as bo}from"react";var Kf=Q("@swarm.ing/pieui:socket-cache",()=>new Map);var mo=Q("@swarm.ing/pieui:context:socket",()=>bo(null)),a=mo;import Mf from"mitt";import{createContext as yo,useCallback as Nf,useContext as pf}from"react";var ko=Q("@swarm.ing/pieui:context:mitt",()=>yo(null));var p=ko;function t(o){return o.wasRecovering===!0&&o.recovered===!1}function e(o){return o.recoverable===!1}import{jsx as So,jsxs as go,Fragment as xo}from"react/jsx-runtime";var jo=({card:o,data:U,children:I,useSocketioSupport:T=!1,useCentrifugeSupport:P=!1,useMittSupport:f=!1,centrifugeChannel:w=void 0,methods:H=void 0,stored:O=void 0,onResync:L=void 0})=>{let $=n(),Z=oo(H);Z.current=H;let F=oo(L);if(F.current=L,$)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:P,mitt:f,centrifugeChannel:w}),console.log("[PieCard] Methods:",H?Object.keys(H):"none"),console.log("[PieCard] Has children:",!!I);let B=x(a),z=x(s),X=x(p);if(S(()=>{if(!B||!T||!Z.current||!U.name){if($&&T)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!B,useSocketioSupport:T,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let K=Object.keys(Z.current??{}).map((D)=>{let q=`pie${D}_${U.name}`;if($)console.log(`[PieCard] Socket.IO registering event: ${q}`);let A=(Y)=>{Z.current?.[D]?.(Y)};return B.on(q,A),[q,A]});return()=>{K.forEach(([D,q])=>{if($)console.log(`[PieCard] Socket.IO unregistering event: ${D}`);B.off(D,q)})}},[B,U.name,T]),S(()=>{if(!z||!P||!w||!U.name){if($&&P)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!z,useCentrifugeSupport:P,hasCentrifugeChannel:!!w,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let K=Object.keys(Z.current??{}).map((D)=>{let q=`pie${D}_${U.name}_${w}`;if($)console.log(`[PieCard] Centrifuge subscribing to channel: ${q}`);let A=z.newSubscription(q,{recoverable:!0,positioned:!0});return A.on("publication",(Y)=>{if($)console.log(`[PieCard] Centrifuge received data on ${q}:`,Y.data);Z.current?.[D]?.(Y.data)}),A.on("subscribed",(Y)=>{if(e(Y))console.warn(`[PieCard] Centrifuge channel ${q} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(t(Y)){if($)console.log(`[PieCard] Centrifuge recovery gap on ${q}; requesting resync`);F.current?.({channel:q,reason:"gap"})}}),A.subscribe(),A});return()=>{K.forEach((D)=>{if($)console.log("[PieCard] Centrifuge unsubscribing from channel");D.unsubscribe(),z.removeSubscription(D)})}},[z,w,U.name,P]),S(()=>{if(!X||!f||!U.name){if($&&f)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!X,useMittSupport:f,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let V=Object.keys(Z.current??{}),K={};return V.forEach((D)=>{let q=`pie${D}_${U.name}`,A=(Y)=>{if($)console.log(`[PieCard] Mitt registering event: ${q}`);Z.current?.[D]?.(Y)};K[q]=A,X.on(q,A)}),()=>{Object.entries(K).forEach(([D,q])=>{if($)console.log(`[PieCard] Mitt unregistering event: ${D}`);X.off(D,q)})}},[X,U.name,f]),$)console.log("[PieCard] Rendering complete, returning children");if(O!==void 0)return go(xo,{children:[So("input",{type:"hidden",name:U.name,value:JSON.stringify(O)}),I]});return I},J=jo;import{lazy as vo}from"react";var N=new Map;function lo(o,U){return U.catch(()=>{if(N.get(o)===U)N.delete(o)}),N.set(o,U),U}function Uo(o,U){return vo(()=>{if(N.has(U))return N.get(U);return lo(U,o().then((I)=>I))})}var fo=Q("@swarm.ing/pieui:component-registry",()=>new Map),ro=(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=Uo(U.loader,o.name),U.isLazy=!0;return U};function G(o){let U=ro(o);return fo.set(U.name,U),U.component}var b=(o)=>{return fo.get(o)};import{useContext as Io,memo as fU}from"react";import{createContext as io}from"react";import{jsx as ho,Fragment as uo}from"react/jsx-runtime";var co=Q("@swarm.ing/pieui:context:fallback",()=>io(ho(uo,{}))),C=co;import{createContext as no}from"react";var so=Q("@swarm.ing/pieui:context:lazyError",()=>no(void 0)),m=so;import{Component as ao,Suspense as to}from"react";import{jsx as UU}from"react/jsx-runtime";var eo=2,oU=400;class M extends ao{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){if(this.props.onError?.(o),this.state.attempt<eo){let U=oU*(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 UU(to,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as g}from"react/jsx-runtime";function IU({uiConfig:o,setUiAjaxConfiguration:U}){let I=Io(C),T=Io(m),P=E();if(P)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=b(o.card);if(!f?.component){if(P)console.warn(`[UI] Component not found in registry: ${o.card}`),console.log("[UI] Returning fallback component");return I}if(P)console.log("[UI] Found component in registry:",{name:f.name,isLazy:f.isLazy,hasMetadata:!!f.metadata});let w=f.component,H=g(w,{data:o.data,content:o.content,setUiAjaxConfiguration:U});if(f.isLazy){if(P)console.log("[UI] Rendering lazy component with Suspense:",f.name);return g(M,{name:f.name,fallback:f.fallback?g(f.fallback,{}):I,onError:T,children:H})}if(P)console.log("[UI] Rendering component directly:",f.name);return H}var _=fU(IU);import{useContext as To}from"react";import{createContext as TU}from"react";var PU=Q("@swarm.ing/pieui:context:uiRenderer",()=>TU(null)),W=PU;import{jsx as y}from"react/jsx-runtime";function Po({uiConfig:o,setUiAjaxConfiguration:U}){let I=To(C),T=To(m),P=E();if(P)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=b(o.card);if(!f?.component){if(P)console.warn(`[UILoading] Component not found in registry: ${o.card}`),console.log("[UILoading] Returning fallback component");return I}if(P)console.log("[UILoading] Found component in registry:",{name:f.name,isLazy:f.isLazy,hasMetadata:!!f.metadata,hasFallback:!!f.fallback});if(f.fallback){if(P)console.log("[UILoading] Rendering fallback for:",f.name);let O=f.fallback;return y(O,{})}if(P)console.log("[UILoading] No fallback, rendering full component:",f.name);let w=f.component,H=y(W.Provider,{value:Po,children:y(w,{data:o.data,content:o.content,setUiAjaxConfiguration:U})});if(f.isLazy)return y(M,{name:f.name,fallback:I,onError:T,children:H});return H}var wU=Po;import{useContext as zU}from"react";import{jsx as v}from"react/jsx-runtime";var HU=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,sx:P}=o,f=zU(W)??_;return v(J,{card:T,data:o,children:v("div",{style:P,id:T,children:U.map((w,H)=>{return v(f,{uiConfig:w,setUiAjaxConfiguration:I},`children-${H}`)})})})},wo=HU;var ZU=G({name:"SequenceCard",component:wo,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as OU}from"react";import{jsx as zo}from"react/jsx-runtime";var LU=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T}=o,P=OU(W)??_;return zo(J,{card:T,data:o,children:U.map((f,w)=>{return zo(P,{uiConfig:f,setUiAjaxConfiguration:I},`children-${w}`)})})},Ho=LU;var AU=G({name:"UnionCard",component:Ho,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as GU,useState as JU}from"react";import FU from"html-react-parser";import{useCallback as k,useEffect as BU,useRef as l,useState as $U}from"react";function qU(){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 r(o=null,U){let[I,T]=$U(!1),P=l(null),f=l(null),w=l(null),H=k(async(Z,F=!0)=>{if(P.current)O();let B=new RTCPeerConnection;if(B.onconnectionstatechange=()=>{if(B.connectionState==="connected")T(!0);else if(["disconnected","failed","closed"].includes(B.connectionState))T(!1)},B.ontrack=(A)=>{if(o)o.srcObject=A.streams[0]},F){let A=await navigator.mediaDevices.getUserMedia({audio:!0});B.addTrack(A.getTracks()[0],A)}else{let A=qU();B.addTrack(A)}let z=B.createDataChannel("oai-events");f.current=z,w.current=new Promise((A)=>{z.addEventListener("open",()=>{A()})});let X=await B.createOffer();await B.setLocalDescription(X);let q=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:X.sdp,headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/sdp"}})).text();await B.setRemoteDescription({type:"answer",sdp:q}),P.current=B,await w.current},[o]),O=k(()=>{let Z=f.current;if(Z)Z.close();P.current?.getSenders()?.forEach((F)=>F.track?.stop()),P.current?.close(),T(!1),P.current=null,f.current=null,w.current=null},[o]),L=k((Z)=>{let F=f.current;if(!F){console.error("Data channel is not ready",Z);return}let B=new Date().toLocaleTimeString();if(Z.event_id=Z.event_id||crypto.randomUUID(),F.send(JSON.stringify(Z)),!Z.timestamp)Z.timestamp=B;U?.(Z)},[U,o]),$=k((Z)=>{if(!f.current){console.error("Data channel is not ready");return}let B=()=>{L({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:Z}]}}),L({type:"response.create"})};if(w.current)w.current.then(B);else B()},[U,o]);return BU(()=>{let Z=f.current;if(!Z)return;let F=(B)=>{let z=JSON.parse(B.data);if(!z.timestamp)z.timestamp=new Date().toLocaleTimeString();U?.(z)};return Z.addEventListener("message",F),()=>{Z.removeEventListener("message",F)}},[U,o]),{isSessionActive:I,startSession:H,stopSession:O,sendTextMessage:$}}import{jsx as QU}from"react/jsx-runtime";var DU=({data:o})=>{let{html:U,useSocketioSupport:I,useCentrifugeSupport:T,useMittSupport:P,centrifugeChannel:f}=o,[w,H]=JU(U),{isSessionActive:O,startSession:L,sendTextMessage:$}=r(null,(z)=>{if(console.log(z.type,z.type==="response.output_text.delta"&&z.delta),z.type==="response.output_text.delta"&&z.delta)H((X)=>X+z.delta)});return GU(()=>{H(U)},[U]),QU(J,{card:"HTMLEmbedCard",data:o,methods:{update:(z)=>{H(z.value)},generateUsingAI:async(z)=>{try{if(!O&&z.token)await L(z.token,!1);$(z.prompt)}catch(X){console.error("Failed to generate using AI",X)}},initializeAI:async(z)=>{if(!O&&z.token)await L(z.token,!1)}},useCentrifugeSupport:T,useSocketioSupport:I,useMittSupport:P,centrifugeChannel:f,children:FU(w)})},Zo=DU;var XU=G({name:"HTMLEmbedCard",component:Zo,metadata:{author:"Swarm.ing"}});import{useEffect as YU,useState as WU}from"react";import{jsx as Oo}from"react/jsx-runtime";var _U=({data:o})=>{let{name:U,value:I,useSocketioSupport:T,useCentrifugeSupport:P,useMittSupport:f,centrifugeChannel:w}=o,[H,O]=WU(I);return YU(()=>{O(I)},[I]),Oo(J,{card:"HiddenCard",data:o,useSocketioSupport:T,useCentrifugeSupport:P,useMittSupport:f,centrifugeChannel:w,methods:{update:({value:L})=>{O(L)}},children:Oo("input",{type:"hidden",id:U,name:U,value:H})})},Lo=_U;var KU=G({name:"HiddenCard",component:Lo,metadata:{author:"Swarm.ing"}});import{useContext as Ao,useEffect as MU}from"react";import{createContext as CU}from"react";var VU=Q("@swarm.ing/pieui:context:navigate",()=>CU(void 0)),R=VU;import{jsx as NU,Fragment as EU}from"react/jsx-runtime";var RU=({data:o})=>{let{url:U}=o,I=Ao(R),T=Ao(C);return MU(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else I?.(U)},[U,I]),NU(EU,{children:T})},Bo=RU;var pU=G({name:"AutoRedirectCard",component:Bo,metadata:{author:"Swarm.ing"}});import{Bounce as bU,Slide as mU,Zoom as yU,Flip as kU}from"react-toastify";import{toast as jU,ToastContainer as xU}from"react-toastify";import{useContext as SU,useMemo as gU,useRef as vU}from"react";import{jsx as i,Fragment as uU}from"react/jsx-runtime";var lU={bounce:bU,slide:mU,zoom:yU,flip:kU},rU=(o)=>{let U={...o,type:o.alertType,transition:o.transition?lU[o.transition]:void 0,position:o.position??"bottom-right",autoClose:o.autoClose??3000,style:{backgroundColor:"black",...o.sx}};jU(o.message,U)},iU=(o)=>{console.log("Log event",o)},dU=(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()})},cU=({data:o})=>{let{useCentrifugeSupport:U,useSocketioSupport:I,useMittSupport:T,centrifugeChannel:P}=o,f=SU(R),w=vU(f);w.current=f;let H=gU(()=>({alert:rU,log:iU,push:dU,redirect:(O)=>{if(O.to){let L=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(L))window.location.href=L;else w.current?.(L)}else window.location.reload()},reload:(O)=>{if(O.to){let L=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(L))window.location.href=L;else w.current?.(L)}else window.location.reload()}}),[]);return i(uU,{children:i(J,{card:"IOEventsCard",data:o,useCentrifugeSupport:U,useSocketioSupport:I,useMittSupport:T,centrifugeChannel:P,methods:H,children:i(xU,{})})})},$o=cU;var hU=G({name:"IOEventsCard",component:$o,metadata:{author:"Swarm.ing"}});import{useEffect as qo,useState as nU}from"react";import{jsx as Go}from"react/jsx-runtime";var sU=({data:o})=>{let{name:U,key:I,value:T,useSocketioSupport:P,useCentrifugeSupport:f,useMittSupport:w,centrifugeChannel:H}=o,[O,L]=nU(T);return qo(()=>{L(T)},[T]),qo(()=>{if(typeof window>"u")return;sessionStorage.setItem(I,O)},[I,O]),Go(J,{card:"SessionStorageCard",data:o,useSocketioSupport:P,useCentrifugeSupport:f,useMittSupport:w,centrifugeChannel:H,methods:{update:({value:$})=>{L($)},remove:()=>{sessionStorage.removeItem(I),L("")}},children:Go("input",{type:"hidden",id:U,name:U,value:O})})},Jo=sU;var aU=G({name:"SessionStorageCard",component:Jo,metadata:{author:"PieData"}});import{useEffect as Fo,useState as tU}from"react";import{jsx as Do}from"react/jsx-runtime";var eU=({data:o})=>{let{name:U,key:I,value:T,useSocketioSupport:P,useCentrifugeSupport:f,useMittSupport:w,centrifugeChannel:H}=o,[O,L]=tU(T);return Fo(()=>{L(T)},[T]),Fo(()=>{if(typeof window>"u")return;localStorage.setItem(I,O)},[I,O]),Do(J,{card:"DeviceStorageCard",data:o,useSocketioSupport:P,useCentrifugeSupport:f,useMittSupport:w,centrifugeChannel:H,methods:{update:({value:$})=>{L($)},remove:()=>{localStorage.removeItem(I),L("")}},children:Do("input",{type:"hidden",id:U,name:U,value:O})})},Qo=eU;var of=G({name:"DeviceStorageCard",component:Qo,metadata:{author:"PieData"}});import{useCallback as d,useContext as c,useEffect as Uf,useRef as ff,useState as Xo}from"react";import{jsx as Yo}from"react/jsx-runtime";var If=({data:o,content:U})=>{let{useLoader:I,noReturn:T,returnType:P,useSocketioSupport:f,useCentrifugeSupport:w,useMittSupport:H,centrifugeChannel:O}=o,L=c(C),$=c(W)??_,[Z,F]=Xo(!1),[B,z]=Xo(null),X=ff(U),V=c(p),K=d((A)=>{if(A===null)F(!0);else if(F(!1),!T)X.current=A;if(!T)z(A)},[T]),D=d((A)=>{X.current=A.content,z(A.content)},[]),q=d((A)=>{if(A===null)F(!0);else if(F(!1),!T)for(let Y of A)V?.emit(Y.name,Y.data)},[T,V]);if(Uf(()=>{z(U),F(!1)},[U]),!B&&I)return L;return Yo(J,{card:"AjaxGroupCard",data:o,methods:{changeContent:D},useSocketioSupport:f,useCentrifugeSupport:w,useMittSupport:H,centrifugeChannel:O,children:Yo($,{uiConfig:B??X.current,setUiAjaxConfiguration:P==="events"?q:K})})},Wo=If;var Tf=G({name:"AjaxGroupCard",component:Wo,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as _o}from"react";import{jsx as u}from"react/jsx-runtime";var Pf=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,url:P,sx:f}=o,w=_o(R),H=_o(W)??_;return u(J,{card:T,data:o,children:u("div",{style:f,id:T,onClick:(L)=>{if(P)if(L.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else w?.(P)},children:u(H,{setUiAjaxConfiguration:I,uiConfig:U})})})},Ko=Pf;var wf=G({name:"BoxCard",component:Ko,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as zf}from"react";import{jsx as h}from"react/jsx-runtime";var Hf=({data:o,content:U,setUiAjaxConfiguration:I})=>{let{name:T,sx:P}=o,f=zf(W)??_;return h(J,{card:T,data:o,children:h("div",{style:P,id:T,children:U.map((w,H)=>{return h(f,{uiConfig:w,setUiAjaxConfiguration:I},`children-${H}`)})})})},Co=Hf;var Zf=G({name:"OneOfCard",component:Co,metadata:{author:"Swarm.ing",description:"Different variants"}});export{AU as UnionCard,wU as UILoading,_ as UI,aU as SessionStorageCard,ZU as SequenceCard,J as PieCard,Zf as OneOfCard,hU as IOEventsCard,KU as HiddenCard,XU as HTMLEmbedCard,of as DeviceStorageCard,wf as BoxCard,pU as AutoRedirectCard,Tf as AjaxGroupCard};
|
package/dist/components/index.js
CHANGED
|
@@ -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 OU=Object.create;var{getPrototypeOf:LU,defineProperty:j,getOwnPropertyNames:Go,getOwnPropertyDescriptor:AU}=Object,Jo=Object.prototype.hasOwnProperty;var Fo=(o,U,f)=>{f=o!=null?OU(LU(o)):{};let I=U||!o||!o.__esModule?j(f,"default",{value:o,enumerable:!0}):f;for(let P of Go(o))if(!Jo.call(I,P))j(I,P,{get:()=>o[P],enumerable:!0});return I},qo=new WeakMap,BU=(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=AU(o,I))||f.enumerable}));return qo.set(o,U),U};var $U=(o,U)=>{for(var f in U)j(o,f,{get:U[f],enumerable:!0,configurable:!0,set:(I)=>U[f]=()=>I})};var nU={};$U(nU,{UnionCard:()=>go,UILoading:()=>mo,UI:()=>K,SessionStorageCard:()=>oU,SequenceCard:()=>jo,PieCard:()=>G,OneOfCard:()=>ZU,IOEventsCard:()=>to,HiddenCard:()=>uo,HTMLEmbedCard:()=>io,DeviceStorageCard:()=>fU,BoxCard:()=>wU,AutoRedirectCard:()=>so,AjaxGroupCard:()=>TU});module.exports=BU(nU);var V=require("react");var d=require("react");var wo=globalThis,Q=(o,U)=>{let f=Symbol.for(o);if(!(f in wo))wo[f]=U();return wo[f]};var qU=Q("@swarm.ing/pieui:context:pieConfig",()=>d.createContext(null)),GU=()=>{let o=d.useContext(qU);if(!o)throw Error("usePieConfig must be used within PieConfigProvider");return o};var x=()=>{let{enableRenderingLog:o}=GU();return o},Do=x;var Qo=require("react"),JU=require("centrifuge");var Uf=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var FU=Q("@swarm.ing/pieui:context:centrifuge",()=>Qo.createContext(null)),Xo=FU;var DU=require("socket.io-client"),Yo=require("react");var Pf=Q("@swarm.ing/pieui:socket-cache",()=>new Map);var QU=Q("@swarm.ing/pieui:context:socket",()=>Yo.createContext(null)),Wo=QU;var XU=Fo(require("mitt")),c=require("react");var YU=Q("@swarm.ing/pieui:context:mitt",()=>c.createContext(null));var u=YU;function _o(o){return o.wasRecovering===!0&&o.recovered===!1}function Ko(o){return o.recoverable===!1}var p=require("react/jsx-runtime"),WU=({card:o,data:U,children:f,useSocketioSupport:I=!1,useCentrifugeSupport:P=!1,useMittSupport:T=!1,centrifugeChannel:w=void 0,methods:H=void 0,stored:O=void 0,onResync:L=void 0})=>{let $=Do(),Z=V.useRef(H);Z.current=H;let F=V.useRef(L);if(F.current=L,$)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:P,mitt:T,centrifugeChannel:w}),console.log("[PieCard] Methods:",H?Object.keys(H):"none"),console.log("[PieCard] Has children:",!!f);let B=V.useContext(Wo),z=V.useContext(Xo),X=V.useContext(u);if(V.useEffect(()=>{if(!B||!I||!Z.current||!U.name){if($&&I)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!B,useSocketioSupport:I,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let M=Object.keys(Z.current??{}).map((D)=>{let q=`pie${D}_${U.name}`;if($)console.log(`[PieCard] Socket.IO registering event: ${q}`);let A=(_)=>{Z.current?.[D]?.(_)};return B.on(q,A),[q,A]});return()=>{M.forEach(([D,q])=>{if($)console.log(`[PieCard] Socket.IO unregistering event: ${D}`);B.off(D,q)})}},[B,U.name,I]),V.useEffect(()=>{if(!z||!P||!w||!U.name){if($&&P)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!z,useCentrifugeSupport:P,hasCentrifugeChannel:!!w,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let M=Object.keys(Z.current??{}).map((D)=>{let q=`pie${D}_${U.name}_${w}`;if($)console.log(`[PieCard] Centrifuge subscribing to channel: ${q}`);let A=z.newSubscription(q,{recoverable:!0,positioned:!0});return A.on("publication",(_)=>{if($)console.log(`[PieCard] Centrifuge received data on ${q}:`,_.data);Z.current?.[D]?.(_.data)}),A.on("subscribed",(_)=>{if(Ko(_))console.warn(`[PieCard] Centrifuge channel ${q} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(_o(_)){if($)console.log(`[PieCard] Centrifuge recovery gap on ${q}; requesting resync`);F.current?.({channel:q,reason:"gap"})}}),A.subscribe(),A});return()=>{M.forEach((D)=>{if($)console.log("[PieCard] Centrifuge unsubscribing from channel");D.unsubscribe(),z.removeSubscription(D)})}},[z,w,U.name,P]),V.useEffect(()=>{if(!X||!T||!U.name){if($&&T)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!X,useMittSupport:T,hasMethods:!!Z.current,hasDataName:!!U?.name});return}let N=Object.keys(Z.current??{}),M={};return N.forEach((D)=>{let q=`pie${D}_${U.name}`,A=(_)=>{if($)console.log(`[PieCard] Mitt registering event: ${q}`);Z.current?.[D]?.(_)};M[q]=A,X.on(q,A)}),()=>{Object.entries(M).forEach(([D,q])=>{if($)console.log(`[PieCard] Mitt unregistering event: ${D}`);X.off(D,q)})}},[X,U.name,T]),$)console.log("[PieCard] Rendering complete, returning children");if(O!==void 0)return p.jsxs(p.Fragment,{children:[p.jsx("input",{type:"hidden",name:U.name,value:JSON.stringify(O)}),f]});return f},G=WU;var Co=require("react"),S=new Map;function _U(o,U){return U.catch(()=>{if(S.get(o)===U)S.delete(o)}),S.set(o,U),U}function Vo(o,U){return Co.lazy(()=>{if(S.has(U))return S.get(U);return _U(U,o().then((f)=>f))})}var Mo=Q("@swarm.ing/pieui:component-registry",()=>new Map),KU=(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=Vo(U.loader,o.name),U.isLazy=!0;return U};function J(o){let U=KU(o);return Mo.set(U.name,U),U.component}var h=(o)=>{return Mo.get(o)};var g=require("react");var Ro=require("react");var n=require("react/jsx-runtime"),CU=Q("@swarm.ing/pieui:context:fallback",()=>Ro.createContext(n.jsx(n.Fragment,{}))),R=CU;var Eo=require("react");var VU=Q("@swarm.ing/pieui:context:lazyError",()=>Eo.createContext(void 0)),s=VU;var a=require("react"),No=require("react/jsx-runtime"),MU=2,RU=400;class b extends a.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){if(this.props.onError?.(o),this.state.attempt<MU){let U=RU*(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 No.jsx(a.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var t=require("react/jsx-runtime");function EU({uiConfig:o,setUiAjaxConfiguration:U}){let f=g.useContext(R),I=g.useContext(s),P=x();if(P)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=h(o.card);if(!T?.component){if(P)console.warn(`[UI] Component not found in registry: ${o.card}`),console.log("[UI] Returning fallback component");return f}if(P)console.log("[UI] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata});let w=T.component,H=t.jsx(w,{data:o.data,content:o.content,setUiAjaxConfiguration:U});if(T.isLazy){if(P)console.log("[UI] Rendering lazy component with Suspense:",T.name);return t.jsx(b,{name:T.name,fallback:T.fallback?t.jsx(T.fallback,{}):f,onError:I,children:H})}if(P)console.log("[UI] Rendering component directly:",T.name);return H}var K=g.memo(EU);var zo=require("react");var po=require("react");var NU=Q("@swarm.ing/pieui:context:uiRenderer",()=>po.createContext(null)),C=NU;var v=require("react/jsx-runtime");function bo({uiConfig:o,setUiAjaxConfiguration:U}){let f=zo.useContext(R),I=zo.useContext(s),P=x();if(P)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=h(o.card);if(!T?.component){if(P)console.warn(`[UILoading] Component not found in registry: ${o.card}`),console.log("[UILoading] Returning fallback component");return f}if(P)console.log("[UILoading] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata,hasFallback:!!T.fallback});if(T.fallback){if(P)console.log("[UILoading] Rendering fallback for:",T.name);let O=T.fallback;return v.jsx(O,{})}if(P)console.log("[UILoading] No fallback, rendering full component:",T.name);let w=T.component,H=v.jsx(C.Provider,{value:bo,children:v.jsx(w,{data:o.data,content:o.content,setUiAjaxConfiguration:U})});if(T.isLazy)return v.jsx(b,{name:T.name,fallback:f,onError:I,children:H});return H}var mo=bo;var yo=require("react");var e=require("react/jsx-runtime"),pU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,sx:P}=o,T=yo.useContext(C)??K;return e.jsx(G,{card:I,data:o,children:e.jsx("div",{style:P,id:I,children:U.map((w,H)=>{return e.jsx(T,{uiConfig:w,setUiAjaxConfiguration:f},`children-${H}`)})})})},ko=pU;var jo=J({name:"SequenceCard",component:ko,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var xo=require("react");var Ho=require("react/jsx-runtime"),bU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I}=o,P=xo.useContext(C)??K;return Ho.jsx(G,{card:I,data:o,children:U.map((T,w)=>{return Ho.jsx(P,{uiConfig:T,setUiAjaxConfiguration:f},`children-${w}`)})})},So=bU;var go=J({name:"UnionCard",component:So,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var oo=require("react"),vo=Fo(require("html-react-parser"));var W=require("react");function mU(){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 Zo(o=null,U){let[f,I]=W.useState(!1),P=W.useRef(null),T=W.useRef(null),w=W.useRef(null),H=W.useCallback(async(Z,F=!0)=>{if(P.current)O();let B=new RTCPeerConnection;if(B.onconnectionstatechange=()=>{if(B.connectionState==="connected")I(!0);else if(["disconnected","failed","closed"].includes(B.connectionState))I(!1)},B.ontrack=(A)=>{if(o)o.srcObject=A.streams[0]},F){let A=await navigator.mediaDevices.getUserMedia({audio:!0});B.addTrack(A.getTracks()[0],A)}else{let A=mU();B.addTrack(A)}let z=B.createDataChannel("oai-events");T.current=z,w.current=new Promise((A)=>{z.addEventListener("open",()=>{A()})});let X=await B.createOffer();await B.setLocalDescription(X);let q=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:X.sdp,headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/sdp"}})).text();await B.setRemoteDescription({type:"answer",sdp:q}),P.current=B,await w.current},[o]),O=W.useCallback(()=>{let Z=T.current;if(Z)Z.close();P.current?.getSenders()?.forEach((F)=>F.track?.stop()),P.current?.close(),I(!1),P.current=null,T.current=null,w.current=null},[o]),L=W.useCallback((Z)=>{let F=T.current;if(!F){console.error("Data channel is not ready",Z);return}let B=new Date().toLocaleTimeString();if(Z.event_id=Z.event_id||crypto.randomUUID(),F.send(JSON.stringify(Z)),!Z.timestamp)Z.timestamp=B;U?.(Z)},[U,o]),$=W.useCallback((Z)=>{if(!T.current){console.error("Data channel is not ready");return}let B=()=>{L({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:Z}]}}),L({type:"response.create"})};if(w.current)w.current.then(B);else B()},[U,o]);return W.useEffect(()=>{let Z=T.current;if(!Z)return;let F=(B)=>{let z=JSON.parse(B.data);if(!z.timestamp)z.timestamp=new Date().toLocaleTimeString();U?.(z)};return Z.addEventListener("message",F),()=>{Z.removeEventListener("message",F)}},[U,o]),{isSessionActive:f,startSession:H,stopSession:O,sendTextMessage:$}}var ro=require("react/jsx-runtime"),yU=({data:o})=>{let{html:U,useSocketioSupport:f,useCentrifugeSupport:I,useMittSupport:P,centrifugeChannel:T}=o,[w,H]=oo.useState(U),{isSessionActive:O,startSession:L,sendTextMessage:$}=Zo(null,(z)=>{if(console.log(z.type,z.type==="response.output_text.delta"&&z.delta),z.type==="response.output_text.delta"&&z.delta)H((X)=>X+z.delta)});return oo.useEffect(()=>{H(U)},[U]),ro.jsx(G,{card:"HTMLEmbedCard",data:o,methods:{update:(z)=>{H(z.value)},generateUsingAI:async(z)=>{try{if(!O&&z.token)await L(z.token,!1);$(z.prompt)}catch(X){console.error("Failed to generate using AI",X)}},initializeAI:async(z)=>{if(!O&&z.token)await L(z.token,!1)}},useCentrifugeSupport:I,useSocketioSupport:f,useMittSupport:P,centrifugeChannel:T,children:vo.default(w)})},lo=yU;var io=J({name:"HTMLEmbedCard",component:lo,metadata:{author:"Swarm.ing"}});var Uo=require("react");var Oo=require("react/jsx-runtime"),kU=({data:o})=>{let{name:U,value:f,useSocketioSupport:I,useCentrifugeSupport:P,useMittSupport:T,centrifugeChannel:w}=o,[H,O]=Uo.useState(f);return Uo.useEffect(()=>{O(f)},[f]),Oo.jsx(G,{card:"HiddenCard",data:o,useSocketioSupport:I,useCentrifugeSupport:P,useMittSupport:T,centrifugeChannel:w,methods:{update:({value:L})=>{O(L)}},children:Oo.jsx("input",{type:"hidden",id:U,name:U,value:H})})},co=kU;var uo=J({name:"HiddenCard",component:co,metadata:{author:"Swarm.ing"}});var l=require("react");var ho=require("react");var jU=Q("@swarm.ing/pieui:context:navigate",()=>ho.createContext(void 0)),m=jU;var fo=require("react/jsx-runtime"),xU=({data:o})=>{let{url:U}=o,f=l.useContext(m),I=l.useContext(R);return l.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else f?.(U)},[U,f]),fo.jsx(fo.Fragment,{children:I})},no=xU;var so=J({name:"AutoRedirectCard",component:no,metadata:{author:"Swarm.ing"}});var E=require("react-toastify"),Io=require("react-toastify");var k=require("react");var y=require("react/jsx-runtime"),SU={bounce:E.Bounce,slide:E.Slide,zoom:E.Zoom,flip:E.Flip},gU=(o)=>{let U={...o,type:o.alertType,transition:o.transition?SU[o.transition]:void 0,position:o.position??"bottom-right",autoClose:o.autoClose??3000,style:{backgroundColor:"black",...o.sx}};Io.toast(o.message,U)},vU=(o)=>{console.log("Log event",o)},lU=(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()})},rU=({data:o})=>{let{useCentrifugeSupport:U,useSocketioSupport:f,useMittSupport:I,centrifugeChannel:P}=o,T=k.useContext(m),w=k.useRef(T);w.current=T;let H=k.useMemo(()=>({alert:gU,log:vU,push:lU,redirect:(O)=>{if(O.to){let L=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(L))window.location.href=L;else w.current?.(L)}else window.location.reload()},reload:(O)=>{if(O.to){let L=O.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(L))window.location.href=L;else w.current?.(L)}else window.location.reload()}}),[]);return y.jsx(y.Fragment,{children:y.jsx(G,{card:"IOEventsCard",data:o,useCentrifugeSupport:U,useSocketioSupport:f,useMittSupport:I,centrifugeChannel:P,methods:H,children:y.jsx(Io.ToastContainer,{})})})},ao=rU;var to=J({name:"IOEventsCard",component:ao,metadata:{author:"Swarm.ing"}});var r=require("react");var Lo=require("react/jsx-runtime"),iU=({data:o})=>{let{name:U,key:f,value:I,useSocketioSupport:P,useCentrifugeSupport:T,useMittSupport:w,centrifugeChannel:H}=o,[O,L]=r.useState(I);return r.useEffect(()=>{L(I)},[I]),r.useEffect(()=>{if(typeof window>"u")return;sessionStorage.setItem(f,O)},[f,O]),Lo.jsx(G,{card:"SessionStorageCard",data:o,useSocketioSupport:P,useCentrifugeSupport:T,useMittSupport:w,centrifugeChannel:H,methods:{update:({value:$})=>{L($)},remove:()=>{sessionStorage.removeItem(f),L("")}},children:Lo.jsx("input",{type:"hidden",id:U,name:U,value:O})})},eo=iU;var oU=J({name:"SessionStorageCard",component:eo,metadata:{author:"PieData"}});var i=require("react");var Ao=require("react/jsx-runtime"),dU=({data:o})=>{let{name:U,key:f,value:I,useSocketioSupport:P,useCentrifugeSupport:T,useMittSupport:w,centrifugeChannel:H}=o,[O,L]=i.useState(I);return i.useEffect(()=>{L(I)},[I]),i.useEffect(()=>{if(typeof window>"u")return;localStorage.setItem(f,O)},[f,O]),Ao.jsx(G,{card:"DeviceStorageCard",data:o,useSocketioSupport:P,useCentrifugeSupport:T,useMittSupport:w,centrifugeChannel:H,methods:{update:({value:$})=>{L($)},remove:()=>{localStorage.removeItem(f),L("")}},children:Ao.jsx("input",{type:"hidden",id:U,name:U,value:O})})},UU=dU;var fU=J({name:"DeviceStorageCard",component:UU,metadata:{author:"PieData"}});var Y=require("react");var Bo=require("react/jsx-runtime"),cU=({data:o,content:U})=>{let{useLoader:f,noReturn:I,returnType:P,useSocketioSupport:T,useCentrifugeSupport:w,useMittSupport:H,centrifugeChannel:O}=o,L=Y.useContext(R),$=Y.useContext(C)??K,[Z,F]=Y.useState(!1),[B,z]=Y.useState(null),X=Y.useRef(U),N=Y.useContext(u),M=Y.useCallback((A)=>{if(A===null)F(!0);else if(F(!1),!I)X.current=A;if(!I)z(A)},[I]),D=Y.useCallback((A)=>{X.current=A.content,z(A.content)},[]),q=Y.useCallback((A)=>{if(A===null)F(!0);else if(F(!1),!I)for(let _ of A)N?.emit(_.name,_.data)},[I,N]);if(Y.useEffect(()=>{z(U),F(!1)},[U]),!B&&f)return L;return Bo.jsx(G,{card:"AjaxGroupCard",data:o,methods:{changeContent:D},useSocketioSupport:T,useCentrifugeSupport:w,useMittSupport:H,centrifugeChannel:O,children:Bo.jsx($,{uiConfig:B??X.current,setUiAjaxConfiguration:P==="events"?q:M})})},IU=cU;var TU=J({name:"AjaxGroupCard",component:IU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var $o=require("react");var To=require("react/jsx-runtime"),uU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,url:P,sx:T}=o,w=$o.useContext(m),H=$o.useContext(C)??K;return To.jsx(G,{card:I,data:o,children:To.jsx("div",{style:T,id:I,onClick:(L)=>{if(P)if(L.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else w?.(P)},children:To.jsx(H,{setUiAjaxConfiguration:f,uiConfig:U})})})},PU=uU;var wU=J({name:"BoxCard",component:PU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var zU=require("react");var Po=require("react/jsx-runtime"),hU=({data:o,content:U,setUiAjaxConfiguration:f})=>{let{name:I,sx:P}=o,T=zU.useContext(C)??K;return Po.jsx(G,{card:I,data:o,children:Po.jsx("div",{style:P,id:I,children:U.map((w,H)=>{return Po.jsx(T,{uiConfig:w,setUiAjaxConfiguration:f},`children-${H}`)})})})},HU=hU;var ZU=J({name:"OneOfCard",component:HU,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
|
|
2
|
+
import{useContext as OU,useEffect as qU,useRef as bU}from"react";import{createContext as wZ,useContext as NZ}from"react";var YU=globalThis,P=(U,Z)=>{let H=Symbol.for(U);if(!(H in YU))YU[H]=Z();return YU[H]};var g=P("@swarm.ing/pieui:context:pieConfig",()=>wZ(null)),d=()=>{let U=NZ(g);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},o=()=>{let{apiServer:U}=d();return U},n=o,t=()=>{let{centrifugeServer:U}=d();return U};var k=()=>{let{enableRenderingLog:U}=d();return U},jU=k;var BU="__piedemo__";import{createContext as EZ}from"react";import{Centrifuge as fU}from"centrifuge";var CU=P("@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 T(){let J=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!J.ok){if(J.status===401||J.status===403)throw new fU.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${J.status}`)}return(await J.json()).token}let z=new fU(Z,{getToken:T});return CU.set(H,z),z},jZ=P("@swarm.ing/pieui:context:centrifuge",()=>EZ(null)),y=jZ;import{io as fZ}from"socket.io-client";import{createContext as CZ}from"react";var xU=P("@swarm.ing/pieui:socket-cache",()=>new Map),e=(U)=>{let Z=xU.get(U);if(Z)return Z;let H=fZ(U,{autoConnect:!1,transports:["websocket"]});return xU.set(U,H),H},xZ=P("@swarm.ing/pieui:context:socket",()=>CZ(null)),S=xZ;import kZ from"mitt";import{createContext as yZ,useCallback as SZ,useContext as bZ}from"react";function u(){return P("@swarm.ing/pieui:mitt-emitter",()=>kZ())}var kU=P("@swarm.ing/pieui:context:mitt",()=>yZ(null));function mZ(U){let Z=bZ(kU);return SZ((H,$)=>{(Z??u()).emit(`pie${H}_${U}`,$)},[U,Z])}var b=kU;function yU(U){return U.wasRecovering===!0&&U.recovered===!1}function SU(U){return U.recoverable===!1}import{jsx as hZ,jsxs as gZ,Fragment as pZ}from"react/jsx-runtime";var vZ=({card:U,data:Z,children:H,useSocketioSupport:$=!1,useCentrifugeSupport:T=!1,useMittSupport:z=!1,centrifugeChannel:J=void 0,methods:G=void 0,stored:I=void 0,onResync:X=void 0})=>{let W=jU(),q=bU(G);q.current=G;let V=bU(X);if(V.current=X,W)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:T,mitt:z,centrifugeChannel:J}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!H);let B=OU(S),O=OU(y),_=OU(b);if(qU(()=>{if(!B||!$||!q.current||!Z.name){if(W&&$)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!B,useSocketioSupport:$,hasMethods:!!q.current,hasDataName:!!Z?.name});return}let A=Object.keys(q.current??{}).map((D)=>{let Y=`pie${D}_${Z.name}`;if(W)console.log(`[PieCard] Socket.IO registering event: ${Y}`);let Q=(w)=>{q.current?.[D]?.(w)};return B.on(Y,Q),[Y,Q]});return()=>{A.forEach(([D,Y])=>{if(W)console.log(`[PieCard] Socket.IO unregistering event: ${D}`);B.off(D,Y)})}},[B,Z.name,$]),qU(()=>{if(!O||!T||!J||!Z.name){if(W&&T)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!O,useCentrifugeSupport:T,hasCentrifugeChannel:!!J,hasMethods:!!q.current,hasDataName:!!Z?.name});return}let A=Object.keys(q.current??{}).map((D)=>{let Y=`pie${D}_${Z.name}_${J}`;if(W)console.log(`[PieCard] Centrifuge subscribing to channel: ${Y}`);let Q=O.newSubscription(Y,{recoverable:!0,positioned:!0});return Q.on("publication",(w)=>{if(W)console.log(`[PieCard] Centrifuge received data on ${Y}:`,w.data);q.current?.[D]?.(w.data)}),Q.on("subscribed",(w)=>{if(SU(w))console.warn(`[PieCard] Centrifuge channel ${Y} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(yU(w)){if(W)console.log(`[PieCard] Centrifuge recovery gap on ${Y}; requesting resync`);V.current?.({channel:Y,reason:"gap"})}}),Q.subscribe(),Q});return()=>{A.forEach((D)=>{if(W)console.log("[PieCard] Centrifuge unsubscribing from channel");D.unsubscribe(),O.removeSubscription(D)})}},[O,J,Z.name,T]),qU(()=>{if(!_||!z||!Z.name){if(W&&z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!_,useMittSupport:z,hasMethods:!!q.current,hasDataName:!!Z?.name});return}let F=Object.keys(q.current??{}),A={};return F.forEach((D)=>{let Y=`pie${D}_${Z.name}`,Q=(w)=>{if(W)console.log(`[PieCard] Mitt registering event: ${Y}`);q.current?.[D]?.(w)};A[Y]=Q,_.on(Y,Q)}),()=>{Object.entries(A).forEach(([D,Y])=>{if(W)console.log(`[PieCard] Mitt unregistering event: ${D}`);_.off(D,Y)})}},[_,Z.name,z]),W)console.log("[PieCard] Rendering complete, returning children");if(I!==void 0)return gZ(pZ,{children:[hZ("input",{type:"hidden",name:Z.name,value:JSON.stringify(I)}),H]});return H},M=vZ;import{lazy as uZ}from"react";var v=new Map;function mU(U,Z){return Z.catch(()=>{if(v.get(U)===Z)v.delete(U)}),v.set(U,Z),Z}function QU(U,Z){return uZ(()=>{if(v.has(Z))return v.get(Z);return mU(Z,U().then((H)=>H))})}var vU=async(U,Z)=>{if(!Z)return;if(v.has(U))return v.get(U);return mU(U,Z().then((H)=>H))};var C=P("@swarm.ing/pieui:component-registry",()=>new Map),cZ=(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 K(U){let Z=cZ(U);return C.set(Z.name,Z),Z.component}var dZ=(U)=>{U.forEach((Z)=>K(Z))},oZ=(U)=>{C.delete(U)},lZ=(U)=>{return C.has(U)},iZ=(U)=>{return C.get(U)?.metadata},l=(U)=>{return C.get(U)},sZ=()=>{return Array.from(C.keys())},rZ=()=>{return C.size},hU=()=>Array.from(C.values()).filter((U)=>U.isLazy&&typeof U.loader==="function").map((U)=>U.name),gU=(U)=>{let Z=C.get(U);if(!Z?.isLazy||typeof Z.loader!=="function")return;return vU(U,Z.loader)},pU=!1,nZ=()=>{if(pU||typeof window>"u")return;pU=!0;let U=navigator.connection;if(U?.saveData)return;if(U?.effectiveType&&["slow-2g","2g"].includes(U.effectiveType))return;let Z=hU(),H="requestIdleCallback"in window?(T)=>window.requestIdleCallback(T,{timeout:2000}):(T)=>window.setTimeout(T,300),$=(T)=>{if(T>=Z.length)return;H(()=>{Promise.resolve().then(()=>gU(Z[T])).catch(()=>{}).finally(()=>$(T+1))})};$(0)};import{useContext as uU,memo as GH}from"react";import{createContext as tZ}from"react";import{jsx as UH,Fragment as eZ}from"react/jsx-runtime";var aZ=P("@swarm.ing/pieui:context:fallback",()=>tZ(UH(eZ,{}))),E=aZ;import{createContext as ZH}from"react";var HH=P("@swarm.ing/pieui:context:lazyError",()=>ZH(void 0)),m=HH;import{Component as $H,Suspense as zH}from"react";import{jsx as IH}from"react/jsx-runtime";var TH=2,JH=400;class c extends $H{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<TH){let Z=JH*(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 IH(zH,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as WU}from"react/jsx-runtime";function XH({uiConfig:U,setUiAjaxConfiguration:Z}){let H=uU(E),$=uU(m),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 z=l(U.card);if(!z?.component){if(T)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(T)console.log("[UI] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata});let J=z.component,G=WU(J,{data:U.data,content:U.content,setUiAjaxConfiguration:Z});if(z.isLazy){if(T)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:G})}if(T)console.log("[UI] Rendering component directly:",z.name);return G}var N=GH(XH);import{useContext as cU}from"react";import{createContext as YH}from"react";var BH=P("@swarm.ing/pieui:context:uiRenderer",()=>YH(null)),j=BH;import{jsx as UU}from"react/jsx-runtime";function dU({uiConfig:U,setUiAjaxConfiguration:Z}){let H=cU(E),$=cU(m),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 z=l(U.card);if(!z?.component){if(T)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(T)console.log("[UILoading] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata,hasFallback:!!z.fallback});if(z.fallback){if(T)console.log("[UILoading] Rendering fallback for:",z.name);let I=z.fallback;return UU(I,{})}if(T)console.log("[UILoading] No fallback, rendering full component:",z.name);let J=z.component,G=UU(j.Provider,{value:dU,children:UU(J,{data:U.data,content:U.content,setUiAjaxConfiguration:Z})});if(z.isLazy)return UU(c,{name:z.name,fallback:H,onError:$,children:G});return G}var DU=dU;import{useContext as OH}from"react";import{jsx as _U}from"react/jsx-runtime";var qH=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,sx:T}=U,z=OH(j)??N;return _U(M,{card:$,data:U,children:_U("div",{style:T,id:$,children:Z.map((J,G)=>{return _U(z,{uiConfig:J,setUiAjaxConfiguration:H},`children-${G}`)})})})},oU=qH;var QH=K({name:"SequenceCard",component:oU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as WH}from"react";import{jsx as lU}from"react/jsx-runtime";var DH=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$}=U,T=WH(j)??N;return lU(M,{card:$,data:U,children:Z.map((z,J)=>{return lU(T,{uiConfig:z,setUiAjaxConfiguration:H},`children-${J}`)})})},iU=DH;var _H=K({name:"UnionCard",component:iU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as PH,useState as AH}from"react";import MH from"html-react-parser";import{useCallback as ZU,useEffect as VH,useRef as VU,useState as FH}from"react";function KH(){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,$]=FH(!1),T=VU(null),z=VU(null),J=VU(null),G=ZU(async(q,V=!0)=>{if(T.current)I();let B=new RTCPeerConnection;if(B.onconnectionstatechange=()=>{if(B.connectionState==="connected")$(!0);else if(["disconnected","failed","closed"].includes(B.connectionState))$(!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=KH();B.addTrack(Q)}let O=B.createDataChannel("oai-events");z.current=O,J.current=new Promise((Q)=>{O.addEventListener("open",()=>{Q()})});let _=await B.createOffer();await B.setLocalDescription(_);let Y=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:_.sdp,headers:{Authorization:`Bearer ${q}`,"Content-Type":"application/sdp"}})).text();await B.setRemoteDescription({type:"answer",sdp:Y}),T.current=B,await J.current},[U]),I=ZU(()=>{let q=z.current;if(q)q.close();T.current?.getSenders()?.forEach((V)=>V.track?.stop()),T.current?.close(),$(!1),T.current=null,z.current=null,J.current=null},[U]),X=ZU((q)=>{let V=z.current;if(!V){console.error("Data channel is not ready",q);return}let B=new Date().toLocaleTimeString();if(q.event_id=q.event_id||crypto.randomUUID(),V.send(JSON.stringify(q)),!q.timestamp)q.timestamp=B;Z?.(q)},[Z,U]),W=ZU((q)=>{if(!z.current){console.error("Data channel is not ready");return}let B=()=>{X({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:q}]}}),X({type:"response.create"})};if(J.current)J.current.then(B);else B()},[Z,U]);return VH(()=>{let q=z.current;if(!q)return;let V=(B)=>{let O=JSON.parse(B.data);if(!O.timestamp)O.timestamp=new Date().toLocaleTimeString();Z?.(O)};return q.addEventListener("message",V),()=>{q.removeEventListener("message",V)}},[Z,U]),{isSessionActive:H,startSession:G,stopSession:I,sendTextMessage:W}}import{jsx as LH}from"react/jsx-runtime";var RH=({data:U})=>{let{html:Z,useSocketioSupport:H,useCentrifugeSupport:$,useMittSupport:T,centrifugeChannel:z}=U,[J,G]=AH(Z),{isSessionActive:I,startSession:X,sendTextMessage:W}=FU(null,(O)=>{if(console.log(O.type,O.type==="response.output_text.delta"&&O.delta),O.type==="response.output_text.delta"&&O.delta)G((_)=>_+O.delta)});return PH(()=>{G(Z)},[Z]),LH(M,{card:"HTMLEmbedCard",data:U,methods:{update:(O)=>{G(O.value)},generateUsingAI:async(O)=>{try{if(!I&&O.token)await X(O.token,!1);W(O.prompt)}catch(_){console.error("Failed to generate using AI",_)}},initializeAI:async(O)=>{if(!I&&O.token)await X(O.token,!1)}},useCentrifugeSupport:$,useSocketioSupport:H,useMittSupport:T,centrifugeChannel:z,children:MH(J)})},sU=RH;var wH=K({name:"HTMLEmbedCard",component:sU,metadata:{author:"Swarm.ing"}});import{useEffect as NH,useState as EH}from"react";import{jsx as rU}from"react/jsx-runtime";var jH=({data:U})=>{let{name:Z,value:H,useSocketioSupport:$,useCentrifugeSupport:T,useMittSupport:z,centrifugeChannel:J}=U,[G,I]=EH(H);return NH(()=>{I(H)},[H]),rU(M,{card:"HiddenCard",data:U,useSocketioSupport:$,useCentrifugeSupport:T,useMittSupport:z,centrifugeChannel:J,methods:{update:({value:X})=>{I(X)}},children:rU("input",{type:"hidden",id:Z,name:Z,value:G})})},nU=jH;var fH=K({name:"HiddenCard",component:nU,metadata:{author:"Swarm.ing"}});import{useContext as tU,useEffect as kH}from"react";import{createContext as CH}from"react";var xH=P("@swarm.ing/pieui:context:navigate",()=>CH(void 0)),x=xH;import{jsx as bH,Fragment as SH}from"react/jsx-runtime";var yH=({data:U})=>{let{url:Z}=U,H=tU(x),$=tU(E);return kH(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Z))window.location.href=Z;else H?.(Z)},[Z,H]),bH(SH,{children:$})},aU=yH;var mH=K({name:"AutoRedirectCard",component:aU,metadata:{author:"Swarm.ing"}});import{Bounce as vH,Slide as pH,Zoom as hH,Flip as gH}from"react-toastify";import{toast as uH,ToastContainer as cH}from"react-toastify";import{useContext as dH,useMemo as oH,useRef as lH}from"react";import{jsx as KU,Fragment as aH}from"react/jsx-runtime";var iH={bounce:vH,slide:pH,zoom:hH,flip:gH},sH=(U)=>{let Z={...U,type:U.alertType,transition:U.transition?iH[U.transition]:void 0,position:U.position??"bottom-right",autoClose:U.autoClose??3000,style:{backgroundColor:"black",...U.sx}};uH(U.message,Z)},rH=(U)=>{console.log("Log event",U)},nH=(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()})},tH=({data:U})=>{let{useCentrifugeSupport:Z,useSocketioSupport:H,useMittSupport:$,centrifugeChannel:T}=U,z=dH(x),J=lH(z);J.current=z;let G=oH(()=>({alert:sH,log:rH,push:nH,redirect:(I)=>{if(I.to){let X=I.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(X))window.location.href=X;else J.current?.(X)}else window.location.reload()},reload:(I)=>{if(I.to){let X=I.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(X))window.location.href=X;else J.current?.(X)}else window.location.reload()}}),[]);return KU(aH,{children:KU(M,{card:"IOEventsCard",data:U,useCentrifugeSupport:Z,useSocketioSupport:H,useMittSupport:$,centrifugeChannel:T,methods:G,children:KU(cH,{})})})},eU=tH;var eH=K({name:"IOEventsCard",component:eU,metadata:{author:"Swarm.ing"}});import{useEffect as UZ,useState as U$}from"react";import{jsx as ZZ}from"react/jsx-runtime";var Z$=({data:U})=>{let{name:Z,key:H,value:$,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:J,centrifugeChannel:G}=U,[I,X]=U$($);return UZ(()=>{X($)},[$]),UZ(()=>{if(typeof window>"u")return;sessionStorage.setItem(H,I)},[H,I]),ZZ(M,{card:"SessionStorageCard",data:U,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:J,centrifugeChannel:G,methods:{update:({value:W})=>{X(W)},remove:()=>{sessionStorage.removeItem(H),X("")}},children:ZZ("input",{type:"hidden",id:Z,name:Z,value:I})})},HZ=Z$;var H$=K({name:"SessionStorageCard",component:HZ,metadata:{author:"PieData"}});import{useEffect as $Z,useState as $$}from"react";import{jsx as zZ}from"react/jsx-runtime";var z$=({data:U})=>{let{name:Z,key:H,value:$,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:J,centrifugeChannel:G}=U,[I,X]=$$($);return $Z(()=>{X($)},[$]),$Z(()=>{if(typeof window>"u")return;localStorage.setItem(H,I)},[H,I]),zZ(M,{card:"DeviceStorageCard",data:U,useSocketioSupport:T,useCentrifugeSupport:z,useMittSupport:J,centrifugeChannel:G,methods:{update:({value:W})=>{X(W)},remove:()=>{localStorage.removeItem(H),X("")}},children:zZ("input",{type:"hidden",id:Z,name:Z,value:I})})},TZ=z$;var T$=K({name:"DeviceStorageCard",component:TZ,metadata:{author:"PieData"}});import{useCallback as PU,useContext as AU,useEffect as J$,useRef as I$,useState as JZ}from"react";import{jsx as IZ}from"react/jsx-runtime";var G$=({data:U,content:Z})=>{let{useLoader:H,noReturn:$,returnType:T,useSocketioSupport:z,useCentrifugeSupport:J,useMittSupport:G,centrifugeChannel:I}=U,X=AU(E),W=AU(j)??N,[q,V]=JZ(!1),[B,O]=JZ(null),_=I$(Z),F=AU(b),A=PU((Q)=>{if(Q===null)V(!0);else if(V(!1),!$)_.current=Q;if(!$)O(Q)},[$]),D=PU((Q)=>{_.current=Q.content,O(Q.content)},[]),Y=PU((Q)=>{if(Q===null)V(!0);else if(V(!1),!$)for(let w of Q)F?.emit(w.name,w.data)},[$,F]);if(J$(()=>{O(Z),V(!1)},[Z]),!B&&H)return X;return IZ(M,{card:"AjaxGroupCard",data:U,methods:{changeContent:D},useSocketioSupport:z,useCentrifugeSupport:J,useMittSupport:G,centrifugeChannel:I,children:IZ(W,{uiConfig:B??_.current,setUiAjaxConfiguration:T==="events"?Y:A})})},GZ=G$;var X$=K({name:"AjaxGroupCard",component:GZ,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as XZ}from"react";import{jsx as MU}from"react/jsx-runtime";var Y$=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,url:T,sx:z}=U,J=XZ(x),G=XZ(j)??N;return MU(M,{card:$,data:U,children:MU("div",{style:z,id:$,onClick:(X)=>{if(T)if(X.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(T))window.location.href=T;else J?.(T)},children:MU(G,{setUiAjaxConfiguration:H,uiConfig:Z})})})},YZ=Y$;var B$=K({name:"BoxCard",component:YZ,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as O$}from"react";import{jsx as RU}from"react/jsx-runtime";var q$=({data:U,content:Z,setUiAjaxConfiguration:H})=>{let{name:$,sx:T}=U,z=O$(j)??N;return RU(M,{card:$,data:U,children:RU("div",{style:T,id:$,children:Z.map((J,G)=>{return RU(z,{uiConfig:J,setUiAjaxConfiguration:H},`children-${G}`)})})})},BZ=q$;var Q$=K({name:"OneOfCard",component:BZ,metadata:{author:"Swarm.ing",description:"Different variants"}});import{useMemo as s}from"react";import{QueryClient as f$,QueryClientProvider as C$,useQuery as x$}from"@tanstack/react-query";import{useContext as M$,useEffect as R$}from"react";import{useEffect as W$,useState as D$}from"react";var HU=new Map,$U=new Map;function zU(U,Z){let H=`${U}::${Z}`,$=U?HU.get(H):void 0,[T,z]=D$($??null);return W$(()=>{if(!U)return;if(HU.has(H)){z(HU.get(H));return}let J=$U.get(H);if(!J)J=fetch(U+`api/support/${Z}`,{method:"GET"}).then((I)=>I.json()).then((I)=>{return HU.set(H,I),$U.delete(H),I}).catch((I)=>{throw $U.delete(H),I}),$U.set(H,J);let G=!1;return J.then((I)=>{if(!G)z(I)}).catch(()=>{}),()=>{G=!0}},[U,Z,H]),T}var _$=(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},V$={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:_$,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()}},OZ=V$;var F$={};function p(){return F$}var qZ=new Map;var QZ=(U)=>{return qZ.has(U)?qZ.get(U):null};var WZ,K$={isClient(){return!0},readSid(){return WZ},setSid(U){WZ=U},readWebStorage(U,Z){let H=p(),$=U==="local"?H.storage:H.sessionStorage;return $?$.getItem(Z):null},async readWebStorageAsync(U,Z){let H=p(),$=U==="local"?H.asyncStorage:H.asyncSessionStorage;if($)return $.getItem(Z);let T=U==="local"?H.storage:H.sessionStorage;return T?T.getItem(Z):null},readCookie(U){let Z=p();return Z.getCookie?Z.getCookie(U):null},readUrlParams(U){let Z=p();return Z.getRouteParams?Z.getRouteParams(U):[]},readDomInput(U){let Z=p();return Z.getInput?Z.getInput(U):QZ(U)},submitGlobalForm(){p().submitForm?.()}},DZ=K$;var P$=typeof navigator<"u"&&navigator.product==="ReactNative",A$=P$?DZ:OZ,R=A$;var i=P("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function _Z(){i.resolve?.()}function LU(){if(!R.isClient())return Promise.resolve();if(R.readSid()!==void 0)return Promise.resolve();if(!i.promise)i.promise=new Promise((U)=>{i.resolve=()=>{U()}});return i.promise}var L$=({children:U})=>{let Z=M$(S),H=n(),$=zU(H,"socketIO"),T=(z)=>{if(R.isClient())R.setSid(z.sid),_Z(),console.log(`SocketIO initialized: ${R.readSid()}`)};return R$(()=>{if(!Z)return;let z=()=>{console.log("SocketIO connected")},J=(G)=>{console.log(`SocketIO disconnected: ${G}`),Z.connect()};if($)Z.on("pieinit",T),Z.on("connect",z),Z.on("disconnect",J),Z.connect();return()=>{if($)Z.off("pieinit",T),Z.off("connect",z),Z.off("disconnect",J),Z.disconnect()}},[Z,$]),U},TU=L$;import{useContext as w$,useEffect as N$}from"react";var E$=({children:U})=>{let Z=w$(y),H=n(),$=zU(H,"centrifuge");return N$(()=>{if(!Z)return;let T=()=>{console.log("Centrifuge connected")},z=(J)=>{console.log("Centrifuge disconnected:",J)};if($)Z.on("connected",T),Z.on("disconnected",z),Z.connect();return()=>{if($)Z.disconnect()}},[Z,$]),U},JU=E$;import{createAxiosDateTransformer as k$}from"axios-date-transformer";import{jsx as j$}from"react/jsx-runtime";function VZ(U,Z,H){if(!Z)return H;let $=U.replace(/^\//,""),T=Z[$];if(!T)return H;return j$(DU,{uiConfig:T})}import{jsx as L,Fragment as b$}from"react/jsx-runtime";var y$=({location:U,fallback:Z,piecache:H,onError:$,queryOptions:T,disableGlobalForm:z})=>{let J=o(),G=t(),I=k(),X=s(()=>k$({baseURL:J||""}),[J]),W=s(()=>u(),[]),q=s(()=>J?e(J):null,[J]),V=s(()=>J?a(J,G):null,[J,G]),{data:B,isLoading:O,error:_}=x$({queryKey:["uiConfig",U.pathname+U.search,J],enabled:!!J,queryFn:async()=>{let A=new URLSearchParams(U.search);A.set("__pieroot","web");let D="/api/content"+U.pathname+"?"+A.toString();if(I)console.log("[PieRoot] Fetching UI configuration from:",D);let Y=await X.get(D,{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:",Y.data);return Y.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(A)=>Math.min(1000*2**A,30000),...T}),F=VZ(U.pathname,H,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:",!!H);if(_){if(I)console.error("[PieRoot] Error fetching UI configuration:",_),console.error("[PieRoot] Error details:",{message:_.message,status:_.response?.status,data:_.response?.data});return $?.(_),F}if(O||!B){if(I)console.log("[PieRoot] Loading state:",{isLoading:O,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:W,children:L(S.Provider,{value:q,children:L(y.Provider,{value:V,children:L(E.Provider,{value:Z??L(b$,{}),children:L(TU,{children:L(JU,{children:z?L(N,{uiConfig:B}):L("form",{id:"piedata_global_form",action:J+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:L(N,{uiConfig:B})})})})})})})})},S$=(U)=>{let Z=s(()=>new f$,[]),H=U.queryClient??Z;return L(x.Provider,{value:U.onNavigate,children:L(g.Provider,{value:U.config,children:L(m.Provider,{value:U.onError,children:L(C$,{client:H,children:L(y$,{...U})})})})})},wU=S$;import{useMemo as NU,useState as m$}from"react";import{QueryClient as v$,QueryClientProvider as p$}from"@tanstack/react-query";import{jsx as f,Fragment as u$}from"react/jsx-runtime";var h$=({location:U,fallback:Z,children:H,disableGlobalForm:$})=>{let T=o(),z=t(),J=k(),G=NU(()=>u(),[]),I=NU(()=>T?e(T):null,[T]),X=NU(()=>T?a(T,z):null,[T,z]);if(J)console.log("[PieRoot] Rendering with location:",U),console.log("[PieRoot] API_SERVER:",T),console.log("[PieRoot] CENTRIFUGE_SERVER:",z),console.log("[PieRoot] Fallback provided:",!!Z);return f(b.Provider,{value:G,children:f(S.Provider,{value:I,children:f(y.Provider,{value:X,children:f(E.Provider,{value:Z??f(u$,{}),children:f(TU,{children:f(JU,{children:$?H:f("form",{id:"piedata_global_form",action:T+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:H})})})})})})})},g$=(U)=>{let[Z]=m$(()=>new v$),H=U.queryClient??Z;return f(x.Provider,{value:U.onNavigate,children:f(g.Provider,{value:U.config,children:f(m.Provider,{value:U.onError,children:f(p$,{client:H,children:f(h$,{...U})})})})})},c$=g$;import{useMemo as d$}from"react";import{jsx as FZ}from"react/jsx-runtime";var o$=FZ("div",{style:{padding:16,fontFamily:"system-ui, sans-serif",color:"#888"},children:"Loading card…"}),l$=({apiServer:U,pathname:Z="/",search:H="",centrifugeServer:$,fallback:T,enableRenderingLog:z=!1})=>{let J=U??(typeof process<"u"?process.env.PIE_API_SERVER:void 0)??"",G=d$(()=>({apiServer:J,centrifugeServer:$,enableRenderingLog:z,pageProcessor:"web"}),[J,$,z]);return FZ(wU,{location:{pathname:Z,search:H},config:G,fallback:T??o$,onNavigate:(X)=>{if(typeof window<"u")window.history.pushState(null,"",X)}})},i$=l$;import{useMemo as s$}from"react";var r$=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],n$=new Set(["telegram:cloud","telegram:secure"]),IU=(U)=>{if(U==="sid")return{source:"sid",key:"sid"};for(let Z of r$){let H=Z+":";if(U.startsWith(H))return{source:Z,key:U.slice(H.length)}}return{source:"dom",key:U}},KZ=(U,Z=!1)=>{let{source:H,key:$}=IU(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(n$.has(H)){if(Z)console.warn(`Source ${H} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let T=R.readDomInput($);if(T===null){if(Z)console.warn(`No input found with name ${$}`);return[]}return T},t$=(U,Z,H)=>{let $=window.Telegram?.WebApp,T=U==="telegram:cloud"?$?.CloudStorage:$?.SecureStorage,z=U==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!T){if(H)console.warn(`${z} is not available`);return Promise.resolve([])}return new Promise((J)=>{try{T.getItem(Z,(G,I)=>{if(G){if(H)console.warn(`Failed to read ${z} key ${Z}:`,G);J([]);return}if(I==null||I===""){if(H)console.warn(`No ${z} value found for key ${Z}`);J([]);return}J([I])})}catch(G){if(H)console.warn(`Failed to read ${z} key ${Z}:`,G);J([])}})},PZ=async(U,Z=!1)=>{let{source:H,key:$}=IU(U);if(H==="telegram:cloud"||H==="telegram:secure")return t$(H,$,Z);if((H==="localStorage"||H==="sessionStorage")&&R.readWebStorageAsync)try{let T=await R.readWebStorageAsync(H==="localStorage"?"local":"session",$);if(T===null){if(Z)console.warn(`No ${H} value found for key ${$}`);return[]}return[T]}catch(T){if(Z)console.warn(`Failed to read ${H} key ${$}:`,T);return[]}return KZ(U,Z)},a$=(U,Z={},H=[],$,T)=>{let z=T?.renderingLogEnabled??!1,J=T?.timeout,G=T?.retryPolicy,I=G?.maxRetries??0,X=G?.baseDelay??1000,W=G?.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=T?.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 B=new FormData;for(let[F,A]of Object.entries({...Z,...q}))B.append(F,A);for(let F of H){let{key:A}=IU(F);for(let D of await PZ(F,z))B.append(A,D)}let O=V+"api/ajax_content"+$;U(null);let _;for(let F=0;F<=I;F++){if(F>0){let Y=X*2**(F-1);if(z)console.log(`AJAX retry ${F}/${I} after ${Y}ms`);await new Promise((Q)=>setTimeout(Q,Y))}let A=J!=null?new AbortController:null,D=A&&setTimeout(()=>A.abort(),J);try{let Y=await fetch(O,{method:"POST",body:B,signal:A?.signal});if(D)clearTimeout(D);if(!Y.ok&&W.includes(Y.status)&&F<I){_=Error(`HTTP ${Y.status}`);continue}let w=(Y.headers.get("content-type")||"").includes("application/json");if(!!Y.body?.getReader&&!w){let r=Y.body.getReader(),AZ=new TextDecoder,h="";while(!0){let{done:GU,value:MZ}=await r.read();if(GU)break;h+=AZ.decode(MZ,{stream:!0});let EU=h.split(`
|
|
3
|
+
`);h=EU.pop()??"";for(let RZ of EU){let XU=RZ.trim();if(!XU)continue;try{let LZ=JSON.parse(XU);U([LZ])}catch{if(z)console.warn("Failed to parse streamed line:",XU)}}}if(h.trim())try{let GU=JSON.parse(h);U([GU])}catch{if(z)console.warn("Failed to parse final streamed line:",h)}return{}}else{let r=await Y.json();return U(r),r}}catch(Y){if(D)clearTimeout(D);if(_=Y,F<I)continue;if(z)console.error("AJAX request failed:",Y);return U(null),Y}}if(z)console.error("AJAX request failed after retries:",_);return U(null),_}},e$=(U,Z={},H=[],$,T)=>{let{apiServer:z,enableRenderingLog:J}=d(),G=JSON.stringify(Z),I=JSON.stringify(H),X=JSON.stringify(T);return s$(()=>a$(U,Z,H,$,{apiServer:z,renderingLogEnabled:J,timeout:T?.timeout,retryPolicy:T?.retryPolicy}),[U,G,I,$,z,J,X])};import{clsx as Uz}from"clsx";import{twMerge as Zz}from"tailwind-merge";function Hz(...U){return Zz(Uz(U))}var $z=()=>{R.submitGlobalForm()};var zz=(U,Z)=>`${U}${BU}${Z}`;export{mZ as usePieEmit,e$ as useAjaxSubmit,oZ as unregisterComponent,QU as trackLazy,$z as submitGlobalForm,C as registry,K as registerPieComponent,dZ as registerMultipleComponents,PZ as readAjaxKeyAsync,KZ as readAjaxKey,gU as preloadComponent,nZ as prefetchLazyComponents,zz as pieName,IU as parseDepName,lZ as hasComponent,rZ as getRegistrySize,l as getRegistryEntry,hU as getLazyComponentNames,u as getEmitter,iZ as getComponentMeta,sZ as getAllRegisteredComponents,Hz as cn,_H as UnionCard,j as UIRendererContext,DU as UILoading,N as UI,S as SocketIOContext,H$ as SessionStorageCard,QH as SequenceCard,wU as PieRoot,i$ as PiePreviewRoot,g as PieConfigContext,M as PieCard,c$ as PieBaseRoot,BU as PIEBREAK,Q$ as OneOfCard,b as MittContext,eH as IOEventsCard,fH as HiddenCard,wH as HTMLEmbedCard,E as FallbackContext,T$ as DeviceStorageCard,y as CentrifugeIOContext,B$ as BoxCard,mH as AutoRedirectCard,X$ as AjaxGroupCard};
|