@swarm.ing/pieui 3.0.8 → 3.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -175823,6 +175823,7 @@ var require_tsconfig4 = __commonJS((exports2, module2) => {
175823
175823
  lib: ["es2018"],
175824
175824
  module: "commonjs",
175825
175825
  target: "es2018",
175826
+ types: ["node"],
175826
175827
  strict: true,
175827
175828
  esModuleInterop: true,
175828
175829
  skipLibCheck: true,
@@ -177609,6 +177610,7 @@ var require_acorn = __commonJS((exports2, module2) => {
177609
177610
  allowHashBang: false,
177610
177611
  checkPrivateFields: true,
177611
177612
  locations: false,
177613
+ startLocation: null,
177612
177614
  onToken: null,
177613
177615
  onComment: null,
177614
177616
  ranges: false,
@@ -177694,14 +177696,19 @@ Defaulting to 2020, but this will stop working in the future.`);
177694
177696
  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
177695
177697
  this.input = String(input);
177696
177698
  this.containsEsc = false;
177697
- if (startPos) {
177698
- this.pos = startPos;
177699
+ this.pos = startPos || 0;
177700
+ this.curLine = 1;
177701
+ if (options.startLocation) {
177702
+ this.lineStart = this.pos - options.startLocation.column;
177703
+ this.curLine = options.startLocation.line;
177704
+ } else if (startPos) {
177699
177705
  this.lineStart = this.input.lastIndexOf(`
177700
177706
  `, startPos - 1) + 1;
177701
- this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
177707
+ if (this.options.locations) {
177708
+ this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
177709
+ }
177702
177710
  } else {
177703
- this.pos = this.lineStart = 0;
177704
- this.curLine = 1;
177711
+ this.lineStart = 0;
177705
177712
  }
177706
177713
  this.type = types$1.eof;
177707
177714
  this.value = null;
@@ -179728,7 +179735,7 @@ Defaulting to 2020, but this will stop working in the future.`);
179728
179735
  expr = this.finishNode(node$1, "UpdateExpression");
179729
179736
  }
179730
179737
  }
179731
- if (!incDec && this.eat(types$1.starstar)) {
179738
+ if (!incDec && !(expr.type === "ArrowFunctionExpression" && expr.start === startPos) && this.eat(types$1.starstar)) {
179732
179739
  if (sawUnary) {
179733
179740
  this.unexpected(this.lastTokStart);
179734
179741
  } else {
@@ -182647,7 +182654,7 @@ Defaulting to 2020, but this will stop working in the future.`);
182647
182654
  }
182648
182655
  return this.finishToken(type, word);
182649
182656
  };
182650
- var version = "8.17.0";
182657
+ var version = "8.18.0";
182651
182658
  Parser.acorn = {
182652
182659
  Parser,
182653
182660
  version,
@@ -199637,6 +199644,156 @@ var writeIfChanged = (filePath, contents) => {
199637
199644
  import_node_fs21.default.mkdirSync(import_node_path21.default.dirname(filePath), { recursive: true });
199638
199645
  import_node_fs21.default.writeFileSync(filePath, contents, "utf8");
199639
199646
  };
199647
+ var tailwindMajor = (frontendRoot) => {
199648
+ try {
199649
+ const pkg = import_node_path21.default.join(frontendRoot, "node_modules", "tailwindcss", "package.json");
199650
+ const { version } = JSON.parse(import_node_fs21.default.readFileSync(pkg, "utf8"));
199651
+ return parseInt(String(version).split(".")[0], 10) || 0;
199652
+ } catch {
199653
+ return 0;
199654
+ }
199655
+ };
199656
+ var findTailwindConfig = (frontendRoot) => {
199657
+ for (const name of [
199658
+ "tailwind.config.js",
199659
+ "tailwind.config.cjs",
199660
+ "tailwind.config.mjs",
199661
+ "tailwind.config.ts"
199662
+ ]) {
199663
+ const candidate = import_node_path21.default.join(frontendRoot, name);
199664
+ if (import_node_fs21.default.existsSync(candidate))
199665
+ return candidate;
199666
+ }
199667
+ return null;
199668
+ };
199669
+ var packageType = (frontendRoot) => {
199670
+ try {
199671
+ const pkg = JSON.parse(import_node_fs21.default.readFileSync(import_node_path21.default.join(frontendRoot, "package.json"), "utf8"));
199672
+ return pkg.type === "module" ? "module" : "commonjs";
199673
+ } catch {
199674
+ return "commonjs";
199675
+ }
199676
+ };
199677
+ var scaffoldTailwindV3 = (frontendRoot, dir) => {
199678
+ if (tailwindMajor(frontendRoot) !== 3)
199679
+ return;
199680
+ const config = findTailwindConfig(frontendRoot);
199681
+ if (!config)
199682
+ return;
199683
+ writeIfChanged(import_node_path21.default.join(dir, "postcss.config.js"), `// The harness is a separate Next app, so it needs its own PostCSS config —
199684
+ // without it the project's \`@tailwind\` directives are never processed and the
199685
+ // preview renders completely unstyled.
199686
+ module.exports = { plugins: { tailwindcss: {}, autoprefixer: {} } }
199687
+ `);
199688
+ if (config.endsWith(".ts")) {
199689
+ console.log(`[pieui] ${import_node_path21.default.basename(config)} cannot be re-exported from the ` + `harness; if the preview renders unstyled, make its \`content\` ` + `globs absolute.`);
199690
+ return;
199691
+ }
199692
+ const rewrite = `const toAbsolute = (glob) =>
199693
+ typeof glob === 'string' && !isAbsolute(glob)
199694
+ ? join(projectRoot, glob.replace(/^\\.\\//, ''))
199695
+ : glob
199696
+
199697
+ const declared = Array.isArray(base.content)
199698
+ ? base.content
199699
+ : (base.content && base.content.files) || []
199700
+ `;
199701
+ const banner = `// Tailwind v3 resolves \`content\` globs against the build CWD, which for this
199702
+ // harness is this directory — the project's own relative globs would match
199703
+ // nothing and no utilities would be emitted. Re-export the project's config
199704
+ // (theme, plugins and all) with every relative glob made absolute.
199705
+ `;
199706
+ const asEsm = config.endsWith(".mjs") || packageType(frontendRoot) === "module";
199707
+ if (asEsm) {
199708
+ writeIfChanged(import_node_path21.default.join(dir, "tailwind.config.mjs"), `${banner}import { isAbsolute, join } from 'node:path'
199709
+ import base from '../../${import_node_path21.default.basename(config)}'
199710
+
199711
+ const projectRoot = new URL('../../', import.meta.url).pathname
199712
+
199713
+ ${rewrite}
199714
+ export default { ...base, content: declared.map(toAbsolute) }
199715
+ `);
199716
+ return;
199717
+ }
199718
+ writeIfChanged(import_node_path21.default.join(dir, "tailwind.config.js"), `${banner}const { isAbsolute, join, resolve } = require('node:path')
199719
+
199720
+ const projectRoot = resolve(__dirname, '..', '..')
199721
+ const base = require(join(projectRoot, '${import_node_path21.default.basename(config)}'))
199722
+
199723
+ ${rewrite}
199724
+ module.exports = { ...base, content: declared.map(toAbsolute) }
199725
+ `);
199726
+ };
199727
+ var linkPublicAssets = (frontendRoot, dir) => {
199728
+ const source = import_node_path21.default.join(frontendRoot, "public");
199729
+ if (!import_node_fs21.default.existsSync(source))
199730
+ return;
199731
+ const target = import_node_path21.default.join(dir, "public");
199732
+ try {
199733
+ let existing = null;
199734
+ try {
199735
+ existing = import_node_fs21.default.lstatSync(target);
199736
+ } catch {
199737
+ existing = null;
199738
+ }
199739
+ if (existing) {
199740
+ if (existing.isSymbolicLink() && import_node_path21.default.resolve(dir, import_node_fs21.default.readlinkSync(target)) === source) {
199741
+ return;
199742
+ }
199743
+ import_node_fs21.default.rmSync(target, { recursive: true, force: true });
199744
+ }
199745
+ import_node_fs21.default.symlinkSync(source, target, "dir");
199746
+ } catch (error) {
199747
+ console.log(`[pieui] could not link public/ into the harness (${String(error)}); ` + `static assets may 404 in the preview.`);
199748
+ }
199749
+ };
199750
+ var ENV_TEMPLATE_SUFFIXES = [".example", ".sample", ".template"];
199751
+ var linkEnvFiles = (frontendRoot, dir) => {
199752
+ const isEnvFile = (name) => (name === ".env" || name.startsWith(".env.")) && !ENV_TEMPLATE_SUFFIXES.some((suffix) => name.endsWith(suffix));
199753
+ let names = [];
199754
+ try {
199755
+ names = import_node_fs21.default.readdirSync(frontendRoot).filter(isEnvFile).sort();
199756
+ } catch {
199757
+ return [];
199758
+ }
199759
+ try {
199760
+ for (const stale of import_node_fs21.default.readdirSync(dir)) {
199761
+ if (!isEnvFile(stale) || names.includes(stale))
199762
+ continue;
199763
+ const target = import_node_path21.default.join(dir, stale);
199764
+ if (import_node_fs21.default.lstatSync(target).isSymbolicLink())
199765
+ import_node_fs21.default.rmSync(target);
199766
+ }
199767
+ } catch {}
199768
+ const linked = [];
199769
+ for (const name of names) {
199770
+ const source = import_node_path21.default.join(frontendRoot, name);
199771
+ const target = import_node_path21.default.join(dir, name);
199772
+ try {
199773
+ if (!import_node_fs21.default.statSync(source).isFile())
199774
+ continue;
199775
+ let existing = null;
199776
+ try {
199777
+ existing = import_node_fs21.default.lstatSync(target);
199778
+ } catch {
199779
+ existing = null;
199780
+ }
199781
+ if (existing) {
199782
+ if (existing.isSymbolicLink() && import_node_path21.default.resolve(dir, import_node_fs21.default.readlinkSync(target)) === source) {
199783
+ linked.push(name);
199784
+ continue;
199785
+ }
199786
+ import_node_fs21.default.rmSync(target, { recursive: true, force: true });
199787
+ }
199788
+ import_node_fs21.default.mkdirSync(dir, { recursive: true });
199789
+ import_node_fs21.default.symlinkSync(source, target, "file");
199790
+ linked.push(name);
199791
+ } catch (error) {
199792
+ console.log(`[pieui] could not link ${name} into the harness ` + `(${String(error)}); its variables stay unset in the preview.`);
199793
+ }
199794
+ }
199795
+ return linked;
199796
+ };
199640
199797
  var scaffoldHarness = (frontendRoot, registryName, hasProviders) => {
199641
199798
  const dir = import_node_path21.default.join(frontendRoot, REGISTRY_DIR);
199642
199799
  writeIfChanged(import_node_path21.default.join(dir, "package.json"), JSON.stringify({ name: "pie-registry-preview", version: "0.0.0", private: true }, null, 2) + `
@@ -199820,10 +199977,34 @@ export default function PreviewClient() {
199820
199977
  )
199821
199978
  }
199822
199979
  `);
199980
+ scaffoldTailwindV3(frontendRoot, dir);
199981
+ linkPublicAssets(frontendRoot, dir);
199982
+ const envFiles = linkEnvFiles(frontendRoot, dir);
199983
+ if (envFiles.length) {
199984
+ console.log(`[pieui] env: ${envFiles.join(", ")}`);
199985
+ }
199823
199986
  writeIfChanged(import_node_path21.default.join(dir, ".gitignore"), `*
199824
199987
  `);
199825
199988
  return dir;
199826
199989
  };
199990
+ var liveHarness = (dir) => {
199991
+ let lock;
199992
+ try {
199993
+ lock = JSON.parse(import_node_fs21.default.readFileSync(import_node_path21.default.join(dir, ".next", "dev", "lock"), "utf8"));
199994
+ } catch {
199995
+ return null;
199996
+ }
199997
+ const { pid, appUrl } = lock;
199998
+ if (typeof pid !== "number" || typeof appUrl !== "string")
199999
+ return null;
200000
+ try {
200001
+ process.kill(pid, 0);
200002
+ } catch (err) {
200003
+ if (err.code !== "EPERM")
200004
+ return null;
200005
+ }
200006
+ return { pid, appUrl };
200007
+ };
199827
200008
  var resolveNextBin = (frontendRoot) => {
199828
200009
  const bin = import_node_path21.default.join(frontendRoot, "node_modules", ".bin", "next");
199829
200010
  if (!import_node_fs21.default.existsSync(bin)) {
@@ -199842,15 +200023,22 @@ var registryCommand = (action, opts = {}) => {
199842
200023
  const dir = scaffoldHarness(frontendRoot, registryName, hasProviders);
199843
200024
  const nextBin = resolveNextBin(frontendRoot);
199844
200025
  const env = { ...process.env };
199845
- if (opts.apiServer) {
199846
- env.PIE_API_SERVER = opts.apiServer;
199847
- env.NEXT_PUBLIC_PIE_API_SERVER = opts.apiServer;
199848
- }
200026
+ env.PIE_API_SERVER = opts.apiServer ?? "";
200027
+ env.NEXT_PUBLIC_PIE_API_SERVER = opts.apiServer ?? "";
199849
200028
  if (action === "dev") {
200029
+ const running = liveHarness(dir);
200030
+ if (running) {
200031
+ console.error(`[pieui] a registry harness already serves ${dir}
200032
+ ` + `[pieui] url: ${running.appUrl}
200033
+ ` + `[pieui] pid: ${running.pid}
200034
+ ` + `[pieui] point the viewer at that url, or stop it first ` + `(kill ${running.pid}).`);
200035
+ process.exitCode = 1;
200036
+ return;
200037
+ }
199850
200038
  const port = opts.port ?? 3210;
199851
200039
  console.log(`[pieui] registry dev → http://localhost:${port}`);
199852
200040
  console.log(`[pieui] harness: ${dir}`);
199853
- console.log(`[pieui] PIE_API_SERVER=${env.PIE_API_SERVER ?? "(unset → /)"}`);
200041
+ console.log(`[pieui] PIE_API_SERVER=${env.PIE_API_SERVER || "(unset → /)"}`);
199854
200042
  const result2 = import_node_child_process6.spawnSync(nextBin, ["dev", "-p", String(port)], {
199855
200043
  cwd: dir,
199856
200044
  stdio: "inherit",
@@ -199863,8 +200051,8 @@ var registryCommand = (action, opts = {}) => {
199863
200051
  }
199864
200052
  return;
199865
200053
  }
199866
- delete env.PIE_API_SERVER;
199867
- delete env.NEXT_PUBLIC_PIE_API_SERVER;
200054
+ env.PIE_API_SERVER = "";
200055
+ env.NEXT_PUBLIC_PIE_API_SERVER = "";
199868
200056
  console.log(`[pieui] registry build (static export) → ${import_node_path21.default.join(dir, OUT_DIRNAME)}`);
199869
200057
  const result = import_node_child_process6.spawnSync(nextBin, ["build"], {
199870
200058
  cwd: dir,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/code/commands/registry.ts"],"names":[],"mappings":"AAyBA,KAAK,eAAe,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA+QD,eAAO,MAAM,eAAe,WAChB,KAAK,GAAG,OAAO,SACjB,eAAe,KACtB,IAyDF,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/code/commands/registry.ts"],"names":[],"mappings":"AAyBA,KAAK,eAAe,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAwiBD,eAAO,MAAM,eAAe,WAChB,KAAK,GAAG,OAAO,SACjB,eAAe,KACtB,IA+EF,CAAA"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{useContext as o,useEffect as m,useRef as c}from"react";import{createContext as mI,useContext as bI}from"react";var g=globalThis,_=(I,U)=>{let Z=Symbol.for(I);if(!(Z in g))g[Z]=U();return g[Z]};var pI=_("@swarm.ing/pieui:context:pieConfig",()=>mI(null)),vI=()=>{let I=bI(pI);if(!I)throw Error("usePieConfig must be used within PieConfigProvider");return I};var y=()=>{let{enableRenderingLog:I}=vI();return I},UI=y;import{createContext as hI}from"react";import{Centrifuge as fT}from"centrifuge";var LT=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var gI=_("@swarm.ing/pieui:context:centrifuge",()=>hI(null)),TI=gI;import{io as NT}from"socket.io-client";import{createContext as oI}from"react";var yT=_("@swarm.ing/pieui:socket-cache",()=>new Map);var cI=_("@swarm.ing/pieui:context:socket",()=>oI(null)),zI=cI;import mT from"mitt";import{createContext as lI,useCallback as vT,useContext as hT}from"react";var uI=_("@swarm.ing/pieui:context:mitt",()=>lI(null));var S=uI;function ZI(I){return I.wasRecovering===!0&&I.recovered===!1}function BI(I){return I.recoverable===!1}function HI(I,U,Z){let z=I.getSubscription(U);if(z)return{subscription:z,createdHere:!1};return{subscription:I.newSubscription(U,Z),createdHere:!0}}import{useMemo as dT}from"react";var $I=new Map,qI=(I,U)=>{$I.set(I,U)},OI=(I)=>{$I.delete(I)};import{jsx as rI,jsxs as sI,Fragment as iI}from"react/jsx-runtime";var dI=({card:I,data:U,children:Z,useSocketioSupport:z=!1,useCentrifugeSupport:B=!1,useMittSupport:T=!1,centrifugeChannel:$=void 0,methods:O=void 0,stored:q=void 0,onResync:Q=void 0})=>{let X=UI(),G=c(O);G.current=O;let D=c(Q);D.current=Q;let Y=c(q);Y.current=q;let J=typeof q==="function";if(m(()=>{if(!J)return;let L=U.name;return qI(L,()=>[JSON.stringify(Y.current())]),()=>OI(L)},[J,U.name]),X)console.log("[PieCard] Rendering card:",I),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:z,centrifuge:B,mitt:T,centrifugeChannel:$}),console.log("[PieCard] Methods:",O?Object.keys(O):"none"),console.log("[PieCard] Has children:",!!Z);let V=o(zI),A=o(TI),R=o(S);if(m(()=>{if(!V||!z||!G.current||!U.name){if(X&&z)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:z,hasMethods:!!G.current,hasDataName:!!U?.name});return}let f=Object.keys(G.current??{}).map((H)=>{let P=`pie${H}_${U.name}`;if(X)console.log(`[PieCard] Socket.IO registering event: ${P}`);let w=(N)=>{G.current?.[H]?.(N)};return V.on(P,w),[P,w]});return()=>{f.forEach(([H,P])=>{if(X)console.log(`[PieCard] Socket.IO unregistering event: ${H}`);V.off(H,P)})}},[V,U.name,z]),m(()=>{if(!A||!B||!$||!U.name){if(X&&B)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!A,useCentrifugeSupport:B,hasCentrifugeChannel:!!$,hasMethods:!!G.current,hasDataName:!!U?.name});return}let f=Object.keys(G.current??{}).map((H)=>{let P=`pie${H}_${U.name}_${$}`;if(X)console.log(`[PieCard] Centrifuge subscribing to channel: ${P}`);let{subscription:w,createdHere:N}=HI(A,P,{recoverable:!0,positioned:!0}),e=(k)=>{if(X)console.log(`[PieCard] Centrifuge received data on ${P}:`,k.data);G.current?.[H]?.(k.data)},II=(k)=>{if(BI(k))console.warn(`[PieCard] Centrifuge channel ${P} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(ZI(k)){if(X)console.log(`[PieCard] Centrifuge recovery gap on ${P}; requesting resync`);D.current?.({channel:P,reason:"gap"})}};return w.on("publication",e),w.on("subscribed",II),w.subscribe(),{subscription:w,createdHere:N,onPublication:e,onSubscribed:II}});return()=>{f.forEach(({subscription:H,createdHere:P,onPublication:w,onSubscribed:N})=>{if(X)console.log("[PieCard] Centrifuge unsubscribing from channel");if(H.off("publication",w),H.off("subscribed",N),P)H.unsubscribe(),A.removeSubscription(H)})}},[A,$,U.name,B]),m(()=>{if(!R||!T||!U.name){if(X&&T)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!R,useMittSupport:T,hasMethods:!!G.current,hasDataName:!!U?.name});return}let L=Object.keys(G.current??{}),f={};return L.forEach((H)=>{let P=`pie${H}_${U.name}`,w=(N)=>{if(X)console.log(`[PieCard] Mitt registering event: ${P}`);G.current?.[H]?.(N)};f[P]=w,R.on(P,w)}),()=>{Object.entries(f).forEach(([H,P])=>{if(X)console.log(`[PieCard] Mitt unregistering event: ${H}`);R.off(H,P)})}},[R,U.name,T]),X)console.log("[PieCard] Rendering complete, returning children");if(q!==void 0&&!J)return sI(iI,{children:[rI("input",{type:"hidden",name:U.name,value:JSON.stringify(q)}),Z]});return Z},F=dI;import{lazy as nI}from"react";var x=new Map;function aI(I,U){return U.catch(()=>{if(x.get(I)===U)x.delete(I)}),x.set(I,U),U}function GI(I,U){return nI(()=>{if(x.has(U))return x.get(U);return aI(U,I().then((Z)=>Z))})}var JI=_("@swarm.ing/pieui:component-registry",()=>new Map),tI=(I)=>{if(!I.name)throw Error("Component registration requires a name");if(!I.component&&!I.loader)throw Error(`Component "${I.name}" requires component or loader`);let U={name:I.name,component:I.component,loader:I.loader,metadata:I.metadata,fallback:I.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=GI(U.loader,I.name),U.isLazy=!0;return U};function W(I){let U=tI(I);return JI.set(U.name,U),U.component}var b=(I)=>{return JI.get(I)};import{useContext as QI,memo as GU}from"react";import{createContext as eI}from"react";import{jsx as TU,Fragment as UU}from"react/jsx-runtime";var IU=_("@swarm.ing/pieui:context:fallback",()=>eI(TU(UU,{}))),C=IU;import{createContext as zU}from"react";var ZU=_("@swarm.ing/pieui:context:lazyError",()=>zU(void 0)),p=ZU;import{Component as BU,Suspense as HU}from"react";import{jsx as OU}from"react/jsx-runtime";var $U=2,qU=400;class j extends BU{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(I){if(this.props.onError?.(I),this.state.attempt<$U){let U=qU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},U)}}componentDidUpdate(I){if(I.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 OU(HU,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as l}from"react/jsx-runtime";function JU({uiConfig:I,setUiAjaxConfiguration:U}){let Z=QI(C),z=QI(p),B=y();if(B)console.log("[UI] Rendering component:",I.card),console.log("[UI] Component data:",I.data),console.log("[UI] Component content:",I.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let T=b(I.card);if(!T?.component){if(B)console.warn(`[UI] Component not found in registry: ${I.card}`),console.log("[UI] Returning fallback component");return Z}if(B)console.log("[UI] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata});let $=T.component,O=l($,{data:I.data,content:I.content,setUiAjaxConfiguration:U});if(T.isLazy){if(B)console.log("[UI] Rendering lazy component with Suspense:",T.name);return l(j,{name:T.name,fallback:T.fallback?l(T.fallback,{}):Z,onError:z,children:O})}if(B)console.log("[UI] Rendering component directly:",T.name);return O}var M=GU(JU);import{useContext as XI}from"react";import{createContext as QU}from"react";var XU=_("@swarm.ing/pieui:context:uiRenderer",()=>QU(null)),K=XU;import{jsx as v}from"react/jsx-runtime";function YI({uiConfig:I,setUiAjaxConfiguration:U}){let Z=XI(C),z=XI(p),B=y();if(B)console.log("[UILoading] Rendering fallback for:",I.card),console.log("[UILoading] Component data:",I.data),console.log("[UILoading] Component content:",I.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let T=b(I.card);if(!T?.component){if(B)console.warn(`[UILoading] Component not found in registry: ${I.card}`),console.log("[UILoading] Returning fallback component");return Z}if(B)console.log("[UILoading] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata,hasFallback:!!T.fallback});if(T.fallback){if(B)console.log("[UILoading] Rendering fallback for:",T.name);let q=T.fallback;return v(q,{})}if(B)console.log("[UILoading] No fallback, rendering full component:",T.name);let $=T.component,O=v(K.Provider,{value:YI,children:v($,{data:I.data,content:I.content,setUiAjaxConfiguration:U})});if(T.isLazy)return v(j,{name:T.name,fallback:Z,onError:z,children:O});return O}var YU=YI;import{useContext as PU}from"react";import{jsx as u}from"react/jsx-runtime";var WU=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,sx:B}=I,T=PU(K)??M;return u(F,{card:z,data:I,children:u("div",{style:B,id:z,children:U.map(($,O)=>{return u(T,{uiConfig:$,setUiAjaxConfiguration:Z},`children-${O}`)})})})},PI=WU;var FU=W({name:"SequenceCard",component:PI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as DU}from"react";import{jsx as WI}from"react/jsx-runtime";var _U=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z}=I,B=DU(K)??M;return WI(F,{card:z,data:I,children:U.map((T,$)=>{return WI(B,{uiConfig:T,setUiAjaxConfiguration:Z},`children-${$}`)})})},FI=_U;var VU=W({name:"UnionCard",component:FI,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as fU,useState as AU}from"react";import LU from"html-react-parser";import{useCallback as h,useEffect as wU,useRef as d,useState as KU}from"react";function MU(){let I=new AudioContext,U=I.createOscillator(),Z=U.connect(I.createMediaStreamDestination());U.start();let z=Z.stream.getAudioTracks()[0];return z.enabled=!1,z}function i(I=null,U){let[Z,z]=KU(!1),B=d(null),T=d(null),$=d(null),O=h(async(G,D=!0)=>{if(B.current)q();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")z(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))z(!1)},Y.ontrack=(H)=>{if(I)I.srcObject=H.streams[0]},D){let H=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack(H.getTracks()[0],H)}else{let H=MU();Y.addTrack(H)}let J=Y.createDataChannel("oai-events");T.current=J,$.current=new Promise((H)=>{J.addEventListener("open",()=>{H()})});let V=await Y.createOffer();await Y.setLocalDescription(V);let f=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:V.sdp,headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:f}),B.current=Y,await $.current},[I]),q=h(()=>{let G=T.current;if(G)G.close();B.current?.getSenders()?.forEach((D)=>D.track?.stop()),B.current?.close(),z(!1),B.current=null,T.current=null,$.current=null},[I]),Q=h((G)=>{let D=T.current;if(!D){console.error("Data channel is not ready",G);return}let Y=new Date().toLocaleTimeString();if(G.event_id=G.event_id||crypto.randomUUID(),D.send(JSON.stringify(G)),!G.timestamp)G.timestamp=Y;U?.(G)},[U,I]),X=h((G)=>{if(!T.current){console.error("Data channel is not ready");return}let Y=()=>{Q({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:G}]}}),Q({type:"response.create"})};if($.current)$.current.then(Y);else Y()},[U,I]);return wU(()=>{let G=T.current;if(!G)return;let D=(Y)=>{let J=JSON.parse(Y.data);if(!J.timestamp)J.timestamp=new Date().toLocaleTimeString();U?.(J)};return G.addEventListener("message",D),()=>{G.removeEventListener("message",D)}},[U,I]),{isSessionActive:Z,startSession:O,stopSession:q,sendTextMessage:X}}import{jsx as CU}from"react/jsx-runtime";var RU=({data:I})=>{let{html:U,useSocketioSupport:Z,useCentrifugeSupport:z,useMittSupport:B,centrifugeChannel:T}=I,[$,O]=AU(U),{isSessionActive:q,startSession:Q,sendTextMessage:X}=i(null,(J)=>{if(console.log(J.type,J.type==="response.output_text.delta"&&J.delta),J.type==="response.output_text.delta"&&J.delta)O((V)=>V+J.delta)});return fU(()=>{O(U)},[U]),CU(F,{card:"HTMLEmbedCard",data:I,methods:{update:(J)=>{O(J.value)},generateUsingAI:async(J)=>{try{if(!q&&J.token)await Q(J.token,!1);X(J.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(J)=>{if(!q&&J.token)await Q(J.token,!1)}},useCentrifugeSupport:z,useSocketioSupport:Z,useMittSupport:B,centrifugeChannel:T,children:LU($)})},DI=RU;var NU=W({name:"HTMLEmbedCard",component:DI,metadata:{author:"Swarm.ing"}});import{useEffect as jU,useState as EU}from"react";import{jsx as _I}from"react/jsx-runtime";var kU=({data:I})=>{let{name:U,value:Z,useSocketioSupport:z,useCentrifugeSupport:B,useMittSupport:T,centrifugeChannel:$}=I,[O,q]=EU(Z);return jU(()=>{q(Z)},[Z]),_I(F,{card:"HiddenCard",data:I,useSocketioSupport:z,useCentrifugeSupport:B,useMittSupport:T,centrifugeChannel:$,methods:{update:({value:Q})=>{q(Q)}},children:_I("input",{type:"hidden",id:U,name:U,value:O})})},VI=kU;var yU=W({name:"HiddenCard",component:VI,metadata:{author:"Swarm.ing"}});import{useContext as wI,useEffect as mU}from"react";import{createContext as xU}from"react";var SU=_("@swarm.ing/pieui:context:navigate",()=>xU(void 0)),E=SU;import{jsx as vU,Fragment as pU}from"react/jsx-runtime";var bU=({data:I})=>{let{url:U}=I,Z=wI(E),z=wI(C);return mU(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else Z?.(U)},[U,Z]),vU(pU,{children:z})},KI=bU;var hU=W({name:"AutoRedirectCard",component:KI,metadata:{author:"Swarm.ing"}});import{Bounce as gU,Slide as oU,Zoom as cU,Flip as lU}from"react-toastify";import{toast as uU,ToastContainer as dU}from"react-toastify";import{useContext as iU,useMemo as rU,useRef as sU}from"react";import{jsx as r,Fragment as UT}from"react/jsx-runtime";var nU={bounce:gU,slide:oU,zoom:cU,flip:lU},aU=(I)=>{let U={...I,type:I.alertType,transition:I.transition?nU[I.transition]:void 0,position:I.position??"bottom-right",autoClose:I.autoClose??3000,style:{backgroundColor:"black",...I.sx}};uU(I.message,U)},tU=(I)=>{console.log("Log event",I)},eU=(I)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(I.title,{body:I.message??I.subtitle,icon:I.icon,silent:I.silent})}catch(z){console.error("[IOEventsCard] Failed to show notification",z)}},Z=window.Notification.permission;if(Z==="granted"){U();return}if(Z==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((z)=>{if(z==="granted")U()})},IT=({data:I})=>{let{useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:B}=I,T=iU(E),$=sU(T);$.current=T;let O=rU(()=>({alert:aU,log:tU,push:eU,redirect:(q)=>{if(q.to){let Q=q.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else $.current?.(Q)}else window.location.reload()},reload:(q)=>{if(q.to){let Q=q.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else $.current?.(Q)}else window.location.reload()}}),[]);return r(UT,{children:r(F,{card:"IOEventsCard",data:I,useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:B,methods:O,children:r(dU,{})})})},MI=IT;var TT=W({name:"IOEventsCard",component:MI,metadata:{author:"Swarm.ing"}});import{useEffect as fI,useState as zT}from"react";import{jsx as AI}from"react/jsx-runtime";var ZT=({data:I})=>{let{name:U,key:Z,value:z,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:$,centrifugeChannel:O}=I,[q,Q]=zT(z);return fI(()=>{Q(z)},[z]),fI(()=>{if(typeof window>"u")return;sessionStorage.setItem(Z,q)},[Z,q]),AI(F,{card:"SessionStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:$,centrifugeChannel:O,methods:{update:({value:X})=>{Q(X)},remove:()=>{sessionStorage.removeItem(Z),Q("")}},children:AI("input",{type:"hidden",id:U,name:U,value:q})})},LI=ZT;var BT=W({name:"SessionStorageCard",component:LI,metadata:{author:"PieData"}});import{useEffect as RI,useState as HT}from"react";import{jsx as CI}from"react/jsx-runtime";var $T=({data:I})=>{let{name:U,key:Z,value:z,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:$,centrifugeChannel:O}=I,[q,Q]=HT(z);return RI(()=>{Q(z)},[z]),RI(()=>{if(typeof window>"u")return;localStorage.setItem(Z,q)},[Z,q]),CI(F,{card:"DeviceStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:$,centrifugeChannel:O,methods:{update:({value:X})=>{Q(X)},remove:()=>{localStorage.removeItem(Z),Q("")}},children:CI("input",{type:"hidden",id:U,name:U,value:q})})},NI=$T;var qT=W({name:"DeviceStorageCard",component:NI,metadata:{author:"PieData"}});import{useCallback as s,useContext as n,useEffect as OT,useRef as GT,useState as jI}from"react";import{jsx as EI}from"react/jsx-runtime";var JT=({data:I,content:U})=>{let{useLoader:Z,noReturn:z,returnType:B,useSocketioSupport:T,useCentrifugeSupport:$,useMittSupport:O,centrifugeChannel:q}=I,Q=n(C),X=n(K)??M,[G,D]=jI(!1),[Y,J]=jI(null),V=GT(U),A=n(S),R=s((H)=>{if(H===null)D(!0);else if(D(!1),!z)V.current=H;if(!z)J(H)},[z]),L=s((H)=>{V.current=H.content,J(H.content)},[]),f=s((H)=>{if(H===null)D(!0);else if(D(!1),!z)for(let P of H)A?.emit(P.name,P.data)},[z,A]);if(OT(()=>{J(U),D(!1)},[U]),!Y&&Z)return Q;return EI(F,{card:"AjaxGroupCard",data:I,methods:{changeContent:L},useSocketioSupport:T,useCentrifugeSupport:$,useMittSupport:O,centrifugeChannel:q,children:EI(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:B==="events"?f:R})})},kI=JT;var QT=W({name:"AjaxGroupCard",component:kI,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as yI}from"react";import{jsx as a}from"react/jsx-runtime";var XT=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,url:B,sx:T}=I,$=yI(E),O=yI(K)??M;return a(F,{card:z,data:I,children:a("div",{style:T,id:z,onClick:(Q)=>{if(B)if(Q.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(B))window.location.href=B;else $?.(B)},children:a(O,{setUiAjaxConfiguration:Z,uiConfig:U})})})},xI=XT;var YT=W({name:"BoxCard",component:xI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as PT}from"react";import{jsx as t}from"react/jsx-runtime";var WT=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,sx:B}=I,T=PT(K)??M;return t(F,{card:z,data:I,children:t("div",{style:B,id:z,children:U.map(($,O)=>{return t(T,{uiConfig:$,setUiAjaxConfiguration:Z},`children-${O}`)})})})},SI=WT;var FT=W({name:"OneOfCard",component:SI,metadata:{author:"Swarm.ing",description:"Different variants"}});export{VU as UnionCard,YU as UILoading,M as UI,BT as SessionStorageCard,FU as SequenceCard,F as PieCard,FT as OneOfCard,TT as IOEventsCard,yU as HiddenCard,NU as HTMLEmbedCard,qT as DeviceStorageCard,YT as BoxCard,hU as AutoRedirectCard,QT as AjaxGroupCard};
2
+ import{useContext as c,useEffect as m,useRef as o}from"react";import{createContext as mI,useContext as bI}from"react";var g=globalThis,_=(I,U)=>{let Z=Symbol.for(I);if(!(Z in g))g[Z]=U();return g[Z]};var pI=_("@swarm.ing/pieui:context:pieConfig",()=>mI(null)),vI=()=>{let I=bI(pI);if(!I)throw Error("usePieConfig must be used within PieConfigProvider");return I};var x=()=>{let{enableRenderingLog:I}=vI();return I},UI=x;import{createContext as hI}from"react";import{Centrifuge as fT}from"centrifuge";var LT=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var gI=_("@swarm.ing/pieui:context:centrifuge",()=>hI(null)),TI=gI;import{io as NT}from"socket.io-client";import{createContext as cI}from"react";var xT=_("@swarm.ing/pieui:socket-cache",()=>new Map);var oI=_("@swarm.ing/pieui:context:socket",()=>cI(null)),zI=oI;import mT from"mitt";import{createContext as uI,useCallback as vT,useContext as hT}from"react";var lI=_("@swarm.ing/pieui:context:mitt",()=>uI(null));var S=lI;function ZI(I){return I.wasRecovering===!0&&I.recovered===!1}function BI(I){return I.recoverable===!1}function $I(I,U,Z){let z=I.getSubscription(U);if(z)return{subscription:z,createdHere:!1};return{subscription:I.newSubscription(U,Z),createdHere:!0}}import{useMemo as dT}from"react";var qI=new Map,HI=(I,U)=>{qI.set(I,U)},GI=(I)=>{qI.delete(I)};import{jsx as rI,jsxs as sI,Fragment as iI}from"react/jsx-runtime";var dI=({card:I,data:U,children:Z,useSocketioSupport:z=!1,useCentrifugeSupport:B=!1,useMittSupport:T=!1,centrifugeChannel:q=void 0,methods:G=void 0,stored:H=void 0,onResync:Q=void 0})=>{let X=UI(),J=o(G);J.current=G;let F=o(Q);F.current=Q;let Y=o(H);Y.current=H;let O=typeof H==="function";if(m(()=>{if(!O)return;let L=U.name;return HI(L,()=>[JSON.stringify(Y.current())]),()=>GI(L)},[O,U.name]),X)console.log("[PieCard] Rendering card:",I),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:z,centrifuge:B,mitt:T,centrifugeChannel:q}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!Z);let V=c(zI),A=c(TI),C=c(S);if(m(()=>{if(!V||!z||!J.current||!U.name){if(X&&z)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:z,hasMethods:!!J.current,hasDataName:!!U?.name});return}let f=Object.keys(J.current??{}).map(($)=>{let P=`pie${$}_${U.name}`;if(X)console.log(`[PieCard] Socket.IO registering event: ${P}`);let w=(N)=>{J.current?.[$]?.(N)};return V.on(P,w),[P,w]});return()=>{f.forEach(([$,P])=>{if(X)console.log(`[PieCard] Socket.IO unregistering event: ${$}`);V.off($,P)})}},[V,U.name,z]),m(()=>{if(!A||!B||!q||!U.name){if(X&&B)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!A,useCentrifugeSupport:B,hasCentrifugeChannel:!!q,hasMethods:!!J.current,hasDataName:!!U?.name});return}let f=Object.keys(J.current??{}).map(($)=>{let P=`pie${$}_${U.name}_${q}`;if(X)console.log(`[PieCard] Centrifuge subscribing to channel: ${P}`);let{subscription:w,createdHere:N}=$I(A,P,{recoverable:!0,positioned:!0}),e=(k)=>{if(X)console.log(`[PieCard] Centrifuge received data on ${P}:`,k.data);J.current?.[$]?.(k.data)},II=(k)=>{if(BI(k))console.warn(`[PieCard] Centrifuge channel ${P} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(ZI(k)){if(X)console.log(`[PieCard] Centrifuge recovery gap on ${P}; requesting resync`);F.current?.({channel:P,reason:"gap"})}};return w.on("publication",e),w.on("subscribed",II),w.subscribe(),{subscription:w,createdHere:N,onPublication:e,onSubscribed:II}});return()=>{f.forEach(({subscription:$,createdHere:P,onPublication:w,onSubscribed:N})=>{if(X)console.log("[PieCard] Centrifuge unsubscribing from channel");if($.off("publication",w),$.off("subscribed",N),P)$.unsubscribe(),A.removeSubscription($)})}},[A,q,U.name,B]),m(()=>{if(!C||!T||!U.name){if(X&&T)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!C,useMittSupport:T,hasMethods:!!J.current,hasDataName:!!U?.name});return}let L=Object.keys(J.current??{}),f={};return L.forEach(($)=>{let P=`pie${$}_${U.name}`,w=(N)=>{if(X)console.log(`[PieCard] Mitt registering event: ${P}`);J.current?.[$]?.(N)};f[P]=w,C.on(P,w)}),()=>{Object.entries(f).forEach(([$,P])=>{if(X)console.log(`[PieCard] Mitt unregistering event: ${$}`);C.off($,P)})}},[C,U.name,T]),X)console.log("[PieCard] Rendering complete, returning children");if(H!==void 0&&!O)return sI(iI,{children:[rI("input",{type:"hidden",name:U.name,value:JSON.stringify(H)}),Z]});return Z},D=dI;import{lazy as nI}from"react";var y=new Map;function aI(I,U){return U.catch(()=>{if(y.get(I)===U)y.delete(I)}),y.set(I,U),U}function JI(I,U){return nI(()=>{if(y.has(U))return y.get(U);return aI(U,I().then((Z)=>Z))})}var OI=_("@swarm.ing/pieui:component-registry",()=>new Map),tI=(I)=>{if(!I.name)throw Error("Component registration requires a name");if(!I.component&&!I.loader)throw Error(`Component "${I.name}" requires component or loader`);let U={name:I.name,component:I.component,loader:I.loader,metadata:I.metadata,fallback:I.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=JI(U.loader,I.name),U.isLazy=!0;return U};function W(I){let U=tI(I);return OI.set(U.name,U),U.component}var b=(I)=>{return OI.get(I)};import{useContext as QI,memo as JU}from"react";import{createContext as eI}from"react";import{jsx as TU,Fragment as UU}from"react/jsx-runtime";var IU=_("@swarm.ing/pieui:context:fallback",()=>eI(TU(UU,{}))),R=IU;import{createContext as zU}from"react";var ZU=_("@swarm.ing/pieui:context:lazyError",()=>zU(void 0)),p=ZU;import{Component as BU,Suspense as $U}from"react";import{jsx as GU}from"react/jsx-runtime";var qU=2,HU=400;class j extends BU{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(I){if(this.props.onError?.(I),this.state.attempt<qU){let U=HU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},U)}}componentDidUpdate(I){if(I.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 GU($U,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as u}from"react/jsx-runtime";function OU({uiConfig:I,setUiAjaxConfiguration:U}){let Z=QI(R),z=QI(p),B=x();if(B)console.log("[UI] Rendering component:",I.card),console.log("[UI] Component data:",I.data),console.log("[UI] Component content:",I.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let T=b(I.card);if(!T?.component){if(B)console.warn(`[UI] Component not found in registry: ${I.card}`),console.log("[UI] Returning fallback component");return Z}if(B)console.log("[UI] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata});let q=T.component,G=u(q,{data:I.data,content:I.content,setUiAjaxConfiguration:U});if(T.isLazy){if(B)console.log("[UI] Rendering lazy component with Suspense:",T.name);return u(j,{name:T.name,fallback:T.fallback?u(T.fallback,{}):Z,onError:z,children:G})}if(B)console.log("[UI] Rendering component directly:",T.name);return G}var M=JU(OU);import{useContext as XI}from"react";import{createContext as QU}from"react";var XU=_("@swarm.ing/pieui:context:uiRenderer",()=>QU(null)),K=XU;import{jsx as v}from"react/jsx-runtime";function YI({uiConfig:I,setUiAjaxConfiguration:U}){let Z=XI(R),z=XI(p),B=x();if(B)console.log("[UILoading] Rendering fallback for:",I.card),console.log("[UILoading] Component data:",I.data),console.log("[UILoading] Component content:",I.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let T=b(I.card);if(!T?.component){if(B)console.warn(`[UILoading] Component not found in registry: ${I.card}`),console.log("[UILoading] Returning fallback component");return Z}if(B)console.log("[UILoading] Found component in registry:",{name:T.name,isLazy:T.isLazy,hasMetadata:!!T.metadata,hasFallback:!!T.fallback});if(T.fallback){if(B)console.log("[UILoading] Rendering fallback for:",T.name);let H=T.fallback;return v(H,{})}if(B)console.log("[UILoading] No fallback, rendering full component:",T.name);let q=T.component,G=v(K.Provider,{value:YI,children:v(q,{data:I.data,content:I.content,setUiAjaxConfiguration:U})});if(T.isLazy)return v(j,{name:T.name,fallback:Z,onError:z,children:G});return G}var YU=YI;import{useContext as PU}from"react";import{jsx as l}from"react/jsx-runtime";var WU=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,sx:B}=I,T=PU(K)??M;return l(D,{card:z,data:I,children:l("div",{style:B,id:z,children:U.map((q,G)=>{return l(T,{uiConfig:q,setUiAjaxConfiguration:Z},`children-${G}`)})})})},PI=WU;var DU=W({name:"SequenceCard",component:PI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as FU}from"react";import{jsx as WI}from"react/jsx-runtime";var _U=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z}=I,B=FU(K)??M;return WI(D,{card:z,data:I,children:U.map((T,q)=>{return WI(B,{uiConfig:T,setUiAjaxConfiguration:Z},`children-${q}`)})})},DI=_U;var VU=W({name:"UnionCard",component:DI,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as fU,useState as AU}from"react";import LU from"html-react-parser";import{useCallback as h,useEffect as wU,useRef as d,useState as KU}from"react";function MU(){let I=new AudioContext,U=I.createOscillator(),Z=U.connect(I.createMediaStreamDestination());U.start();let z=Z.stream.getAudioTracks()[0];return z.enabled=!1,z}function i(I=null,U){let[Z,z]=KU(!1),B=d(null),T=d(null),q=d(null),G=h(async(J,F=!0)=>{if(B.current)H();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")z(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))z(!1)},Y.ontrack=($)=>{if(I)I.srcObject=$.streams[0]},F){let $=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack($.getTracks()[0],$)}else{let $=MU();Y.addTrack($)}let O=Y.createDataChannel("oai-events");T.current=O,q.current=new Promise(($)=>{O.addEventListener("open",()=>{$()})});let V=await Y.createOffer();await Y.setLocalDescription(V);let f=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:V.sdp,headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:f}),B.current=Y,await q.current},[I]),H=h(()=>{let J=T.current;if(J)J.close();B.current?.getSenders()?.forEach((F)=>F.track?.stop()),B.current?.close(),z(!1),B.current=null,T.current=null,q.current=null},[I]),Q=h((J)=>{let F=T.current;if(!F){console.error("Data channel is not ready",J);return}let Y=new Date().toLocaleTimeString();if(J.event_id=J.event_id||crypto.randomUUID(),F.send(JSON.stringify(J)),!J.timestamp)J.timestamp=Y;U?.(J)},[U,I]),X=h((J)=>{if(!T.current){console.error("Data channel is not ready");return}let Y=()=>{Q({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:J}]}}),Q({type:"response.create"})};if(q.current)q.current.then(Y);else Y()},[U,I]);return wU(()=>{let J=T.current;if(!J)return;let F=(Y)=>{let O=JSON.parse(Y.data);if(!O.timestamp)O.timestamp=new Date().toLocaleTimeString();U?.(O)};return J.addEventListener("message",F),()=>{J.removeEventListener("message",F)}},[U,I]),{isSessionActive:Z,startSession:G,stopSession:H,sendTextMessage:X}}import{jsx as RU}from"react/jsx-runtime";var CU=({data:I})=>{let{html:U,useSocketioSupport:Z,useCentrifugeSupport:z,useMittSupport:B,centrifugeChannel:T}=I,[q,G]=AU(U),{isSessionActive:H,startSession:Q,sendTextMessage:X}=i(null,(O)=>{if(console.log(O.type,O.type==="response.output_text.delta"&&O.delta),O.type==="response.output_text.delta"&&O.delta)G((V)=>V+O.delta)});return fU(()=>{G(U)},[U]),RU(D,{card:"HTMLEmbedCard",data:I,methods:{update:(O)=>{G(O.value)},generateUsingAI:async(O)=>{try{if(!H&&O.token)await Q(O.token,!1);X(O.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(O)=>{if(!H&&O.token)await Q(O.token,!1)}},useCentrifugeSupport:z,useSocketioSupport:Z,useMittSupport:B,centrifugeChannel:T,children:LU(q)})},FI=CU;var NU=W({name:"HTMLEmbedCard",component:FI,metadata:{author:"Swarm.ing"}});import{useEffect as jU,useState as EU}from"react";import{jsx as _I}from"react/jsx-runtime";var kU=({data:I})=>{let{name:U,value:Z,useSocketioSupport:z,useCentrifugeSupport:B,useMittSupport:T,centrifugeChannel:q}=I,[G,H]=EU(Z);return jU(()=>{H(Z)},[Z]),_I(D,{card:"HiddenCard",data:I,useSocketioSupport:z,useCentrifugeSupport:B,useMittSupport:T,centrifugeChannel:q,methods:{update:({value:Q})=>{H(Q)}},children:_I("input",{type:"hidden",id:U,name:U,value:G})})},VI=kU;var xU=W({name:"HiddenCard",component:VI,metadata:{author:"Swarm.ing"}});import{useContext as wI,useEffect as mU}from"react";import{createContext as yU}from"react";var SU=_("@swarm.ing/pieui:context:navigate",()=>yU(void 0)),E=SU;import{jsx as vU,Fragment as pU}from"react/jsx-runtime";var bU=({data:I})=>{let{url:U}=I,Z=wI(E),z=wI(R);return mU(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else Z?.(U)},[U,Z]),vU(pU,{children:z})},KI=bU;var hU=W({name:"AutoRedirectCard",component:KI,metadata:{author:"Swarm.ing"}});import{Bounce as gU,Slide as cU,Zoom as oU,Flip as uU}from"react-toastify";import{toast as lU,ToastContainer as dU}from"react-toastify";import{useContext as iU,useMemo as rU,useRef as sU}from"react";import{jsx as r,Fragment as UT}from"react/jsx-runtime";var nU={bounce:gU,slide:cU,zoom:oU,flip:uU},aU=(I)=>{let U={...I,type:I.alertType,transition:I.transition?nU[I.transition]:void 0,position:I.position??"bottom-right",autoClose:I.autoClose??3000,style:{backgroundColor:"black",...I.sx}};lU(I.message,U)},tU=(I)=>{console.log("Log event",I)},eU=(I)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(I.title,{body:I.message??I.subtitle,icon:I.icon,silent:I.silent})}catch(z){console.error("[IOEventsCard] Failed to show notification",z)}},Z=window.Notification.permission;if(Z==="granted"){U();return}if(Z==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((z)=>{if(z==="granted")U()})},IT=({data:I})=>{let{useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:B}=I,T=iU(E),q=sU(T);q.current=T;let G=rU(()=>({alert:aU,log:tU,push:eU,redirect:(H)=>{if(H.to){let Q=H.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else q.current?.(Q)}else window.location.reload()},reload:(H)=>{if(H.to){let Q=H.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else q.current?.(Q)}else window.location.reload()}}),[]);return r(UT,{children:r(D,{card:"IOEventsCard",data:I,useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:B,methods:G,children:r(dU,{})})})},MI=IT;var TT=W({name:"IOEventsCard",component:MI,metadata:{author:"Swarm.ing"}});import{useEffect as fI,useState as zT}from"react";import{jsx as AI}from"react/jsx-runtime";var ZT=({data:I})=>{let{name:U,key:Z,value:z,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:q,centrifugeChannel:G}=I,[H,Q]=zT(z);return fI(()=>{Q(z)},[z]),fI(()=>{if(typeof window>"u")return;sessionStorage.setItem(Z,H)},[Z,H]),AI(D,{card:"SessionStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:q,centrifugeChannel:G,methods:{update:({value:X})=>{Q(X)},remove:()=>{sessionStorage.removeItem(Z),Q("")}},children:AI("input",{type:"hidden",id:U,name:U,value:H})})},LI=ZT;var BT=W({name:"SessionStorageCard",component:LI,metadata:{author:"PieData"}});import{useEffect as CI,useState as $T}from"react";import{jsx as RI}from"react/jsx-runtime";var qT=({data:I})=>{let{name:U,key:Z,value:z,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:q,centrifugeChannel:G}=I,[H,Q]=$T(z);return CI(()=>{Q(z)},[z]),CI(()=>{if(typeof window>"u")return;localStorage.setItem(Z,H)},[Z,H]),RI(D,{card:"DeviceStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:T,useMittSupport:q,centrifugeChannel:G,methods:{update:({value:X})=>{Q(X)},remove:()=>{localStorage.removeItem(Z),Q("")}},children:RI("input",{type:"hidden",id:U,name:U,value:H})})},NI=qT;var HT=W({name:"DeviceStorageCard",component:NI,metadata:{author:"PieData"}});import{useCallback as s,useContext as n,useEffect as GT,useRef as JT,useState as jI}from"react";import{jsx as EI}from"react/jsx-runtime";var OT=({data:I,content:U})=>{let{useLoader:Z,noReturn:z,returnType:B,useSocketioSupport:T,useCentrifugeSupport:q,useMittSupport:G,centrifugeChannel:H}=I,Q=n(R),X=n(K)??M,[J,F]=jI(!1),[Y,O]=jI(null),V=JT(U),A=n(S),C=s(($)=>{if($===null)F(!0);else if(F(!1),!z)V.current=$;if(!z)O($)},[z]),L=s(($)=>{V.current=$.content,O($.content)},[]),f=s(($)=>{if($===null)F(!0);else if(F(!1),!z)for(let P of $)A?.emit(P.name,P.data)},[z,A]);if(GT(()=>{O(U),F(!1)},[U]),!Y&&Z)return Q;return EI(D,{card:"AjaxGroupCard",data:I,methods:{changeContent:L},useSocketioSupport:T,useCentrifugeSupport:q,useMittSupport:G,centrifugeChannel:H,children:EI(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:B==="events"?f:C})})},kI=OT;var QT=W({name:"AjaxGroupCard",component:kI,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as xI}from"react";import{jsx as a}from"react/jsx-runtime";var XT=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,url:B,sx:T}=I,q=xI(E),G=xI(K)??M;return a(D,{card:z,data:I,children:a("div",{style:T,id:z,onClick:(Q)=>{if(B)if(Q.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(B))window.location.href=B;else q?.(B)},children:a(G,{setUiAjaxConfiguration:Z,uiConfig:U})})})},yI=XT;var YT=W({name:"BoxCard",component:yI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as PT}from"react";import{jsx as t}from"react/jsx-runtime";var WT=({data:I,content:U,setUiAjaxConfiguration:Z})=>{let{name:z,sx:B}=I,T=PT(K)??M;return t(D,{card:z,data:I,children:t("div",{style:B,id:z,children:U.map((q,G)=>{return t(T,{uiConfig:q,setUiAjaxConfiguration:Z},`children-${G}`)})})})},SI=WT;var DT=W({name:"OneOfCard",component:SI,metadata:{author:"Swarm.ing",description:"Different variants"}});export{VU as UnionCard,YU as UILoading,M as UI,BT as SessionStorageCard,DU as SequenceCard,D as PieCard,DT as OneOfCard,TT as IOEventsCard,xU as HiddenCard,NU as HTMLEmbedCard,HT as DeviceStorageCard,YT as BoxCard,hU as AutoRedirectCard,QT as AjaxGroupCard};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- var DU=Object.create;var{getPrototypeOf:_U,defineProperty:h,getOwnPropertyNames:wI,getOwnPropertyDescriptor:VU}=Object,KI=Object.prototype.hasOwnProperty;var MI=(I,U,z)=>{z=I!=null?DU(_U(I)):{};let T=U||!I||!I.__esModule?h(z,"default",{value:I,enumerable:!0}):z;for(let B of wI(I))if(!KI.call(T,B))h(T,B,{get:()=>I[B],enumerable:!0});return T},VI=new WeakMap,wU=(I)=>{var U=VI.get(I),z;if(U)return U;if(U=h({},"__esModule",{value:!0}),I&&typeof I==="object"||typeof I==="function")wI(I).map((T)=>!KI.call(U,T)&&h(U,T,{get:()=>I[T],enumerable:!(z=VU(I,T))||z.enumerable}));return VI.set(I,U),U};var KU=(I,U)=>{for(var z in U)h(I,z,{get:U[z],enumerable:!0,configurable:!0,set:(T)=>U[z]=()=>T})};var ZT={};KU(ZT,{UnionCard:()=>sI,UILoading:()=>cI,UI:()=>A,SessionStorageCard:()=>qU,SequenceCard:()=>dI,PieCard:()=>W,OneOfCard:()=>FU,IOEventsCard:()=>HU,HiddenCard:()=>UU,HTMLEmbedCard:()=>eI,DeviceStorageCard:()=>GU,BoxCard:()=>YU,AutoRedirectCard:()=>ZU,AjaxGroupCard:()=>QU});module.exports=wU(ZT);var K=require("react");var r=require("react");var OI=globalThis,_=(I,U)=>{let z=Symbol.for(I);if(!(z in OI))OI[z]=U();return OI[z]};var MU=_("@swarm.ing/pieui:context:pieConfig",()=>r.createContext(null)),fU=()=>{let I=r.useContext(MU);if(!I)throw Error("usePieConfig must be used within PieConfigProvider");return I};var g=()=>{let{enableRenderingLog:I}=fU();return I},fI=g;var AI=require("react"),AU=require("centrifuge");var GT=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var LU=_("@swarm.ing/pieui:context:centrifuge",()=>AI.createContext(null)),LI=LU;var RU=require("socket.io-client"),RI=require("react");var YT=_("@swarm.ing/pieui:socket-cache",()=>new Map);var CU=_("@swarm.ing/pieui:context:socket",()=>RI.createContext(null)),CI=CU;var NU=MI(require("mitt")),s=require("react");var jU=_("@swarm.ing/pieui:context:mitt",()=>s.createContext(null));var n=jU;function NI(I){return I.wasRecovering===!0&&I.recovered===!1}function jI(I){return I.recoverable===!1}function EI(I,U,z){let T=I.getSubscription(U);if(T)return{subscription:T,createdHere:!1};return{subscription:I.newSubscription(U,z),createdHere:!0}}var EU=require("react");var kI=new Map,yI=(I,U)=>{kI.set(I,U)},xI=(I)=>{kI.delete(I)};var x=require("react/jsx-runtime"),kU=({card:I,data:U,children:z,useSocketioSupport:T=!1,useCentrifugeSupport:B=!1,useMittSupport:Z=!1,centrifugeChannel:$=void 0,methods:O=void 0,stored:q=void 0,onResync:Q=void 0})=>{let X=fI(),G=K.useRef(O);G.current=O;let D=K.useRef(Q);D.current=Q;let Y=K.useRef(q);Y.current=q;let J=typeof q==="function";if(K.useEffect(()=>{if(!J)return;let N=U.name;return yI(N,()=>[JSON.stringify(Y.current())]),()=>xI(N)},[J,U.name]),X)console.log("[PieCard] Rendering card:",I),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:T,centrifuge:B,mitt:Z,centrifugeChannel:$}),console.log("[PieCard] Methods:",O?Object.keys(O):"none"),console.log("[PieCard] Has children:",!!z);let V=K.useContext(CI),C=K.useContext(LI),j=K.useContext(n);if(K.useEffect(()=>{if(!V||!T||!G.current||!U.name){if(X&&T)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:T,hasMethods:!!G.current,hasDataName:!!U?.name});return}let R=Object.keys(G.current??{}).map((H)=>{let P=`pie${H}_${U.name}`;if(X)console.log(`[PieCard] Socket.IO registering event: ${P}`);let f=(y)=>{G.current?.[H]?.(y)};return V.on(P,f),[P,f]});return()=>{R.forEach(([H,P])=>{if(X)console.log(`[PieCard] Socket.IO unregistering event: ${H}`);V.off(H,P)})}},[V,U.name,T]),K.useEffect(()=>{if(!C||!B||!$||!U.name){if(X&&B)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!C,useCentrifugeSupport:B,hasCentrifugeChannel:!!$,hasMethods:!!G.current,hasDataName:!!U?.name});return}let R=Object.keys(G.current??{}).map((H)=>{let P=`pie${H}_${U.name}_${$}`;if(X)console.log(`[PieCard] Centrifuge subscribing to channel: ${P}`);let{subscription:f,createdHere:y}=EI(C,P,{recoverable:!0,positioned:!0}),DI=(v)=>{if(X)console.log(`[PieCard] Centrifuge received data on ${P}:`,v.data);G.current?.[H]?.(v.data)},_I=(v)=>{if(jI(v))console.warn(`[PieCard] Centrifuge channel ${P} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(NI(v)){if(X)console.log(`[PieCard] Centrifuge recovery gap on ${P}; requesting resync`);D.current?.({channel:P,reason:"gap"})}};return f.on("publication",DI),f.on("subscribed",_I),f.subscribe(),{subscription:f,createdHere:y,onPublication:DI,onSubscribed:_I}});return()=>{R.forEach(({subscription:H,createdHere:P,onPublication:f,onSubscribed:y})=>{if(X)console.log("[PieCard] Centrifuge unsubscribing from channel");if(H.off("publication",f),H.off("subscribed",y),P)H.unsubscribe(),C.removeSubscription(H)})}},[C,$,U.name,B]),K.useEffect(()=>{if(!j||!Z||!U.name){if(X&&Z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!j,useMittSupport:Z,hasMethods:!!G.current,hasDataName:!!U?.name});return}let N=Object.keys(G.current??{}),R={};return N.forEach((H)=>{let P=`pie${H}_${U.name}`,f=(y)=>{if(X)console.log(`[PieCard] Mitt registering event: ${P}`);G.current?.[H]?.(y)};R[P]=f,j.on(P,f)}),()=>{Object.entries(R).forEach(([H,P])=>{if(X)console.log(`[PieCard] Mitt unregistering event: ${H}`);j.off(H,P)})}},[j,U.name,Z]),X)console.log("[PieCard] Rendering complete, returning children");if(q!==void 0&&!J)return x.jsxs(x.Fragment,{children:[x.jsx("input",{type:"hidden",name:U.name,value:JSON.stringify(q)}),z]});return z},W=kU;var SI=require("react"),o=new Map;function yU(I,U){return U.catch(()=>{if(o.get(I)===U)o.delete(I)}),o.set(I,U),U}function mI(I,U){return SI.lazy(()=>{if(o.has(U))return o.get(U);return yU(U,I().then((z)=>z))})}var bI=_("@swarm.ing/pieui:component-registry",()=>new Map),xU=(I)=>{if(!I.name)throw Error("Component registration requires a name");if(!I.component&&!I.loader)throw Error(`Component "${I.name}" requires component or loader`);let U={name:I.name,component:I.component,loader:I.loader,metadata:I.metadata,fallback:I.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=mI(U.loader,I.name),U.isLazy=!0;return U};function F(I){let U=xU(I);return bI.set(U.name,U),U.component}var a=(I)=>{return bI.get(I)};var c=require("react");var pI=require("react");var t=require("react/jsx-runtime"),SU=_("@swarm.ing/pieui:context:fallback",()=>pI.createContext(t.jsx(t.Fragment,{}))),E=SU;var vI=require("react");var mU=_("@swarm.ing/pieui:context:lazyError",()=>vI.createContext(void 0)),e=mU;var II=require("react"),hI=require("react/jsx-runtime"),bU=2,pU=400;class S extends II.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(I){if(this.props.onError?.(I),this.state.attempt<bU){let U=pU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((z)=>({failed:!1,attempt:z.attempt+1}))},U)}}componentDidUpdate(I){if(I.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 hI.jsx(II.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var UI=require("react/jsx-runtime");function vU({uiConfig:I,setUiAjaxConfiguration:U}){let z=c.useContext(E),T=c.useContext(e),B=g();if(B)console.log("[UI] Rendering component:",I.card),console.log("[UI] Component data:",I.data),console.log("[UI] Component content:",I.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let Z=a(I.card);if(!Z?.component){if(B)console.warn(`[UI] Component not found in registry: ${I.card}`),console.log("[UI] Returning fallback component");return z}if(B)console.log("[UI] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata});let $=Z.component,O=UI.jsx($,{data:I.data,content:I.content,setUiAjaxConfiguration:U});if(Z.isLazy){if(B)console.log("[UI] Rendering lazy component with Suspense:",Z.name);return UI.jsx(S,{name:Z.name,fallback:Z.fallback?UI.jsx(Z.fallback,{}):z,onError:T,children:O})}if(B)console.log("[UI] Rendering component directly:",Z.name);return O}var A=c.memo(vU);var GI=require("react");var gI=require("react");var hU=_("@swarm.ing/pieui:context:uiRenderer",()=>gI.createContext(null)),L=hU;var l=require("react/jsx-runtime");function oI({uiConfig:I,setUiAjaxConfiguration:U}){let z=GI.useContext(E),T=GI.useContext(e),B=g();if(B)console.log("[UILoading] Rendering fallback for:",I.card),console.log("[UILoading] Component data:",I.data),console.log("[UILoading] Component content:",I.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let Z=a(I.card);if(!Z?.component){if(B)console.warn(`[UILoading] Component not found in registry: ${I.card}`),console.log("[UILoading] Returning fallback component");return z}if(B)console.log("[UILoading] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata,hasFallback:!!Z.fallback});if(Z.fallback){if(B)console.log("[UILoading] Rendering fallback for:",Z.name);let q=Z.fallback;return l.jsx(q,{})}if(B)console.log("[UILoading] No fallback, rendering full component:",Z.name);let $=Z.component,O=l.jsx(L.Provider,{value:oI,children:l.jsx($,{data:I.data,content:I.content,setUiAjaxConfiguration:U})});if(Z.isLazy)return l.jsx(S,{name:Z.name,fallback:z,onError:T,children:O});return O}var cI=oI;var lI=require("react");var TI=require("react/jsx-runtime"),gU=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,sx:B}=I,Z=lI.useContext(L)??A;return TI.jsx(W,{card:T,data:I,children:TI.jsx("div",{style:B,id:T,children:U.map(($,O)=>{return TI.jsx(Z,{uiConfig:$,setUiAjaxConfiguration:z},`children-${O}`)})})})},uI=gU;var dI=F({name:"SequenceCard",component:uI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var iI=require("react");var JI=require("react/jsx-runtime"),oU=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T}=I,B=iI.useContext(L)??A;return JI.jsx(W,{card:T,data:I,children:U.map((Z,$)=>{return JI.jsx(B,{uiConfig:Z,setUiAjaxConfiguration:z},`children-${$}`)})})},rI=oU;var sI=F({name:"UnionCard",component:rI,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var zI=require("react"),nI=MI(require("html-react-parser"));var M=require("react");function cU(){let I=new AudioContext,U=I.createOscillator(),z=U.connect(I.createMediaStreamDestination());U.start();let T=z.stream.getAudioTracks()[0];return T.enabled=!1,T}function QI(I=null,U){let[z,T]=M.useState(!1),B=M.useRef(null),Z=M.useRef(null),$=M.useRef(null),O=M.useCallback(async(G,D=!0)=>{if(B.current)q();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")T(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))T(!1)},Y.ontrack=(H)=>{if(I)I.srcObject=H.streams[0]},D){let H=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack(H.getTracks()[0],H)}else{let H=cU();Y.addTrack(H)}let J=Y.createDataChannel("oai-events");Z.current=J,$.current=new Promise((H)=>{J.addEventListener("open",()=>{H()})});let V=await Y.createOffer();await Y.setLocalDescription(V);let R=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:V.sdp,headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:R}),B.current=Y,await $.current},[I]),q=M.useCallback(()=>{let G=Z.current;if(G)G.close();B.current?.getSenders()?.forEach((D)=>D.track?.stop()),B.current?.close(),T(!1),B.current=null,Z.current=null,$.current=null},[I]),Q=M.useCallback((G)=>{let D=Z.current;if(!D){console.error("Data channel is not ready",G);return}let Y=new Date().toLocaleTimeString();if(G.event_id=G.event_id||crypto.randomUUID(),D.send(JSON.stringify(G)),!G.timestamp)G.timestamp=Y;U?.(G)},[U,I]),X=M.useCallback((G)=>{if(!Z.current){console.error("Data channel is not ready");return}let Y=()=>{Q({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:G}]}}),Q({type:"response.create"})};if($.current)$.current.then(Y);else Y()},[U,I]);return M.useEffect(()=>{let G=Z.current;if(!G)return;let D=(Y)=>{let J=JSON.parse(Y.data);if(!J.timestamp)J.timestamp=new Date().toLocaleTimeString();U?.(J)};return G.addEventListener("message",D),()=>{G.removeEventListener("message",D)}},[U,I]),{isSessionActive:z,startSession:O,stopSession:q,sendTextMessage:X}}var tI=require("react/jsx-runtime"),lU=({data:I})=>{let{html:U,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:B,centrifugeChannel:Z}=I,[$,O]=zI.useState(U),{isSessionActive:q,startSession:Q,sendTextMessage:X}=QI(null,(J)=>{if(console.log(J.type,J.type==="response.output_text.delta"&&J.delta),J.type==="response.output_text.delta"&&J.delta)O((V)=>V+J.delta)});return zI.useEffect(()=>{O(U)},[U]),tI.jsx(W,{card:"HTMLEmbedCard",data:I,methods:{update:(J)=>{O(J.value)},generateUsingAI:async(J)=>{try{if(!q&&J.token)await Q(J.token,!1);X(J.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(J)=>{if(!q&&J.token)await Q(J.token,!1)}},useCentrifugeSupport:T,useSocketioSupport:z,useMittSupport:B,centrifugeChannel:Z,children:nI.default($)})},aI=lU;var eI=F({name:"HTMLEmbedCard",component:aI,metadata:{author:"Swarm.ing"}});var ZI=require("react");var XI=require("react/jsx-runtime"),uU=({data:I})=>{let{name:U,value:z,useSocketioSupport:T,useCentrifugeSupport:B,useMittSupport:Z,centrifugeChannel:$}=I,[O,q]=ZI.useState(z);return ZI.useEffect(()=>{q(z)},[z]),XI.jsx(W,{card:"HiddenCard",data:I,useSocketioSupport:T,useCentrifugeSupport:B,useMittSupport:Z,centrifugeChannel:$,methods:{update:({value:Q})=>{q(Q)}},children:XI.jsx("input",{type:"hidden",id:U,name:U,value:O})})},IU=uU;var UU=F({name:"HiddenCard",component:IU,metadata:{author:"Swarm.ing"}});var u=require("react");var TU=require("react");var dU=_("@swarm.ing/pieui:context:navigate",()=>TU.createContext(void 0)),m=dU;var BI=require("react/jsx-runtime"),iU=({data:I})=>{let{url:U}=I,z=u.useContext(m),T=u.useContext(E);return u.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else z?.(U)},[U,z]),BI.jsx(BI.Fragment,{children:T})},zU=iU;var ZU=F({name:"AutoRedirectCard",component:zU,metadata:{author:"Swarm.ing"}});var k=require("react-toastify"),HI=require("react-toastify");var p=require("react");var b=require("react/jsx-runtime"),rU={bounce:k.Bounce,slide:k.Slide,zoom:k.Zoom,flip:k.Flip},sU=(I)=>{let U={...I,type:I.alertType,transition:I.transition?rU[I.transition]:void 0,position:I.position??"bottom-right",autoClose:I.autoClose??3000,style:{backgroundColor:"black",...I.sx}};HI.toast(I.message,U)},nU=(I)=>{console.log("Log event",I)},aU=(I)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(I.title,{body:I.message??I.subtitle,icon:I.icon,silent:I.silent})}catch(T){console.error("[IOEventsCard] Failed to show notification",T)}},z=window.Notification.permission;if(z==="granted"){U();return}if(z==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((T)=>{if(T==="granted")U()})},tU=({data:I})=>{let{useCentrifugeSupport:U,useSocketioSupport:z,useMittSupport:T,centrifugeChannel:B}=I,Z=p.useContext(m),$=p.useRef(Z);$.current=Z;let O=p.useMemo(()=>({alert:sU,log:nU,push:aU,redirect:(q)=>{if(q.to){let Q=q.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else $.current?.(Q)}else window.location.reload()},reload:(q)=>{if(q.to){let Q=q.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else $.current?.(Q)}else window.location.reload()}}),[]);return b.jsx(b.Fragment,{children:b.jsx(W,{card:"IOEventsCard",data:I,useCentrifugeSupport:U,useSocketioSupport:z,useMittSupport:T,centrifugeChannel:B,methods:O,children:b.jsx(HI.ToastContainer,{})})})},BU=tU;var HU=F({name:"IOEventsCard",component:BU,metadata:{author:"Swarm.ing"}});var d=require("react");var YI=require("react/jsx-runtime"),eU=({data:I})=>{let{name:U,key:z,value:T,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:O}=I,[q,Q]=d.useState(T);return d.useEffect(()=>{Q(T)},[T]),d.useEffect(()=>{if(typeof window>"u")return;sessionStorage.setItem(z,q)},[z,q]),YI.jsx(W,{card:"SessionStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:O,methods:{update:({value:X})=>{Q(X)},remove:()=>{sessionStorage.removeItem(z),Q("")}},children:YI.jsx("input",{type:"hidden",id:U,name:U,value:q})})},$U=eU;var qU=F({name:"SessionStorageCard",component:$U,metadata:{author:"PieData"}});var i=require("react");var PI=require("react/jsx-runtime"),IT=({data:I})=>{let{name:U,key:z,value:T,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:O}=I,[q,Q]=i.useState(T);return i.useEffect(()=>{Q(T)},[T]),i.useEffect(()=>{if(typeof window>"u")return;localStorage.setItem(z,q)},[z,q]),PI.jsx(W,{card:"DeviceStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:O,methods:{update:({value:X})=>{Q(X)},remove:()=>{localStorage.removeItem(z),Q("")}},children:PI.jsx("input",{type:"hidden",id:U,name:U,value:q})})},OU=IT;var GU=F({name:"DeviceStorageCard",component:OU,metadata:{author:"PieData"}});var w=require("react");var WI=require("react/jsx-runtime"),UT=({data:I,content:U})=>{let{useLoader:z,noReturn:T,returnType:B,useSocketioSupport:Z,useCentrifugeSupport:$,useMittSupport:O,centrifugeChannel:q}=I,Q=w.useContext(E),X=w.useContext(L)??A,[G,D]=w.useState(!1),[Y,J]=w.useState(null),V=w.useRef(U),C=w.useContext(n),j=w.useCallback((H)=>{if(H===null)D(!0);else if(D(!1),!T)V.current=H;if(!T)J(H)},[T]),N=w.useCallback((H)=>{V.current=H.content,J(H.content)},[]),R=w.useCallback((H)=>{if(H===null)D(!0);else if(D(!1),!T)for(let P of H)C?.emit(P.name,P.data)},[T,C]);if(w.useEffect(()=>{J(U),D(!1)},[U]),!Y&&z)return Q;return WI.jsx(W,{card:"AjaxGroupCard",data:I,methods:{changeContent:N},useSocketioSupport:Z,useCentrifugeSupport:$,useMittSupport:O,centrifugeChannel:q,children:WI.jsx(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:B==="events"?R:j})})},JU=UT;var QU=F({name:"AjaxGroupCard",component:JU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var FI=require("react");var $I=require("react/jsx-runtime"),TT=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,url:B,sx:Z}=I,$=FI.useContext(m),O=FI.useContext(L)??A;return $I.jsx(W,{card:T,data:I,children:$I.jsx("div",{style:Z,id:T,onClick:(Q)=>{if(B)if(Q.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(B))window.location.href=B;else $?.(B)},children:$I.jsx(O,{setUiAjaxConfiguration:z,uiConfig:U})})})},XU=TT;var YU=F({name:"BoxCard",component:XU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var PU=require("react");var qI=require("react/jsx-runtime"),zT=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,sx:B}=I,Z=PU.useContext(L)??A;return qI.jsx(W,{card:T,data:I,children:qI.jsx("div",{style:B,id:T,children:U.map(($,O)=>{return qI.jsx(Z,{uiConfig:$,setUiAjaxConfiguration:z},`children-${O}`)})})})},WU=zT;var FU=F({name:"OneOfCard",component:WU,metadata:{author:"Swarm.ing",description:"Different variants"}});
2
+ var FU=Object.create;var{getPrototypeOf:_U,defineProperty:h,getOwnPropertyNames:wI,getOwnPropertyDescriptor:VU}=Object,KI=Object.prototype.hasOwnProperty;var MI=(I,U,z)=>{z=I!=null?FU(_U(I)):{};let T=U||!I||!I.__esModule?h(z,"default",{value:I,enumerable:!0}):z;for(let B of wI(I))if(!KI.call(T,B))h(T,B,{get:()=>I[B],enumerable:!0});return T},VI=new WeakMap,wU=(I)=>{var U=VI.get(I),z;if(U)return U;if(U=h({},"__esModule",{value:!0}),I&&typeof I==="object"||typeof I==="function")wI(I).map((T)=>!KI.call(U,T)&&h(U,T,{get:()=>I[T],enumerable:!(z=VU(I,T))||z.enumerable}));return VI.set(I,U),U};var KU=(I,U)=>{for(var z in U)h(I,z,{get:U[z],enumerable:!0,configurable:!0,set:(T)=>U[z]=()=>T})};var ZT={};KU(ZT,{UnionCard:()=>sI,UILoading:()=>oI,UI:()=>A,SessionStorageCard:()=>HU,SequenceCard:()=>dI,PieCard:()=>W,OneOfCard:()=>DU,IOEventsCard:()=>$U,HiddenCard:()=>UU,HTMLEmbedCard:()=>eI,DeviceStorageCard:()=>JU,BoxCard:()=>YU,AutoRedirectCard:()=>ZU,AjaxGroupCard:()=>QU});module.exports=wU(ZT);var K=require("react");var r=require("react");var GI=globalThis,_=(I,U)=>{let z=Symbol.for(I);if(!(z in GI))GI[z]=U();return GI[z]};var MU=_("@swarm.ing/pieui:context:pieConfig",()=>r.createContext(null)),fU=()=>{let I=r.useContext(MU);if(!I)throw Error("usePieConfig must be used within PieConfigProvider");return I};var g=()=>{let{enableRenderingLog:I}=fU();return I},fI=g;var AI=require("react"),AU=require("centrifuge");var JT=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map);var LU=_("@swarm.ing/pieui:context:centrifuge",()=>AI.createContext(null)),LI=LU;var CU=require("socket.io-client"),CI=require("react");var YT=_("@swarm.ing/pieui:socket-cache",()=>new Map);var RU=_("@swarm.ing/pieui:context:socket",()=>CI.createContext(null)),RI=RU;var NU=MI(require("mitt")),s=require("react");var jU=_("@swarm.ing/pieui:context:mitt",()=>s.createContext(null));var n=jU;function NI(I){return I.wasRecovering===!0&&I.recovered===!1}function jI(I){return I.recoverable===!1}function EI(I,U,z){let T=I.getSubscription(U);if(T)return{subscription:T,createdHere:!1};return{subscription:I.newSubscription(U,z),createdHere:!0}}var EU=require("react");var kI=new Map,xI=(I,U)=>{kI.set(I,U)},yI=(I)=>{kI.delete(I)};var y=require("react/jsx-runtime"),kU=({card:I,data:U,children:z,useSocketioSupport:T=!1,useCentrifugeSupport:B=!1,useMittSupport:Z=!1,centrifugeChannel:q=void 0,methods:G=void 0,stored:H=void 0,onResync:Q=void 0})=>{let X=fI(),J=K.useRef(G);J.current=G;let F=K.useRef(Q);F.current=Q;let Y=K.useRef(H);Y.current=H;let O=typeof H==="function";if(K.useEffect(()=>{if(!O)return;let N=U.name;return xI(N,()=>[JSON.stringify(Y.current())]),()=>yI(N)},[O,U.name]),X)console.log("[PieCard] Rendering card:",I),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:T,centrifuge:B,mitt:Z,centrifugeChannel:q}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!z);let V=K.useContext(RI),R=K.useContext(LI),j=K.useContext(n);if(K.useEffect(()=>{if(!V||!T||!J.current||!U.name){if(X&&T)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:T,hasMethods:!!J.current,hasDataName:!!U?.name});return}let C=Object.keys(J.current??{}).map(($)=>{let P=`pie${$}_${U.name}`;if(X)console.log(`[PieCard] Socket.IO registering event: ${P}`);let f=(x)=>{J.current?.[$]?.(x)};return V.on(P,f),[P,f]});return()=>{C.forEach(([$,P])=>{if(X)console.log(`[PieCard] Socket.IO unregistering event: ${$}`);V.off($,P)})}},[V,U.name,T]),K.useEffect(()=>{if(!R||!B||!q||!U.name){if(X&&B)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!R,useCentrifugeSupport:B,hasCentrifugeChannel:!!q,hasMethods:!!J.current,hasDataName:!!U?.name});return}let C=Object.keys(J.current??{}).map(($)=>{let P=`pie${$}_${U.name}_${q}`;if(X)console.log(`[PieCard] Centrifuge subscribing to channel: ${P}`);let{subscription:f,createdHere:x}=EI(R,P,{recoverable:!0,positioned:!0}),FI=(v)=>{if(X)console.log(`[PieCard] Centrifuge received data on ${P}:`,v.data);J.current?.[$]?.(v.data)},_I=(v)=>{if(jI(v))console.warn(`[PieCard] Centrifuge channel ${P} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(NI(v)){if(X)console.log(`[PieCard] Centrifuge recovery gap on ${P}; requesting resync`);F.current?.({channel:P,reason:"gap"})}};return f.on("publication",FI),f.on("subscribed",_I),f.subscribe(),{subscription:f,createdHere:x,onPublication:FI,onSubscribed:_I}});return()=>{C.forEach(({subscription:$,createdHere:P,onPublication:f,onSubscribed:x})=>{if(X)console.log("[PieCard] Centrifuge unsubscribing from channel");if($.off("publication",f),$.off("subscribed",x),P)$.unsubscribe(),R.removeSubscription($)})}},[R,q,U.name,B]),K.useEffect(()=>{if(!j||!Z||!U.name){if(X&&Z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!j,useMittSupport:Z,hasMethods:!!J.current,hasDataName:!!U?.name});return}let N=Object.keys(J.current??{}),C={};return N.forEach(($)=>{let P=`pie${$}_${U.name}`,f=(x)=>{if(X)console.log(`[PieCard] Mitt registering event: ${P}`);J.current?.[$]?.(x)};C[P]=f,j.on(P,f)}),()=>{Object.entries(C).forEach(([$,P])=>{if(X)console.log(`[PieCard] Mitt unregistering event: ${$}`);j.off($,P)})}},[j,U.name,Z]),X)console.log("[PieCard] Rendering complete, returning children");if(H!==void 0&&!O)return y.jsxs(y.Fragment,{children:[y.jsx("input",{type:"hidden",name:U.name,value:JSON.stringify(H)}),z]});return z},W=kU;var SI=require("react"),c=new Map;function xU(I,U){return U.catch(()=>{if(c.get(I)===U)c.delete(I)}),c.set(I,U),U}function mI(I,U){return SI.lazy(()=>{if(c.has(U))return c.get(U);return xU(U,I().then((z)=>z))})}var bI=_("@swarm.ing/pieui:component-registry",()=>new Map),yU=(I)=>{if(!I.name)throw Error("Component registration requires a name");if(!I.component&&!I.loader)throw Error(`Component "${I.name}" requires component or loader`);let U={name:I.name,component:I.component,loader:I.loader,metadata:I.metadata,fallback:I.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=mI(U.loader,I.name),U.isLazy=!0;return U};function D(I){let U=yU(I);return bI.set(U.name,U),U.component}var a=(I)=>{return bI.get(I)};var o=require("react");var pI=require("react");var t=require("react/jsx-runtime"),SU=_("@swarm.ing/pieui:context:fallback",()=>pI.createContext(t.jsx(t.Fragment,{}))),E=SU;var vI=require("react");var mU=_("@swarm.ing/pieui:context:lazyError",()=>vI.createContext(void 0)),e=mU;var II=require("react"),hI=require("react/jsx-runtime"),bU=2,pU=400;class S extends II.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(I){if(this.props.onError?.(I),this.state.attempt<bU){let U=pU*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((z)=>({failed:!1,attempt:z.attempt+1}))},U)}}componentDidUpdate(I){if(I.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 hI.jsx(II.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var UI=require("react/jsx-runtime");function vU({uiConfig:I,setUiAjaxConfiguration:U}){let z=o.useContext(E),T=o.useContext(e),B=g();if(B)console.log("[UI] Rendering component:",I.card),console.log("[UI] Component data:",I.data),console.log("[UI] Component content:",I.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let Z=a(I.card);if(!Z?.component){if(B)console.warn(`[UI] Component not found in registry: ${I.card}`),console.log("[UI] Returning fallback component");return z}if(B)console.log("[UI] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata});let q=Z.component,G=UI.jsx(q,{data:I.data,content:I.content,setUiAjaxConfiguration:U});if(Z.isLazy){if(B)console.log("[UI] Rendering lazy component with Suspense:",Z.name);return UI.jsx(S,{name:Z.name,fallback:Z.fallback?UI.jsx(Z.fallback,{}):z,onError:T,children:G})}if(B)console.log("[UI] Rendering component directly:",Z.name);return G}var A=o.memo(vU);var JI=require("react");var gI=require("react");var hU=_("@swarm.ing/pieui:context:uiRenderer",()=>gI.createContext(null)),L=hU;var u=require("react/jsx-runtime");function cI({uiConfig:I,setUiAjaxConfiguration:U}){let z=JI.useContext(E),T=JI.useContext(e),B=g();if(B)console.log("[UILoading] Rendering fallback for:",I.card),console.log("[UILoading] Component data:",I.data),console.log("[UILoading] Component content:",I.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let Z=a(I.card);if(!Z?.component){if(B)console.warn(`[UILoading] Component not found in registry: ${I.card}`),console.log("[UILoading] Returning fallback component");return z}if(B)console.log("[UILoading] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata,hasFallback:!!Z.fallback});if(Z.fallback){if(B)console.log("[UILoading] Rendering fallback for:",Z.name);let H=Z.fallback;return u.jsx(H,{})}if(B)console.log("[UILoading] No fallback, rendering full component:",Z.name);let q=Z.component,G=u.jsx(L.Provider,{value:cI,children:u.jsx(q,{data:I.data,content:I.content,setUiAjaxConfiguration:U})});if(Z.isLazy)return u.jsx(S,{name:Z.name,fallback:z,onError:T,children:G});return G}var oI=cI;var uI=require("react");var TI=require("react/jsx-runtime"),gU=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,sx:B}=I,Z=uI.useContext(L)??A;return TI.jsx(W,{card:T,data:I,children:TI.jsx("div",{style:B,id:T,children:U.map((q,G)=>{return TI.jsx(Z,{uiConfig:q,setUiAjaxConfiguration:z},`children-${G}`)})})})},lI=gU;var dI=D({name:"SequenceCard",component:lI,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var iI=require("react");var OI=require("react/jsx-runtime"),cU=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T}=I,B=iI.useContext(L)??A;return OI.jsx(W,{card:T,data:I,children:U.map((Z,q)=>{return OI.jsx(B,{uiConfig:Z,setUiAjaxConfiguration:z},`children-${q}`)})})},rI=cU;var sI=D({name:"UnionCard",component:rI,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var zI=require("react"),nI=MI(require("html-react-parser"));var M=require("react");function oU(){let I=new AudioContext,U=I.createOscillator(),z=U.connect(I.createMediaStreamDestination());U.start();let T=z.stream.getAudioTracks()[0];return T.enabled=!1,T}function QI(I=null,U){let[z,T]=M.useState(!1),B=M.useRef(null),Z=M.useRef(null),q=M.useRef(null),G=M.useCallback(async(J,F=!0)=>{if(B.current)H();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")T(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))T(!1)},Y.ontrack=($)=>{if(I)I.srcObject=$.streams[0]},F){let $=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack($.getTracks()[0],$)}else{let $=oU();Y.addTrack($)}let O=Y.createDataChannel("oai-events");Z.current=O,q.current=new Promise(($)=>{O.addEventListener("open",()=>{$()})});let V=await Y.createOffer();await Y.setLocalDescription(V);let C=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:V.sdp,headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:C}),B.current=Y,await q.current},[I]),H=M.useCallback(()=>{let J=Z.current;if(J)J.close();B.current?.getSenders()?.forEach((F)=>F.track?.stop()),B.current?.close(),T(!1),B.current=null,Z.current=null,q.current=null},[I]),Q=M.useCallback((J)=>{let F=Z.current;if(!F){console.error("Data channel is not ready",J);return}let Y=new Date().toLocaleTimeString();if(J.event_id=J.event_id||crypto.randomUUID(),F.send(JSON.stringify(J)),!J.timestamp)J.timestamp=Y;U?.(J)},[U,I]),X=M.useCallback((J)=>{if(!Z.current){console.error("Data channel is not ready");return}let Y=()=>{Q({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:J}]}}),Q({type:"response.create"})};if(q.current)q.current.then(Y);else Y()},[U,I]);return M.useEffect(()=>{let J=Z.current;if(!J)return;let F=(Y)=>{let O=JSON.parse(Y.data);if(!O.timestamp)O.timestamp=new Date().toLocaleTimeString();U?.(O)};return J.addEventListener("message",F),()=>{J.removeEventListener("message",F)}},[U,I]),{isSessionActive:z,startSession:G,stopSession:H,sendTextMessage:X}}var tI=require("react/jsx-runtime"),uU=({data:I})=>{let{html:U,useSocketioSupport:z,useCentrifugeSupport:T,useMittSupport:B,centrifugeChannel:Z}=I,[q,G]=zI.useState(U),{isSessionActive:H,startSession:Q,sendTextMessage:X}=QI(null,(O)=>{if(console.log(O.type,O.type==="response.output_text.delta"&&O.delta),O.type==="response.output_text.delta"&&O.delta)G((V)=>V+O.delta)});return zI.useEffect(()=>{G(U)},[U]),tI.jsx(W,{card:"HTMLEmbedCard",data:I,methods:{update:(O)=>{G(O.value)},generateUsingAI:async(O)=>{try{if(!H&&O.token)await Q(O.token,!1);X(O.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(O)=>{if(!H&&O.token)await Q(O.token,!1)}},useCentrifugeSupport:T,useSocketioSupport:z,useMittSupport:B,centrifugeChannel:Z,children:nI.default(q)})},aI=uU;var eI=D({name:"HTMLEmbedCard",component:aI,metadata:{author:"Swarm.ing"}});var ZI=require("react");var XI=require("react/jsx-runtime"),lU=({data:I})=>{let{name:U,value:z,useSocketioSupport:T,useCentrifugeSupport:B,useMittSupport:Z,centrifugeChannel:q}=I,[G,H]=ZI.useState(z);return ZI.useEffect(()=>{H(z)},[z]),XI.jsx(W,{card:"HiddenCard",data:I,useSocketioSupport:T,useCentrifugeSupport:B,useMittSupport:Z,centrifugeChannel:q,methods:{update:({value:Q})=>{H(Q)}},children:XI.jsx("input",{type:"hidden",id:U,name:U,value:G})})},IU=lU;var UU=D({name:"HiddenCard",component:IU,metadata:{author:"Swarm.ing"}});var l=require("react");var TU=require("react");var dU=_("@swarm.ing/pieui:context:navigate",()=>TU.createContext(void 0)),m=dU;var BI=require("react/jsx-runtime"),iU=({data:I})=>{let{url:U}=I,z=l.useContext(m),T=l.useContext(E);return l.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else z?.(U)},[U,z]),BI.jsx(BI.Fragment,{children:T})},zU=iU;var ZU=D({name:"AutoRedirectCard",component:zU,metadata:{author:"Swarm.ing"}});var k=require("react-toastify"),$I=require("react-toastify");var p=require("react");var b=require("react/jsx-runtime"),rU={bounce:k.Bounce,slide:k.Slide,zoom:k.Zoom,flip:k.Flip},sU=(I)=>{let U={...I,type:I.alertType,transition:I.transition?rU[I.transition]:void 0,position:I.position??"bottom-right",autoClose:I.autoClose??3000,style:{backgroundColor:"black",...I.sx}};$I.toast(I.message,U)},nU=(I)=>{console.log("Log event",I)},aU=(I)=>{if(typeof window>"u"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(I.title,{body:I.message??I.subtitle,icon:I.icon,silent:I.silent})}catch(T){console.error("[IOEventsCard] Failed to show notification",T)}},z=window.Notification.permission;if(z==="granted"){U();return}if(z==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((T)=>{if(T==="granted")U()})},tU=({data:I})=>{let{useCentrifugeSupport:U,useSocketioSupport:z,useMittSupport:T,centrifugeChannel:B}=I,Z=p.useContext(m),q=p.useRef(Z);q.current=Z;let G=p.useMemo(()=>({alert:sU,log:nU,push:aU,redirect:(H)=>{if(H.to){let Q=H.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else q.current?.(Q)}else window.location.reload()},reload:(H)=>{if(H.to){let Q=H.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(Q))window.location.href=Q;else q.current?.(Q)}else window.location.reload()}}),[]);return b.jsx(b.Fragment,{children:b.jsx(W,{card:"IOEventsCard",data:I,useCentrifugeSupport:U,useSocketioSupport:z,useMittSupport:T,centrifugeChannel:B,methods:G,children:b.jsx($I.ToastContainer,{})})})},BU=tU;var $U=D({name:"IOEventsCard",component:BU,metadata:{author:"Swarm.ing"}});var d=require("react");var YI=require("react/jsx-runtime"),eU=({data:I})=>{let{name:U,key:z,value:T,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:q,centrifugeChannel:G}=I,[H,Q]=d.useState(T);return d.useEffect(()=>{Q(T)},[T]),d.useEffect(()=>{if(typeof window>"u")return;sessionStorage.setItem(z,H)},[z,H]),YI.jsx(W,{card:"SessionStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:q,centrifugeChannel:G,methods:{update:({value:X})=>{Q(X)},remove:()=>{sessionStorage.removeItem(z),Q("")}},children:YI.jsx("input",{type:"hidden",id:U,name:U,value:H})})},qU=eU;var HU=D({name:"SessionStorageCard",component:qU,metadata:{author:"PieData"}});var i=require("react");var PI=require("react/jsx-runtime"),IT=({data:I})=>{let{name:U,key:z,value:T,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:q,centrifugeChannel:G}=I,[H,Q]=i.useState(T);return i.useEffect(()=>{Q(T)},[T]),i.useEffect(()=>{if(typeof window>"u")return;localStorage.setItem(z,H)},[z,H]),PI.jsx(W,{card:"DeviceStorageCard",data:I,useSocketioSupport:B,useCentrifugeSupport:Z,useMittSupport:q,centrifugeChannel:G,methods:{update:({value:X})=>{Q(X)},remove:()=>{localStorage.removeItem(z),Q("")}},children:PI.jsx("input",{type:"hidden",id:U,name:U,value:H})})},GU=IT;var JU=D({name:"DeviceStorageCard",component:GU,metadata:{author:"PieData"}});var w=require("react");var WI=require("react/jsx-runtime"),UT=({data:I,content:U})=>{let{useLoader:z,noReturn:T,returnType:B,useSocketioSupport:Z,useCentrifugeSupport:q,useMittSupport:G,centrifugeChannel:H}=I,Q=w.useContext(E),X=w.useContext(L)??A,[J,F]=w.useState(!1),[Y,O]=w.useState(null),V=w.useRef(U),R=w.useContext(n),j=w.useCallback(($)=>{if($===null)F(!0);else if(F(!1),!T)V.current=$;if(!T)O($)},[T]),N=w.useCallback(($)=>{V.current=$.content,O($.content)},[]),C=w.useCallback(($)=>{if($===null)F(!0);else if(F(!1),!T)for(let P of $)R?.emit(P.name,P.data)},[T,R]);if(w.useEffect(()=>{O(U),F(!1)},[U]),!Y&&z)return Q;return WI.jsx(W,{card:"AjaxGroupCard",data:I,methods:{changeContent:N},useSocketioSupport:Z,useCentrifugeSupport:q,useMittSupport:G,centrifugeChannel:H,children:WI.jsx(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:B==="events"?C:j})})},OU=UT;var QU=D({name:"AjaxGroupCard",component:OU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var DI=require("react");var qI=require("react/jsx-runtime"),TT=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,url:B,sx:Z}=I,q=DI.useContext(m),G=DI.useContext(L)??A;return qI.jsx(W,{card:T,data:I,children:qI.jsx("div",{style:Z,id:T,onClick:(Q)=>{if(B)if(Q.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(B))window.location.href=B;else q?.(B)},children:qI.jsx(G,{setUiAjaxConfiguration:z,uiConfig:U})})})},XU=TT;var YU=D({name:"BoxCard",component:XU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var PU=require("react");var HI=require("react/jsx-runtime"),zT=({data:I,content:U,setUiAjaxConfiguration:z})=>{let{name:T,sx:B}=I,Z=PU.useContext(L)??A;return HI.jsx(W,{card:T,data:I,children:HI.jsx("div",{style:B,id:T,children:U.map((q,G)=>{return HI.jsx(Z,{uiConfig:q,setUiAjaxConfiguration:z},`children-${G}`)})})})},WU=zT;var DU=D({name:"OneOfCard",component:WU,metadata:{author:"Swarm.ing",description:"Different variants"}});
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { trackLazy } from './util/lazy';
12
12
  export type { PieComponentProps, PieSimpleComponentProps, PieComplexComponentProps, PieContainerComponentProps, PieComplexContainerComponentProps, InputPieSimpleComponentProps, InputPieComplexComponentProps, InputPieContainerComponentProps, InputPieComplexContainerComponentProps, PieConfig, PieLinkSource, UIConfigType, SetUiAjaxConfigurationType, } from './types';
13
13
  export type { PieQueryOptions } from './components/PieRoot/types';
14
14
  export { useAjaxSubmit, useAjaxSubmits, discoverAjaxEndpoints, readAjaxKey, readAjaxKeyAsync, parseDepName, } from './util/ajaxCommonUtils';
15
- export type { RetryPolicy, DepSource, AjaxEndpointConfig } from './util/ajaxCommonUtils';
15
+ export type { RetryPolicy, DepSource, AjaxEndpointConfig, AjaxSubmitFn, GetAjaxSubmitOptions, } from './util/ajaxCommonUtils';
16
16
  export { usePieEmit } from './util/mitt';
17
17
  export { default as MittContext, getEmitter } from './util/mitt';
18
18
  export { default as SocketIOContext } from './util/socket';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAA;AAE5B,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EACH,OAAO,IAAI,iBAAiB,EAC5B,KAAK,eAAe,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAMtE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,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,iBAAiB,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,YAAY,EACR,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,sCAAsC,EACtC,SAAS,EACT,aAAa,EACb,YAAY,EACZ,0BAA0B,GAC7B,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,EACH,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,YAAY,GACf,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GACpB,MAAM,kBAAkB,CAAA;AAMzB,OAAO,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAA;AAE5B,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EACH,OAAO,IAAI,iBAAiB,EAC5B,KAAK,eAAe,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAMtE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,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,iBAAiB,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,YAAY,EACR,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,sCAAsC,EACtC,SAAS,EACT,aAAa,EACb,YAAY,EACZ,0BAA0B,GAC7B,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,EACH,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,YAAY,GACf,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACR,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,GACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GACpB,MAAM,kBAAkB,CAAA;AAMzB,OAAO,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA"}