@swarm.ing/pieui 2.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.
Files changed (239) hide show
  1. package/README.md +117 -0
  2. package/dist/__tests__/step1-local.test.d.cts +2 -0
  3. package/dist/__tests__/step1-local.test.d.cts.map +1 -0
  4. package/dist/__tests__/step2-remote.test.d.cts +2 -0
  5. package/dist/__tests__/step2-remote.test.d.cts.map +1 -0
  6. package/dist/__tests__/step3-contract.test.d.cts +2 -0
  7. package/dist/__tests__/step3-contract.test.d.cts.map +1 -0
  8. package/dist/__tests__/step4-ci.test.d.cts +2 -0
  9. package/dist/__tests__/step4-ci.test.d.cts.map +1 -0
  10. package/dist/__tests__/step5-regres.test.d.cts +2 -0
  11. package/dist/__tests__/step5-regres.test.d.cts.map +1 -0
  12. package/dist/cli.js +198415 -0
  13. package/dist/code/args.d.ts +4 -0
  14. package/dist/code/args.d.ts.map +1 -0
  15. package/dist/code/commands/add.d.ts +3 -0
  16. package/dist/code/commands/add.d.ts.map +1 -0
  17. package/dist/code/commands/addEvent.d.ts +2 -0
  18. package/dist/code/commands/addEvent.d.ts.map +1 -0
  19. package/dist/code/commands/createPieApp.d.ts +2 -0
  20. package/dist/code/commands/createPieApp.d.ts.map +1 -0
  21. package/dist/code/commands/init.d.ts +2 -0
  22. package/dist/code/commands/init.d.ts.map +1 -0
  23. package/dist/code/commands/list.d.ts +3 -0
  24. package/dist/code/commands/list.d.ts.map +1 -0
  25. package/dist/code/commands/listEvents.d.ts +2 -0
  26. package/dist/code/commands/listEvents.d.ts.map +1 -0
  27. package/dist/code/commands/postbuild.d.ts +2 -0
  28. package/dist/code/commands/postbuild.d.ts.map +1 -0
  29. package/dist/code/commands/pull.d.ts +2 -0
  30. package/dist/code/commands/pull.d.ts.map +1 -0
  31. package/dist/code/commands/push.d.ts +2 -0
  32. package/dist/code/commands/push.d.ts.map +1 -0
  33. package/dist/code/commands/remoteRemove.d.ts +2 -0
  34. package/dist/code/commands/remoteRemove.d.ts.map +1 -0
  35. package/dist/code/commands/remove.d.ts +2 -0
  36. package/dist/code/commands/remove.d.ts.map +1 -0
  37. package/dist/code/registryPath.d.ts +8 -0
  38. package/dist/code/registryPath.d.ts.map +1 -0
  39. package/dist/code/scan.d.ts +4 -0
  40. package/dist/code/scan.d.ts.map +1 -0
  41. package/dist/code/schema.d.ts +4 -0
  42. package/dist/code/schema.d.ts.map +1 -0
  43. package/dist/code/templates/complexComponent.d.ts +2 -0
  44. package/dist/code/templates/complexComponent.d.ts.map +1 -0
  45. package/dist/code/templates/complexContainerComponent.d.ts +2 -0
  46. package/dist/code/templates/complexContainerComponent.d.ts.map +1 -0
  47. package/dist/code/templates/componentIndex.d.ts +2 -0
  48. package/dist/code/templates/componentIndex.d.ts.map +1 -0
  49. package/dist/code/templates/componentTypes.d.ts +2 -0
  50. package/dist/code/templates/componentTypes.d.ts.map +1 -0
  51. package/dist/code/templates/index.d.ts +9 -0
  52. package/dist/code/templates/index.d.ts.map +1 -0
  53. package/dist/code/templates/nextConfig.d.ts +3 -0
  54. package/dist/code/templates/nextConfig.d.ts.map +1 -0
  55. package/dist/code/templates/registerCall.d.ts +2 -0
  56. package/dist/code/templates/registerCall.d.ts.map +1 -0
  57. package/dist/code/templates/simpleComponent.d.ts +2 -0
  58. package/dist/code/templates/simpleComponent.d.ts.map +1 -0
  59. package/dist/code/templates/simpleContainerComponent.d.ts +2 -0
  60. package/dist/code/templates/simpleContainerComponent.d.ts.map +1 -0
  61. package/dist/code/ts.d.ts +4 -0
  62. package/dist/code/ts.d.ts.map +1 -0
  63. package/dist/code/types.d.ts +27 -0
  64. package/dist/code/types.d.ts.map +1 -0
  65. package/dist/components/Common/AutoRedirectCard/index.d.ts +3 -0
  66. package/dist/components/Common/AutoRedirectCard/index.d.ts.map +1 -0
  67. package/dist/components/Common/AutoRedirectCard/types/index.d.ts +7 -0
  68. package/dist/components/Common/AutoRedirectCard/types/index.d.ts.map +1 -0
  69. package/dist/components/Common/AutoRedirectCard/ui/AutoRedirectCard.d.ts +4 -0
  70. package/dist/components/Common/AutoRedirectCard/ui/AutoRedirectCard.d.ts.map +1 -0
  71. package/dist/components/Common/CloudStorageCard/index.d.ts +3 -0
  72. package/dist/components/Common/CloudStorageCard/index.d.ts.map +1 -0
  73. package/dist/components/Common/CloudStorageCard/types/index.d.ts +13 -0
  74. package/dist/components/Common/CloudStorageCard/types/index.d.ts.map +1 -0
  75. package/dist/components/Common/CloudStorageCard/ui/CloudStorageCard.d.ts +4 -0
  76. package/dist/components/Common/CloudStorageCard/ui/CloudStorageCard.d.ts.map +1 -0
  77. package/dist/components/Common/DeviceStorageCard/index.d.ts +3 -0
  78. package/dist/components/Common/DeviceStorageCard/index.d.ts.map +1 -0
  79. package/dist/components/Common/DeviceStorageCard/types/index.d.ts +13 -0
  80. package/dist/components/Common/DeviceStorageCard/types/index.d.ts.map +1 -0
  81. package/dist/components/Common/DeviceStorageCard/ui/DeviceStorageCard.d.ts +4 -0
  82. package/dist/components/Common/DeviceStorageCard/ui/DeviceStorageCard.d.ts.map +1 -0
  83. package/dist/components/Common/HTMLEmbedCard/index.d.ts +3 -0
  84. package/dist/components/Common/HTMLEmbedCard/index.d.ts.map +1 -0
  85. package/dist/components/Common/HTMLEmbedCard/types/index.d.ts +14 -0
  86. package/dist/components/Common/HTMLEmbedCard/types/index.d.ts.map +1 -0
  87. package/dist/components/Common/HTMLEmbedCard/ui/HTMLEmbedCard.d.ts +4 -0
  88. package/dist/components/Common/HTMLEmbedCard/ui/HTMLEmbedCard.d.ts.map +1 -0
  89. package/dist/components/Common/HiddenCard/index.d.ts +3 -0
  90. package/dist/components/Common/HiddenCard/index.d.ts.map +1 -0
  91. package/dist/components/Common/HiddenCard/types/index.d.ts +12 -0
  92. package/dist/components/Common/HiddenCard/types/index.d.ts.map +1 -0
  93. package/dist/components/Common/HiddenCard/ui/HiddenCard.d.ts +4 -0
  94. package/dist/components/Common/HiddenCard/ui/HiddenCard.d.ts.map +1 -0
  95. package/dist/components/Common/IOEventsCard/index.d.ts +3 -0
  96. package/dist/components/Common/IOEventsCard/index.d.ts.map +1 -0
  97. package/dist/components/Common/IOEventsCard/types/index.d.ts +22 -0
  98. package/dist/components/Common/IOEventsCard/types/index.d.ts.map +1 -0
  99. package/dist/components/Common/IOEventsCard/ui/IOEventsCard.d.ts +4 -0
  100. package/dist/components/Common/IOEventsCard/ui/IOEventsCard.d.ts.map +1 -0
  101. package/dist/components/Common/SecureStorageCard/index.d.ts +3 -0
  102. package/dist/components/Common/SecureStorageCard/index.d.ts.map +1 -0
  103. package/dist/components/Common/SecureStorageCard/types/index.d.ts +13 -0
  104. package/dist/components/Common/SecureStorageCard/types/index.d.ts.map +1 -0
  105. package/dist/components/Common/SecureStorageCard/ui/SecureStorageCard.d.ts +4 -0
  106. package/dist/components/Common/SecureStorageCard/ui/SecureStorageCard.d.ts.map +1 -0
  107. package/dist/components/Common/SessionStorageCard/index.d.ts +3 -0
  108. package/dist/components/Common/SessionStorageCard/index.d.ts.map +1 -0
  109. package/dist/components/Common/SessionStorageCard/types/index.d.ts +13 -0
  110. package/dist/components/Common/SessionStorageCard/types/index.d.ts.map +1 -0
  111. package/dist/components/Common/SessionStorageCard/ui/SessionStorageCard.d.ts +4 -0
  112. package/dist/components/Common/SessionStorageCard/ui/SessionStorageCard.d.ts.map +1 -0
  113. package/dist/components/Containers/AjaxGroupCard/index.d.ts +3 -0
  114. package/dist/components/Containers/AjaxGroupCard/index.d.ts.map +1 -0
  115. package/dist/components/Containers/AjaxGroupCard/types/index.d.ts +14 -0
  116. package/dist/components/Containers/AjaxGroupCard/types/index.d.ts.map +1 -0
  117. package/dist/components/Containers/AjaxGroupCard/ui/AjaxGroupCard.d.ts +5 -0
  118. package/dist/components/Containers/AjaxGroupCard/ui/AjaxGroupCard.d.ts.map +1 -0
  119. package/dist/components/Containers/BoxCard/index.d.ts +7 -0
  120. package/dist/components/Containers/BoxCard/index.d.ts.map +1 -0
  121. package/dist/components/Containers/BoxCard/types/index.d.ts +7 -0
  122. package/dist/components/Containers/BoxCard/types/index.d.ts.map +1 -0
  123. package/dist/components/Containers/BoxCard/ui/BoxCard.d.ts +9 -0
  124. package/dist/components/Containers/BoxCard/ui/BoxCard.d.ts.map +1 -0
  125. package/dist/components/Containers/SequenceCard/index.d.ts +3 -0
  126. package/dist/components/Containers/SequenceCard/index.d.ts.map +1 -0
  127. package/dist/components/Containers/SequenceCard/types/index.d.ts +9 -0
  128. package/dist/components/Containers/SequenceCard/types/index.d.ts.map +1 -0
  129. package/dist/components/Containers/SequenceCard/ui/SequenceCard.d.ts +4 -0
  130. package/dist/components/Containers/SequenceCard/ui/SequenceCard.d.ts.map +1 -0
  131. package/dist/components/Containers/UnionCard/index.d.ts +3 -0
  132. package/dist/components/Containers/UnionCard/index.d.ts.map +1 -0
  133. package/dist/components/Containers/UnionCard/types/index.d.ts +7 -0
  134. package/dist/components/Containers/UnionCard/types/index.d.ts.map +1 -0
  135. package/dist/components/Containers/UnionCard/ui/UnionCard.d.ts +4 -0
  136. package/dist/components/Containers/UnionCard/ui/UnionCard.d.ts.map +1 -0
  137. package/dist/components/PieBaseRoot/index.d.ts +15 -0
  138. package/dist/components/PieBaseRoot/index.d.ts.map +1 -0
  139. package/dist/components/PieBaseRoot/types/index.d.ts +12 -0
  140. package/dist/components/PieBaseRoot/types/index.d.ts.map +1 -0
  141. package/dist/components/PieCard/index.d.ts +22 -0
  142. package/dist/components/PieCard/index.d.ts.map +1 -0
  143. package/dist/components/PieCard/types/index.d.ts +52 -0
  144. package/dist/components/PieCard/types/index.d.ts.map +1 -0
  145. package/dist/components/PieMaxRoot/index.d.ts +17 -0
  146. package/dist/components/PieMaxRoot/index.d.ts.map +1 -0
  147. package/dist/components/PieRoot/index.d.ts +21 -0
  148. package/dist/components/PieRoot/index.d.ts.map +1 -0
  149. package/dist/components/PieRoot/types/index.d.ts +49 -0
  150. package/dist/components/PieRoot/types/index.d.ts.map +1 -0
  151. package/dist/components/PieTelegramRoot/index.d.ts +18 -0
  152. package/dist/components/PieTelegramRoot/index.d.ts.map +1 -0
  153. package/dist/components/UI/index.d.ts +9 -0
  154. package/dist/components/UI/index.d.ts.map +1 -0
  155. package/dist/components/UILoading/index.d.ts +8 -0
  156. package/dist/components/UILoading/index.d.ts.map +1 -0
  157. package/dist/components/index.d.ts +16 -0
  158. package/dist/components/index.d.ts.map +1 -0
  159. package/dist/components/index.esm.js +2 -0
  160. package/dist/components/index.js +2 -0
  161. package/dist/create.d.ts +3 -0
  162. package/dist/create.d.ts.map +1 -0
  163. package/dist/create.js +162 -0
  164. package/dist/index.d.ts +24 -0
  165. package/dist/index.d.ts.map +1 -0
  166. package/dist/index.esm.js +3 -0
  167. package/dist/index.js +3 -0
  168. package/dist/pieui.components.json +365 -0
  169. package/dist/providers/CentrifugeIOInitProvider.d.ts +6 -0
  170. package/dist/providers/CentrifugeIOInitProvider.d.ts.map +1 -0
  171. package/dist/providers/SocketIOInitProvider.d.ts +6 -0
  172. package/dist/providers/SocketIOInitProvider.d.ts.map +1 -0
  173. package/dist/tests/globalForm.test.d.ts +2 -0
  174. package/dist/tests/globalForm.test.d.ts.map +1 -0
  175. package/dist/tests/mitt.test.d.ts +2 -0
  176. package/dist/tests/mitt.test.d.ts.map +1 -0
  177. package/dist/tests/mittAgentTools.test.d.ts +2 -0
  178. package/dist/tests/mittAgentTools.test.d.ts.map +1 -0
  179. package/dist/tests/registry-builtin.test.d.ts +2 -0
  180. package/dist/tests/registry-builtin.test.d.ts.map +1 -0
  181. package/dist/tests/registry.test.d.ts +2 -0
  182. package/dist/tests/registry.test.d.ts.map +1 -0
  183. package/dist/tests/setup.d.ts +2 -0
  184. package/dist/tests/setup.d.ts.map +1 -0
  185. package/dist/tests/socket-cache.test.d.ts +2 -0
  186. package/dist/tests/socket-cache.test.d.ts.map +1 -0
  187. package/dist/tests/use-client-directive.test.d.ts +2 -0
  188. package/dist/tests/use-client-directive.test.d.ts.map +1 -0
  189. package/dist/tests/useMaxWebApp.test.d.ts +2 -0
  190. package/dist/tests/useMaxWebApp.test.d.ts.map +1 -0
  191. package/dist/tests/utils.test.d.ts +2 -0
  192. package/dist/tests/utils.test.d.ts.map +1 -0
  193. package/dist/types/index.d.ts +509 -0
  194. package/dist/types/index.d.ts.map +1 -0
  195. package/dist/util/ajaxCommonUtils.d.ts +76 -0
  196. package/dist/util/ajaxCommonUtils.d.ts.map +1 -0
  197. package/dist/util/centrifuge.d.ts +27 -0
  198. package/dist/util/centrifuge.d.ts.map +1 -0
  199. package/dist/util/fallback.d.ts +10 -0
  200. package/dist/util/fallback.d.ts.map +1 -0
  201. package/dist/util/globalForm.d.ts +10 -0
  202. package/dist/util/globalForm.d.ts.map +1 -0
  203. package/dist/util/lazy.d.ts +31 -0
  204. package/dist/util/lazy.d.ts.map +1 -0
  205. package/dist/util/mitt.d.ts +45 -0
  206. package/dist/util/mitt.d.ts.map +1 -0
  207. package/dist/util/mittAgentTools.d.ts +89 -0
  208. package/dist/util/mittAgentTools.d.ts.map +1 -0
  209. package/dist/util/navigate.d.ts +15 -0
  210. package/dist/util/navigate.d.ts.map +1 -0
  211. package/dist/util/pieConfig.d.ts +52 -0
  212. package/dist/util/pieConfig.d.ts.map +1 -0
  213. package/dist/util/pieName.d.ts +14 -0
  214. package/dist/util/pieName.d.ts.map +1 -0
  215. package/dist/util/piecache.d.ts +19 -0
  216. package/dist/util/piecache.d.ts.map +1 -0
  217. package/dist/util/registry.d.ts +61 -0
  218. package/dist/util/registry.d.ts.map +1 -0
  219. package/dist/util/socket.d.ts +27 -0
  220. package/dist/util/socket.d.ts.map +1 -0
  221. package/dist/util/sx2radium.d.ts +8 -0
  222. package/dist/util/sx2radium.d.ts.map +1 -0
  223. package/dist/util/tailwindCommonUtils.d.ts +17 -0
  224. package/dist/util/tailwindCommonUtils.d.ts.map +1 -0
  225. package/dist/util/uiRenderer.d.ts +23 -0
  226. package/dist/util/uiRenderer.d.ts.map +1 -0
  227. package/dist/util/useIsSupported.d.ts +20 -0
  228. package/dist/util/useIsSupported.d.ts.map +1 -0
  229. package/dist/util/useMaxWebApp.d.ts +33 -0
  230. package/dist/util/useMaxWebApp.d.ts.map +1 -0
  231. package/dist/util/useOpenAIWebRTC.d.ts +58 -0
  232. package/dist/util/useOpenAIWebRTC.d.ts.map +1 -0
  233. package/dist/util/useWebApp.d.ts +27 -0
  234. package/dist/util/useWebApp.d.ts.map +1 -0
  235. package/dist/util/waitForSidAvailable.d.ts +11 -0
  236. package/dist/util/waitForSidAvailable.d.ts.map +1 -0
  237. package/dist/util/webrtcClient.d.ts +93 -0
  238. package/dist/util/webrtcClient.d.ts.map +1 -0
  239. package/package.json +125 -0
package/dist/create.js ADDED
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+
19
+ // src/code/commands/createPieApp.ts
20
+ var import_fs = __toESM(require("fs"));
21
+ var import_path = __toESM(require("path"));
22
+ var import_child_process = require("child_process");
23
+ var DEFAULT_TEMPLATE_SPEC = "next-app@latest";
24
+ var SHARED_TEMPLATE_DIR_ENV = "PIEUI_SHARED_TEMPLATE_DIR";
25
+ var AI_EXCHANGE_BOT_DIR_ENV = "PIEUI_AI_EXCHANGE_BOT_DIR";
26
+ var BACKEND_LINK_COMMENT = "// TODO(pie-backend): Link generated Python Unicorn backend routes here once backend template sync is enabled.";
27
+ var updateNextScriptsToBun = (packageJsonPath) => {
28
+ if (!import_fs.default.existsSync(packageJsonPath))
29
+ return;
30
+ try {
31
+ const pkg = JSON.parse(import_fs.default.readFileSync(packageJsonPath, "utf8"));
32
+ if (!pkg.scripts)
33
+ return;
34
+ const updates = {
35
+ dev: "bun --bun next dev",
36
+ build: "bun --bun next build",
37
+ start: "bun --bun next start"
38
+ };
39
+ for (const [scriptName, scriptValue] of Object.entries(updates)) {
40
+ if (pkg.scripts[scriptName]) {
41
+ pkg.scripts[scriptName] = scriptValue;
42
+ }
43
+ }
44
+ import_fs.default.writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}
45
+ `, "utf8");
46
+ } catch {
47
+ }
48
+ };
49
+ var appendBackendLinkComment = (pagePath) => {
50
+ if (!import_fs.default.existsSync(pagePath))
51
+ return;
52
+ const page = import_fs.default.readFileSync(pagePath, "utf8");
53
+ if (page.includes(BACKEND_LINK_COMMENT))
54
+ return;
55
+ import_fs.default.writeFileSync(pagePath, `${page.trimEnd()}
56
+
57
+ ${BACKEND_LINK_COMMENT}
58
+ `, "utf8");
59
+ };
60
+ var uniq = (items) => [...new Set(items)];
61
+ var isDirectory = (target) => {
62
+ try {
63
+ return import_fs.default.statSync(target).isDirectory();
64
+ } catch {
65
+ return false;
66
+ }
67
+ };
68
+ var resolveSharedTemplateDir = () => {
69
+ const explicitSharedDir = process.env[SHARED_TEMPLATE_DIR_ENV];
70
+ if (explicitSharedDir) {
71
+ const normalized = import_path.default.resolve(explicitSharedDir);
72
+ if (!isDirectory(normalized)) {
73
+ throw new Error(`${SHARED_TEMPLATE_DIR_ENV} points to a missing directory: ${normalized}`);
74
+ }
75
+ return normalized;
76
+ }
77
+ const cwd = process.cwd();
78
+ const baseDirs = [cwd, import_path.default.resolve(cwd, ".."), import_path.default.resolve(cwd, "../..")];
79
+ const explicitRepoDir = process.env[AI_EXCHANGE_BOT_DIR_ENV];
80
+ if (explicitRepoDir) {
81
+ baseDirs.unshift(import_path.default.resolve(explicitRepoDir));
82
+ }
83
+ const repoNames = ["ai-exchange-bot", "ai-exchange-web", "a-exchange-web"];
84
+ const repoCandidates = uniq([
85
+ ...baseDirs,
86
+ ...baseDirs.flatMap((base) => repoNames.map((name) => import_path.default.join(base, name)))
87
+ ]).filter((candidate) => isDirectory(candidate));
88
+ const sharedSubpaths = [
89
+ "_shared",
90
+ "src/_shared",
91
+ "app/_shared",
92
+ "pages/_shared",
93
+ "pages/components/_shared",
94
+ "apps/web/_shared",
95
+ "apps/web/src/_shared"
96
+ ];
97
+ for (const repoDir of repoCandidates) {
98
+ for (const subpath of sharedSubpaths) {
99
+ const candidate = import_path.default.join(repoDir, subpath);
100
+ if (isDirectory(candidate)) {
101
+ return candidate;
102
+ }
103
+ }
104
+ }
105
+ throw new Error([
106
+ "Could not locate a _shared template directory from ai-exchange-bot.",
107
+ `Set ${SHARED_TEMPLATE_DIR_ENV}=/absolute/path/to/_shared`,
108
+ `or ${AI_EXCHANGE_BOT_DIR_ENV}=/absolute/path/to/ai-exchange-bot.`
109
+ ].join(" "));
110
+ };
111
+ var copySharedTemplate = (sharedTemplateDir, appDir) => {
112
+ const destination = import_path.default.join(appDir, "_shared");
113
+ import_fs.default.cpSync(sharedTemplateDir, destination, { recursive: true, force: true });
114
+ };
115
+ var createPieAppCommand = (appName) => {
116
+ const trimmedAppName = appName.trim();
117
+ if (!trimmedAppName) {
118
+ console.error("[pieui] Error: App name is required for create-pie-app command");
119
+ process.exit(1);
120
+ }
121
+ const appDir = import_path.default.resolve(process.cwd(), trimmedAppName);
122
+ if (import_fs.default.existsSync(appDir)) {
123
+ console.error(`[pieui] Error: Target directory already exists: ${trimmedAppName}`);
124
+ process.exit(1);
125
+ }
126
+ const bunBin = process.env.PIEUI_CREATE_BUN_BIN || "bun";
127
+ const templateSpec = process.env.PIEUI_CREATE_NEXT_APP_SPEC || DEFAULT_TEMPLATE_SPEC;
128
+ console.log(`[pieui] Creating blank PieUI web template in "${trimmedAppName}"...`);
129
+ const args = ["create", templateSpec, trimmedAppName, "--yes"];
130
+ const result = import_child_process.spawnSync(bunBin, args, {
131
+ cwd: process.cwd(),
132
+ stdio: "inherit",
133
+ env: process.env
134
+ });
135
+ if (result.error) {
136
+ throw result.error;
137
+ }
138
+ if (result.status !== 0) {
139
+ throw new Error(`create-pie-app failed (exit code ${result.status ?? "unknown"})`);
140
+ }
141
+ const sharedTemplateDir = resolveSharedTemplateDir();
142
+ copySharedTemplate(sharedTemplateDir, appDir);
143
+ updateNextScriptsToBun(import_path.default.join(appDir, "package.json"));
144
+ appendBackendLinkComment(import_path.default.join(appDir, "app", "page.tsx"));
145
+ console.log("[pieui] Template created successfully.");
146
+ console.log(`[pieui] Copied _shared from: ${sharedTemplateDir}`);
147
+ console.log(`[pieui] Next steps:`);
148
+ console.log(` 1. cd ${trimmedAppName}`);
149
+ console.log(` 2. bun install`);
150
+ console.log(` 3. bun run dev`);
151
+ };
152
+
153
+ // src/create.ts
154
+ var main = () => {
155
+ const [appName = ""] = process.argv.slice(2);
156
+ if (!appName) {
157
+ console.error("Usage: bun create pieui@latest <app-name>");
158
+ process.exit(1);
159
+ }
160
+ createPieAppCommand(appName);
161
+ };
162
+ main();
@@ -0,0 +1,24 @@
1
+ export * from './components';
2
+ export { default as UI } from './components/UI';
3
+ export { default as UILoading } from './components/UILoading';
4
+ export { default as UIRendererContext, type UIRendererProps, } from './util/uiRenderer';
5
+ export { default as PieRoot } from './components/PieRoot';
6
+ export { default as PieTelegramRoot } from './components/PieTelegramRoot';
7
+ export { default as PieBaseRoot } from './components/PieBaseRoot';
8
+ export { default as PieMaxRoot } from './components/PieMaxRoot';
9
+ export { default as PieCard } from './components/PieCard';
10
+ export { registerPieComponent, getAllRegisteredComponents, getRegistrySize, registry, hasComponent, getRegistryEntry, getComponentMeta, registerMultipleComponents, unregisterComponent, } from './util/registry';
11
+ export type { PieComponentProps, PieSimpleComponentProps, PieComplexComponentProps, PieContainerComponentProps, PieComplexContainerComponentProps, PieConfig, UIConfigType, SetUiAjaxConfigurationType, } from './types';
12
+ export type { PieQueryOptions } from './components/PieRoot/types';
13
+ export { useAjaxSubmit } from './util/ajaxCommonUtils';
14
+ export type { RetryPolicy } from './util/ajaxCommonUtils';
15
+ export { usePieEmit } from './util/mitt';
16
+ export { getMittAgentTools, usePieMittAgentTools, type MittAgentTool, type MittAgentToolDescriptor, type MittAgentToolsOptions, } from './util/mittAgentTools';
17
+ export { default as useOpenAIWebRTC, type OpenAIEvent, type UseOpenAIWebRTCReturn, } from './util/useOpenAIWebRTC';
18
+ export { cn } from './util/tailwindCommonUtils';
19
+ export { PIEBREAK } from './util/pieConfig';
20
+ export { submitGlobalForm } from './util/globalForm.ts';
21
+ export { pieName } from './util/pieName';
22
+ export { useWebApp } from './util/useWebApp';
23
+ export { useMaxWebApp } from './util/useMaxWebApp';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/D,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,GACtB,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACR,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,SAAS,EACT,YAAY,EACZ,0BAA0B,GAC7B,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACH,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC7B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,OAAO,IAAI,eAAe,EAC1B,KAAK,WAAW,EAChB,KAAK,qBAAqB,GAC7B,MAAM,wBAAwB,CAAA;AAC/B,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;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{useContext as Vf,useEffect as If,useRef as MU}from"react";import{createContext as BU,useContext as WU}from"react";var j=BU(null),h=()=>{let f=WU(j);if(!f)throw new Error("usePieConfig must be used within PieConfigProvider");return f},x=()=>{let{apiServer:f}=h();return f},e=x,d=()=>{let{centrifugeServer:f}=h();return f};var L=()=>{let{enableRenderingLog:f}=h();return f},Lf=L,Mf=()=>{let{pageProcessor:f}=h();return f};var Gf="__piedemo__";import{createContext as QU}from"react";import{Centrifuge as Af}from"centrifuge";var Nf=new Map,u=(f,U)=>{if(!U)return null;let D=`${f}::${U}`,H=Nf.get(D);if(H)return H;async function z(){let $=await fetch(f+"api/centrifuge/gen_token");if(!$.ok){if($.status===403)throw new Af.UnauthorizedError("Backend is not answering");throw new Error(`Unexpected status code ${$.status}`)}return(await $.json()).token}let Z=new Af(U,{getToken:z});return Nf.set(D,Z),Z},CU=QU(null),y=CU;import{io as OU}from"socket.io-client";import{createContext as _U}from"react";var yf=new Map,b=(f)=>{let U=yf.get(f);if(U)return U;let D=OU(f,{autoConnect:!1,transports:["websocket"]});return yf.set(f,D),D},RU=_U(null),o=RU;import wU from"mitt";import{createContext as FU,useCallback as KU,useContext as SU}from"react";var Pf=null;function E(){if(!Pf)Pf=wU();return Pf}var of=FU(null);function LU(f){let U=SU(of);return KU((D,H)=>{(U??E()).emit(`pie${D}_${f}`,H)},[f,U])}var K=of;var AU=({card:f,data:U,children:D,useSocketioSupport:H=!1,useCentrifugeSupport:z=!1,useMittSupport:Z=!1,centrifugeChannel:$=void 0,methods:G=void 0})=>{let T=Lf(),P=MU(G);if(P.current=G,T)console.log("[PieCard] Rendering card:",f),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:H,centrifuge:z,mitt:Z,centrifugeChannel:$}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!D);let X=Vf(o),B=Vf(y),q=Vf(K);if(If(()=>{if(!X||!H||!P.current||!U.name){if(T&&H)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!X,useSocketioSupport:H,hasMethods:!!P.current,hasDataName:!!U?.name});return}let I=Object.keys(P.current??{}).map((V)=>{let J=`pie${V}_${U.name}`;if(T)console.log(`[PieCard] Socket.IO registering event: ${J}`);let W=(Q)=>{P.current?.[V]?.(Q)};return X.on(J,W),[J,W]});return()=>{I.forEach(([V,J])=>{if(T)console.log(`[PieCard] Socket.IO unregistering event: ${V}`);X.off(V,J)})}},[X,U.name,H]),If(()=>{if(!B||!z||!$||!U.name){if(T&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!B,useCentrifugeSupport:z,hasCentrifugeChannel:!!$,hasMethods:!!P.current,hasDataName:!!U?.name});return}let I=Object.keys(P.current??{}).map((V)=>{let J=`pie${V}_${U.name}_${$}`;if(T)console.log(`[PieCard] Centrifuge subscribing to channel: ${J}`);let W=B.newSubscription(J);return W.on("publication",(Q)=>{if(T)console.log(`[PieCard] Centrifuge received data on ${J}:`,Q.data);P.current?.[V]?.(Q.data)}),W.subscribe(),W});return()=>{I.forEach((V)=>{if(T)console.log("[PieCard] Centrifuge unsubscribing from channel");V.unsubscribe(),B.removeSubscription(V)})}},[B,$,U.name,z]),If(()=>{if(!q||!Z||!U.name){if(T&&Z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!q,useMittSupport:Z,hasMethods:!!P.current,hasDataName:!!U?.name});return}let Y=Object.keys(P.current??{}),I={};return Y.forEach((V)=>{let J=`pie${V}_${U.name}`,W=(Q)=>{if(T)console.log(`[PieCard] Mitt registering event: ${J}`);P.current?.[V]?.(Q)};I[J]=W,q.on(J,W)}),()=>{Object.entries(I).forEach(([V,J])=>{if(T)console.log(`[PieCard] Mitt unregistering event: ${V}`);q.off(V,J)})}},[q,U.name,Z]),T)console.log("[PieCard] Rendering complete, returning children");return D},_=AU;import{lazy as NU}from"react";var Jf=new Map;function Ef(f,U){return NU(()=>{if(Jf.has(U))return Jf.get(U);let D=f().then((H)=>H);return Jf.set(U,D),D})}var g=new Map,yU=(f)=>{if(!f.name)throw new Error("Component registration requires a name");if(!f.component&&!f.loader)throw new Error(`Component "${f.name}" requires component or loader`);let U={name:f.name,component:f.component,loader:f.loader,metadata:f.metadata,fallback:f.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=Ef(U.loader,f.name),U.loader=void 0,U.isLazy=!0;return U};function O(f){let U=yU(f);return g.set(U.name,U),U.component}var oU=(f)=>{f.forEach((U)=>O(U))},EU=(f)=>{g.delete(f)},mU=(f)=>{return g.has(f)},kU=(f)=>{return g.get(f)?.metadata},r=(f)=>{return g.get(f)},jU=()=>{return Array.from(g.keys())},xU=()=>{return g.size};import{Suspense as vU,useContext as pU,memo as cU}from"react";import{createContext as dU}from"react";import{jsx as gU,Fragment as bU}from"react/jsx-runtime";var uU=dU(gU(bU,{})),w=uU;import{jsx as Yf}from"react/jsx-runtime";function hU({uiConfig:f,setUiAjaxConfiguration:U}){let D=pU(w),H=L();if(H)console.log("[UI] Rendering component:",f.card),console.log("[UI] Component data:",f.data),console.log("[UI] Component content:",f.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let z=r(f.card);if(!z?.component){if(H)console.warn(`[UI] Component not found in registry: ${f.card}`),console.log("[UI] Returning fallback component");return D}if(H)console.log("[UI] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata});let Z=z.component,$=Yf(Z,{data:f.data,content:f.content,setUiAjaxConfiguration:U});if(z.isLazy){if(H)console.log("[UI] Rendering lazy component with Suspense:",z.name);return Yf(vU,{fallback:z.fallback?Yf(z.fallback,{}):D,children:$},`${z.name}`)}if(H)console.log("[UI] Rendering component directly:",z.name);return $}var F=cU(hU);import{Suspense as nU,useContext as sU}from"react";import{createContext as lU}from"react";var rU=lU(null),k=rU;import{jsx as ff}from"react/jsx-runtime";function mf({uiConfig:f,setUiAjaxConfiguration:U}){let D=sU(w),H=L();if(H)console.log("[UILoading] Rendering fallback for:",f.card),console.log("[UILoading] Component data:",f.data),console.log("[UILoading] Component content:",f.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let z=r(f.card);if(!z?.component){if(H)console.warn(`[UILoading] Component not found in registry: ${f.card}`),console.log("[UILoading] Returning fallback component");return D}if(H)console.log("[UILoading] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata,hasFallback:!!z.fallback});if(z.fallback){if(H)console.log("[UILoading] Rendering fallback for:",z.name);let G=z.fallback;return ff(G,{})}if(H)console.log("[UILoading] No fallback, rendering full component:",z.name);let Z=z.component,$=ff(k.Provider,{value:mf,children:ff(Z,{data:f.data,content:f.content,setUiAjaxConfiguration:U})});if(z.isLazy)return ff(nU,{fallback:D,children:$},`${z.name}`);return $}var Xf=mf;import{useContext as iU}from"react";import{jsx as qf}from"react/jsx-runtime";var tU=({data:f,content:U,setUiAjaxConfiguration:D})=>{let{name:H,sx:z}=f,Z=iU(k)??F;return qf(_,{card:H,data:f,children:qf("div",{style:z,id:H,children:U.map(($,G)=>{return qf(Z,{uiConfig:$,setUiAjaxConfiguration:D},`children-${G}`)})})})},kf=tU;var aU=O({name:"SequenceCard",component:kf,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useContext as eU}from"react";import{jsx as jf}from"react/jsx-runtime";var fH=({data:f,content:U,setUiAjaxConfiguration:D})=>{let{name:H}=f,z=eU(k)??F;return jf(_,{card:H,data:f,children:U.map((Z,$)=>{return jf(z,{uiConfig:Z,setUiAjaxConfiguration:D},`children-${$}`)})})},xf=fH;var UH=O({name:"UnionCard",component:xf,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});import{useEffect as DH,useState as $H}from"react";import TH from"html-react-parser";import{useCallback as Uf,useEffect as HH,useRef as Bf,useState as ZH}from"react";function zH(){let f=new AudioContext,U=f.createOscillator(),D=U.connect(f.createMediaStreamDestination());U.start();let H=D.stream.getAudioTracks()[0];return H.enabled=!1,H}function Hf(f=null,U){let[D,H]=ZH(!1),z=Bf(null),Z=Bf(null),$=Bf(null),G=Uf(async(B,q=!0)=>{if(z.current)T();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")H(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))H(!1)},Y.ontrack=(R)=>{if(f)f.srcObject=R.streams[0]},q){let R=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack(R.getTracks()[0],R)}else{let R=zH();Y.addTrack(R)}let I=Y.createDataChannel("oai-events");Z.current=I,$.current=new Promise((R)=>{I.addEventListener("open",()=>{R()})});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 ${B}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:C}),z.current=Y,await $.current},[f]),T=Uf(()=>{let B=Z.current;if(B)B.close();z.current?.getSenders()?.forEach((q)=>q.track?.stop()),z.current?.close(),H(!1),z.current=null,Z.current=null,$.current=null},[f]),P=Uf((B)=>{let q=Z.current;if(!q){console.error("Data channel is not ready",B);return}let Y=new Date().toLocaleTimeString();if(B.event_id=B.event_id||crypto.randomUUID(),q.send(JSON.stringify(B)),!B.timestamp)B.timestamp=Y;U?.(B)},[U,f]),X=Uf((B)=>{if(!Z.current){console.error("Data channel is not ready");return}let Y=()=>{P({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:B}]}}),P({type:"response.create"})};if($.current)$.current.then(Y);else Y()},[U,f]);return HH(()=>{let B=Z.current;if(!B)return;let q=(Y)=>{let I=JSON.parse(Y.data);if(!I.timestamp)I.timestamp=new Date().toLocaleTimeString();U?.(I)};return B.addEventListener("message",q),()=>{B.removeEventListener("message",q)}},[U,f]),{isSessionActive:D,startSession:G,stopSession:T,sendTextMessage:X}}import{jsx as PH}from"react/jsx-runtime";var GH=({data:f})=>{let{html:U,useSocketioSupport:D,useCentrifugeSupport:H,useMittSupport:z,centrifugeChannel:Z}=f,[$,G]=$H(U),{isSessionActive:T,startSession:P,sendTextMessage:X}=Hf(null,(I)=>{if(console.log(I.type,I.type==="response.output_text.delta"&&I.delta),I.type==="response.output_text.delta"&&I.delta)G((V)=>V+I.delta)});return DH(()=>{G(U)},[U]),PH(_,{card:"HTMLEmbedCard",data:f,methods:{update:(I)=>{G(I.value)},generateUsingAI:async(I)=>{try{if(!T&&I.token)await P(I.token,!1);X(I.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(I)=>{if(!T&&I.token)await P(I.token,!1)}},useCentrifugeSupport:H,useSocketioSupport:D,useMittSupport:z,centrifugeChannel:Z,children:TH($)})},df=GH;var VH=O({name:"HTMLEmbedCard",component:df,metadata:{author:"Swarm.ing"}});import{useEffect as IH,useState as JH}from"react";import{jsx as uf}from"react/jsx-runtime";var YH=({data:f})=>{let{name:U,value:D,useSocketioSupport:H,useCentrifugeSupport:z,useMittSupport:Z,centrifugeChannel:$}=f,[G,T]=JH(D);return IH(()=>{T(D)},[D]),uf(_,{card:"HiddenCard",data:f,useSocketioSupport:H,useCentrifugeSupport:z,useMittSupport:Z,centrifugeChannel:$,methods:{update:({value:P})=>{T(P)}},children:uf("input",{type:"hidden",id:U,name:U,value:G})})},bf=YH;var XH=O({name:"HiddenCard",component:bf,metadata:{author:"Swarm.ing"}});import{useContext as gf,useEffect as WH}from"react";import{createContext as qH}from"react";var BH=qH(void 0),S=BH;import{jsx as OH,Fragment as CH}from"react/jsx-runtime";var QH=({data:f})=>{let{url:U}=f,D=gf(S),H=gf(w);return WH(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else D?.(U)},[U,D]),OH(CH,{children:H})},vf=QH;var _H=O({name:"AutoRedirectCard",component:vf,metadata:{author:"Swarm.ing"}});import{Bounce as RH,Slide as wH,Zoom as FH,Flip as KH}from"react-toastify";import{toast as SH,ToastContainer as LH}from"react-toastify";import{useContext as MH,useMemo as AH,useRef as NH}from"react";import{jsx as Wf,Fragment as jH}from"react/jsx-runtime";var yH={bounce:RH,slide:wH,zoom:FH,flip:KH},oH=(f)=>{let U={...f,type:f.alertType,transition:f.transition?yH[f.transition]:void 0,position:f.position??"bottom-right",autoClose:f.autoClose??3000,style:{backgroundColor:"black",...f.sx}};SH(f.message,U)},EH=(f)=>{console.log("Log event",f)},mH=(f)=>{if(typeof window==="undefined"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(f.title,{body:f.message??f.subtitle,icon:f.icon,silent:f.silent})}catch(H){console.error("[IOEventsCard] Failed to show notification",H)}},D=window.Notification.permission;if(D==="granted"){U();return}if(D==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((H)=>{if(H==="granted")U()})},kH=({data:f})=>{let{useCentrifugeSupport:U,useSocketioSupport:D,useMittSupport:H,centrifugeChannel:z}=f,Z=MH(S),$=NH(Z);$.current=Z;let G=AH(()=>({alert:oH,log:EH,push:mH,redirect:(T)=>{if(T.to){let P=T.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else $.current?.(P)}else window.location.reload()},reload:(T)=>{if(T.to){let P=T.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else $.current?.(P)}else window.location.reload()}}),[]);return Wf(jH,{children:Wf(_,{card:"IOEventsCard",data:f,useCentrifugeSupport:U,useSocketioSupport:D,useMittSupport:H,centrifugeChannel:z,methods:G,children:Wf(LH,{})})})},pf=kH;var xH=O({name:"IOEventsCard",component:pf,metadata:{author:"Swarm.ing"}});import{useEffect as cf,useState as dH}from"react";import{jsx as hf}from"react/jsx-runtime";var uH=({data:f})=>{let{name:U,key:D,value:H,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=dH(H);return cf(()=>{P(H)},[H]),cf(()=>{if(typeof window==="undefined")return;sessionStorage.setItem(D,T)},[D,T]),hf(_,{card:"SessionStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{sessionStorage.removeItem(D),P("")}},children:hf("input",{type:"hidden",id:U,name:U,value:T})})},lf=uH;var bH=O({name:"SessionStorageCard",component:lf,metadata:{author:"PieData"}});import{useEffect as rf,useState as gH}from"react";import{jsx as nf}from"react/jsx-runtime";var vH=({data:f})=>{let{name:U,key:D,value:H,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=gH(H);return rf(()=>{P(H)},[H]),rf(()=>{if(typeof window==="undefined")return;localStorage.setItem(D,T)},[D,T]),nf(_,{card:"DeviceStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{localStorage.removeItem(D),P("")}},children:nf("input",{type:"hidden",id:U,name:U,value:T})})},sf=vH;var pH=O({name:"DeviceStorageCard",component:sf,metadata:{author:"PieData"}});import{useEffect as tf,useState as cH}from"react";import{jsx as af}from"react/jsx-runtime";var hH=({data:f})=>{let{name:U,key:D,value:H,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=cH(H);return tf(()=>{P(H)},[H]),tf(()=>{if(typeof window==="undefined")return;let X=window.Telegram?.WebApp?.CloudStorage;if(!X)return;X.setItem(D,T)},[D,T]),af(_,{card:"CloudStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{let X=window.Telegram?.WebApp?.CloudStorage;if(X)X.removeItem(D);P("")}},children:af("input",{type:"hidden",id:U,name:U,value:T})})},ef=hH;var lH=O({name:"CloudStorageCard",component:ef,metadata:{author:"PieData"}});import{useEffect as fU,useState as rH}from"react";import{jsx as UU}from"react/jsx-runtime";var nH=({data:f})=>{let{name:U,key:D,value:H,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=rH(H);return fU(()=>{P(H)},[H]),fU(()=>{if(typeof window==="undefined")return;let X=window.Telegram?.WebApp?.SecureStorage;if(!X)return;X.setItem(D,T)},[D,T]),UU(_,{card:"SecureStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:Z,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{let X=window.Telegram?.WebApp?.SecureStorage;if(X)X.removeItem(D);P("")}},children:UU("input",{type:"hidden",id:U,name:U,value:T})})},HU=nH;var sH=O({name:"SecureStorageCard",component:HU,metadata:{author:"PieData"}});import{useCallback as Qf,useContext as Cf,useEffect as iH,useRef as tH,useState as ZU}from"react";import{jsx as zU}from"react/jsx-runtime";var aH=({data:f,content:U})=>{let{useLoader:D,noReturn:H,returnType:z,useSocketioSupport:Z,useCentrifugeSupport:$,useMittSupport:G,centrifugeChannel:T}=f,P=Cf(w),X=Cf(k)??F,[B,q]=ZU(!1),[Y,I]=ZU(null),V=tH(U),J=Cf(K),W=Qf((R)=>{if(R===null)q(!0);else if(q(!1),!H)V.current=R;if(!H)I(R)},[H]),Q=Qf((R)=>{V.current=R.content,I(R.content)},[]),C=Qf((R)=>{if(R===null)q(!0);else if(q(!1),!H)for(let t of R)J?.emit(t.name,t.data)},[H,J]);if(iH(()=>{I(U),q(!1)},[U]),!Y&&D)return P;return zU(_,{card:"AjaxGroupCard",data:f,methods:{changeContent:Q},useSocketioSupport:Z,useCentrifugeSupport:$,useMittSupport:G,centrifugeChannel:T,children:zU(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:z==="events"?C:W})})},DU=aH;var eH=O({name:"AjaxGroupCard",component:DU,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});import{useContext as $U}from"react";import{jsx as Of}from"react/jsx-runtime";var fZ=({data:f,content:U,setUiAjaxConfiguration:D})=>{let{name:H,url:z,sx:Z}=f,$=$U(S),G=$U(k)??F;return Of(_,{card:H,data:f,children:Of("div",{style:Z,id:H,onClick:(P)=>{if(z)if(P.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else $?.(z)},children:Of(G,{setUiAjaxConfiguration:D,uiConfig:U})})})},TU=fZ;var UZ=O({name:"BoxCard",component:TU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});import{useMemo as n}from"react";import{QueryClient as IZ,QueryClientProvider as JZ,useQuery as YZ}from"@tanstack/react-query";import{useContext as zZ,useEffect as DZ}from"react";import{useEffect as HZ,useState as ZZ}from"react";var Zf=new Map,zf=new Map;function Df(f,U){let D=`${f}::${U}`,H=f?Zf.get(D):void 0,[z,Z]=ZZ(H??null);return HZ(()=>{if(!f)return;if(Zf.has(D)){Z(Zf.get(D));return}let $=zf.get(D);if(!$)$=fetch(f+`api/support/${U}`,{method:"GET"}).then((T)=>T.json()).then((T)=>{return Zf.set(D,T),zf.delete(D),T}).catch((T)=>{throw zf.delete(D),T}),zf.set(D,$);let G=!1;return $.then((T)=>{if(!G)Z(T)}).catch(()=>{}),()=>{G=!0}},[f,U,D]),z}var _f=null,GU=null;function PU(){GU?.()}function Rf(){if(typeof window==="undefined")return Promise.resolve();if(typeof window.sid!=="undefined")return Promise.resolve();if(!_f)_f=new Promise((f)=>{GU=()=>{f()}});return _f}var $Z=({children:f})=>{let U=zZ(o),D=e(),H=Df(D,"socketIO"),z=(Z)=>{if(typeof window!=="undefined")window.sid=Z.sid,PU(),console.log(`SocketIO initialized: ${window.sid}`)};return DZ(()=>{if(!U)return;let Z=()=>{console.log("SocketIO connected")},$=(G)=>{console.log(`SocketIO disconnected: ${G}`),U.connect()};if(H)U.on("pieinit",z),U.on("connect",Z),U.on("disconnect",$),U.connect();return()=>{if(H)U.off("pieinit",z),U.off("connect",Z),U.off("disconnect",$),U.disconnect()}},[U,H]),f},v=$Z;import{useContext as TZ,useEffect as GZ}from"react";var PZ=({children:f})=>{let U=TZ(y),D=e(),H=Df(D,"centrifuge");return GZ(()=>{if(!U)return;let z=()=>{console.log("Centrifuge connected")},Z=($)=>{console.log("Centrifuge disconnected:",$)};if(H)U.on("connected",z),U.on("disconnected",Z),U.connect();return()=>{if(H)U.disconnect()}},[U,H]),f},p=PZ;import{createAxiosDateTransformer as XZ}from"axios-date-transformer";import{jsx as VZ}from"react/jsx-runtime";function l(f,U,D){if(!U)return D;let H=f.replace(/^\//,""),z=U[H];if(!z)return D;return VZ(Xf,{uiConfig:z})}import{jsx as M,Fragment as WZ}from"react/jsx-runtime";var qZ=({location:f,fallback:U,piecache:D,onError:H,queryOptions:z})=>{let Z=x(),$=d(),G=L(),T=n(()=>XZ({baseURL:Z||""}),[Z]),P=n(()=>E(),[]),X=n(()=>Z?b(Z):null,[Z]),B=n(()=>Z?u(Z,$):null,[Z,$]),{data:q,isLoading:Y,error:I}=YZ({queryKey:["uiConfig",f.pathname+f.search,Z],enabled:!!Z,queryFn:async()=>{let J=new URLSearchParams(f.search);J.set("__pieroot","web");let W="/api/content"+f.pathname+"?"+J.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",W);let Q=await T.get(W,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",Q.data);return Q.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(J)=>Math.min(1000*2**J,30000),...z}),V=l(f.pathname,D,U);if(!Z)return V??null;if(G)console.log("[PieRoot] Rendering with location:",f),console.log("[PieRoot] API_SERVER:",Z),console.log("[PieRoot] CENTRIFUGE_SERVER:",$),console.log("[PieRoot] Fallback provided:",!!U),console.log("[PieRoot] Piecache provided:",!!D);if(I){if(G)console.error("[PieRoot] Error fetching UI configuration:",I),console.error("[PieRoot] Error details:",{message:I.message,status:I.response?.status,data:I.response?.data});return H?.(),V}if(Y||!q){if(G)console.log("[PieRoot] Loading state:",{isLoading:Y,hasUiConfiguration:!!q});return V}if(G)console.log("[PieRoot] UI configuration loaded successfully:",q),console.log("[PieRoot] Rendering UI with configuration");return M(K.Provider,{value:P,children:M(o.Provider,{value:X,children:M(y.Provider,{value:B,children:M(w.Provider,{value:U??M(WZ,{}),children:M(v,{children:M(p,{children:M("form",{id:"piedata_global_form",action:Z+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:M(F,{uiConfig:q})})})})})})})})},BZ=(f)=>{let U=n(()=>new IZ,[]);return M(S.Provider,{value:f.onNavigate,children:M(j.Provider,{value:f.config,children:M(JZ,{client:U,children:M(qZ,{...f})})})})},QZ=BZ;import{useMemo as s}from"react";import{QueryClient as _Z,QueryClientProvider as RZ,useQuery as wZ}from"@tanstack/react-query";import{createAxiosDateTransformer as FZ}from"axios-date-transformer";import{useEffect as CZ,useState as OZ}from"react";var wf=({onError:f}={})=>{let[U,D]=OZ(null),H=Mf();return CZ(()=>{if(typeof window==="undefined")return;let z=window.Telegram?.WebApp;if(!z)return;try{z.ready?.()}catch(Z){f?.()}if(H==="telegram_expanded"&&(z.platform==="ios"||z.platform==="android"))z.expand();D(z)},[]),U};import{jsx as A,Fragment as LZ}from"react/jsx-runtime";var KZ=({location:f,fallback:U,piecache:D,onError:H,queryOptions:z})=>{let Z=x(),$=d(),G=L(),T=s(()=>FZ({baseURL:Z}),[Z]),P=s(()=>E(),[]),X=s(()=>Z?b(Z):null,[Z]),B=s(()=>Z?u(Z,$):null,[Z,$]),q=wf({onError:H}),{data:Y,isLoading:I,error:V}=wZ({queryKey:["uiConfig",f.pathname+f.search,q?.initData],enabled:!!q?.initData,queryFn:async()=>{let W=new URLSearchParams(f.search);if(W.set("__pieroot","telegram"),q?.initData)W.set("initData",q.initData);let Q="/api/content"+f.pathname+"?"+W.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",Q);let C=await T.get(Q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",C.data);return C.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(W)=>Math.min(1000*2**W,30000),...z}),J=l(f.pathname,D,U);if(!Z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(V&&G)return console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data}),H?.(),J;if(I||!Y){if(G)console.log("[PieRoot] Loading state:",{isLoading:I,hasUiConfiguration:!!Y});return J}if(G)console.log("[PieRoot] UI configuration loaded successfully:",Y),console.log("[PieRoot] Rendering UI with configuration");return A(K.Provider,{value:P,children:A(o.Provider,{value:X,children:A(y.Provider,{value:B,children:A(w.Provider,{value:U??A(LZ,{}),children:A(v,{children:A(p,{children:A("form",{id:"piedata_global_form",action:Z+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:A(F,{uiConfig:Y})})})})})})})})},SZ=(f)=>{let U=s(()=>new _Z,[]);return A(S.Provider,{value:f.onNavigate,children:A(j.Provider,{value:f.config,children:A(RZ,{client:U,children:A(KZ,{...f})})})})},MZ=SZ;import{useMemo as Ff,useState as AZ}from"react";import{QueryClient as NZ,QueryClientProvider as yZ}from"@tanstack/react-query";import{jsx as m,Fragment as mZ}from"react/jsx-runtime";var oZ=({location:f,fallback:U,children:D})=>{let H=x(),z=d(),Z=L(),$=Ff(()=>E(),[]),G=Ff(()=>H?b(H):null,[H]),T=Ff(()=>H?u(H,z):null,[H,z]);if(Z)console.log("[PieRoot] Rendering with location:",f),console.log("[PieRoot] API_SERVER:",H),console.log("[PieRoot] CENTRIFUGE_SERVER:",z),console.log("[PieRoot] Fallback provided:",!!U);return m(K.Provider,{value:$,children:m(o.Provider,{value:G,children:m(y.Provider,{value:T,children:m(w.Provider,{value:U??m(mZ,{}),children:m(v,{children:m(p,{children:m("form",{id:"piedata_global_form",action:H+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:D})})})})})})})},EZ=(f)=>{let[U]=AZ(()=>new NZ);return m(S.Provider,{value:f.onNavigate,children:m(j.Provider,{value:f.config,children:m(yZ,{client:U,children:m(oZ,{...f})})})})},kZ=EZ;import{useMemo as i}from"react";import{QueryClient as dZ,QueryClientProvider as uZ,useQuery as bZ}from"@tanstack/react-query";import{createAxiosDateTransformer as gZ}from"axios-date-transformer";import{useEffect as jZ,useState as xZ}from"react";var Kf=()=>{let[f,U]=xZ(null);return jZ(()=>{if(typeof window==="undefined")return;let D=window.WebApp;if(!D)return;D.ready(),U(D)},[]),f};import{jsx as N,Fragment as cZ}from"react/jsx-runtime";var vZ=({location:f,fallback:U,piecache:D,onError:H,queryOptions:z})=>{let Z=x(),$=d(),G=L(),T=i(()=>gZ({baseURL:Z}),[Z]),P=i(()=>E(),[]),X=i(()=>Z?b(Z):null,[Z]),B=i(()=>Z?u(Z,$):null,[Z,$]),q=Kf(),{data:Y,isLoading:I,error:V}=bZ({queryKey:["uiConfig",f.pathname+f.search,q?.initData],queryFn:async()=>{let W=new URLSearchParams(f.search);if(W.set("__pieroot","max"),q?.initData)W.set("initData",q.initData);let Q="/api/content"+f.pathname+"?"+W.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",Q);let C=await T.get(Q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",C.data);return C.data},enabled:!!q?.initData,staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(W)=>Math.min(1000*2**W,30000),...z}),J=l(f.pathname,D,U);if(!Z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(V&&G)return console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data}),H?.(),J;if(I||!Y){if(G)console.log("[PieRoot] Loading state:",{isLoading:I,hasUiConfiguration:!!Y});return J}if(G)console.log("[PieRoot] UI configuration loaded successfully:",Y),console.log("[PieRoot] Rendering UI with configuration");return N(K.Provider,{value:P,children:N(o.Provider,{value:X,children:N(y.Provider,{value:B,children:N(w.Provider,{value:U??N(cZ,{}),children:N(v,{children:N(p,{children:N("form",{id:"piedata_global_form",action:Z+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:N(F,{uiConfig:Y})})})})})})})})},pZ=(f)=>{let U=i(()=>new dZ,[]);return N(S.Provider,{value:f.onNavigate,children:N(j.Provider,{value:f.config,children:N(uZ,{client:U,children:N(vZ,{...f})})})})},hZ=pZ;import{useMemo as lZ}from"react";var rZ=(f,U={},D=[],H,z)=>{let Z=z?.renderingLogEnabled??!1,$=z?.timeout,G=z?.retryPolicy,T=G?.maxRetries??0,P=G?.baseDelay??1000,X=G?.retryOn??[502,503,504];if(Z)console.log("Registering AJAX: ",H,U,D);return async(B={})=>{if(typeof window==="undefined"||typeof document==="undefined"){if(Z)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let q=z?.apiServer;if(!q){if(Z)console.warn("AJAX skipped: apiServer is missing");return}if(!H||!f){if(Z)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(D.includes("sid"))await Rf();let Y=new FormData;for(let[J,W]of Object.entries({...U,...B}))Y.append(J,W);for(let J of D)if(J==="sid"){if(!window.sid)throw new Error("SocketIO isn't initialized properly");Y.append("sid",window.sid)}else{let W=document.getElementsByName(J);if(!W.length){if(Z)console.warn(`No input found with name ${J}`);continue}let Q=W[0];if(Q instanceof HTMLInputElement)if(Q.type==="file"&&Q.files)Array.from(Q.files).forEach((C)=>Y.append(J,C));else Y.append(J,Q.value);else if(Q instanceof HTMLTextAreaElement)Y.append(J,Q.value)}let I=q+"api/ajax_content"+H;f(null);let V;for(let J=0;J<=T;J++){if(J>0){let C=P*2**(J-1);if(Z)console.log(`AJAX retry ${J}/${T} after ${C}ms`);await new Promise((R)=>setTimeout(R,C))}let W=$!=null?new AbortController:null,Q=W&&setTimeout(()=>W.abort(),$);try{let C=await fetch(I,{method:"POST",body:Y,signal:W?.signal});if(Q)clearTimeout(Q);if(!C.ok&&X.includes(C.status)&&J<T){V=new Error(`HTTP ${C.status}`);continue}let t=(C.headers.get("content-type")||"").includes("application/json");if(!!C.body?.getReader&&!t){let a=C.body.getReader(),JU=new TextDecoder,c="";while(!0){let{done:$f,value:YU}=await a.read();if($f)break;c+=JU.decode(YU,{stream:!0});let Sf=c.split(`
3
+ `);c=Sf.pop()??"";for(let XU of Sf){let Tf=XU.trim();if(!Tf)continue;try{let qU=JSON.parse(Tf);f([qU])}catch{if(Z)console.warn("Failed to parse streamed line:",Tf)}}}if(c.trim())try{let $f=JSON.parse(c);f([$f])}catch{if(Z)console.warn("Failed to parse final streamed line:",c)}return{}}else{let a=await C.json();return f(a),a}}catch(C){if(Q)clearTimeout(Q);if(V=C,J<T)continue;if(Z)console.error("AJAX request failed:",C);return f(null),C}}if(Z)console.error("AJAX request failed after retries:",V);return f(null),V}},nZ=(f,U={},D=[],H,z)=>{let{apiServer:Z,enableRenderingLog:$}=h(),G=JSON.stringify(U),T=JSON.stringify(D),P=JSON.stringify(z);return lZ(()=>rZ(f,U,D,H,{apiServer:Z,renderingLogEnabled:$,timeout:z?.timeout,retryPolicy:z?.retryPolicy}),[f,G,T,H,Z,$,P])};import{tool as sZ}from"@openai/agents";import{useContext as iZ,useMemo as tZ}from"react";var VU=/^pie(.+?)_(.+)$/;function IU(f=E(),U={}){let D=[],H=new Set;for(let z of f.all.keys()){if(typeof z!=="string")continue;let Z=z.match(VU);if(!Z)continue;let[,$,G]=Z,T={methodName:$,cardName:G,eventName:z};if(U.filter&&!U.filter(T))continue;let P=U.nameFor?.(T)??`${G}_${$}`;if(H.has(P))continue;H.add(P);let X=U.describe?.(T)??`Invokes the "${$}" method on the PieCard "${G}" by emitting the in-process mitt event "${z}". The optional "payload" argument is forwarded verbatim to the card's handler.`;D.push(sZ({name:P,description:X,strict:!1,parameters:{type:"object",properties:{payload:{description:"Arbitrary JSON payload forwarded to the PieCard method handler. Omit for fire-and-forget calls."}},required:[],additionalProperties:!0},execute:async(B)=>{let q=B?.payload;return f.emit(z,q),`Emitted "${z}"`}}))}return D}function aZ(f={}){let D=iZ(K)??E(),H=[];for(let T of D.all.keys())if(typeof T==="string"&&VU.test(T))H.push(T);H.sort();let z=H.join("|"),{filter:Z,describe:$,nameFor:G}=f;return tZ(()=>IU(D,{filter:Z,describe:$,nameFor:G}),[D,z,Z,$,G])}import{clsx as eZ}from"clsx";import{twMerge as fz}from"tailwind-merge";function Uz(...f){return fz(eZ(f))}var Hz=()=>{if(typeof document==="undefined")return;let f=document.getElementById("piedata_global_form");f&&f.submit()};var Zz=(f,U)=>`${f}${Gf}${U}`;export{wf as useWebApp,aZ as usePieMittAgentTools,LU as usePieEmit,Hf as useOpenAIWebRTC,Kf as useMaxWebApp,nZ as useAjaxSubmit,EU as unregisterComponent,Hz as submitGlobalForm,g as registry,O as registerPieComponent,oU as registerMultipleComponents,Zz as pieName,mU as hasComponent,xU as getRegistrySize,r as getRegistryEntry,IU as getMittAgentTools,kU as getComponentMeta,jU as getAllRegisteredComponents,Uz as cn,UH as UnionCard,k as UIRendererContext,Xf as UILoading,F as UI,bH as SessionStorageCard,aU as SequenceCard,sH as SecureStorageCard,MZ as PieTelegramRoot,QZ as PieRoot,hZ as PieMaxRoot,_ as PieCard,kZ as PieBaseRoot,Gf as PIEBREAK,xH as IOEventsCard,XH as HiddenCard,VH as HTMLEmbedCard,pH as DeviceStorageCard,lH as CloudStorageCard,UZ as BoxCard,_H as AutoRedirectCard,eH as AjaxGroupCard};
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ var oH=Object.create;var{getPrototypeOf:EH,defineProperty:Pf,getOwnPropertyNames:PU,getOwnPropertyDescriptor:mH}=Object,VU=Object.prototype.hasOwnProperty;var IU=(f,U,Z)=>{Z=f!=null?oH(EH(f)):{};let H=U||!f||!f.__esModule?Pf(Z,"default",{value:f,enumerable:!0}):Z;for(let z of PU(f))if(!VU.call(H,z))Pf(H,z,{get:()=>f[z],enumerable:!0});return H},GU=new WeakMap,kH=(f)=>{var U=GU.get(f),Z;if(U)return U;if(U=Pf({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")PU(f).map((H)=>!VU.call(U,H)&&Pf(U,H,{get:()=>f[H],enumerable:!(Z=mH(f,H))||Z.enumerable}));return GU.set(f,U),U};var jH=(f,U)=>{for(var Z in U)Pf(f,Z,{get:U[Z],enumerable:!0,configurable:!0,set:(H)=>U[Z]=()=>H})};var CZ={};jH(CZ,{useWebApp:()=>uf,usePieMittAgentTools:()=>RH,usePieEmit:()=>_U,useOpenAIWebRTC:()=>If,useMaxWebApp:()=>vf,useAjaxSubmit:()=>CH,unregisterComponent:()=>KU,submitGlobalForm:()=>SH,registry:()=>g,registerPieComponent:()=>C,registerMultipleComponents:()=>FU,pieName:()=>LH,hasComponent:()=>SU,getRegistrySize:()=>AU,getRegistryEntry:()=>t,getMittAgentTools:()=>$U,getComponentMeta:()=>LU,getAllRegisteredComponents:()=>MU,cn:()=>KH,UnionCard:()=>dU,UIRendererContext:()=>x,UILoading:()=>Kf,UI:()=>F,SessionStorageCard:()=>tU,SequenceCard:()=>kU,SecureStorageCard:()=>ZH,PieTelegramRoot:()=>XH,PieRoot:()=>JH,PieMaxRoot:()=>WH,PieCard:()=>_,PieBaseRoot:()=>qH,PIEBREAK:()=>_f,IOEventsCard:()=>sU,HiddenCard:()=>cU,HTMLEmbedCard:()=>vU,DeviceStorageCard:()=>eU,CloudStorageCard:()=>UH,BoxCard:()=>TH,AutoRedirectCard:()=>rU,AjaxGroupCard:()=>DH});module.exports=kH(CZ);var d=require("react");var Cf=require("react"),u=Cf.createContext(null),s=()=>{let f=Cf.useContext(u);if(!f)throw new Error("usePieConfig must be used within PieConfigProvider");return f},b=()=>{let{apiServer:f}=s();return f},Of=b,v=()=>{let{centrifugeServer:f}=s();return f};var o=()=>{let{enableRenderingLog:f}=s();return f},JU=o,YU=()=>{let{pageProcessor:f}=s();return f};var _f="__piedemo__";var qU=require("react"),lf=require("centrifuge"),XU=new Map,p=(f,U)=>{if(!U)return null;let Z=`${f}::${U}`,H=XU.get(Z);if(H)return H;async function z(){let $=await fetch(f+"api/centrifuge/gen_token");if(!$.ok){if($.status===403)throw new lf.Centrifuge.UnauthorizedError("Backend is not answering");throw new Error(`Unexpected status code ${$.status}`)}return(await $.json()).token}let D=new lf.Centrifuge(U,{getToken:z});return XU.set(Z,D),D},xH=qU.createContext(null),m=xH;var WU=require("socket.io-client"),QU=require("react"),BU=new Map,c=(f)=>{let U=BU.get(f);if(U)return U;let Z=WU.io(f,{autoConnect:!1,transports:["websocket"]});return BU.set(f,Z),Z},dH=QU.createContext(null),k=dH;var CU=IU(require("mitt")),i=require("react"),rf=null;function j(){if(!rf)rf=CU.default();return rf}var OU=i.createContext(null);function _U(f){let U=i.useContext(OU);return i.useCallback((Z,H)=>{(U??j()).emit(`pie${Z}_${f}`,H)},[f,U])}var N=OU;var uH=({card:f,data:U,children:Z,useSocketioSupport:H=!1,useCentrifugeSupport:z=!1,useMittSupport:D=!1,centrifugeChannel:$=void 0,methods:G=void 0})=>{let T=JU(),P=d.useRef(G);if(P.current=G,T)console.log("[PieCard] Rendering card:",f),console.log("[PieCard] Card data:",U),console.log("[PieCard] Component name:",U?.name),console.log("[PieCard] Real-time support:",{socketio:H,centrifuge:z,mitt:D,centrifugeChannel:$}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!Z);let X=d.useContext(k),B=d.useContext(m),q=d.useContext(N);if(d.useEffect(()=>{if(!X||!H||!P.current||!U.name){if(T&&H)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!X,useSocketioSupport:H,hasMethods:!!P.current,hasDataName:!!U?.name});return}let I=Object.keys(P.current??{}).map((V)=>{let J=`pie${V}_${U.name}`;if(T)console.log(`[PieCard] Socket.IO registering event: ${J}`);let W=(Q)=>{P.current?.[V]?.(Q)};return X.on(J,W),[J,W]});return()=>{I.forEach(([V,J])=>{if(T)console.log(`[PieCard] Socket.IO unregistering event: ${V}`);X.off(V,J)})}},[X,U.name,H]),d.useEffect(()=>{if(!B||!z||!$||!U.name){if(T&&z)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!B,useCentrifugeSupport:z,hasCentrifugeChannel:!!$,hasMethods:!!P.current,hasDataName:!!U?.name});return}let I=Object.keys(P.current??{}).map((V)=>{let J=`pie${V}_${U.name}_${$}`;if(T)console.log(`[PieCard] Centrifuge subscribing to channel: ${J}`);let W=B.newSubscription(J);return W.on("publication",(Q)=>{if(T)console.log(`[PieCard] Centrifuge received data on ${J}:`,Q.data);P.current?.[V]?.(Q.data)}),W.subscribe(),W});return()=>{I.forEach((V)=>{if(T)console.log("[PieCard] Centrifuge unsubscribing from channel");V.unsubscribe(),B.removeSubscription(V)})}},[B,$,U.name,z]),d.useEffect(()=>{if(!q||!D||!U.name){if(T&&D)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!q,useMittSupport:D,hasMethods:!!P.current,hasDataName:!!U?.name});return}let Y=Object.keys(P.current??{}),I={};return Y.forEach((V)=>{let J=`pie${V}_${U.name}`,W=(Q)=>{if(T)console.log(`[PieCard] Mitt registering event: ${J}`);P.current?.[V]?.(Q)};I[J]=W,q.on(J,W)}),()=>{Object.entries(I).forEach(([V,J])=>{if(T)console.log(`[PieCard] Mitt unregistering event: ${V}`);q.off(V,J)})}},[q,U.name,D]),T)console.log("[PieCard] Rendering complete, returning children");return Z},_=uH;var RU=require("react"),nf=new Map;function wU(f,U){return RU.lazy(()=>{if(nf.has(U))return nf.get(U);let Z=f().then((H)=>H);return nf.set(U,Z),Z})}var g=new Map,bH=(f)=>{if(!f.name)throw new Error("Component registration requires a name");if(!f.component&&!f.loader)throw new Error(`Component "${f.name}" requires component or loader`);let U={name:f.name,component:f.component,loader:f.loader,metadata:f.metadata,fallback:f.fallback,isLazy:!1};if(!U.component&&U.loader)U.component=wU(U.loader,f.name),U.loader=void 0,U.isLazy=!0;return U};function C(f){let U=bH(f);return g.set(U.name,U),U.component}var FU=(f)=>{f.forEach((U)=>C(U))},KU=(f)=>{g.delete(f)},SU=(f)=>{return g.has(f)},LU=(f)=>{return g.get(f)?.metadata},t=(f)=>{return g.get(f)},MU=()=>{return Array.from(g.keys())},AU=()=>{return g.size};var a=require("react");var NU=require("react"),Rf=require("react/jsx-runtime"),gH=NU.createContext(Rf.jsx(Rf.Fragment,{})),w=gH;var wf=require("react/jsx-runtime");function vH({uiConfig:f,setUiAjaxConfiguration:U}){let Z=a.useContext(w),H=o();if(H)console.log("[UI] Rendering component:",f.card),console.log("[UI] Component data:",f.data),console.log("[UI] Component content:",f.content),console.log("[UI] Has setUiAjaxConfiguration:",!!U);let z=t(f.card);if(!z?.component){if(H)console.warn(`[UI] Component not found in registry: ${f.card}`),console.log("[UI] Returning fallback component");return Z}if(H)console.log("[UI] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata});let D=z.component,$=wf.jsx(D,{data:f.data,content:f.content,setUiAjaxConfiguration:U});if(z.isLazy){if(H)console.log("[UI] Rendering lazy component with Suspense:",z.name);return wf.jsx(a.Suspense,{fallback:z.fallback?wf.jsx(z.fallback,{}):Z,children:$},`${z.name}`)}if(H)console.log("[UI] Rendering component directly:",z.name);return $}var F=a.memo(vH);var Ff=require("react");var yU=require("react"),pH=yU.createContext(null),x=pH;var Vf=require("react/jsx-runtime");function oU({uiConfig:f,setUiAjaxConfiguration:U}){let Z=Ff.useContext(w),H=o();if(H)console.log("[UILoading] Rendering fallback for:",f.card),console.log("[UILoading] Component data:",f.data),console.log("[UILoading] Component content:",f.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!U);let z=t(f.card);if(!z?.component){if(H)console.warn(`[UILoading] Component not found in registry: ${f.card}`),console.log("[UILoading] Returning fallback component");return Z}if(H)console.log("[UILoading] Found component in registry:",{name:z.name,isLazy:z.isLazy,hasMetadata:!!z.metadata,hasFallback:!!z.fallback});if(z.fallback){if(H)console.log("[UILoading] Rendering fallback for:",z.name);let G=z.fallback;return Vf.jsx(G,{})}if(H)console.log("[UILoading] No fallback, rendering full component:",z.name);let D=z.component,$=Vf.jsx(x.Provider,{value:oU,children:Vf.jsx(D,{data:f.data,content:f.content,setUiAjaxConfiguration:U})});if(z.isLazy)return Vf.jsx(Ff.Suspense,{fallback:Z,children:$},`${z.name}`);return $}var Kf=oU;var EU=require("react");var Sf=require("react/jsx-runtime"),cH=({data:f,content:U,setUiAjaxConfiguration:Z})=>{let{name:H,sx:z}=f,D=EU.useContext(x)??F;return Sf.jsx(_,{card:H,data:f,children:Sf.jsx("div",{style:z,id:H,children:U.map(($,G)=>{return Sf.jsx(D,{uiConfig:$,setUiAjaxConfiguration:Z},`children-${G}`)})})})},mU=cH;var kU=C({name:"SequenceCard",component:mU,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var jU=require("react");var sf=require("react/jsx-runtime"),hH=({data:f,content:U,setUiAjaxConfiguration:Z})=>{let{name:H}=f,z=jU.useContext(x)??F;return sf.jsx(_,{card:H,data:f,children:U.map((D,$)=>{return sf.jsx(z,{uiConfig:D,setUiAjaxConfiguration:Z},`children-${$}`)})})},xU=hH;var dU=C({name:"UnionCard",component:xU,metadata:{author:"Swarm.ing",description:"Renders one of many components"}});var Lf=require("react"),uU=IU(require("html-react-parser"));var E=require("react");function lH(){let f=new AudioContext,U=f.createOscillator(),Z=U.connect(f.createMediaStreamDestination());U.start();let H=Z.stream.getAudioTracks()[0];return H.enabled=!1,H}function If(f=null,U){let[Z,H]=E.useState(!1),z=E.useRef(null),D=E.useRef(null),$=E.useRef(null),G=E.useCallback(async(B,q=!0)=>{if(z.current)T();let Y=new RTCPeerConnection;if(Y.onconnectionstatechange=()=>{if(Y.connectionState==="connected")H(!0);else if(["disconnected","failed","closed"].includes(Y.connectionState))H(!1)},Y.ontrack=(R)=>{if(f)f.srcObject=R.streams[0]},q){let R=await navigator.mediaDevices.getUserMedia({audio:!0});Y.addTrack(R.getTracks()[0],R)}else{let R=lH();Y.addTrack(R)}let I=Y.createDataChannel("oai-events");D.current=I,$.current=new Promise((R)=>{I.addEventListener("open",()=>{R()})});let V=await Y.createOffer();await Y.setLocalDescription(V);let O=await(await fetch(`${"https://api.openai.com/v1/realtime/calls"}?model=${"gpt-realtime"}`,{method:"POST",body:V.sdp,headers:{Authorization:`Bearer ${B}`,"Content-Type":"application/sdp"}})).text();await Y.setRemoteDescription({type:"answer",sdp:O}),z.current=Y,await $.current},[f]),T=E.useCallback(()=>{let B=D.current;if(B)B.close();z.current?.getSenders()?.forEach((q)=>q.track?.stop()),z.current?.close(),H(!1),z.current=null,D.current=null,$.current=null},[f]),P=E.useCallback((B)=>{let q=D.current;if(!q){console.error("Data channel is not ready",B);return}let Y=new Date().toLocaleTimeString();if(B.event_id=B.event_id||crypto.randomUUID(),q.send(JSON.stringify(B)),!B.timestamp)B.timestamp=Y;U?.(B)},[U,f]),X=E.useCallback((B)=>{if(!D.current){console.error("Data channel is not ready");return}let Y=()=>{P({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:B}]}}),P({type:"response.create"})};if($.current)$.current.then(Y);else Y()},[U,f]);return E.useEffect(()=>{let B=D.current;if(!B)return;let q=(Y)=>{let I=JSON.parse(Y.data);if(!I.timestamp)I.timestamp=new Date().toLocaleTimeString();U?.(I)};return B.addEventListener("message",q),()=>{B.removeEventListener("message",q)}},[U,f]),{isSessionActive:Z,startSession:G,stopSession:T,sendTextMessage:X}}var gU=require("react/jsx-runtime"),rH=({data:f})=>{let{html:U,useSocketioSupport:Z,useCentrifugeSupport:H,useMittSupport:z,centrifugeChannel:D}=f,[$,G]=Lf.useState(U),{isSessionActive:T,startSession:P,sendTextMessage:X}=If(null,(I)=>{if(console.log(I.type,I.type==="response.output_text.delta"&&I.delta),I.type==="response.output_text.delta"&&I.delta)G((V)=>V+I.delta)});return Lf.useEffect(()=>{G(U)},[U]),gU.jsx(_,{card:"HTMLEmbedCard",data:f,methods:{update:(I)=>{G(I.value)},generateUsingAI:async(I)=>{try{if(!T&&I.token)await P(I.token,!1);X(I.prompt)}catch(V){console.error("Failed to generate using AI",V)}},initializeAI:async(I)=>{if(!T&&I.token)await P(I.token,!1)}},useCentrifugeSupport:H,useSocketioSupport:Z,useMittSupport:z,centrifugeChannel:D,children:uU.default($)})},bU=rH;var vU=C({name:"HTMLEmbedCard",component:bU,metadata:{author:"Swarm.ing"}});var Mf=require("react");var tf=require("react/jsx-runtime"),nH=({data:f})=>{let{name:U,value:Z,useSocketioSupport:H,useCentrifugeSupport:z,useMittSupport:D,centrifugeChannel:$}=f,[G,T]=Mf.useState(Z);return Mf.useEffect(()=>{T(Z)},[Z]),tf.jsx(_,{card:"HiddenCard",data:f,useSocketioSupport:H,useCentrifugeSupport:z,useMittSupport:D,centrifugeChannel:$,methods:{update:({value:P})=>{T(P)}},children:tf.jsx("input",{type:"hidden",id:U,name:U,value:G})})},pU=nH;var cU=C({name:"HiddenCard",component:pU,metadata:{author:"Swarm.ing"}});var Jf=require("react");var hU=require("react"),sH=hU.createContext(void 0),y=sH;var Af=require("react/jsx-runtime"),iH=({data:f})=>{let{url:U}=f,Z=Jf.useContext(y),H=Jf.useContext(w);return Jf.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(U))window.location.href=U;else Z?.(U)},[U,Z]),Af.jsx(Af.Fragment,{children:H})},lU=iH;var rU=C({name:"AutoRedirectCard",component:lU,metadata:{author:"Swarm.ing"}});var h=require("react-toastify"),Nf=require("react-toastify");var ff=require("react");var e=require("react/jsx-runtime"),tH={bounce:h.Bounce,slide:h.Slide,zoom:h.Zoom,flip:h.Flip},aH=(f)=>{let U={...f,type:f.alertType,transition:f.transition?tH[f.transition]:void 0,position:f.position??"bottom-right",autoClose:f.autoClose??3000,style:{backgroundColor:"black",...f.sx}};Nf.toast(f.message,U)},eH=(f)=>{console.log("Log event",f)},fZ=(f)=>{if(typeof window==="undefined"||!window.Notification){console.warn("[IOEventsCard] Notifications API is not available");return}let U=()=>{try{new window.Notification(f.title,{body:f.message??f.subtitle,icon:f.icon,silent:f.silent})}catch(H){console.error("[IOEventsCard] Failed to show notification",H)}},Z=window.Notification.permission;if(Z==="granted"){U();return}if(Z==="denied"){console.warn("[IOEventsCard] Notification permission denied");return}window.Notification.requestPermission().then((H)=>{if(H==="granted")U()})},UZ=({data:f})=>{let{useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:H,centrifugeChannel:z}=f,D=ff.useContext(y),$=ff.useRef(D);$.current=D;let G=ff.useMemo(()=>({alert:aH,log:eH,push:fZ,redirect:(T)=>{if(T.to){let P=T.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else $.current?.(P)}else window.location.reload()},reload:(T)=>{if(T.to){let P=T.to;if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(P))window.location.href=P;else $.current?.(P)}else window.location.reload()}}),[]);return e.jsx(e.Fragment,{children:e.jsx(_,{card:"IOEventsCard",data:f,useCentrifugeSupport:U,useSocketioSupport:Z,useMittSupport:H,centrifugeChannel:z,methods:G,children:e.jsx(Nf.ToastContainer,{})})})},nU=UZ;var sU=C({name:"IOEventsCard",component:nU,metadata:{author:"Swarm.ing"}});var Yf=require("react");var af=require("react/jsx-runtime"),HZ=({data:f})=>{let{name:U,key:Z,value:H,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=Yf.useState(H);return Yf.useEffect(()=>{P(H)},[H]),Yf.useEffect(()=>{if(typeof window==="undefined")return;sessionStorage.setItem(Z,T)},[Z,T]),af.jsx(_,{card:"SessionStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{sessionStorage.removeItem(Z),P("")}},children:af.jsx("input",{type:"hidden",id:U,name:U,value:T})})},iU=HZ;var tU=C({name:"SessionStorageCard",component:iU,metadata:{author:"PieData"}});var Xf=require("react");var ef=require("react/jsx-runtime"),ZZ=({data:f})=>{let{name:U,key:Z,value:H,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=Xf.useState(H);return Xf.useEffect(()=>{P(H)},[H]),Xf.useEffect(()=>{if(typeof window==="undefined")return;localStorage.setItem(Z,T)},[Z,T]),ef.jsx(_,{card:"DeviceStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{localStorage.removeItem(Z),P("")}},children:ef.jsx("input",{type:"hidden",id:U,name:U,value:T})})},aU=ZZ;var eU=C({name:"DeviceStorageCard",component:aU,metadata:{author:"PieData"}});var qf=require("react");var fU=require("react/jsx-runtime"),zZ=({data:f})=>{let{name:U,key:Z,value:H,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=qf.useState(H);return qf.useEffect(()=>{P(H)},[H]),qf.useEffect(()=>{if(typeof window==="undefined")return;let X=window.Telegram?.WebApp?.CloudStorage;if(!X)return;X.setItem(Z,T)},[Z,T]),fU.jsx(_,{card:"CloudStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{let X=window.Telegram?.WebApp?.CloudStorage;if(X)X.removeItem(Z);P("")}},children:fU.jsx("input",{type:"hidden",id:U,name:U,value:T})})},fH=zZ;var UH=C({name:"CloudStorageCard",component:fH,metadata:{author:"PieData"}});var Bf=require("react");var UU=require("react/jsx-runtime"),DZ=({data:f})=>{let{name:U,key:Z,value:H,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G}=f,[T,P]=Bf.useState(H);return Bf.useEffect(()=>{P(H)},[H]),Bf.useEffect(()=>{if(typeof window==="undefined")return;let X=window.Telegram?.WebApp?.SecureStorage;if(!X)return;X.setItem(Z,T)},[Z,T]),UU.jsx(_,{card:"SecureStorageCard",data:f,useSocketioSupport:z,useCentrifugeSupport:D,useMittSupport:$,centrifugeChannel:G,methods:{update:({value:X})=>{P(X)},remove:()=>{let X=window.Telegram?.WebApp?.SecureStorage;if(X)X.removeItem(Z);P("")}},children:UU.jsx("input",{type:"hidden",id:U,name:U,value:T})})},HH=DZ;var ZH=C({name:"SecureStorageCard",component:HH,metadata:{author:"PieData"}});var M=require("react");var HU=require("react/jsx-runtime"),$Z=({data:f,content:U})=>{let{useLoader:Z,noReturn:H,returnType:z,useSocketioSupport:D,useCentrifugeSupport:$,useMittSupport:G,centrifugeChannel:T}=f,P=M.useContext(w),X=M.useContext(x)??F,[B,q]=M.useState(!1),[Y,I]=M.useState(null),V=M.useRef(U),J=M.useContext(N),W=M.useCallback((R)=>{if(R===null)q(!0);else if(q(!1),!H)V.current=R;if(!H)I(R)},[H]),Q=M.useCallback((R)=>{V.current=R.content,I(R.content)},[]),O=M.useCallback((R)=>{if(R===null)q(!0);else if(q(!1),!H)for(let Wf of R)J?.emit(Wf.name,Wf.data)},[H,J]);if(M.useEffect(()=>{I(U),q(!1)},[U]),!Y&&Z)return P;return HU.jsx(_,{card:"AjaxGroupCard",data:f,methods:{changeContent:Q},useSocketioSupport:D,useCentrifugeSupport:$,useMittSupport:G,centrifugeChannel:T,children:HU.jsx(X,{uiConfig:Y??V.current,setUiAjaxConfiguration:z==="events"?O:W})})},zH=$Z;var DH=C({name:"AjaxGroupCard",component:zH,metadata:{author:"Swarm.ing",description:"Group card with AJAX support"}});var ZU=require("react");var yf=require("react/jsx-runtime"),TZ=({data:f,content:U,setUiAjaxConfiguration:Z})=>{let{name:H,url:z,sx:D}=f,$=ZU.useContext(y),G=ZU.useContext(x)??F;return yf.jsx(_,{card:H,data:f,children:yf.jsx("div",{style:D,id:H,onClick:(P)=>{if(z)if(P.stopPropagation(),/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(z))window.location.href=z;else $?.(z)},children:yf.jsx(G,{setUiAjaxConfiguration:Z,uiConfig:U})})})},$H=TZ;var TH=C({name:"BoxCard",component:$H,metadata:{author:"Swarm.ing",description:"Simple div with styles joining few components"}});var Hf=require("react"),Zf=require("@tanstack/react-query");var jf=require("react");var mf=require("react"),of=new Map,Ef=new Map;function kf(f,U){let Z=`${f}::${U}`,H=f?of.get(Z):void 0,[z,D]=mf.useState(H??null);return mf.useEffect(()=>{if(!f)return;if(of.has(Z)){D(of.get(Z));return}let $=Ef.get(Z);if(!$)$=fetch(f+`api/support/${U}`,{method:"GET"}).then((T)=>T.json()).then((T)=>{return of.set(Z,T),Ef.delete(Z),T}).catch((T)=>{throw Ef.delete(Z),T}),Ef.set(Z,$);let G=!1;return $.then((T)=>{if(!G)D(T)}).catch(()=>{}),()=>{G=!0}},[f,U,Z]),z}var zU=null,GH=null;function PH(){GH?.()}function DU(){if(typeof window==="undefined")return Promise.resolve();if(typeof window.sid!=="undefined")return Promise.resolve();if(!zU)zU=new Promise((f)=>{GH=()=>{f()}});return zU}var GZ=({children:f})=>{let U=jf.useContext(k),Z=Of(),H=kf(Z,"socketIO"),z=(D)=>{if(typeof window!=="undefined")window.sid=D.sid,PH(),console.log(`SocketIO initialized: ${window.sid}`)};return jf.useEffect(()=>{if(!U)return;let D=()=>{console.log("SocketIO connected")},$=(G)=>{console.log(`SocketIO disconnected: ${G}`),U.connect()};if(H)U.on("pieinit",z),U.on("connect",D),U.on("disconnect",$),U.connect();return()=>{if(H)U.off("pieinit",z),U.off("connect",D),U.off("disconnect",$),U.disconnect()}},[U,H]),f},l=GZ;var xf=require("react");var PZ=({children:f})=>{let U=xf.useContext(m),Z=Of(),H=kf(Z,"centrifuge");return xf.useEffect(()=>{if(!U)return;let z=()=>{console.log("Centrifuge connected")},D=($)=>{console.log("Centrifuge disconnected:",$)};if(H)U.on("connected",z),U.on("disconnected",D),U.connect();return()=>{if(H)U.disconnect()}},[U,H]),f},r=PZ;var IH=require("axios-date-transformer");var VH=require("react/jsx-runtime");function Uf(f,U,Z){if(!U)return Z;let H=f.replace(/^\//,""),z=U[H];if(!z)return Z;return VH.jsx(Kf,{uiConfig:z})}var K=require("react/jsx-runtime"),VZ=({location:f,fallback:U,piecache:Z,onError:H,queryOptions:z})=>{let D=b(),$=v(),G=o(),T=Hf.useMemo(()=>IH.createAxiosDateTransformer({baseURL:D||""}),[D]),P=Hf.useMemo(()=>j(),[]),X=Hf.useMemo(()=>D?c(D):null,[D]),B=Hf.useMemo(()=>D?p(D,$):null,[D,$]),{data:q,isLoading:Y,error:I}=Zf.useQuery({queryKey:["uiConfig",f.pathname+f.search,D],enabled:!!D,queryFn:async()=>{let J=new URLSearchParams(f.search);J.set("__pieroot","web");let W="/api/content"+f.pathname+"?"+J.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",W);let Q=await T.get(W,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",Q.data);return Q.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(J)=>Math.min(1000*2**J,30000),...z}),V=Uf(f.pathname,Z,U);if(!D)return V??null;if(G)console.log("[PieRoot] Rendering with location:",f),console.log("[PieRoot] API_SERVER:",D),console.log("[PieRoot] CENTRIFUGE_SERVER:",$),console.log("[PieRoot] Fallback provided:",!!U),console.log("[PieRoot] Piecache provided:",!!Z);if(I){if(G)console.error("[PieRoot] Error fetching UI configuration:",I),console.error("[PieRoot] Error details:",{message:I.message,status:I.response?.status,data:I.response?.data});return H?.(),V}if(Y||!q){if(G)console.log("[PieRoot] Loading state:",{isLoading:Y,hasUiConfiguration:!!q});return V}if(G)console.log("[PieRoot] UI configuration loaded successfully:",q),console.log("[PieRoot] Rendering UI with configuration");return K.jsx(N.Provider,{value:P,children:K.jsx(k.Provider,{value:X,children:K.jsx(m.Provider,{value:B,children:K.jsx(w.Provider,{value:U??K.jsx(K.Fragment,{}),children:K.jsx(l,{children:K.jsx(r,{children:K.jsx("form",{id:"piedata_global_form",action:D+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:K.jsx(F,{uiConfig:q})})})})})})})})},IZ=(f)=>{let U=Hf.useMemo(()=>new Zf.QueryClient,[]);return K.jsx(y.Provider,{value:f.onNavigate,children:K.jsx(u.Provider,{value:f.config,children:K.jsx(Zf.QueryClientProvider,{client:U,children:K.jsx(VZ,{...f})})})})},JH=IZ;var zf=require("react"),Df=require("@tanstack/react-query");var YH=require("axios-date-transformer");var df=require("react");var uf=({onError:f}={})=>{let[U,Z]=df.useState(null),H=YU();return df.useEffect(()=>{if(typeof window==="undefined")return;let z=window.Telegram?.WebApp;if(!z)return;try{z.ready?.()}catch(D){f?.()}if(H==="telegram_expanded"&&(z.platform==="ios"||z.platform==="android"))z.expand();Z(z)},[]),U};var S=require("react/jsx-runtime"),JZ=({location:f,fallback:U,piecache:Z,onError:H,queryOptions:z})=>{let D=b(),$=v(),G=o(),T=zf.useMemo(()=>YH.createAxiosDateTransformer({baseURL:D}),[D]),P=zf.useMemo(()=>j(),[]),X=zf.useMemo(()=>D?c(D):null,[D]),B=zf.useMemo(()=>D?p(D,$):null,[D,$]),q=uf({onError:H}),{data:Y,isLoading:I,error:V}=Df.useQuery({queryKey:["uiConfig",f.pathname+f.search,q?.initData],enabled:!!q?.initData,queryFn:async()=>{let W=new URLSearchParams(f.search);if(W.set("__pieroot","telegram"),q?.initData)W.set("initData",q.initData);let Q="/api/content"+f.pathname+"?"+W.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",Q);let O=await T.get(Q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",O.data);return O.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(W)=>Math.min(1000*2**W,30000),...z}),J=Uf(f.pathname,Z,U);if(!D)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(V&&G)return console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data}),H?.(),J;if(I||!Y){if(G)console.log("[PieRoot] Loading state:",{isLoading:I,hasUiConfiguration:!!Y});return J}if(G)console.log("[PieRoot] UI configuration loaded successfully:",Y),console.log("[PieRoot] Rendering UI with configuration");return S.jsx(N.Provider,{value:P,children:S.jsx(k.Provider,{value:X,children:S.jsx(m.Provider,{value:B,children:S.jsx(w.Provider,{value:U??S.jsx(S.Fragment,{}),children:S.jsx(l,{children:S.jsx(r,{children:S.jsx("form",{id:"piedata_global_form",action:D+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:S.jsx(F,{uiConfig:Y})})})})})})})})},YZ=(f)=>{let U=zf.useMemo(()=>new Df.QueryClient,[]);return S.jsx(y.Provider,{value:f.onNavigate,children:S.jsx(u.Provider,{value:f.config,children:S.jsx(Df.QueryClientProvider,{client:U,children:S.jsx(JZ,{...f})})})})},XH=YZ;var $f=require("react"),bf=require("@tanstack/react-query");var A=require("react/jsx-runtime"),XZ=({location:f,fallback:U,children:Z})=>{let H=b(),z=v(),D=o(),$=$f.useMemo(()=>j(),[]),G=$f.useMemo(()=>H?c(H):null,[H]),T=$f.useMemo(()=>H?p(H,z):null,[H,z]);if(D)console.log("[PieRoot] Rendering with location:",f),console.log("[PieRoot] API_SERVER:",H),console.log("[PieRoot] CENTRIFUGE_SERVER:",z),console.log("[PieRoot] Fallback provided:",!!U);return A.jsx(N.Provider,{value:$,children:A.jsx(k.Provider,{value:G,children:A.jsx(m.Provider,{value:T,children:A.jsx(w.Provider,{value:U??A.jsx(A.Fragment,{}),children:A.jsx(l,{children:A.jsx(r,{children:A.jsx("form",{id:"piedata_global_form",action:H+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},qZ=(f)=>{let[U]=$f.useState(()=>new bf.QueryClient);return A.jsx(y.Provider,{value:f.onNavigate,children:A.jsx(u.Provider,{value:f.config,children:A.jsx(bf.QueryClientProvider,{client:U,children:A.jsx(XZ,{...f})})})})},qH=qZ;var Tf=require("react"),Gf=require("@tanstack/react-query");var BH=require("axios-date-transformer");var gf=require("react"),vf=()=>{let[f,U]=gf.useState(null);return gf.useEffect(()=>{if(typeof window==="undefined")return;let Z=window.WebApp;if(!Z)return;Z.ready(),U(Z)},[]),f};var L=require("react/jsx-runtime"),BZ=({location:f,fallback:U,piecache:Z,onError:H,queryOptions:z})=>{let D=b(),$=v(),G=o(),T=Tf.useMemo(()=>BH.createAxiosDateTransformer({baseURL:D}),[D]),P=Tf.useMemo(()=>j(),[]),X=Tf.useMemo(()=>D?c(D):null,[D]),B=Tf.useMemo(()=>D?p(D,$):null,[D,$]),q=vf(),{data:Y,isLoading:I,error:V}=Gf.useQuery({queryKey:["uiConfig",f.pathname+f.search,q?.initData],queryFn:async()=>{let W=new URLSearchParams(f.search);if(W.set("__pieroot","max"),q?.initData)W.set("initData",q.initData);let Q="/api/content"+f.pathname+"?"+W.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",Q);let O=await T.get(Q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",O.data);return O.data},enabled:!!q?.initData,staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(W)=>Math.min(1000*2**W,30000),...z}),J=Uf(f.pathname,Z,U);if(!D)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(V&&G)return console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data}),H?.(),J;if(I||!Y){if(G)console.log("[PieRoot] Loading state:",{isLoading:I,hasUiConfiguration:!!Y});return J}if(G)console.log("[PieRoot] UI configuration loaded successfully:",Y),console.log("[PieRoot] Rendering UI with configuration");return L.jsx(N.Provider,{value:P,children:L.jsx(k.Provider,{value:X,children:L.jsx(m.Provider,{value:B,children:L.jsx(w.Provider,{value:U??L.jsx(L.Fragment,{}),children:L.jsx(l,{children:L.jsx(r,{children:L.jsx("form",{id:"piedata_global_form",action:D+"api/process"+f.pathname,method:"post",encType:"multipart/form-data",children:L.jsx(F,{uiConfig:Y})})})})})})})})},WZ=(f)=>{let U=Tf.useMemo(()=>new Gf.QueryClient,[]);return L.jsx(y.Provider,{value:f.onNavigate,children:L.jsx(u.Provider,{value:f.config,children:L.jsx(Gf.QueryClientProvider,{client:U,children:L.jsx(BZ,{...f})})})})},WH=WZ;var QH=require("react"),QZ=(f,U={},Z=[],H,z)=>{let D=z?.renderingLogEnabled??!1,$=z?.timeout,G=z?.retryPolicy,T=G?.maxRetries??0,P=G?.baseDelay??1000,X=G?.retryOn??[502,503,504];if(D)console.log("Registering AJAX: ",H,U,Z);return async(B={})=>{if(typeof window==="undefined"||typeof document==="undefined"){if(D)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let q=z?.apiServer;if(!q){if(D)console.warn("AJAX skipped: apiServer is missing");return}if(!H||!f){if(D)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await DU();let Y=new FormData;for(let[J,W]of Object.entries({...U,...B}))Y.append(J,W);for(let J of Z)if(J==="sid"){if(!window.sid)throw new Error("SocketIO isn't initialized properly");Y.append("sid",window.sid)}else{let W=document.getElementsByName(J);if(!W.length){if(D)console.warn(`No input found with name ${J}`);continue}let Q=W[0];if(Q instanceof HTMLInputElement)if(Q.type==="file"&&Q.files)Array.from(Q.files).forEach((O)=>Y.append(J,O));else Y.append(J,Q.value);else if(Q instanceof HTMLTextAreaElement)Y.append(J,Q.value)}let I=q+"api/ajax_content"+H;f(null);let V;for(let J=0;J<=T;J++){if(J>0){let O=P*2**(J-1);if(D)console.log(`AJAX retry ${J}/${T} after ${O}ms`);await new Promise((R)=>setTimeout(R,O))}let W=$!=null?new AbortController:null,Q=W&&setTimeout(()=>W.abort(),$);try{let O=await fetch(I,{method:"POST",body:Y,signal:W?.signal});if(Q)clearTimeout(Q);if(!O.ok&&X.includes(O.status)&&J<T){V=new Error(`HTTP ${O.status}`);continue}let Wf=(O.headers.get("content-type")||"").includes("application/json");if(!!O.body?.getReader&&!Wf){let Qf=O.body.getReader(),MH=new TextDecoder,n="";while(!0){let{done:cf,value:AH}=await Qf.read();if(cf)break;n+=MH.decode(AH,{stream:!0});let TU=n.split(`
3
+ `);n=TU.pop()??"";for(let NH of TU){let hf=NH.trim();if(!hf)continue;try{let yH=JSON.parse(hf);f([yH])}catch{if(D)console.warn("Failed to parse streamed line:",hf)}}}if(n.trim())try{let cf=JSON.parse(n);f([cf])}catch{if(D)console.warn("Failed to parse final streamed line:",n)}return{}}else{let Qf=await O.json();return f(Qf),Qf}}catch(O){if(Q)clearTimeout(Q);if(V=O,J<T)continue;if(D)console.error("AJAX request failed:",O);return f(null),O}}if(D)console.error("AJAX request failed after retries:",V);return f(null),V}},CH=(f,U={},Z=[],H,z)=>{let{apiServer:D,enableRenderingLog:$}=s(),G=JSON.stringify(U),T=JSON.stringify(Z),P=JSON.stringify(z);return QH.useMemo(()=>QZ(f,U,Z,H,{apiServer:D,renderingLogEnabled:$,timeout:z?.timeout,retryPolicy:z?.retryPolicy}),[f,G,T,H,D,$,P])};var OH=require("@openai/agents"),pf=require("react");var _H=/^pie(.+?)_(.+)$/;function $U(f=j(),U={}){let Z=[],H=new Set;for(let z of f.all.keys()){if(typeof z!=="string")continue;let D=z.match(_H);if(!D)continue;let[,$,G]=D,T={methodName:$,cardName:G,eventName:z};if(U.filter&&!U.filter(T))continue;let P=U.nameFor?.(T)??`${G}_${$}`;if(H.has(P))continue;H.add(P);let X=U.describe?.(T)??`Invokes the "${$}" method on the PieCard "${G}" by emitting the in-process mitt event "${z}". The optional "payload" argument is forwarded verbatim to the card's handler.`;Z.push(OH.tool({name:P,description:X,strict:!1,parameters:{type:"object",properties:{payload:{description:"Arbitrary JSON payload forwarded to the PieCard method handler. Omit for fire-and-forget calls."}},required:[],additionalProperties:!0},execute:async(B)=>{let q=B?.payload;return f.emit(z,q),`Emitted "${z}"`}}))}return Z}function RH(f={}){let Z=pf.useContext(N)??j(),H=[];for(let T of Z.all.keys())if(typeof T==="string"&&_H.test(T))H.push(T);H.sort();let z=H.join("|"),{filter:D,describe:$,nameFor:G}=f;return pf.useMemo(()=>$U(Z,{filter:D,describe:$,nameFor:G}),[Z,z,D,$,G])}var wH=require("clsx"),FH=require("tailwind-merge");function KH(...f){return FH.twMerge(wH.clsx(f))}var SH=()=>{if(typeof document==="undefined")return;let f=document.getElementById("piedata_global_form");f&&f.submit()};var LH=(f,U)=>`${f}${_f}${U}`;