@swarm.ing/pieui 2.1.3 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/cli.js +2208 -14
  2. package/dist/code/commands/listEvents.d.ts.map +1 -1
  3. package/dist/code/commands/registry.d.ts.map +1 -1
  4. package/dist/index.esm.js +2 -2
  5. package/dist/index.js +2 -2
  6. package/dist/max/index.esm.js +1 -1
  7. package/dist/max/index.js +1 -1
  8. package/dist/native/PieNativeRoot.d.ts +15 -0
  9. package/dist/native/PieNativeRoot.d.ts.map +1 -0
  10. package/dist/native/components/AutoRedirectCard.d.ts +10 -0
  11. package/dist/native/components/AutoRedirectCard.d.ts.map +1 -0
  12. package/dist/native/components/BoxCard.d.ts +13 -0
  13. package/dist/native/components/BoxCard.d.ts.map +1 -0
  14. package/dist/native/components/DeviceStorageCard.d.ts +12 -0
  15. package/dist/native/components/DeviceStorageCard.d.ts.map +1 -0
  16. package/dist/native/components/HTMLEmbedCard.d.ts +11 -0
  17. package/dist/native/components/HTMLEmbedCard.d.ts.map +1 -0
  18. package/dist/native/components/HiddenCard.d.ts +11 -0
  19. package/dist/native/components/HiddenCard.d.ts.map +1 -0
  20. package/dist/native/components/IOEventsCard.d.ts +11 -0
  21. package/dist/native/components/IOEventsCard.d.ts.map +1 -0
  22. package/dist/native/components/OneOfCard.d.ts +12 -0
  23. package/dist/native/components/OneOfCard.d.ts.map +1 -0
  24. package/dist/native/components/SequenceCard.d.ts +12 -0
  25. package/dist/native/components/SequenceCard.d.ts.map +1 -0
  26. package/dist/native/components/SessionStorageCard.d.ts +9 -0
  27. package/dist/native/components/SessionStorageCard.d.ts.map +1 -0
  28. package/dist/native/components/index.d.ts +13 -0
  29. package/dist/native/components/index.d.ts.map +1 -0
  30. package/dist/native/index.d.ts +41 -0
  31. package/dist/native/index.d.ts.map +1 -0
  32. package/dist/native/index.esm.js +3 -0
  33. package/dist/native/index.js +3 -0
  34. package/dist/platform/clientSources.d.ts +4 -0
  35. package/dist/platform/clientSources.d.ts.map +1 -0
  36. package/dist/platform/clientSources.native.d.ts +4 -0
  37. package/dist/platform/clientSources.native.d.ts.map +1 -0
  38. package/dist/platform/clientSources.web.d.ts +10 -0
  39. package/dist/platform/clientSources.web.d.ts.map +1 -0
  40. package/dist/platform/nativeConfig.d.ts +63 -0
  41. package/dist/platform/nativeConfig.d.ts.map +1 -0
  42. package/dist/platform/nativeFormStore.d.ts +12 -0
  43. package/dist/platform/nativeFormStore.d.ts.map +1 -0
  44. package/dist/platform/types.d.ts +39 -0
  45. package/dist/platform/types.d.ts.map +1 -0
  46. package/dist/providers/SocketIOInitProvider.d.ts.map +1 -1
  47. package/dist/telegram/index.esm.js +1 -1
  48. package/dist/telegram/index.js +1 -1
  49. package/dist/tests/clientSources.test.d.ts +2 -0
  50. package/dist/tests/clientSources.test.d.ts.map +1 -0
  51. package/dist/tests/clientSourcesNative.test.d.ts +12 -0
  52. package/dist/tests/clientSourcesNative.test.d.ts.map +1 -0
  53. package/dist/util/ajaxCommonUtils.d.ts.map +1 -1
  54. package/dist/util/centrifuge.d.ts.map +1 -1
  55. package/dist/util/globalForm.d.ts +4 -5
  56. package/dist/util/globalForm.d.ts.map +1 -1
  57. package/dist/util/waitForSidAvailable.d.ts.map +1 -1
  58. package/package.json +17 -4
@@ -0,0 +1,11 @@
1
+ /**
2
+ * React Native variant of `IOEventsCard`. Maps server-driven IO events onto
3
+ * native primitives: `alert` → `Alert.alert`, `redirect`/`reload` → `Linking`
4
+ * (external) or `NavigateContext` (internal), `log` → console. There is no DOM
5
+ * toast container, and web push notifications are not available; `push` warns.
6
+ */
7
+ declare const IOEventsCard: ({ data }: {
8
+ data: any;
9
+ }) => import("react").JSX.Element;
10
+ export default IOEventsCard;
11
+ //# sourceMappingURL=IOEventsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IOEventsCard.d.ts","sourceRoot":"","sources":["../../../src/native/components/IOEventsCard.tsx"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,QAAA,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,gCA0C5C,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { SetUiAjaxConfigurationType, UIConfigType } from '../../types';
2
+ /**
3
+ * React Native variant of `OneOfCard`. Renders its child configs inside a
4
+ * `View` (replacing the web `<div>`).
5
+ */
6
+ declare const OneOfCard: ({ data, content, setUiAjaxConfiguration, }: {
7
+ data: any;
8
+ content: UIConfigType[];
9
+ setUiAjaxConfiguration?: SetUiAjaxConfigurationType;
10
+ }) => import("react").JSX.Element;
11
+ export default OneOfCard;
12
+ //# sourceMappingURL=OneOfCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OneOfCard.d.ts","sourceRoot":"","sources":["../../../src/native/components/OneOfCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKtE;;;GAGG;AACH,QAAA,MAAM,SAAS,GAAI,4CAIhB;IACC,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,sBAAsB,CAAC,EAAE,0BAA0B,CAAA;CACtD,gCAgBA,CAAA;AAED,eAAe,SAAS,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { SetUiAjaxConfigurationType, UIConfigType } from '../../types';
2
+ /**
3
+ * React Native variant of `SequenceCard`. Renders its array of child configs in
4
+ * order inside a `View` (replacing the web `<div>`).
5
+ */
6
+ declare const SequenceCard: ({ data, content, setUiAjaxConfiguration, }: {
7
+ data: any;
8
+ content: UIConfigType[];
9
+ setUiAjaxConfiguration?: SetUiAjaxConfigurationType;
10
+ }) => import("react").JSX.Element;
11
+ export default SequenceCard;
12
+ //# sourceMappingURL=SequenceCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequenceCard.d.ts","sourceRoot":"","sources":["../../../src/native/components/SequenceCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKtE;;;GAGG;AACH,QAAA,MAAM,YAAY,GAAI,4CAInB;IACC,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,sBAAsB,CAAC,EAAE,0BAA0B,CAAA;CACtD,gCAgBA,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * React Native variant of `SessionStorageCard`. Like the device variant but
3
+ * persists to the host's sync `sessionStorage` adapter. Renders nothing visible.
4
+ */
5
+ declare const SessionStorageCard: ({ data }: {
6
+ data: any;
7
+ }) => import("react").JSX.Element;
8
+ export default SessionStorageCard;
9
+ //# sourceMappingURL=SessionStorageCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionStorageCard.d.ts","sourceRoot":"","sources":["../../../src/native/components/SessionStorageCard.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,QAAA,MAAM,kBAAkB,GAAI,UAAU;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,gCAyClD,CAAA;AAED,eAAe,kBAAkB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import BoxCard from './BoxCard';
2
+ import SequenceCard from './SequenceCard';
3
+ import OneOfCard from './OneOfCard';
4
+ import HiddenCard from './HiddenCard';
5
+ import DeviceStorageCard from './DeviceStorageCard';
6
+ import SessionStorageCard from './SessionStorageCard';
7
+ import IOEventsCard from './IOEventsCard';
8
+ import HTMLEmbedCard from './HTMLEmbedCard';
9
+ import AutoRedirectCard from './AutoRedirectCard';
10
+ import UnionCard from '../../components/Containers/UnionCard/ui/UnionCard';
11
+ import AjaxGroupCard from '../../components/Containers/AjaxGroupCard/ui/AjaxGroupCard';
12
+ export { BoxCard, SequenceCard, OneOfCard, HiddenCard, DeviceStorageCard, SessionStorageCard, IOEventsCard, HTMLEmbedCard, AutoRedirectCard, UnionCard, AjaxGroupCard, };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/native/components/index.ts"],"names":[],"mappings":"AAeA,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,kBAAkB,MAAM,sBAAsB,CAAA;AACrD,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AAMjD,OAAO,SAAS,MAAM,oDAAoD,CAAA;AAC1E,OAAO,aAAa,MAAM,4DAA4D,CAAA;AAoBtF,OAAO,EACH,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,GAChB,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * React Native entry for PieUI (`@swarm.ing/pieui/native`).
3
+ *
4
+ * Exposes the platform-agnostic core (registry, dynamic UI renderer, PieCard,
5
+ * real-time contexts, Ajax helpers) plus native-specific wiring. It deliberately
6
+ * does NOT export the DOM container/leaf cards (BoxCard, HTMLEmbedCard,
7
+ * IOEventsCard, …) — those render HTML host elements or pull browser-only
8
+ * libraries. On native the host registers its own React Native leaf components
9
+ * with `registerPieComponent` and renders them through `UI` / `PieCard`.
10
+ *
11
+ * Bundlers that understand the `.native` extension (Metro) resolve the platform
12
+ * layer to `clientSources.native.ts` automatically. Wire the host's storage /
13
+ * route / form sources once at startup via `configureNativeClientSources`.
14
+ */
15
+ import './components';
16
+ export { default as PieNativeRoot } from './PieNativeRoot';
17
+ export { default as PieBaseRoot } from '../components/PieBaseRoot';
18
+ export { default as PieRoot } from '../components/PieRoot';
19
+ export { configureNativeClientSources, getNativeClientConfig, resetNativeClientSources, type NativeClientConfig, type NativeStorageAdapter, type NativeAsyncStorageAdapter, } from '../platform/nativeConfig';
20
+ export { setNativeField, clearNativeField, readNativeField, } from '../platform/nativeFormStore';
21
+ export { BoxCard, SequenceCard, OneOfCard, HiddenCard, DeviceStorageCard, SessionStorageCard, IOEventsCard, HTMLEmbedCard, AutoRedirectCard, UnionCard, AjaxGroupCard, } from './components';
22
+ export { default as UI } from '../components/UI';
23
+ export { default as UILoading } from '../components/UILoading';
24
+ export { default as UIRendererContext, type UIRendererProps, } from '../util/uiRenderer';
25
+ export { default as PieCard } from '../components/PieCard';
26
+ export { registerPieComponent, getAllRegisteredComponents, getRegistrySize, registry, hasComponent, getRegistryEntry, getComponentMeta, registerMultipleComponents, unregisterComponent, getLazyComponentNames, preloadComponent, prefetchLazyComponents, } from '../util/registry';
27
+ export { trackLazy } from '../util/lazy';
28
+ export { useAjaxSubmit, readAjaxKey, readAjaxKeyAsync, parseDepName, } from '../util/ajaxCommonUtils';
29
+ export type { RetryPolicy, DepSource } from '../util/ajaxCommonUtils';
30
+ export { submitGlobalForm } from '../util/globalForm';
31
+ export { usePieEmit } from '../util/mitt';
32
+ export { default as MittContext, getEmitter } from '../util/mitt';
33
+ export { default as SocketIOContext } from '../util/socket';
34
+ export { default as CentrifugeIOContext } from '../util/centrifuge';
35
+ export { default as FallbackContext } from '../util/fallback';
36
+ export { PieConfigContext, PIEBREAK } from '../util/pieConfig';
37
+ export { pieName } from '../util/pieName';
38
+ export type { PieComponentProps, PieSimpleComponentProps, PieComplexComponentProps, PieContainerComponentProps, PieComplexContainerComponentProps, InputPieSimpleComponentProps, InputPieComplexComponentProps, InputPieContainerComponentProps, InputPieComplexContainerComponentProps, PieConfig, UIConfigType, SetUiAjaxConfigurationType, } from '../types';
39
+ export type { PieRootProps, PieQueryOptions } from '../components/PieRoot/types';
40
+ export type { PieBaseRootProps } from '../components/PieBaseRoot/types';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAGH,OAAO,cAAc,CAAA;AAGrB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIlE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EACH,4BAA4B,EAC5B,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GACjC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,eAAe,GAClB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACH,OAAO,EACP,YAAY,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,GAChB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EACH,OAAO,IAAI,iBAAiB,EAC5B,KAAK,eAAe,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG1D,OAAO,EACH,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC,OAAO,EACH,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,YAAY,GACf,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGzC,YAAY,EACR,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,sCAAsC,EACtC,SAAS,EACT,YAAY,EACZ,0BAA0B,GAC7B,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAChF,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{lazy as OJ}from"react";var v=new Map;function p$($,J){return J.catch(()=>{if(v.get($)===J)v.delete($)}),v.set($,J),J}function B$($,J){return OJ(()=>{if(v.has(J))return v.get(J);return p$(J,$().then((Z)=>Z))})}var c$=async($,J)=>{if(!J)return;if(v.has($))return v.get($);return p$($,J().then((Z)=>Z))};var T$=globalThis,_=($,J)=>{let Z=Symbol.for($);if(!(Z in T$))T$[Z]=J();return T$[Z]};var k=_("@swarm.ing/pieui:component-registry",()=>new Map),MJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=B$(J.loader,$.name),J.isLazy=!0;return J};function a($){let J=MJ($);return k.set(J.name,J),J.component}var AJ=($)=>{$.forEach((J)=>a(J))},LJ=($)=>{k.delete($)},PJ=($)=>{return k.has($)},RJ=($)=>{return k.get($)?.metadata},d=($)=>{return k.get($)},wJ=()=>{return Array.from(k.keys())},EJ=()=>{return k.size},d$=()=>Array.from(k.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),l$=($)=>{let J=k.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return c$($,J.loader)},u$=!1,jJ=()=>{if(u$||typeof window>"u")return;u$=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=d$(),Z="requestIdleCallback"in window?(z)=>window.requestIdleCallback(z,{timeout:2000}):(z)=>window.setTimeout(z,300),Y=(z)=>{if(z>=J.length)return;Z(()=>{Promise.resolve().then(()=>l$(J[z])).catch(()=>{}).finally(()=>Y(z+1))})};Y(0)};import{useContext as t$}from"react";import{Linking as HZ,Pressable as qZ,View as DZ}from"react-native";import{useContext as V$,useEffect as F$,useRef as pJ}from"react";import{createContext as NJ,useContext as kJ}from"react";var p=_("@swarm.ing/pieui:context:pieConfig",()=>NJ(null)),l=()=>{let $=kJ(p);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},s=()=>{let{apiServer:$}=l();return $},t=s,e=()=>{let{centrifugeServer:$}=l();return $};var x=()=>{let{enableRenderingLog:$}=l();return $},s$=x;var U$="__piedemo__";import{createContext as yJ}from"react";import{Centrifuge as o$}from"centrifuge";var i$=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map),$$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,Y=i$.get(Z);if(Y)return Y;async function z(){let W=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!W.ok){if(W.status===401||W.status===403)throw new o$.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${W.status}`)}return(await W.json()).token}let X=new o$(J,{getToken:z});return i$.set(Z,X),X},xJ=_("@swarm.ing/pieui:context:centrifuge",()=>yJ(null)),b=xJ;import{io as bJ}from"socket.io-client";import{createContext as SJ}from"react";var n$=_("@swarm.ing/pieui:socket-cache",()=>new Map),J$=($)=>{let J=n$.get($);if(J)return J;let Z=bJ($,{autoConnect:!1,transports:["websocket"]});return n$.set($,Z),Z},fJ=_("@swarm.ing/pieui:context:socket",()=>SJ(null)),S=fJ;import CJ from"mitt";import{createContext as vJ,useCallback as hJ,useContext as mJ}from"react";function c(){return _("@swarm.ing/pieui:mitt-emitter",()=>CJ())}var r$=_("@swarm.ing/pieui:context:mitt",()=>vJ(null));function gJ($){let J=mJ(r$);return hJ((Z,Y)=>{(J??c()).emit(`pie${Z}_${$}`,Y)},[$,J])}var f=r$;import{jsx as dJ,jsxs as lJ,Fragment as uJ}from"react/jsx-runtime";var cJ=({card:$,data:J,children:Z,useSocketioSupport:Y=!1,useCentrifugeSupport:z=!1,useMittSupport:X=!1,centrifugeChannel:W=void 0,methods:Q=void 0,stored:G=void 0})=>{let H=s$(),T=pJ(Q);if(T.current=Q,H)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:Y,centrifuge:z,mitt:X,centrifugeChannel:W}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let N=V$(S),O=V$(b),F=V$(f);if(F$(()=>{if(!N||!Y||!T.current||!J.name){if(H&&Y)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!N,useSocketioSupport:Y,hasMethods:!!T.current,hasDataName:!!J?.name});return}let B=Object.keys(T.current??{}).map((q)=>{let D=`pie${q}_${J.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${D}`);let U=(K)=>{T.current?.[q]?.(K)};return N.on(D,U),[D,U]});return()=>{B.forEach(([q,D])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);N.off(q,D)})}},[N,J.name,Y]),F$(()=>{if(!O||!z||!W||!J.name){if(H&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!O,useCentrifugeSupport:z,hasCentrifugeChannel:!!W,hasMethods:!!T.current,hasDataName:!!J?.name});return}let B=Object.keys(T.current??{}).map((q)=>{let D=`pie${q}_${J.name}_${W}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${D}`);let U=O.newSubscription(D);return U.on("publication",(K)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${D}:`,K.data);T.current?.[q]?.(K.data)}),U.subscribe(),U});return()=>{B.forEach((q)=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");q.unsubscribe(),O.removeSubscription(q)})}},[O,W,J.name,z]),F$(()=>{if(!F||!X||!J.name){if(H&&X)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!F,useMittSupport:X,hasMethods:!!T.current,hasDataName:!!J?.name});return}let E=Object.keys(T.current??{}),B={};return E.forEach((q)=>{let D=`pie${q}_${J.name}`,U=(K)=>{if(H)console.log(`[PieCard] Mitt registering event: ${D}`);T.current?.[q]?.(K)};B[D]=U,F.on(D,U)}),()=>{Object.entries(B).forEach(([q,D])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${q}`);F.off(q,D)})}},[F,J.name,X]),H)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return lJ(uJ,{children:[dJ("input",{type:"hidden",name:J.name,value:JSON.stringify(G)}),Z]});return Z},V=cJ;import{useContext as a$,memo as XZ}from"react";import{createContext as sJ}from"react";import{jsx as nJ,Fragment as iJ}from"react/jsx-runtime";var oJ=_("@swarm.ing/pieui:context:fallback",()=>sJ(nJ(iJ,{}))),P=oJ;import{createContext as rJ}from"react";var aJ=_("@swarm.ing/pieui:context:lazyError",()=>rJ(void 0)),C=aJ;import{Component as tJ,Suspense as eJ}from"react";import{jsx as ZZ}from"react/jsx-runtime";var $Z=2,JZ=400;class u extends tJ{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<$Z){let J=JZ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return ZZ(eJ,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as I$}from"react/jsx-runtime";function YZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=a$(P),Y=a$(C),z=x();if(z)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let X=d($.card);if(!X?.component){if(z)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(z)console.log("[UI] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata});let W=X.component,Q=I$(W,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(X.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",X.name);return I$(u,{name:X.name,fallback:X.fallback?I$(X.fallback,{}):Z,onError:Y,children:Q})}if(z)console.log("[UI] Rendering component directly:",X.name);return Q}var A=XZ(YZ);import{createContext as zZ}from"react";var WZ=_("@swarm.ing/pieui:context:navigate",()=>zZ(void 0)),y=WZ;import{createContext as QZ}from"react";var GZ=_("@swarm.ing/pieui:context:uiRenderer",()=>QZ(null)),R=GZ;import{jsx as Z$}from"react/jsx-runtime";var KZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),_Z=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,url:z,sx:X}=$,W=t$(y),Q=t$(R)??A,G=()=>{if(!z)return;if(KZ(z))HZ.openURL(z).catch(()=>{});else W?.(z)},H=Z$(Q,{setUiAjaxConfiguration:Z,uiConfig:J});return Z$(V,{card:Y,data:$,children:z?Z$(qZ,{onPress:G,style:X,children:H}):Z$(DZ,{style:X,children:H})})},O$=_Z;import{useContext as BZ}from"react";import{View as TZ}from"react-native";import{jsx as M$}from"react/jsx-runtime";var UZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,sx:z}=$,X=BZ(R)??A;return M$(V,{card:Y,data:$,children:M$(TZ,{style:z,children:J.map((W,Q)=>M$(X,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${Q}`))})})},A$=UZ;import{useContext as VZ}from"react";import{View as FZ}from"react-native";import{jsx as L$}from"react/jsx-runtime";var IZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y,sx:z}=$,X=VZ(R)??A;return L$(V,{card:Y,data:$,children:L$(FZ,{style:z,children:J.map((W,Q)=>L$(X,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${Q}`))})})},P$=IZ;import{useEffect as e$,useState as OZ}from"react";var X$=new Map,h=($,J)=>{X$.set($,J)},m=($)=>{X$.delete($)},R$=($)=>{return X$.has($)?X$.get($):null};import{jsx as AZ}from"react/jsx-runtime";var MZ=({data:$})=>{let{name:J,value:Z,useSocketioSupport:Y,useCentrifugeSupport:z,useMittSupport:X,centrifugeChannel:W}=$,[Q,G]=OZ(Z);return e$(()=>{G(Z)},[Z]),e$(()=>{return h(J,[Q]),()=>m(J)},[J,Q]),AZ(V,{card:"HiddenCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:z,useMittSupport:X,centrifugeChannel:W,methods:{update:({value:H})=>{G(H)}}})},w$=MZ;import{useEffect as $J,useState as RZ}from"react";var Y$={};function LZ($){Y$={...Y$,...$}}function L(){return Y$}function PZ(){Y$={}}import{jsx as EZ}from"react/jsx-runtime";var wZ=({data:$})=>{let{name:J,key:Z,value:Y,useSocketioSupport:z,useCentrifugeSupport:X,useMittSupport:W,centrifugeChannel:Q}=$,[G,H]=RZ(Y);return $J(()=>{H(Y)},[Y]),$J(()=>{return L().storage?.setItem?.(Z,G),h(J,[G]),()=>m(J)},[Z,J,G]),EZ(V,{card:"DeviceStorageCard",data:$,useSocketioSupport:z,useCentrifugeSupport:X,useMittSupport:W,centrifugeChannel:Q,methods:{update:({value:T})=>{H(T)},remove:()=>{L().storage?.removeItem?.(Z),H("")}}})},E$=wZ;import{useEffect as JJ,useState as jZ}from"react";import{jsx as kZ}from"react/jsx-runtime";var NZ=({data:$})=>{let{name:J,key:Z,value:Y,useSocketioSupport:z,useCentrifugeSupport:X,useMittSupport:W,centrifugeChannel:Q}=$,[G,H]=jZ(Y);return JJ(()=>{H(Y)},[Y]),JJ(()=>{return L().sessionStorage?.setItem?.(Z,G),h(J,[G]),()=>m(J)},[Z,J,G]),kZ(V,{card:"SessionStorageCard",data:$,useSocketioSupport:z,useCentrifugeSupport:X,useMittSupport:W,centrifugeChannel:Q,methods:{update:({value:T})=>{H(T)},remove:()=>{L().sessionStorage?.removeItem?.(Z),H("")}}})},j$=NZ;import{useContext as yZ,useMemo as xZ,useRef as bZ}from"react";import{Alert as SZ,Linking as fZ}from"react-native";import{jsx as hZ}from"react/jsx-runtime";var CZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),vZ=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:z}=$,X=yZ(y),W=bZ(X);W.current=X;let Q=xZ(()=>{let G=(H)=>{if(!H)return;if(CZ(H))fZ.openURL(H).catch(()=>{});else W.current?.(H)};return{alert:(H)=>SZ.alert(String(H.title??""),String(H.message??"")),log:(H)=>console.log("Log event",H),push:(H)=>console.warn("[IOEventsCard] push notifications are not supported on native",H?.title),redirect:(H)=>G(H.to),reload:(H)=>G(H.to)}},[]);return hZ(V,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:z,methods:Q})},N$=vZ;import{useEffect as mZ,useState as gZ}from"react";import{Text as pZ}from"react-native";import{jsx as ZJ}from"react/jsx-runtime";var cZ=($)=>($??"").replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),uZ=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:Y,useMittSupport:z,centrifugeChannel:X}=$,[W,Q]=gZ(J);return mZ(()=>{Q(J)},[J]),ZJ(V,{card:"HTMLEmbedCard",data:$,methods:{update:(G)=>Q(G.value)},useCentrifugeSupport:Y,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:X,children:ZJ(pZ,{children:cZ(W)})})},k$=uZ;import{useContext as XJ,useEffect as dZ}from"react";import{Linking as lZ}from"react-native";import{jsx as iZ,Fragment as oZ}from"react/jsx-runtime";var sZ=({data:$})=>{let{url:J}=$,Z=XJ(y),Y=XJ(P);return dZ(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))lZ.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),iZ(oZ,{children:Y})},y$=sZ;import{useContext as nZ}from"react";import{jsx as YJ}from"react/jsx-runtime";var rZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:Y}=$,z=nZ(R)??A;return YJ(V,{card:Y,data:$,children:J.map((X,W)=>{return YJ(z,{uiConfig:X,setUiAjaxConfiguration:Z},`children-${W}`)})})},x$=rZ;import{useCallback as b$,useContext as S$,useEffect as aZ,useRef as tZ,useState as zJ}from"react";import{jsx as WJ}from"react/jsx-runtime";var eZ=({data:$,content:J})=>{let{useLoader:Z,noReturn:Y,returnType:z,useSocketioSupport:X,useCentrifugeSupport:W,useMittSupport:Q,centrifugeChannel:G}=$,H=S$(P),T=S$(R)??A,[N,O]=zJ(!1),[F,E]=zJ(null),B=tZ(J),q=S$(f),D=b$((j)=>{if(j===null)O(!0);else if(O(!1),!Y)B.current=j;if(!Y)E(j)},[Y]),U=b$((j)=>{B.current=j.content,E(j.content)},[]),K=b$((j)=>{if(j===null)O(!0);else if(O(!1),!Y)for(let n of j)q?.emit(n.name,n.data)},[Y,q]);if(aZ(()=>{E(J),O(!1)},[J]),!F&&Z)return H;return WJ(V,{card:"AjaxGroupCard",data:$,methods:{changeContent:U},useSocketioSupport:X,useCentrifugeSupport:W,useMittSupport:Q,centrifugeChannel:G,children:WJ(T,{uiConfig:F??B.current,setUiAjaxConfiguration:z==="events"?K:D})})},f$=eZ;var $0=[{name:"BoxCard",component:O$},{name:"SequenceCard",component:A$},{name:"OneOfCard",component:P$},{name:"HiddenCard",component:w$},{name:"DeviceStorageCard",component:E$},{name:"SessionStorageCard",component:j$},{name:"IOEventsCard",component:N$},{name:"HTMLEmbedCard",component:k$},{name:"AutoRedirectCard",component:y$},{name:"UnionCard",component:x$},{name:"AjaxGroupCard",component:f$}];for(let $ of $0)a($);import{useMemo as v$,useState as B0}from"react";import{QueryClient as T0,QueryClientProvider as U0}from"@tanstack/react-query";import{useContext as G0,useEffect as H0}from"react";import{useEffect as J0,useState as Z0}from"react";var z$=new Map,W$=new Map;function Q$($,J){let Z=`${$}::${J}`,Y=$?z$.get(Z):void 0,[z,X]=Z0(Y??null);return J0(()=>{if(!$)return;if(z$.has(Z)){X(z$.get(Z));return}let W=W$.get(Z);if(!W)W=fetch($+`api/support/${J}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return z$.set(Z,G),W$.delete(Z),G}).catch((G)=>{throw W$.delete(Z),G}),W$.set(Z,W);let Q=!1;return W.then((G)=>{if(!Q)X(G)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),z}var X0=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let Y=Z.indexOf("=");if((Y===-1?Z:Z.slice(0,Y)).trim()===$){let X=Y===-1?"":Z.slice(Y+1).trim();try{return decodeURIComponent(X)}catch{return X}}}return null},Y0={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:X0,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},QJ=Y0;var GJ,z0={isClient(){return!0},readSid(){return GJ},setSid($){GJ=$},readWebStorage($,J){let Z=L(),Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},async readWebStorageAsync($,J){let Z=L(),Y=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(Y)return Y.getItem(J);let z=$==="local"?Z.storage:Z.sessionStorage;return z?z.getItem(J):null},readCookie($){let J=L();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=L();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=L();return J.getInput?J.getInput($):R$($)},submitGlobalForm(){L().submitForm?.()}},HJ=z0;var W0=typeof navigator<"u"&&navigator.product==="ReactNative",Q0=W0?HJ:QJ,I=Q0;var o=_("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function qJ(){o.resolve?.()}function C$(){if(!I.isClient())return Promise.resolve();if(I.readSid()!==void 0)return Promise.resolve();if(!o.promise)o.promise=new Promise(($)=>{o.resolve=()=>{$()}});return o.promise}var q0=({children:$})=>{let J=G0(S),Z=t(),Y=Q$(Z,"socketIO"),z=(X)=>{if(I.isClient())I.setSid(X.sid),qJ(),console.log(`SocketIO initialized: ${I.readSid()}`)};return H0(()=>{if(!J)return;let X=()=>{console.log("SocketIO connected")},W=(Q)=>{console.log(`SocketIO disconnected: ${Q}`),J.connect()};if(Y)J.on("pieinit",z),J.on("connect",X),J.on("disconnect",W),J.connect();return()=>{if(Y)J.off("pieinit",z),J.off("connect",X),J.off("disconnect",W),J.disconnect()}},[J,Y]),$},G$=q0;import{useContext as D0,useEffect as K0}from"react";var _0=({children:$})=>{let J=D0(b),Z=t(),Y=Q$(Z,"centrifuge");return K0(()=>{if(!J)return;let z=()=>{console.log("Centrifuge connected")},X=(W)=>{console.log("Centrifuge disconnected:",W)};if(Y)J.on("connected",z),J.on("disconnected",X),J.connect();return()=>{if(Y)J.disconnect()}},[J,Y]),$},H$=_0;import{jsx as w,Fragment as I0}from"react/jsx-runtime";var V0=({location:$,fallback:J,children:Z,disableGlobalForm:Y})=>{let z=s(),X=e(),W=x(),Q=v$(()=>c(),[]),G=v$(()=>z?J$(z):null,[z]),H=v$(()=>z?$$(z,X):null,[z,X]);if(W)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",z),console.log("[PieRoot] CENTRIFUGE_SERVER:",X),console.log("[PieRoot] Fallback provided:",!!J);return w(f.Provider,{value:Q,children:w(S.Provider,{value:G,children:w(b.Provider,{value:H,children:w(P.Provider,{value:J??w(I0,{}),children:w(G$,{children:w(H$,{children:Y?Z:w("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},F0=($)=>{let[J]=B0(()=>new T0),Z=$.queryClient??J;return w(y.Provider,{value:$.onNavigate,children:w(p.Provider,{value:$.config,children:w(C.Provider,{value:$.onError,children:w(U0,{client:Z,children:w(V0,{...$})})})})})},h$=F0;import{jsx as M0}from"react/jsx-runtime";var O0=($)=>{return M0(h$,{...$,disableGlobalForm:!0})},A0=O0;import{useMemo as i}from"react";import{QueryClient as P0,QueryClientProvider as R0,useQuery as w0}from"@tanstack/react-query";import{createAxiosDateTransformer as E0}from"axios-date-transformer";import{useContext as DJ}from"react";import{jsx as q$}from"react/jsx-runtime";function KJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=DJ(P),Y=DJ(C),z=x();if(z)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let X=d($.card);if(!X?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(z)console.log("[UILoading] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata,hasFallback:!!X.fallback});if(X.fallback){if(z)console.log("[UILoading] Rendering fallback for:",X.name);let G=X.fallback;return q$(G,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",X.name);let W=X.component,Q=q$(R.Provider,{value:KJ,children:q$(W,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(X.isLazy)return q$(u,{name:X.name,fallback:Z,onError:Y,children:Q});return Q}var m$=KJ;import{jsx as L0}from"react/jsx-runtime";function _J($,J,Z){if(!J)return Z;let Y=$.replace(/^\//,""),z=J[Y];if(!z)return Z;return L0(m$,{uiConfig:z})}import{jsx as M,Fragment as k0}from"react/jsx-runtime";var j0=({location:$,fallback:J,piecache:Z,onError:Y,queryOptions:z,disableGlobalForm:X})=>{let W=s(),Q=e(),G=x(),H=i(()=>E0({baseURL:W||""}),[W]),T=i(()=>c(),[]),N=i(()=>W?J$(W):null,[W]),O=i(()=>W?$$(W,Q):null,[W,Q]),{data:F,isLoading:E,error:B}=w0({queryKey:["uiConfig",$.pathname+$.search,W],enabled:!!W,queryFn:async()=>{let D=new URLSearchParams($.search);D.set("__pieroot","web");let U="/api/content"+$.pathname+"?"+D.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",U);let K=await H.get(U,{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:",K.data);return K.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(D)=>Math.min(1000*2**D,30000),...z}),q=_J($.pathname,Z,J);if(!W)return q??null;if(G)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",W),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(B){if(G)console.error("[PieRoot] Error fetching UI configuration:",B),console.error("[PieRoot] Error details:",{message:B.message,status:B.response?.status,data:B.response?.data});return Y?.(B),q}if(E||!F){if(G)console.log("[PieRoot] Loading state:",{isLoading:E,hasUiConfiguration:!!F});return q}if(G)console.log("[PieRoot] UI configuration loaded successfully:",F),console.log("[PieRoot] Rendering UI with configuration");return M(f.Provider,{value:T,children:M(S.Provider,{value:N,children:M(b.Provider,{value:O,children:M(P.Provider,{value:J??M(k0,{}),children:M(G$,{children:M(H$,{children:X?M(A,{uiConfig:F}):M("form",{id:"piedata_global_form",action:W+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:M(A,{uiConfig:F})})})})})})})})},N0=($)=>{let J=i(()=>new P0,[]),Z=$.queryClient??J;return M(y.Provider,{value:$.onNavigate,children:M(p.Provider,{value:$.config,children:M(C.Provider,{value:$.onError,children:M(R0,{client:Z,children:M(j0,{...$})})})})})},y0=N0;import{useMemo as x0}from"react";var b0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],S0=new Set(["telegram:cloud","telegram:secure"]),D$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of b0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},BJ=($,J=!1)=>{let{source:Z,key:Y}=D$($);if(Z==="sid"){let X=I.readSid();if(!X)throw Error("SocketIO isn't initialized properly");return[X]}if(Z==="localStorage"||Z==="sessionStorage")try{let X=I.readWebStorage(Z==="localStorage"?"local":"session",Y);if(X===null){if(J)console.warn(`No ${Z} value found for key ${Y}`);return[]}return[X]}catch(X){if(J)console.warn(`Failed to read ${Z} key ${Y}:`,X);return[]}if(Z==="cookie"){let X=I.readCookie(Y);if(X===null){if(J)console.warn(`No cookie found for key ${Y}`);return[]}return[X]}if(Z==="url"){let X=I.readUrlParams(Y);if(!X.length&&J)console.warn(`No URL query param found for key ${Y}`);return X}if(S0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let z=I.readDomInput(Y);if(z===null){if(J)console.warn(`No input found with name ${Y}`);return[]}return z},f0=($,J,Z)=>{let Y=window.Telegram?.WebApp,z=$==="telegram:cloud"?Y?.CloudStorage:Y?.SecureStorage,X=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!z){if(Z)console.warn(`${X} is not available`);return Promise.resolve([])}return new Promise((W)=>{try{z.getItem(J,(Q,G)=>{if(Q){if(Z)console.warn(`Failed to read ${X} key ${J}:`,Q);W([]);return}if(G==null||G===""){if(Z)console.warn(`No ${X} value found for key ${J}`);W([]);return}W([G])})}catch(Q){if(Z)console.warn(`Failed to read ${X} key ${J}:`,Q);W([])}})},TJ=async($,J=!1)=>{let{source:Z,key:Y}=D$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return f0(Z,Y,J);if((Z==="localStorage"||Z==="sessionStorage")&&I.readWebStorageAsync)try{let z=await I.readWebStorageAsync(Z==="localStorage"?"local":"session",Y);if(z===null){if(J)console.warn(`No ${Z} value found for key ${Y}`);return[]}return[z]}catch(z){if(J)console.warn(`Failed to read ${Z} key ${Y}:`,z);return[]}return BJ($,J)},C0=($,J={},Z=[],Y,z)=>{let X=z?.renderingLogEnabled??!1,W=z?.timeout,Q=z?.retryPolicy,G=Q?.maxRetries??0,H=Q?.baseDelay??1000,T=Q?.retryOn??[502,503,504];if(X)console.log("Registering AJAX: ",Y,J,Z);return async(N={})=>{if(!I.isClient()){if(X)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let O=z?.apiServer;if(!O){if(X)console.warn("AJAX skipped: apiServer is missing");return}if(!Y||!$){if(X)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await C$();let F=new FormData;for(let[q,D]of Object.entries({...J,...N}))F.append(q,D);for(let q of Z){let{key:D}=D$(q);for(let U of await TJ(q,X))F.append(D,U)}let E=O+"api/ajax_content"+Y;$(null);let B;for(let q=0;q<=G;q++){if(q>0){let K=H*2**(q-1);if(X)console.log(`AJAX retry ${q}/${G} after ${K}ms`);await new Promise((j)=>setTimeout(j,K))}let D=W!=null?new AbortController:null,U=D&&setTimeout(()=>D.abort(),W);try{let K=await fetch(E,{method:"POST",body:F,signal:D?.signal});if(U)clearTimeout(U);if(!K.ok&&T.includes(K.status)&&q<G){B=Error(`HTTP ${K.status}`);continue}let n=(K.headers.get("content-type")||"").includes("application/json");if(!!K.body?.getReader&&!n){let r=K.body.getReader(),UJ=new TextDecoder,g="";while(!0){let{done:K$,value:VJ}=await r.read();if(K$)break;g+=UJ.decode(VJ,{stream:!0});let g$=g.split(`
3
+ `);g=g$.pop()??"";for(let FJ of g$){let _$=FJ.trim();if(!_$)continue;try{let IJ=JSON.parse(_$);$([IJ])}catch{if(X)console.warn("Failed to parse streamed line:",_$)}}}if(g.trim())try{let K$=JSON.parse(g);$([K$])}catch{if(X)console.warn("Failed to parse final streamed line:",g)}return{}}else{let r=await K.json();return $(r),r}}catch(K){if(U)clearTimeout(U);if(B=K,q<G)continue;if(X)console.error("AJAX request failed:",K);return $(null),K}}if(X)console.error("AJAX request failed after retries:",B);return $(null),B}},v0=($,J={},Z=[],Y,z)=>{let{apiServer:X,enableRenderingLog:W}=l(),Q=JSON.stringify(J),G=JSON.stringify(Z),H=JSON.stringify(z);return x0(()=>C0($,J,Z,Y,{apiServer:X,renderingLogEnabled:W,timeout:z?.timeout,retryPolicy:z?.retryPolicy}),[$,Q,G,Y,X,W,H])};var h0=()=>{I.submitGlobalForm()};var m0=($,J)=>`${$}${U$}${J}`;export{gJ as usePieEmit,v0 as useAjaxSubmit,LJ as unregisterComponent,B$ as trackLazy,h0 as submitGlobalForm,h as setNativeField,PZ as resetNativeClientSources,k as registry,a as registerPieComponent,AJ as registerMultipleComponents,R$ as readNativeField,TJ as readAjaxKeyAsync,BJ as readAjaxKey,l$ as preloadComponent,jJ as prefetchLazyComponents,m0 as pieName,D$ as parseDepName,PJ as hasComponent,EJ as getRegistrySize,d as getRegistryEntry,L as getNativeClientConfig,d$ as getLazyComponentNames,c as getEmitter,RJ as getComponentMeta,wJ as getAllRegisteredComponents,LZ as configureNativeClientSources,m as clearNativeField,x$ as UnionCard,R as UIRendererContext,m$ as UILoading,A as UI,S as SocketIOContext,j$ as SessionStorageCard,A$ as SequenceCard,y0 as PieRoot,A0 as PieNativeRoot,p as PieConfigContext,V as PieCard,h$ as PieBaseRoot,U$ as PIEBREAK,P$ as OneOfCard,f as MittContext,N$ as IOEventsCard,w$ as HiddenCard,k$ as HTMLEmbedCard,P as FallbackContext,E$ as DeviceStorageCard,b as CentrifugeIOContext,O$ as BoxCard,y$ as AutoRedirectCard,f$ as AjaxGroupCard};
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ var AZ=Object.create;var{getPrototypeOf:LZ,defineProperty:$$,getOwnPropertyNames:VJ,getOwnPropertyDescriptor:PZ}=Object,FJ=Object.prototype.hasOwnProperty;var RZ=($,J,Z)=>{Z=$!=null?AZ(LZ($)):{};let X=J||!$||!$.__esModule?$$(Z,"default",{value:$,enumerable:!0}):Z;for(let z of VJ($))if(!FJ.call(X,z))$$(X,z,{get:()=>$[z],enumerable:!0});return X},UJ=new WeakMap,wZ=($)=>{var J=UJ.get($),Z;if(J)return J;if(J=$$({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")VJ($).map((X)=>!FJ.call(J,X)&&$$(J,X,{get:()=>$[X],enumerable:!(Z=PZ($,X))||Z.enumerable}));return UJ.set($,J),J};var EZ=($,J)=>{for(var Z in J)$$($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(X)=>J[Z]=()=>X})};var U0={};EZ(U0,{usePieEmit:()=>hJ,useAjaxSubmit:()=>TZ,unregisterComponent:()=>PJ,trackLazy:()=>T$,submitGlobalForm:()=>UZ,setNativeField:()=>m,resetNativeClientSources:()=>rJ,registry:()=>k,registerPieComponent:()=>J$,registerMultipleComponents:()=>LJ,readNativeField:()=>y$,readAjaxKeyAsync:()=>BJ,readAjaxKey:()=>_J,preloadComponent:()=>zJ,prefetchLazyComponents:()=>NJ,pieName:()=>VZ,parseDepName:()=>K$,hasComponent:()=>RJ,getRegistrySize:()=>jJ,getRegistryEntry:()=>l,getNativeClientConfig:()=>P,getLazyComponentNames:()=>YJ,getEmitter:()=>u,getComponentMeta:()=>wJ,getAllRegisteredComponents:()=>EJ,configureNativeClientSources:()=>nJ,clearNativeField:()=>g,UnionCard:()=>c$,UIRendererContext:()=>E,UILoading:()=>$J,UI:()=>L,SocketIOContext:()=>b,SessionStorageCard:()=>f$,SequenceCard:()=>E$,PieRoot:()=>_Z,PieNativeRoot:()=>QZ,PieConfigContext:()=>c,PieCard:()=>T,PieBaseRoot:()=>e$,PIEBREAK:()=>I$,OneOfCard:()=>N$,MittContext:()=>S,IOEventsCard:()=>v$,HiddenCard:()=>x$,HTMLEmbedCard:()=>m$,FallbackContext:()=>w,DeviceStorageCard:()=>S$,CentrifugeIOContext:()=>x,BoxCard:()=>R$,AutoRedirectCard:()=>g$,AjaxGroupCard:()=>u$});module.exports=wZ(U0);var IJ=require("react"),p=new Map;function OJ($,J){return J.catch(()=>{if(p.get($)===J)p.delete($)}),p.set($,J),J}function T$($,J){return IJ.lazy(()=>{if(p.has(J))return p.get(J);return OJ(J,$().then((Z)=>Z))})}var MJ=async($,J)=>{if(!J)return;if(p.has($))return p.get($);return OJ($,J().then((Z)=>Z))};var XJ=globalThis,_=($,J)=>{let Z=Symbol.for($);if(!(Z in XJ))XJ[Z]=J();return XJ[Z]};var k=_("@swarm.ing/pieui:component-registry",()=>new Map),jZ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=T$(J.loader,$.name),J.isLazy=!0;return J};function J$($){let J=jZ($);return k.set(J.name,J),J.component}var LJ=($)=>{$.forEach((J)=>J$(J))},PJ=($)=>{k.delete($)},RJ=($)=>{return k.has($)},wJ=($)=>{return k.get($)?.metadata},l=($)=>{return k.get($)},EJ=()=>{return Array.from(k.keys())},jJ=()=>{return k.size},YJ=()=>Array.from(k.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),zJ=($)=>{let J=k.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return MJ($,J.loader)},AJ=!1,NJ=()=>{if(AJ||typeof window>"u")return;AJ=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=YJ(),Z="requestIdleCallback"in window?(z)=>window.requestIdleCallback(z,{timeout:2000}):(z)=>window.setTimeout(z,300),X=(z)=>{if(z>=J.length)return;Z(()=>{Promise.resolve().then(()=>zJ(J[z])).catch(()=>{}).finally(()=>X(z+1))})};X(0)};var QJ=require("react"),n=require("react-native");var f=require("react");var U$=require("react");var c=_("@swarm.ing/pieui:context:pieConfig",()=>U$.createContext(null)),Z$=()=>{let $=U$.useContext(c);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},X$=()=>{let{apiServer:$}=Z$();return $},V$=X$,F$=()=>{let{centrifugeServer:$}=Z$();return $};var v=()=>{let{enableRenderingLog:$}=Z$();return $},kJ=v;var I$="__piedemo__";var xJ=require("react"),WJ=require("centrifuge");var yJ=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map),O$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=yJ.get(Z);if(X)return X;async function z(){let W=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!W.ok){if(W.status===401||W.status===403)throw new WJ.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${W.status}`)}return(await W.json()).token}let Y=new WJ.Centrifuge(J,{getToken:z});return yJ.set(Z,Y),Y},NZ=_("@swarm.ing/pieui:context:centrifuge",()=>xJ.createContext(null)),x=NZ;var SJ=require("socket.io-client"),fJ=require("react");var bJ=_("@swarm.ing/pieui:socket-cache",()=>new Map),M$=($)=>{let J=bJ.get($);if(J)return J;let Z=SJ.io($,{autoConnect:!1,transports:["websocket"]});return bJ.set($,Z),Z},kZ=_("@swarm.ing/pieui:context:socket",()=>fJ.createContext(null)),b=kZ;var CJ=RZ(require("mitt")),s=require("react");function u(){return _("@swarm.ing/pieui:mitt-emitter",()=>CJ.default())}var vJ=_("@swarm.ing/pieui:context:mitt",()=>s.createContext(null));function hJ($){let J=s.useContext(vJ);return s.useCallback((Z,X)=>{(J??u()).emit(`pie${Z}_${$}`,X)},[$,J])}var S=vJ;var o=require("react/jsx-runtime"),yZ=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:z=!1,useMittSupport:Y=!1,centrifugeChannel:W=void 0,methods:Q=void 0,stored:G=void 0})=>{let H=kJ(),U=f.useRef(Q);if(U.current=Q,H)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:z,mitt:Y,centrifugeChannel:W}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let y=f.useContext(b),M=f.useContext(x),F=f.useContext(S);if(f.useEffect(()=>{if(!y||!X||!U.current||!J.name){if(H&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!y,useSocketioSupport:X,hasMethods:!!U.current,hasDataName:!!J?.name});return}let B=Object.keys(U.current??{}).map((q)=>{let D=`pie${q}_${J.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${D}`);let V=(K)=>{U.current?.[q]?.(K)};return y.on(D,V),[D,V]});return()=>{B.forEach(([q,D])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);y.off(q,D)})}},[y,J.name,X]),f.useEffect(()=>{if(!M||!z||!W||!J.name){if(H&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!M,useCentrifugeSupport:z,hasCentrifugeChannel:!!W,hasMethods:!!U.current,hasDataName:!!J?.name});return}let B=Object.keys(U.current??{}).map((q)=>{let D=`pie${q}_${J.name}_${W}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${D}`);let V=M.newSubscription(D);return V.on("publication",(K)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${D}:`,K.data);U.current?.[q]?.(K.data)}),V.subscribe(),V});return()=>{B.forEach((q)=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");q.unsubscribe(),M.removeSubscription(q)})}},[M,W,J.name,z]),f.useEffect(()=>{if(!F||!Y||!J.name){if(H&&Y)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!F,useMittSupport:Y,hasMethods:!!U.current,hasDataName:!!J?.name});return}let j=Object.keys(U.current??{}),B={};return j.forEach((q)=>{let D=`pie${q}_${J.name}`,V=(K)=>{if(H)console.log(`[PieCard] Mitt registering event: ${D}`);U.current?.[q]?.(K)};B[D]=V,F.on(D,V)}),()=>{Object.entries(B).forEach(([q,D])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${q}`);F.off(q,D)})}},[F,J.name,Y]),H)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return o.jsxs(o.Fragment,{children:[o.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(G)}),Z]});return Z},T=yZ;var Y$=require("react");var mJ=require("react");var A$=require("react/jsx-runtime"),xZ=_("@swarm.ing/pieui:context:fallback",()=>mJ.createContext(A$.jsx(A$.Fragment,{}))),w=xZ;var gJ=require("react");var bZ=_("@swarm.ing/pieui:context:lazyError",()=>gJ.createContext(void 0)),h=bZ;var L$=require("react"),pJ=require("react/jsx-runtime"),SZ=2,fZ=400;class i extends L$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<SZ){let J=fZ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return pJ.jsx(L$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var P$=require("react/jsx-runtime");function CZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=Y$.useContext(w),X=Y$.useContext(h),z=v();if(z)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let Y=l($.card);if(!Y?.component){if(z)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(z)console.log("[UI] Found component in registry:",{name:Y.name,isLazy:Y.isLazy,hasMetadata:!!Y.metadata});let W=Y.component,Q=P$.jsx(W,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(Y.isLazy){if(z)console.log("[UI] Rendering lazy component with Suspense:",Y.name);return P$.jsx(i,{name:Y.name,fallback:Y.fallback?P$.jsx(Y.fallback,{}):Z,onError:X,children:Q})}if(z)console.log("[UI] Rendering component directly:",Y.name);return Q}var L=Y$.memo(CZ);var cJ=require("react");var vZ=_("@swarm.ing/pieui:context:navigate",()=>cJ.createContext(void 0)),C=vZ;var uJ=require("react");var hZ=_("@swarm.ing/pieui:context:uiRenderer",()=>uJ.createContext(null)),E=hZ;var z$=require("react/jsx-runtime"),mZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),gZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,url:z,sx:Y}=$,W=QJ.useContext(C),Q=QJ.useContext(E)??L,G=()=>{if(!z)return;if(mZ(z))n.Linking.openURL(z).catch(()=>{});else W?.(z)},H=z$.jsx(Q,{setUiAjaxConfiguration:Z,uiConfig:J});return z$.jsx(T,{card:X,data:$,children:z?z$.jsx(n.Pressable,{onPress:G,style:Y,children:H}):z$.jsx(n.View,{style:Y,children:H})})},R$=gZ;var dJ=require("react"),lJ=require("react-native");var w$=require("react/jsx-runtime"),pZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:z}=$,Y=dJ.useContext(E)??L;return w$.jsx(T,{card:X,data:$,children:w$.jsx(lJ.View,{style:z,children:J.map((W,Q)=>w$.jsx(Y,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${Q}`))})})},E$=pZ;var sJ=require("react"),oJ=require("react-native");var j$=require("react/jsx-runtime"),cZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:z}=$,Y=sJ.useContext(E)??L;return j$.jsx(T,{card:X,data:$,children:j$.jsx(oJ.View,{style:z,children:J.map((W,Q)=>j$.jsx(Y,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${Q}`))})})},N$=cZ;var W$=require("react");var k$=new Map,m=($,J)=>{k$.set($,J)},g=($)=>{k$.delete($)},y$=($)=>{return k$.has($)?k$.get($):null};var iJ=require("react/jsx-runtime"),uZ=({data:$})=>{let{name:J,value:Z,useSocketioSupport:X,useCentrifugeSupport:z,useMittSupport:Y,centrifugeChannel:W}=$,[Q,G]=W$.useState(Z);return W$.useEffect(()=>{G(Z)},[Z]),W$.useEffect(()=>{return m(J,[Q]),()=>g(J)},[J,Q]),iJ.jsx(T,{card:"HiddenCard",data:$,useSocketioSupport:X,useCentrifugeSupport:z,useMittSupport:Y,centrifugeChannel:W,methods:{update:({value:H})=>{G(H)}}})},x$=uZ;var Q$=require("react");var b$={};function nJ($){b$={...b$,...$}}function P(){return b$}function rJ(){b$={}}var aJ=require("react/jsx-runtime"),dZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:z,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:Q}=$,[G,H]=Q$.useState(X);return Q$.useEffect(()=>{H(X)},[X]),Q$.useEffect(()=>{return P().storage?.setItem?.(Z,G),m(J,[G]),()=>g(J)},[Z,J,G]),aJ.jsx(T,{card:"DeviceStorageCard",data:$,useSocketioSupport:z,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:Q,methods:{update:({value:U})=>{H(U)},remove:()=>{P().storage?.removeItem?.(Z),H("")}}})},S$=dZ;var G$=require("react");var tJ=require("react/jsx-runtime"),lZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:z,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:Q}=$,[G,H]=G$.useState(X);return G$.useEffect(()=>{H(X)},[X]),G$.useEffect(()=>{return P().sessionStorage?.setItem?.(Z,G),m(J,[G]),()=>g(J)},[Z,J,G]),tJ.jsx(T,{card:"SessionStorageCard",data:$,useSocketioSupport:z,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:Q,methods:{update:({value:U})=>{H(U)},remove:()=>{P().sessionStorage?.removeItem?.(Z),H("")}}})},f$=lZ;var r=require("react"),C$=require("react-native");var eJ=require("react/jsx-runtime"),sZ=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),oZ=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:z}=$,Y=r.useContext(C),W=r.useRef(Y);W.current=Y;let Q=r.useMemo(()=>{let G=(H)=>{if(!H)return;if(sZ(H))C$.Linking.openURL(H).catch(()=>{});else W.current?.(H)};return{alert:(H)=>C$.Alert.alert(String(H.title??""),String(H.message??"")),log:(H)=>console.log("Log event",H),push:(H)=>console.warn("[IOEventsCard] push notifications are not supported on native",H?.title),redirect:(H)=>G(H.to),reload:(H)=>G(H.to)}},[]);return eJ.jsx(T,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:z,methods:Q})},v$=oZ;var h$=require("react"),$Z=require("react-native");var GJ=require("react/jsx-runtime"),iZ=($)=>($??"").replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),nZ=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Y}=$,[W,Q]=h$.useState(J);return h$.useEffect(()=>{Q(J)},[J]),GJ.jsx(T,{card:"HTMLEmbedCard",data:$,methods:{update:(G)=>Q(G.value)},useCentrifugeSupport:X,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:Y,children:GJ.jsx($Z.Text,{children:iZ(W)})})},m$=nZ;var H$=require("react"),JZ=require("react-native");var p$=require("react/jsx-runtime"),rZ=({data:$})=>{let{url:J}=$,Z=H$.useContext(C),X=H$.useContext(w);return H$.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))JZ.Linking.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),p$.jsx(p$.Fragment,{children:X})},g$=rZ;var ZZ=require("react");var HJ=require("react/jsx-runtime"),aZ=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X}=$,z=ZZ.useContext(E)??L;return HJ.jsx(T,{card:X,data:$,children:J.map((Y,W)=>{return HJ.jsx(z,{uiConfig:Y,setUiAjaxConfiguration:Z},`children-${W}`)})})},c$=aZ;var R=require("react");var qJ=require("react/jsx-runtime"),tZ=({data:$,content:J})=>{let{useLoader:Z,noReturn:X,returnType:z,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:Q,centrifugeChannel:G}=$,H=R.useContext(w),U=R.useContext(E)??L,[y,M]=R.useState(!1),[F,j]=R.useState(null),B=R.useRef(J),q=R.useContext(S),D=R.useCallback((N)=>{if(N===null)M(!0);else if(M(!1),!X)B.current=N;if(!X)j(N)},[X]),V=R.useCallback((N)=>{B.current=N.content,j(N.content)},[]),K=R.useCallback((N)=>{if(N===null)M(!0);else if(M(!1),!X)for(let _$ of N)q?.emit(_$.name,_$.data)},[X,q]);if(R.useEffect(()=>{j(J),M(!1)},[J]),!F&&Z)return H;return qJ.jsx(T,{card:"AjaxGroupCard",data:$,methods:{changeContent:V},useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:Q,centrifugeChannel:G,children:qJ.jsx(U,{uiConfig:F??B.current,setUiAjaxConfiguration:z==="events"?K:D})})},u$=tZ;var eZ=[{name:"BoxCard",component:R$},{name:"SequenceCard",component:E$},{name:"OneOfCard",component:N$},{name:"HiddenCard",component:x$},{name:"DeviceStorageCard",component:S$},{name:"SessionStorageCard",component:f$},{name:"IOEventsCard",component:v$},{name:"HTMLEmbedCard",component:m$},{name:"AutoRedirectCard",component:g$},{name:"UnionCard",component:c$},{name:"AjaxGroupCard",component:u$}];for(let $ of eZ)J$($);var a=require("react"),t$=require("@tanstack/react-query");var i$=require("react");var s$=require("react"),d$=new Map,l$=new Map;function o$($,J){let Z=`${$}::${J}`,X=$?d$.get(Z):void 0,[z,Y]=s$.useState(X??null);return s$.useEffect(()=>{if(!$)return;if(d$.has(Z)){Y(d$.get(Z));return}let W=l$.get(Z);if(!W)W=fetch($+`api/support/${J}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return d$.set(Z,G),l$.delete(Z),G}).catch((G)=>{throw l$.delete(Z),G}),l$.set(Z,W);let Q=!1;return W.then((G)=>{if(!Q)Y(G)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),z}var $0=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let Y=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(Y)}catch{return Y}}}return null},J0={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:$0,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},XZ=J0;var YZ,Z0={isClient(){return!0},readSid(){return YZ},setSid($){YZ=$},readWebStorage($,J){let Z=P(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=P(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let z=$==="local"?Z.storage:Z.sessionStorage;return z?z.getItem(J):null},readCookie($){let J=P();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=P();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=P();return J.getInput?J.getInput($):y$($)},submitGlobalForm(){P().submitForm?.()}},zZ=Z0;var X0=typeof navigator<"u"&&navigator.product==="ReactNative",Y0=X0?zZ:XZ,I=Y0;var q$=_("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function WZ(){q$.resolve?.()}function DJ(){if(!I.isClient())return Promise.resolve();if(I.readSid()!==void 0)return Promise.resolve();if(!q$.promise)q$.promise=new Promise(($)=>{q$.resolve=()=>{$()}});return q$.promise}var z0=({children:$})=>{let J=i$.useContext(b),Z=V$(),X=o$(Z,"socketIO"),z=(Y)=>{if(I.isClient())I.setSid(Y.sid),WZ(),console.log(`SocketIO initialized: ${I.readSid()}`)};return i$.useEffect(()=>{if(!J)return;let Y=()=>{console.log("SocketIO connected")},W=(Q)=>{console.log(`SocketIO disconnected: ${Q}`),J.connect()};if(X)J.on("pieinit",z),J.on("connect",Y),J.on("disconnect",W),J.connect();return()=>{if(X)J.off("pieinit",z),J.off("connect",Y),J.off("disconnect",W),J.disconnect()}},[J,X]),$},n$=z0;var r$=require("react");var W0=({children:$})=>{let J=r$.useContext(x),Z=V$(),X=o$(Z,"centrifuge");return r$.useEffect(()=>{if(!J)return;let z=()=>{console.log("Centrifuge connected")},Y=(W)=>{console.log("Centrifuge disconnected:",W)};if(X)J.on("connected",z),J.on("disconnected",Y),J.connect();return()=>{if(X)J.disconnect()}},[J,X]),$},a$=W0;var A=require("react/jsx-runtime"),Q0=({location:$,fallback:J,children:Z,disableGlobalForm:X})=>{let z=X$(),Y=F$(),W=v(),Q=a.useMemo(()=>u(),[]),G=a.useMemo(()=>z?M$(z):null,[z]),H=a.useMemo(()=>z?O$(z,Y):null,[z,Y]);if(W)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",z),console.log("[PieRoot] CENTRIFUGE_SERVER:",Y),console.log("[PieRoot] Fallback provided:",!!J);return A.jsx(S.Provider,{value:Q,children:A.jsx(b.Provider,{value:G,children:A.jsx(x.Provider,{value:H,children:A.jsx(w.Provider,{value:J??A.jsx(A.Fragment,{}),children:A.jsx(n$,{children:A.jsx(a$,{children:X?Z:A.jsx("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},G0=($)=>{let[J]=a.useState(()=>new t$.QueryClient),Z=$.queryClient??J;return A.jsx(C.Provider,{value:$.onNavigate,children:A.jsx(c.Provider,{value:$.config,children:A.jsx(h.Provider,{value:$.onError,children:A.jsx(t$.QueryClientProvider,{client:Z,children:A.jsx(Q0,{...$})})})})})},e$=G0;var GZ=require("react/jsx-runtime"),H0=($)=>{return GZ.jsx(e$,{...$,disableGlobalForm:!0})},QZ=H0;var t=require("react"),e=require("@tanstack/react-query");var KZ=require("axios-date-transformer");var KJ=require("react");var D$=require("react/jsx-runtime");function HZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=KJ.useContext(w),X=KJ.useContext(h),z=v();if(z)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let Y=l($.card);if(!Y?.component){if(z)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(z)console.log("[UILoading] Found component in registry:",{name:Y.name,isLazy:Y.isLazy,hasMetadata:!!Y.metadata,hasFallback:!!Y.fallback});if(Y.fallback){if(z)console.log("[UILoading] Rendering fallback for:",Y.name);let G=Y.fallback;return D$.jsx(G,{})}if(z)console.log("[UILoading] No fallback, rendering full component:",Y.name);let W=Y.component,Q=D$.jsx(E.Provider,{value:HZ,children:D$.jsx(W,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(Y.isLazy)return D$.jsx(i,{name:Y.name,fallback:Z,onError:X,children:Q});return Q}var $J=HZ;var DZ=require("react/jsx-runtime");function qZ($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),z=J[X];if(!z)return Z;return DZ.jsx($J,{uiConfig:z})}var O=require("react/jsx-runtime"),q0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:z,disableGlobalForm:Y})=>{let W=X$(),Q=F$(),G=v(),H=t.useMemo(()=>KZ.createAxiosDateTransformer({baseURL:W||""}),[W]),U=t.useMemo(()=>u(),[]),y=t.useMemo(()=>W?M$(W):null,[W]),M=t.useMemo(()=>W?O$(W,Q):null,[W,Q]),{data:F,isLoading:j,error:B}=e.useQuery({queryKey:["uiConfig",$.pathname+$.search,W],enabled:!!W,queryFn:async()=>{let D=new URLSearchParams($.search);D.set("__pieroot","web");let V="/api/content"+$.pathname+"?"+D.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",V);let K=await H.get(V,{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:",K.data);return K.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(D)=>Math.min(1000*2**D,30000),...z}),q=qZ($.pathname,Z,J);if(!W)return q??null;if(G)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",W),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(B){if(G)console.error("[PieRoot] Error fetching UI configuration:",B),console.error("[PieRoot] Error details:",{message:B.message,status:B.response?.status,data:B.response?.data});return X?.(B),q}if(j||!F){if(G)console.log("[PieRoot] Loading state:",{isLoading:j,hasUiConfiguration:!!F});return q}if(G)console.log("[PieRoot] UI configuration loaded successfully:",F),console.log("[PieRoot] Rendering UI with configuration");return O.jsx(S.Provider,{value:U,children:O.jsx(b.Provider,{value:y,children:O.jsx(x.Provider,{value:M,children:O.jsx(w.Provider,{value:J??O.jsx(O.Fragment,{}),children:O.jsx(n$,{children:O.jsx(a$,{children:Y?O.jsx(L,{uiConfig:F}):O.jsx("form",{id:"piedata_global_form",action:W+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:O.jsx(L,{uiConfig:F})})})})})})})})},D0=($)=>{let J=t.useMemo(()=>new e.QueryClient,[]),Z=$.queryClient??J;return O.jsx(C.Provider,{value:$.onNavigate,children:O.jsx(c.Provider,{value:$.config,children:O.jsx(h.Provider,{value:$.onError,children:O.jsx(e.QueryClientProvider,{client:Z,children:O.jsx(q0,{...$})})})})})},_Z=D0;var BZ=require("react");var K0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],_0=new Set(["telegram:cloud","telegram:secure"]),K$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of K0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},_J=($,J=!1)=>{let{source:Z,key:X}=K$($);if(Z==="sid"){let Y=I.readSid();if(!Y)throw Error("SocketIO isn't initialized properly");return[Y]}if(Z==="localStorage"||Z==="sessionStorage")try{let Y=I.readWebStorage(Z==="localStorage"?"local":"session",X);if(Y===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[Y]}catch(Y){if(J)console.warn(`Failed to read ${Z} key ${X}:`,Y);return[]}if(Z==="cookie"){let Y=I.readCookie(X);if(Y===null){if(J)console.warn(`No cookie found for key ${X}`);return[]}return[Y]}if(Z==="url"){let Y=I.readUrlParams(X);if(!Y.length&&J)console.warn(`No URL query param found for key ${X}`);return Y}if(_0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let z=I.readDomInput(X);if(z===null){if(J)console.warn(`No input found with name ${X}`);return[]}return z},B0=($,J,Z)=>{let X=window.Telegram?.WebApp,z=$==="telegram:cloud"?X?.CloudStorage:X?.SecureStorage,Y=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!z){if(Z)console.warn(`${Y} is not available`);return Promise.resolve([])}return new Promise((W)=>{try{z.getItem(J,(Q,G)=>{if(Q){if(Z)console.warn(`Failed to read ${Y} key ${J}:`,Q);W([]);return}if(G==null||G===""){if(Z)console.warn(`No ${Y} value found for key ${J}`);W([]);return}W([G])})}catch(Q){if(Z)console.warn(`Failed to read ${Y} key ${J}:`,Q);W([])}})},BJ=async($,J=!1)=>{let{source:Z,key:X}=K$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return B0(Z,X,J);if((Z==="localStorage"||Z==="sessionStorage")&&I.readWebStorageAsync)try{let z=await I.readWebStorageAsync(Z==="localStorage"?"local":"session",X);if(z===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[z]}catch(z){if(J)console.warn(`Failed to read ${Z} key ${X}:`,z);return[]}return _J($,J)},T0=($,J={},Z=[],X,z)=>{let Y=z?.renderingLogEnabled??!1,W=z?.timeout,Q=z?.retryPolicy,G=Q?.maxRetries??0,H=Q?.baseDelay??1000,U=Q?.retryOn??[502,503,504];if(Y)console.log("Registering AJAX: ",X,J,Z);return async(y={})=>{if(!I.isClient()){if(Y)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let M=z?.apiServer;if(!M){if(Y)console.warn("AJAX skipped: apiServer is missing");return}if(!X||!$){if(Y)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await DJ();let F=new FormData;for(let[q,D]of Object.entries({...J,...y}))F.append(q,D);for(let q of Z){let{key:D}=K$(q);for(let V of await BJ(q,Y))F.append(D,V)}let j=M+"api/ajax_content"+X;$(null);let B;for(let q=0;q<=G;q++){if(q>0){let K=H*2**(q-1);if(Y)console.log(`AJAX retry ${q}/${G} after ${K}ms`);await new Promise((N)=>setTimeout(N,K))}let D=W!=null?new AbortController:null,V=D&&setTimeout(()=>D.abort(),W);try{let K=await fetch(j,{method:"POST",body:F,signal:D?.signal});if(V)clearTimeout(V);if(!K.ok&&U.includes(K.status)&&q<G){B=Error(`HTTP ${K.status}`);continue}let _$=(K.headers.get("content-type")||"").includes("application/json");if(!!K.body?.getReader&&!_$){let B$=K.body.getReader(),FZ=new TextDecoder,d="";while(!0){let{done:JJ,value:IZ}=await B$.read();if(JJ)break;d+=FZ.decode(IZ,{stream:!0});let TJ=d.split(`
3
+ `);d=TJ.pop()??"";for(let OZ of TJ){let ZJ=OZ.trim();if(!ZJ)continue;try{let MZ=JSON.parse(ZJ);$([MZ])}catch{if(Y)console.warn("Failed to parse streamed line:",ZJ)}}}if(d.trim())try{let JJ=JSON.parse(d);$([JJ])}catch{if(Y)console.warn("Failed to parse final streamed line:",d)}return{}}else{let B$=await K.json();return $(B$),B$}}catch(K){if(V)clearTimeout(V);if(B=K,q<G)continue;if(Y)console.error("AJAX request failed:",K);return $(null),K}}if(Y)console.error("AJAX request failed after retries:",B);return $(null),B}},TZ=($,J={},Z=[],X,z)=>{let{apiServer:Y,enableRenderingLog:W}=Z$(),Q=JSON.stringify(J),G=JSON.stringify(Z),H=JSON.stringify(z);return BZ.useMemo(()=>T0($,J,Z,X,{apiServer:Y,renderingLogEnabled:W,timeout:z?.timeout,retryPolicy:z?.retryPolicy}),[$,Q,G,X,Y,W,H])};var UZ=()=>{I.submitGlobalForm()};var VZ=($,J)=>`${$}${I$}${J}`;
@@ -0,0 +1,4 @@
1
+ import { ClientSources } from './types';
2
+ declare const clientSources: ClientSources;
3
+ export default clientSources;
4
+ //# sourceMappingURL=clientSources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAsBvC,QAAA,MAAM,aAAa,EAAE,aAEC,CAAA;AAEtB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { ClientSources } from './types';
2
+ export declare const nativeClientSources: ClientSources;
3
+ export default nativeClientSources;
4
+ //# sourceMappingURL=clientSources.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.native.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAevC,eAAO,MAAM,mBAAmB,EAAE,aAuCjC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import '../types';
2
+ import { ClientSources } from './types';
3
+ /**
4
+ * Browser/DOM implementation of {@link ClientSources}. Selected at runtime by
5
+ * the `clientSources` resolver on web and during SSR (its methods guard their
6
+ * own `typeof window`/`document` access).
7
+ */
8
+ export declare const webClientSources: ClientSources;
9
+ export default webClientSources;
10
+ //# sourceMappingURL=clientSources.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientSources.web.d.ts","sourceRoot":"","sources":["../../src/platform/clientSources.web.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAmBvC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAyC9B,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Host-supplied wiring for the React Native `ClientSources` implementation.
3
+ *
4
+ * The library deliberately depends on no native modules. A React Native host
5
+ * injects its own sources here once at startup (e.g. MMKV for sync storage,
6
+ * the active navigation route for `url:` deps, an in-memory store for form
7
+ * fields). Every field is optional; an unconfigured source degrades to the
8
+ * same "missing value" semantics as the web implementation (`null` / `[]`).
9
+ */
10
+ /**
11
+ * Synchronous key/value store. `getItem` satisfies the synchronous
12
+ * {@link readAjaxKey} contract; the optional writers back the native
13
+ * `DeviceStorageCard` / `SessionStorageCard` so they can persist values
14
+ * (e.g. MMKV's `getString` / `set` / `delete`).
15
+ */
16
+ export interface NativeStorageAdapter {
17
+ getItem(key: string): string | null;
18
+ setItem?(key: string, value: string): void;
19
+ removeItem?(key: string): void;
20
+ }
21
+ /**
22
+ * Asynchronous key/value reader, for stores that are async-only such as
23
+ * `@react-native-async-storage/async-storage`. Used by the `readAjaxKeyAsync`
24
+ * submit path (which already awaits its sources).
25
+ */
26
+ export interface NativeAsyncStorageAdapter {
27
+ getItem(key: string): Promise<string | null>;
28
+ }
29
+ export interface NativeClientConfig {
30
+ /** Backs `localStorage:` dep sources synchronously (e.g. MMKV). */
31
+ storage?: NativeStorageAdapter;
32
+ /** Backs `sessionStorage:` dep sources synchronously. */
33
+ sessionStorage?: NativeStorageAdapter;
34
+ /**
35
+ * Async backing for `localStorage:` deps (e.g. AsyncStorage). Preferred by
36
+ * the async submit path; falls back to {@link storage} when absent.
37
+ */
38
+ asyncStorage?: NativeAsyncStorageAdapter;
39
+ /** Async backing for `sessionStorage:` deps; falls back to {@link sessionStorage}. */
40
+ asyncSessionStorage?: NativeAsyncStorageAdapter;
41
+ /** Backs `cookie:` dep sources. Usually unused on native. */
42
+ getCookie?: (name: string) => string | null;
43
+ /** Backs `url:` dep sources — typically the current route's query params. */
44
+ getRouteParams?: (key: string) => string[];
45
+ /**
46
+ * Backs plain (DOM) dep sources — the host resolves a field name to its
47
+ * current value(s) from whatever form-state store it uses. Return `null`
48
+ * when no field by that name exists (mirrors "element not found").
49
+ */
50
+ getInput?: (name: string) => Array<string | File> | null;
51
+ /** Performs the global submit (there is no HTML form on native). */
52
+ submitForm?: () => void;
53
+ }
54
+ /**
55
+ * Registers (merges) native client sources. Call once at app startup, before
56
+ * any Ajax submit runs. Repeated calls shallow-merge over previous config.
57
+ */
58
+ export declare function configureNativeClientSources(config: NativeClientConfig): void;
59
+ /** Returns the currently registered native client sources. */
60
+ export declare function getNativeClientConfig(): NativeClientConfig;
61
+ /** Test helper: clears all configured native sources back to empty. */
62
+ export declare function resetNativeClientSources(): void;
63
+ //# sourceMappingURL=nativeConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeConfig.d.ts","sourceRoot":"","sources":["../../src/platform/nativeConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1C,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,kBAAkB;IAC/B,mEAAmE;IACnE,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,yDAAyD;IACzD,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC;;;OAGG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAA;IACxC,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,yBAAyB,CAAA;IAC/C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAC3C,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAID;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAE7E;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,kBAAkB,CAE1D;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,12 @@
1
+ /** Registers (replaces) the current value(s) for a field name. */
2
+ export declare const setNativeField: (name: string, values: Array<string | File>) => void;
3
+ /** Removes a field from the store. */
4
+ export declare const clearNativeField: (name: string) => void;
5
+ /**
6
+ * Reads the value(s) registered for a field name, or `null` when no field by
7
+ * that name exists — mirroring "element not found" so the caller can warn.
8
+ */
9
+ export declare const readNativeField: (name: string) => Array<string | File> | null;
10
+ /** Test helper: empties the store. */
11
+ export declare const resetNativeFields: () => void;
12
+ //# sourceMappingURL=nativeFormStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeFormStore.d.ts","sourceRoot":"","sources":["../../src/platform/nativeFormStore.ts"],"names":[],"mappings":"AAYA,kEAAkE;AAClE,eAAO,MAAM,cAAc,GACvB,MAAM,MAAM,EACZ,QAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAC7B,IAEF,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,IAE/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GACxB,MAAM,MAAM,KACb,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAEzB,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The set of client-side capabilities the AJAX/form layer depends on. The web
3
+ * build supplies a DOM-backed implementation; React Native supplies its own.
4
+ * Methods are pure accessors — all logging/warning lives in the callers so the
5
+ * platform layer stays environment-agnostic.
6
+ */
7
+ export interface ClientSources {
8
+ /** True only when client-side APIs are usable (mirrors the SSR guard). */
9
+ isClient(): boolean;
10
+ /** SocketIO session id, or undefined when not yet initialized. */
11
+ readSid(): string | undefined;
12
+ /** Stores the SocketIO session id (web: `window.sid`; native: in-memory). */
13
+ setSid(sid: string): void;
14
+ /**
15
+ * Reads a value from local/session storage. May throw (e.g. blocked in
16
+ * private mode); the caller is responsible for catching.
17
+ */
18
+ readWebStorage(kind: 'local' | 'session', key: string): string | null;
19
+ /**
20
+ * Optional asynchronous storage read. Present only on platforms whose
21
+ * storage is async-only (e.g. React Native AsyncStorage). When defined,
22
+ * `readAjaxKeyAsync` prefers it over the synchronous {@link readWebStorage}
23
+ * for `localStorage:` / `sessionStorage:` deps. May reject; caller catches.
24
+ */
25
+ readWebStorageAsync?(kind: 'local' | 'session', key: string): Promise<string | null>;
26
+ /** Reads and URL-decodes a single cookie; null when absent. */
27
+ readCookie(name: string): string | null;
28
+ /** Reads every value for a repeated URL query param. */
29
+ readUrlParams(key: string): string[];
30
+ /**
31
+ * Reads DOM input(s) by name. Returns `null` when no element has that name
32
+ * (so the caller can warn), the selected `File`s for a file input, the
33
+ * `.value` for other inputs/textareas, or `[]` for an unsupported element.
34
+ */
35
+ readDomInput(name: string): Array<string | File> | null;
36
+ /** Submits the hidden global form (`#piedata_global_form`). No-op if unmounted. */
37
+ submitGlobalForm(): void;
38
+ }
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC1B,0EAA0E;IAC1E,QAAQ,IAAI,OAAO,CAAA;IACnB,kEAAkE;IAClE,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACrE;;;;;OAKG;IACH,mBAAmB,CAAC,CAChB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzB,+DAA+D;IAC/D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACvC,wDAAwD;IACxD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACpC;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACvD,mFAAmF;IACnF,gBAAgB,IAAI,IAAI,CAAA;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SocketIOInitProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SocketIOInitProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAA;AAOxD,QAAA,MAAM,oBAAoB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,cA2ClE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
1
+ {"version":3,"file":"SocketIOInitProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SocketIOInitProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAA;AAQxD,QAAA,MAAM,oBAAoB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,cA2ClE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{useMemo as w}from"react";import{QueryClient as F$,QueryClientProvider as G$,useQuery as Q$}from"@tanstack/react-query";import RU from"mitt";import{createContext as MU,useCallback as b$,useContext as v$}from"react";var h=globalThis,F=(U,$)=>{let H=Symbol.for(U);if(!(H in h))h[H]=$();return h[H]};function i(){return F("@swarm.ing/pieui:mitt-emitter",()=>RU())}var AU=F("@swarm.ing/pieui:context:mitt",()=>MU(null));var k=AU;import{io as EU}from"socket.io-client";import{createContext as NU}from"react";var r=F("@swarm.ing/pieui:socket-cache",()=>new Map),a=(U)=>{let $=r.get(U);if($)return $;let H=EU(U,{autoConnect:!1,transports:["websocket"]});return r.set(U,H),H},PU=F("@swarm.ing/pieui:context:socket",()=>NU(null)),M=PU;import{createContext as jU}from"react";import{Centrifuge as t}from"centrifuge";var e=F("@swarm.ing/pieui:centrifuge-cache",()=>new Map),UU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,B=e.get(H);if(B)return B;async function J(){let Z=await fetch(U+"api/centrifuge/gen_token");if(!Z.ok){if(Z.status===403)throw new t.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${Z.status}`)}return(await Z.json()).token}let I=new t($,{getToken:J});return e.set(H,I),I},wU=F("@swarm.ing/pieui:context:centrifuge",()=>jU(null)),A=wU;import{useContext as vU,useEffect as CU}from"react";import{useEffect as kU,useState as xU}from"react";var x=new Map,f=new Map;function y(U,$){let H=`${U}::${$}`,B=U?x.get(H):void 0,[J,I]=xU(B??null);return kU(()=>{if(!U)return;if(x.has(H)){I(x.get(H));return}let Z=f.get(H);if(!Z)Z=fetch(U+`api/support/${$}`,{method:"GET"}).then((Y)=>Y.json()).then((Y)=>{return x.set(H,Y),f.delete(H),Y}).catch((Y)=>{throw f.delete(H),Y}),f.set(H,Z);let D=!1;return Z.then((Y)=>{if(!D)I(Y)}).catch(()=>{}),()=>{D=!0}},[U,$,H]),J}import{createContext as fU,useContext as yU}from"react";var l=F("@swarm.ing/pieui:context:pieConfig",()=>fU(null)),b=()=>{let U=yU(l);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},p=()=>{let{apiServer:U}=b();return U},v=p,$U=()=>{let{centrifugeServer:U}=b();return U};var R=()=>{let{enableRenderingLog:U}=b();return U},HU=R,IU=()=>{let{pageProcessor:U}=b();return U};var bU=F("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function JU(){bU.resolve?.()}var SU=({children:U})=>{let $=vU(M),H=v(),B=y(H,"socketIO"),J=(I)=>{if(typeof window<"u")window.sid=I.sid,JU(),console.log(`SocketIO initialized: ${window.sid}`)};return CU(()=>{if(!$)return;let I=()=>{console.log("SocketIO connected")},Z=(D)=>{console.log(`SocketIO disconnected: ${D}`),$.connect()};if(B)$.on("pieinit",J),$.on("connect",I),$.on("disconnect",Z),$.connect();return()=>{if(B)$.off("pieinit",J),$.off("connect",I),$.off("disconnect",Z),$.disconnect()}},[$,B]),U},ZU=SU;import{useContext as mU,useEffect as gU}from"react";var cU=({children:U})=>{let $=mU(A),H=v(),B=y(H,"centrifuge");return gU(()=>{if(!$)return;let J=()=>{console.log("Centrifuge connected")},I=(Z)=>{console.log("Centrifuge disconnected:",Z)};if(B)$.on("connected",J),$.on("disconnected",I),$.connect();return()=>{if(B)$.disconnect()}},[$,B]),U},BU=cU;import{createContext as hU}from"react";import{jsx as dU,Fragment as pU}from"react/jsx-runtime";var lU=F("@swarm.ing/pieui:context:fallback",()=>hU(dU(pU,{}))),E=lU;import{createContext as uU}from"react";var oU=F("@swarm.ing/pieui:context:lazyError",()=>uU(void 0)),N=oU;import{lazy as nU}from"react";var j=new Map;function sU(U,$){return $.catch(()=>{if(j.get(U)===$)j.delete(U)}),j.set(U,$),$}function XU(U,$){return nU(()=>{if(j.has($))return j.get($);return sU($,U().then((H)=>H))})}var YU=F("@swarm.ing/pieui:component-registry",()=>new Map),iU=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=XU($.loader,U.name),$.isLazy=!0;return $};function C(U){let $=iU(U);return YU.set($.name,$),$.component}var S=(U)=>{return YU.get(U)};import{useContext as zU,memo as $$}from"react";import{Component as rU,Suspense as aU}from"react";import{jsx as U$}from"react/jsx-runtime";var tU=2,eU=400;class P extends rU{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<tU){let $=eU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return U$(aU,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as d}from"react/jsx-runtime";function H$({uiConfig:U,setUiAjaxConfiguration:$}){let H=zU(E),B=zU(N),J=R();if(J)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let I=S(U.card);if(!I?.component){if(J)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(J)console.log("[UI] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata});let Z=I.component,D=d(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(I.isLazy){if(J)console.log("[UI] Rendering lazy component with Suspense:",I.name);return d(P,{name:I.name,fallback:I.fallback?d(I.fallback,{}):H,onError:B,children:D})}if(J)console.log("[UI] Rendering component directly:",I.name);return D}var u=$$(H$);import{createAxiosDateTransformer as T$}from"axios-date-transformer";import{useEffect as I$,useState as J$}from"react";var m=({onError:U}={})=>{let[$,H]=J$(null),B=IU();return I$(()=>{if(typeof window>"u")return;let J=window.Telegram?.WebApp;if(!J)return;try{J.ready?.()}catch(I){U?.()}if(B==="telegram_expanded"&&(J.platform==="ios"||J.platform==="android"))J.expand();H(J)},[]),$},Z$=()=>{let U=m();return[U?.initDataUnsafe,U?.initData]};import{createContext as B$}from"react";var X$=F("@swarm.ing/pieui:context:navigate",()=>B$(void 0)),DU=X$;import{useContext as GU}from"react";import{createContext as Y$}from"react";var z$=F("@swarm.ing/pieui:context:uiRenderer",()=>Y$(null)),FU=z$;import{jsx as g}from"react/jsx-runtime";function QU({uiConfig:U,setUiAjaxConfiguration:$}){let H=GU(E),B=GU(N),J=R();if(J)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let I=S(U.card);if(!I?.component){if(J)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(J)console.log("[UILoading] Found component in registry:",{name:I.name,isLazy:I.isLazy,hasMetadata:!!I.metadata,hasFallback:!!I.fallback});if(I.fallback){if(J)console.log("[UILoading] Rendering fallback for:",I.name);let Y=I.fallback;return g(Y,{})}if(J)console.log("[UILoading] No fallback, rendering full component:",I.name);let Z=I.component,D=g(FU.Provider,{value:QU,children:g(Z,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(I.isLazy)return g(P,{name:I.name,fallback:H,onError:B,children:D});return D}var TU=QU;import{jsx as D$}from"react/jsx-runtime";function qU(U,$,H){if(!$)return H;let B=U.replace(/^\//,""),J=$[B];if(!J)return H;return D$(TU,{uiConfig:J})}import{jsx as q,Fragment as K$}from"react/jsx-runtime";var q$=({location:U,fallback:$,piecache:H,onError:B,queryOptions:J,disableGlobalForm:I})=>{let Z=p(),D=$U(),Y=R(),G=w(()=>T$({baseURL:Z}),[Z]),X=w(()=>i(),[]),W=w(()=>Z?a(Z):null,[Z]),V=w(()=>Z?UU(Z,D):null,[Z,D]),L=m({onError:B}),{data:K,isLoading:O,error:z}=Q$({queryKey:["uiConfig",U.pathname+U.search,L?.initData],enabled:!!L?.initData,queryFn:async()=>{let T=new URLSearchParams(U.search);if(T.set("__pieroot","telegram"),L?.initData)T.set("initData",L.initData);let _="/api/content"+U.pathname+"?"+T.toString();if(Y)console.log("[PieRoot] Fetching UI configuration from:",_);let s=await G.get(_,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(Y)console.log("[PieRoot] Received UI configuration:",s.data);return s.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(T)=>Math.min(1000*2**T,30000),...J}),Q=qU(U.pathname,H,$);if(!Z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(z&&Y)return console.error("[PieRoot] Error fetching UI configuration:",z),console.error("[PieRoot] Error details:",{message:z.message,status:z.response?.status,data:z.response?.data}),B?.(z),Q;if(O||!K){if(Y)console.log("[PieRoot] Loading state:",{isLoading:O,hasUiConfiguration:!!K});return Q}if(Y)console.log("[PieRoot] UI configuration loaded successfully:",K),console.log("[PieRoot] Rendering UI with configuration");return q(k.Provider,{value:X,children:q(M.Provider,{value:W,children:q(A.Provider,{value:V,children:q(E.Provider,{value:$??q(K$,{}),children:q(ZU,{children:q(BU,{children:I?q(u,{uiConfig:K}):q("form",{id:"piedata_global_form",action:Z+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:q(u,{uiConfig:K})})})})})})})})},L$=(U)=>{let $=w(()=>new F$,[]),H=U.queryClient??$;return q(DU.Provider,{value:U.onNavigate,children:q(l.Provider,{value:U.config,children:q(N.Provider,{value:U.onError,children:q(G$,{client:H,children:q(q$,{...U})})})})})},O$=L$;import{useEffect as LU,useState as A$}from"react";import{useContext as o,useEffect as n,useRef as _$}from"react";import{jsx as R$,jsxs as M$,Fragment as V$}from"react/jsx-runtime";var W$=({card:U,data:$,children:H,useSocketioSupport:B=!1,useCentrifugeSupport:J=!1,useMittSupport:I=!1,centrifugeChannel:Z=void 0,methods:D=void 0,stored:Y=void 0})=>{let G=HU(),X=_$(D);if(X.current=D,G)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:B,centrifuge:J,mitt:I,centrifugeChannel:Z}),console.log("[PieCard] Methods:",D?Object.keys(D):"none"),console.log("[PieCard] Has children:",!!H);let W=o(M),V=o(A),L=o(k);if(n(()=>{if(!W||!B||!X.current||!$.name){if(G&&B)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!W,useSocketioSupport:B,hasMethods:!!X.current,hasDataName:!!$?.name});return}let O=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}`;if(G)console.log(`[PieCard] Socket.IO registering event: ${Q}`);let T=(_)=>{X.current?.[z]?.(_)};return W.on(Q,T),[Q,T]});return()=>{O.forEach(([z,Q])=>{if(G)console.log(`[PieCard] Socket.IO unregistering event: ${z}`);W.off(z,Q)})}},[W,$.name,B]),n(()=>{if(!V||!J||!Z||!$.name){if(G&&J)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!V,useCentrifugeSupport:J,hasCentrifugeChannel:!!Z,hasMethods:!!X.current,hasDataName:!!$?.name});return}let O=Object.keys(X.current??{}).map((z)=>{let Q=`pie${z}_${$.name}_${Z}`;if(G)console.log(`[PieCard] Centrifuge subscribing to channel: ${Q}`);let T=V.newSubscription(Q);return T.on("publication",(_)=>{if(G)console.log(`[PieCard] Centrifuge received data on ${Q}:`,_.data);X.current?.[z]?.(_.data)}),T.subscribe(),T});return()=>{O.forEach((z)=>{if(G)console.log("[PieCard] Centrifuge unsubscribing from channel");z.unsubscribe(),V.removeSubscription(z)})}},[V,Z,$.name,J]),n(()=>{if(!L||!I||!$.name){if(G&&I)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!L,useMittSupport:I,hasMethods:!!X.current,hasDataName:!!$?.name});return}let K=Object.keys(X.current??{}),O={};return K.forEach((z)=>{let Q=`pie${z}_${$.name}`,T=(_)=>{if(G)console.log(`[PieCard] Mitt registering event: ${Q}`);X.current?.[z]?.(_)};O[Q]=T,L.on(Q,T)}),()=>{Object.entries(O).forEach(([z,Q])=>{if(G)console.log(`[PieCard] Mitt unregistering event: ${z}`);L.off(z,Q)})}},[L,$.name,I]),G)console.log("[PieCard] Rendering complete, returning children");if(Y!==void 0)return M$(V$,{children:[R$("input",{type:"hidden",name:$.name,value:JSON.stringify(Y)}),H]});return H},c=W$;import{jsx as KU}from"react/jsx-runtime";var E$=({data:U})=>{let{name:$,key:H,value:B,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D}=U,[Y,G]=A$(B);return LU(()=>{G(B)},[B]),LU(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.CloudStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),KU(c,{card:"CloudStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.CloudStorage;if(X)X.removeItem(H);G("")}},children:KU("input",{type:"hidden",id:$,name:$,value:Y})})},OU=E$;var N$=C({name:"CloudStorageCard",component:OU,metadata:{author:"PieData"}});import{useEffect as _U,useState as P$}from"react";import{jsx as WU}from"react/jsx-runtime";var j$=({data:U})=>{let{name:$,key:H,value:B,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D}=U,[Y,G]=P$(B);return _U(()=>{G(B)},[B]),_U(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp?.SecureStorage;if(!X)return;X.setItem(H,Y)},[H,Y]),WU(c,{card:"SecureStorageCard",data:U,useSocketioSupport:J,useCentrifugeSupport:I,useMittSupport:Z,centrifugeChannel:D,methods:{update:({value:X})=>{G(X)},remove:()=>{let X=window.Telegram?.WebApp?.SecureStorage;if(X)X.removeItem(H);G("")}},children:WU("input",{type:"hidden",id:$,name:$,value:Y})})},VU=j$;var w$=C({name:"SecureStorageCard",component:VU,metadata:{author:"PieData"}});export{m as useWebApp,Z$ as useInitData,w$ as SecureStorageCard,O$ as PieTelegramRoot,N$ as CloudStorageCard};
2
+ import{useMemo as x}from"react";import{QueryClient as A$,QueryClientProvider as E$,useQuery as j$}from"@tanstack/react-query";import wU from"mitt";import{createContext as xU,useCallback as s$,useContext as n$}from"react";var l=globalThis,Q=(U,$)=>{let H=Symbol.for(U);if(!(H in l))l[H]=$();return l[H]};function a(){return Q("@swarm.ing/pieui:mitt-emitter",()=>wU())}var kU=Q("@swarm.ing/pieui:context:mitt",()=>xU(null));var k=kU;import{io as bU}from"socket.io-client";import{createContext as yU}from"react";var t=Q("@swarm.ing/pieui:socket-cache",()=>new Map),e=(U)=>{let $=t.get(U);if($)return $;let H=bU(U,{autoConnect:!1,transports:["websocket"]});return t.set(U,H),H},fU=Q("@swarm.ing/pieui:context:socket",()=>yU(null)),A=fU;import{createContext as CU}from"react";import{Centrifuge as UU}from"centrifuge";var $U=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map),HU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,Z=$U.get(H);if(Z)return Z;async function I(){let X=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!X.ok){if(X.status===401||X.status===403)throw new UU.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${X.status}`)}return(await X.json()).token}let J=new UU($,{getToken:I});return $U.set(H,J),J},vU=Q("@swarm.ing/pieui:context:centrifuge",()=>CU(null)),E=vU;import{useContext as nU,useEffect as iU}from"react";import{useEffect as SU,useState as gU}from"react";var b=new Map,y=new Map;function f(U,$){let H=`${U}::${$}`,Z=U?b.get(H):void 0,[I,J]=gU(Z??null);return SU(()=>{if(!U)return;if(b.has(H)){J(b.get(H));return}let X=y.get(H);if(!X)X=fetch(U+`api/support/${$}`,{method:"GET"}).then((z)=>z.json()).then((z)=>{return b.set(H,z),y.delete(H),z}).catch((z)=>{throw y.delete(H),z}),y.set(H,X);let B=!1;return X.then((z)=>{if(!B)J(z)}).catch(()=>{}),()=>{B=!0}},[U,$,H]),I}import{createContext as mU,useContext as hU}from"react";var d=Q("@swarm.ing/pieui:context:pieConfig",()=>mU(null)),C=()=>{let U=hU(d);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},u=()=>{let{apiServer:U}=C();return U},v=u,JU=()=>{let{centrifugeServer:U}=C();return U};var R=()=>{let{enableRenderingLog:U}=C();return U},ZU=R,IU=()=>{let{pageProcessor:U}=C();return U};var pU=(U)=>{let $=document.cookie?document.cookie.split(";"):[];for(let H of $){let Z=H.indexOf("=");if((Z===-1?H:H.slice(0,Z)).trim()===U){let J=Z===-1?"":H.slice(Z+1).trim();try{return decodeURIComponent(J)}catch{return J}}}return null},cU={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid(U){if(typeof window<"u")window.sid=U},readWebStorage(U,$){return(U==="local"?window.localStorage:window.sessionStorage).getItem($)},readCookie:pU,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let $=document.getElementsByName(U);if(!$.length)return null;let H=$[0];if(H instanceof HTMLInputElement){if(H.type==="file"&&H.files)return Array.from(H.files);return[H.value]}if(H instanceof HTMLTextAreaElement)return[H.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},XU=cU;var lU={};function M(){return lU}var YU=new Map;var zU=(U)=>{return YU.has(U)?YU.get(U):null};var GU,dU={isClient(){return!0},readSid(){return GU},setSid(U){GU=U},readWebStorage(U,$){let H=M(),Z=U==="local"?H.storage:H.sessionStorage;return Z?Z.getItem($):null},async readWebStorageAsync(U,$){let H=M(),Z=U==="local"?H.asyncStorage:H.asyncSessionStorage;if(Z)return Z.getItem($);let I=U==="local"?H.storage:H.sessionStorage;return I?I.getItem($):null},readCookie(U){let $=M();return $.getCookie?$.getCookie(U):null},readUrlParams(U){let $=M();return $.getRouteParams?$.getRouteParams(U):[]},readDomInput(U){let $=M();return $.getInput?$.getInput(U):zU(U)},submitGlobalForm(){M().submitForm?.()}},BU=dU;var uU=typeof navigator<"u"&&navigator.product==="ReactNative",oU=uU?BU:XU,S=oU;var sU=Q("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function QU(){sU.resolve?.()}var rU=({children:U})=>{let $=nU(A),H=v(),Z=f(H,"socketIO"),I=(J)=>{if(S.isClient())S.setSid(J.sid),QU(),console.log(`SocketIO initialized: ${S.readSid()}`)};return iU(()=>{if(!$)return;let J=()=>{console.log("SocketIO connected")},X=(B)=>{console.log(`SocketIO disconnected: ${B}`),$.connect()};if(Z)$.on("pieinit",I),$.on("connect",J),$.on("disconnect",X),$.connect();return()=>{if(Z)$.off("pieinit",I),$.off("connect",J),$.off("disconnect",X),$.disconnect()}},[$,Z]),U},DU=rU;import{useContext as aU,useEffect as tU}from"react";var eU=({children:U})=>{let $=aU(E),H=v(),Z=f(H,"centrifuge");return tU(()=>{if(!$)return;let I=()=>{console.log("Centrifuge connected")},J=(X)=>{console.log("Centrifuge disconnected:",X)};if(Z)$.on("connected",I),$.on("disconnected",J),$.connect();return()=>{if(Z)$.disconnect()}},[$,Z]),U},FU=eU;import{createContext as U$}from"react";import{jsx as J$,Fragment as H$}from"react/jsx-runtime";var $$=Q("@swarm.ing/pieui:context:fallback",()=>U$(J$(H$,{}))),j=$$;import{createContext as Z$}from"react";var I$=Q("@swarm.ing/pieui:context:lazyError",()=>Z$(void 0)),P=I$;import{lazy as X$}from"react";var w=new Map;function Y$(U,$){return $.catch(()=>{if(w.get(U)===$)w.delete(U)}),w.set(U,$),$}function LU(U,$){return X$(()=>{if(w.has($))return w.get($);return Y$($,U().then((H)=>H))})}var KU=Q("@swarm.ing/pieui:component-registry",()=>new Map),z$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=LU($.loader,U.name),$.isLazy=!0;return $};function g(U){let $=z$(U);return KU.set($.name,$),$.component}var m=(U)=>{return KU.get(U)};import{useContext as TU,memo as L$}from"react";import{Component as G$,Suspense as B$}from"react";import{jsx as F$}from"react/jsx-runtime";var Q$=2,D$=400;class N extends G${state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<Q$){let $=D$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return F$(B$,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as o}from"react/jsx-runtime";function K$({uiConfig:U,setUiAjaxConfiguration:$}){let H=TU(j),Z=TU(P),I=R();if(I)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let J=m(U.card);if(!J?.component){if(I)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(I)console.log("[UI] Found component in registry:",{name:J.name,isLazy:J.isLazy,hasMetadata:!!J.metadata});let X=J.component,B=o(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(J.isLazy){if(I)console.log("[UI] Rendering lazy component with Suspense:",J.name);return o(N,{name:J.name,fallback:J.fallback?o(J.fallback,{}):H,onError:Z,children:B})}if(I)console.log("[UI] Rendering component directly:",J.name);return B}var s=L$(K$);import{createAxiosDateTransformer as P$}from"axios-date-transformer";import{useEffect as T$,useState as _$}from"react";var h=({onError:U}={})=>{let[$,H]=_$(null),Z=IU();return T$(()=>{if(typeof window>"u")return;let I=window.Telegram?.WebApp;if(!I)return;try{I.ready?.()}catch(J){U?.()}if(Z==="telegram_expanded"&&(I.platform==="ios"||I.platform==="android"))I.expand();H(I)},[]),$},q$=()=>{let U=h();return[U?.initDataUnsafe,U?.initData]};import{createContext as O$}from"react";var W$=Q("@swarm.ing/pieui:context:navigate",()=>O$(void 0)),_U=W$;import{useContext as OU}from"react";import{createContext as V$}from"react";var R$=Q("@swarm.ing/pieui:context:uiRenderer",()=>V$(null)),qU=R$;import{jsx as p}from"react/jsx-runtime";function WU({uiConfig:U,setUiAjaxConfiguration:$}){let H=OU(j),Z=OU(P),I=R();if(I)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let J=m(U.card);if(!J?.component){if(I)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(I)console.log("[UILoading] Found component in registry:",{name:J.name,isLazy:J.isLazy,hasMetadata:!!J.metadata,hasFallback:!!J.fallback});if(J.fallback){if(I)console.log("[UILoading] Rendering fallback for:",J.name);let z=J.fallback;return p(z,{})}if(I)console.log("[UILoading] No fallback, rendering full component:",J.name);let X=J.component,B=p(qU.Provider,{value:WU,children:p(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(J.isLazy)return p(N,{name:J.name,fallback:H,onError:Z,children:B});return B}var VU=WU;import{jsx as M$}from"react/jsx-runtime";function RU(U,$,H){if(!$)return H;let Z=U.replace(/^\//,""),I=$[Z];if(!I)return H;return M$(VU,{uiConfig:I})}import{jsx as K,Fragment as x$}from"react/jsx-runtime";var N$=({location:U,fallback:$,piecache:H,onError:Z,queryOptions:I,disableGlobalForm:J})=>{let X=u(),B=JU(),z=R(),D=x(()=>P$({baseURL:X}),[X]),Y=x(()=>a(),[]),W=x(()=>X?e(X):null,[X]),V=x(()=>X?HU(X,B):null,[X,B]),T=h({onError:Z}),{data:_,isLoading:q,error:G}=j$({queryKey:["uiConfig",U.pathname+U.search,T?.initData],enabled:!!T?.initData,queryFn:async()=>{let L=new URLSearchParams(U.search);if(L.set("__pieroot","telegram"),T?.initData)L.set("initData",T.initData);let O="/api/content"+U.pathname+"?"+L.toString();if(z)console.log("[PieRoot] Fetching UI configuration from:",O);let r=await D.get(O,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(z)console.log("[PieRoot] Received UI configuration:",r.data);return r.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(L)=>Math.min(1000*2**L,30000),...I}),F=RU(U.pathname,H,$);if(!X)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(G&&z)return console.error("[PieRoot] Error fetching UI configuration:",G),console.error("[PieRoot] Error details:",{message:G.message,status:G.response?.status,data:G.response?.data}),Z?.(G),F;if(q||!_){if(z)console.log("[PieRoot] Loading state:",{isLoading:q,hasUiConfiguration:!!_});return F}if(z)console.log("[PieRoot] UI configuration loaded successfully:",_),console.log("[PieRoot] Rendering UI with configuration");return K(k.Provider,{value:Y,children:K(A.Provider,{value:W,children:K(E.Provider,{value:V,children:K(j.Provider,{value:$??K(x$,{}),children:K(DU,{children:K(FU,{children:J?K(s,{uiConfig:_}):K("form",{id:"piedata_global_form",action:X+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:K(s,{uiConfig:_})})})})})})})})},w$=(U)=>{let $=x(()=>new A$,[]),H=U.queryClient??$;return K(_U.Provider,{value:U.onNavigate,children:K(d.Provider,{value:U.config,children:K(P.Provider,{value:U.onError,children:K(E$,{client:H,children:K(N$,{...U})})})})})},k$=w$;import{useEffect as MU,useState as S$}from"react";import{useContext as n,useEffect as i,useRef as b$}from"react";import{jsx as C$,jsxs as v$,Fragment as f$}from"react/jsx-runtime";var y$=({card:U,data:$,children:H,useSocketioSupport:Z=!1,useCentrifugeSupport:I=!1,useMittSupport:J=!1,centrifugeChannel:X=void 0,methods:B=void 0,stored:z=void 0})=>{let D=ZU(),Y=b$(B);if(Y.current=B,D)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:Z,centrifuge:I,mitt:J,centrifugeChannel:X}),console.log("[PieCard] Methods:",B?Object.keys(B):"none"),console.log("[PieCard] Has children:",!!H);let W=n(A),V=n(E),T=n(k);if(i(()=>{if(!W||!Z||!Y.current||!$.name){if(D&&Z)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!W,useSocketioSupport:Z,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let q=Object.keys(Y.current??{}).map((G)=>{let F=`pie${G}_${$.name}`;if(D)console.log(`[PieCard] Socket.IO registering event: ${F}`);let L=(O)=>{Y.current?.[G]?.(O)};return W.on(F,L),[F,L]});return()=>{q.forEach(([G,F])=>{if(D)console.log(`[PieCard] Socket.IO unregistering event: ${G}`);W.off(G,F)})}},[W,$.name,Z]),i(()=>{if(!V||!I||!X||!$.name){if(D&&I)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!V,useCentrifugeSupport:I,hasCentrifugeChannel:!!X,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let q=Object.keys(Y.current??{}).map((G)=>{let F=`pie${G}_${$.name}_${X}`;if(D)console.log(`[PieCard] Centrifuge subscribing to channel: ${F}`);let L=V.newSubscription(F);return L.on("publication",(O)=>{if(D)console.log(`[PieCard] Centrifuge received data on ${F}:`,O.data);Y.current?.[G]?.(O.data)}),L.subscribe(),L});return()=>{q.forEach((G)=>{if(D)console.log("[PieCard] Centrifuge unsubscribing from channel");G.unsubscribe(),V.removeSubscription(G)})}},[V,X,$.name,I]),i(()=>{if(!T||!J||!$.name){if(D&&J)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!T,useMittSupport:J,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let _=Object.keys(Y.current??{}),q={};return _.forEach((G)=>{let F=`pie${G}_${$.name}`,L=(O)=>{if(D)console.log(`[PieCard] Mitt registering event: ${F}`);Y.current?.[G]?.(O)};q[F]=L,T.on(F,L)}),()=>{Object.entries(q).forEach(([G,F])=>{if(D)console.log(`[PieCard] Mitt unregistering event: ${G}`);T.off(G,F)})}},[T,$.name,J]),D)console.log("[PieCard] Rendering complete, returning children");if(z!==void 0)return v$(f$,{children:[C$("input",{type:"hidden",name:$.name,value:JSON.stringify(z)}),H]});return H},c=y$;import{jsx as AU}from"react/jsx-runtime";var g$=({data:U})=>{let{name:$,key:H,value:Z,useSocketioSupport:I,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:B}=U,[z,D]=S$(Z);return MU(()=>{D(Z)},[Z]),MU(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.CloudStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),AU(c,{card:"CloudStorageCard",data:U,useSocketioSupport:I,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:B,methods:{update:({value:Y})=>{D(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.CloudStorage;if(Y)Y.removeItem(H);D("")}},children:AU("input",{type:"hidden",id:$,name:$,value:z})})},EU=g$;var m$=g({name:"CloudStorageCard",component:EU,metadata:{author:"PieData"}});import{useEffect as jU,useState as h$}from"react";import{jsx as PU}from"react/jsx-runtime";var p$=({data:U})=>{let{name:$,key:H,value:Z,useSocketioSupport:I,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:B}=U,[z,D]=h$(Z);return jU(()=>{D(Z)},[Z]),jU(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.SecureStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),PU(c,{card:"SecureStorageCard",data:U,useSocketioSupport:I,useCentrifugeSupport:J,useMittSupport:X,centrifugeChannel:B,methods:{update:({value:Y})=>{D(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.SecureStorage;if(Y)Y.removeItem(H);D("")}},children:PU("input",{type:"hidden",id:$,name:$,value:z})})},NU=p$;var c$=g({name:"SecureStorageCard",component:NU,metadata:{author:"PieData"}});export{h as useWebApp,q$ as useInitData,c$ as SecureStorageCard,k$ as PieTelegramRoot,m$ as CloudStorageCard};