@portel/photon 1.4.1 → 1.6.0

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 (395) hide show
  1. package/README.md +326 -1177
  2. package/dist/auto-ui/beam.d.ts +14 -0
  3. package/dist/auto-ui/beam.d.ts.map +1 -0
  4. package/dist/auto-ui/beam.js +3057 -0
  5. package/dist/auto-ui/beam.js.map +1 -0
  6. package/dist/auto-ui/bridge/index.d.ts +37 -0
  7. package/dist/auto-ui/bridge/index.d.ts.map +1 -0
  8. package/dist/auto-ui/bridge/index.js +555 -0
  9. package/dist/auto-ui/bridge/index.js.map +1 -0
  10. package/dist/auto-ui/bridge/openai-shim.d.ts +20 -0
  11. package/dist/auto-ui/bridge/openai-shim.d.ts.map +1 -0
  12. package/dist/auto-ui/bridge/openai-shim.js +231 -0
  13. package/dist/auto-ui/bridge/openai-shim.js.map +1 -0
  14. package/dist/auto-ui/bridge/photon-app.d.ts +162 -0
  15. package/dist/auto-ui/bridge/photon-app.d.ts.map +1 -0
  16. package/dist/auto-ui/bridge/photon-app.js +460 -0
  17. package/dist/auto-ui/bridge/photon-app.js.map +1 -0
  18. package/dist/auto-ui/bridge/types.d.ts +128 -0
  19. package/dist/auto-ui/bridge/types.d.ts.map +1 -0
  20. package/dist/auto-ui/bridge/types.js +7 -0
  21. package/dist/auto-ui/bridge/types.js.map +1 -0
  22. package/dist/auto-ui/components/card.d.ts +13 -0
  23. package/dist/auto-ui/components/card.d.ts.map +1 -0
  24. package/dist/auto-ui/components/card.js +64 -0
  25. package/dist/auto-ui/components/card.js.map +1 -0
  26. package/dist/auto-ui/components/form.d.ts +15 -0
  27. package/dist/auto-ui/components/form.d.ts.map +1 -0
  28. package/dist/auto-ui/components/form.js +72 -0
  29. package/dist/auto-ui/components/form.js.map +1 -0
  30. package/dist/auto-ui/components/list.d.ts +13 -0
  31. package/dist/auto-ui/components/list.d.ts.map +1 -0
  32. package/dist/auto-ui/components/list.js +58 -0
  33. package/dist/auto-ui/components/list.js.map +1 -0
  34. package/dist/auto-ui/components/progress.d.ts +18 -0
  35. package/dist/auto-ui/components/progress.d.ts.map +1 -0
  36. package/dist/auto-ui/components/progress.js +125 -0
  37. package/dist/auto-ui/components/progress.js.map +1 -0
  38. package/dist/auto-ui/components/table.d.ts +13 -0
  39. package/dist/auto-ui/components/table.d.ts.map +1 -0
  40. package/dist/auto-ui/components/table.js +82 -0
  41. package/dist/auto-ui/components/table.js.map +1 -0
  42. package/dist/auto-ui/components/tree.d.ts +13 -0
  43. package/dist/auto-ui/components/tree.d.ts.map +1 -0
  44. package/dist/auto-ui/components/tree.js +61 -0
  45. package/dist/auto-ui/components/tree.js.map +1 -0
  46. package/dist/auto-ui/daemon-tools.d.ts +45 -0
  47. package/dist/auto-ui/daemon-tools.d.ts.map +1 -0
  48. package/dist/auto-ui/daemon-tools.js +580 -0
  49. package/dist/auto-ui/daemon-tools.js.map +1 -0
  50. package/dist/auto-ui/design-system/index.d.ts +21 -0
  51. package/dist/auto-ui/design-system/index.d.ts.map +1 -0
  52. package/dist/auto-ui/design-system/index.js +27 -0
  53. package/dist/auto-ui/design-system/index.js.map +1 -0
  54. package/dist/auto-ui/design-system/tokens.d.ts +9 -0
  55. package/dist/auto-ui/design-system/tokens.d.ts.map +1 -0
  56. package/dist/auto-ui/design-system/tokens.js +27 -0
  57. package/dist/auto-ui/design-system/tokens.js.map +1 -0
  58. package/dist/auto-ui/design-system/transaction-ui.d.ts +70 -0
  59. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +1 -0
  60. package/dist/auto-ui/design-system/transaction-ui.js +982 -0
  61. package/dist/auto-ui/design-system/transaction-ui.js.map +1 -0
  62. package/dist/auto-ui/frontend/index.html +84 -0
  63. package/dist/auto-ui/index.d.ts +23 -0
  64. package/dist/auto-ui/index.d.ts.map +1 -0
  65. package/dist/auto-ui/index.js +28 -0
  66. package/dist/auto-ui/index.js.map +1 -0
  67. package/dist/auto-ui/openapi-generator.d.ts +71 -0
  68. package/dist/auto-ui/openapi-generator.d.ts.map +1 -0
  69. package/dist/auto-ui/openapi-generator.js +223 -0
  70. package/dist/auto-ui/openapi-generator.js.map +1 -0
  71. package/dist/auto-ui/photon-bridge.d.ts +159 -0
  72. package/dist/auto-ui/photon-bridge.d.ts.map +1 -0
  73. package/dist/auto-ui/photon-bridge.js +262 -0
  74. package/dist/auto-ui/photon-bridge.js.map +1 -0
  75. package/dist/auto-ui/photon-host.d.ts +113 -0
  76. package/dist/auto-ui/photon-host.d.ts.map +1 -0
  77. package/dist/auto-ui/photon-host.js +284 -0
  78. package/dist/auto-ui/photon-host.js.map +1 -0
  79. package/dist/auto-ui/platform-compat.d.ts +71 -0
  80. package/dist/auto-ui/platform-compat.d.ts.map +1 -0
  81. package/dist/auto-ui/platform-compat.js +628 -0
  82. package/dist/auto-ui/platform-compat.js.map +1 -0
  83. package/dist/auto-ui/playground-html.d.ts +15 -0
  84. package/dist/auto-ui/playground-html.d.ts.map +1 -0
  85. package/dist/auto-ui/playground-html.js +1113 -0
  86. package/dist/auto-ui/playground-html.js.map +1 -0
  87. package/dist/auto-ui/playground-server.d.ts +7 -0
  88. package/dist/auto-ui/playground-server.d.ts.map +1 -0
  89. package/dist/auto-ui/playground-server.js +840 -0
  90. package/dist/auto-ui/playground-server.js.map +1 -0
  91. package/dist/auto-ui/registry.d.ts +13 -0
  92. package/dist/auto-ui/registry.d.ts.map +1 -0
  93. package/dist/auto-ui/registry.js +62 -0
  94. package/dist/auto-ui/registry.js.map +1 -0
  95. package/dist/auto-ui/renderer.d.ts +14 -0
  96. package/dist/auto-ui/renderer.d.ts.map +1 -0
  97. package/dist/auto-ui/renderer.js +88 -0
  98. package/dist/auto-ui/renderer.js.map +1 -0
  99. package/dist/auto-ui/rendering/components.d.ts +29 -0
  100. package/dist/auto-ui/rendering/components.d.ts.map +1 -0
  101. package/dist/auto-ui/rendering/components.js +773 -0
  102. package/dist/auto-ui/rendering/components.js.map +1 -0
  103. package/dist/auto-ui/rendering/field-analyzer.d.ts +48 -0
  104. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +1 -0
  105. package/dist/auto-ui/rendering/field-analyzer.js +270 -0
  106. package/dist/auto-ui/rendering/field-analyzer.js.map +1 -0
  107. package/dist/auto-ui/rendering/field-renderers.d.ts +64 -0
  108. package/dist/auto-ui/rendering/field-renderers.d.ts.map +1 -0
  109. package/dist/auto-ui/rendering/field-renderers.js +317 -0
  110. package/dist/auto-ui/rendering/field-renderers.js.map +1 -0
  111. package/dist/auto-ui/rendering/index.d.ts +28 -0
  112. package/dist/auto-ui/rendering/index.d.ts.map +1 -0
  113. package/dist/auto-ui/rendering/index.js +60 -0
  114. package/dist/auto-ui/rendering/index.js.map +1 -0
  115. package/dist/auto-ui/rendering/layout-selector.d.ts +48 -0
  116. package/dist/auto-ui/rendering/layout-selector.d.ts.map +1 -0
  117. package/dist/auto-ui/rendering/layout-selector.js +352 -0
  118. package/dist/auto-ui/rendering/layout-selector.js.map +1 -0
  119. package/dist/auto-ui/rendering/template-engine.d.ts +41 -0
  120. package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -0
  121. package/dist/auto-ui/rendering/template-engine.js +238 -0
  122. package/dist/auto-ui/rendering/template-engine.js.map +1 -0
  123. package/dist/auto-ui/streamable-http-transport.d.ts +103 -0
  124. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
  125. package/dist/auto-ui/streamable-http-transport.js +1875 -0
  126. package/dist/auto-ui/streamable-http-transport.js.map +1 -0
  127. package/dist/auto-ui/types.d.ts +384 -0
  128. package/dist/auto-ui/types.d.ts.map +1 -0
  129. package/dist/auto-ui/types.js +92 -0
  130. package/dist/auto-ui/types.js.map +1 -0
  131. package/dist/beam.bundle.js +63137 -0
  132. package/dist/beam.bundle.js.map +7 -0
  133. package/dist/claude-code-plugin.d.ts.map +1 -1
  134. package/dist/claude-code-plugin.js +30 -30
  135. package/dist/claude-code-plugin.js.map +1 -1
  136. package/dist/cli/commands/info.d.ts +11 -0
  137. package/dist/cli/commands/info.d.ts.map +1 -0
  138. package/dist/cli/commands/info.js +313 -0
  139. package/dist/cli/commands/info.js.map +1 -0
  140. package/dist/cli/commands/marketplace.d.ts +11 -0
  141. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  142. package/dist/cli/commands/marketplace.js +198 -0
  143. package/dist/cli/commands/marketplace.js.map +1 -0
  144. package/dist/cli/commands/package-app.d.ts +9 -0
  145. package/dist/cli/commands/package-app.d.ts.map +1 -0
  146. package/dist/cli/commands/package-app.js +191 -0
  147. package/dist/cli/commands/package-app.js.map +1 -0
  148. package/dist/cli/commands/package.d.ts +11 -0
  149. package/dist/cli/commands/package.d.ts.map +1 -0
  150. package/dist/cli/commands/package.js +573 -0
  151. package/dist/cli/commands/package.js.map +1 -0
  152. package/dist/cli-alias.d.ts.map +1 -1
  153. package/dist/cli-alias.js +30 -28
  154. package/dist/cli-alias.js.map +1 -1
  155. package/dist/cli-formatter.d.ts +8 -24
  156. package/dist/cli-formatter.d.ts.map +1 -1
  157. package/dist/cli-formatter.js +8 -325
  158. package/dist/cli-formatter.js.map +1 -1
  159. package/dist/cli.d.ts +15 -1
  160. package/dist/cli.d.ts.map +1 -1
  161. package/dist/cli.js +1166 -1131
  162. package/dist/cli.js.map +1 -1
  163. package/dist/daemon/client.d.ts +84 -3
  164. package/dist/daemon/client.d.ts.map +1 -1
  165. package/dist/daemon/client.js +561 -11
  166. package/dist/daemon/client.js.map +1 -1
  167. package/dist/daemon/manager.d.ts +51 -12
  168. package/dist/daemon/manager.d.ts.map +1 -1
  169. package/dist/daemon/manager.js +122 -61
  170. package/dist/daemon/manager.js.map +1 -1
  171. package/dist/daemon/protocol.d.ts +62 -6
  172. package/dist/daemon/protocol.d.ts.map +1 -1
  173. package/dist/daemon/protocol.js +76 -1
  174. package/dist/daemon/protocol.js.map +1 -1
  175. package/dist/daemon/server.d.ts +6 -6
  176. package/dist/daemon/server.js +743 -133
  177. package/dist/daemon/server.js.map +1 -1
  178. package/dist/daemon/session-manager.d.ts +8 -1
  179. package/dist/daemon/session-manager.d.ts.map +1 -1
  180. package/dist/daemon/session-manager.js +32 -9
  181. package/dist/daemon/session-manager.js.map +1 -1
  182. package/dist/deploy/cloudflare.d.ts +12 -0
  183. package/dist/deploy/cloudflare.d.ts.map +1 -0
  184. package/dist/deploy/cloudflare.js +216 -0
  185. package/dist/deploy/cloudflare.js.map +1 -0
  186. package/dist/index.d.ts +1 -0
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +3 -0
  189. package/dist/index.js.map +1 -1
  190. package/dist/loader.d.ts +191 -21
  191. package/dist/loader.d.ts.map +1 -1
  192. package/dist/loader.js +1186 -319
  193. package/dist/loader.js.map +1 -1
  194. package/dist/markdown-utils.d.ts +8 -0
  195. package/dist/markdown-utils.d.ts.map +1 -0
  196. package/dist/markdown-utils.js +63 -0
  197. package/dist/markdown-utils.js.map +1 -0
  198. package/dist/marketplace-manager.d.ts +10 -0
  199. package/dist/marketplace-manager.d.ts.map +1 -1
  200. package/dist/marketplace-manager.js +112 -28
  201. package/dist/marketplace-manager.js.map +1 -1
  202. package/dist/mcp-client.d.ts +9 -0
  203. package/dist/mcp-client.d.ts.map +1 -0
  204. package/dist/mcp-client.js +11 -0
  205. package/dist/mcp-client.js.map +1 -0
  206. package/dist/mcp-elicitation.d.ts +32 -0
  207. package/dist/mcp-elicitation.d.ts.map +1 -0
  208. package/dist/mcp-elicitation.js +26 -0
  209. package/dist/mcp-elicitation.js.map +1 -0
  210. package/dist/path-resolver.d.ts +9 -12
  211. package/dist/path-resolver.d.ts.map +1 -1
  212. package/dist/path-resolver.js +13 -43
  213. package/dist/path-resolver.js.map +1 -1
  214. package/dist/photon-cli-runner.d.ts.map +1 -1
  215. package/dist/photon-cli-runner.js +204 -77
  216. package/dist/photon-cli-runner.js.map +1 -1
  217. package/dist/photon-doc-extractor.d.ts +89 -0
  218. package/dist/photon-doc-extractor.d.ts.map +1 -1
  219. package/dist/photon-doc-extractor.js +560 -32
  220. package/dist/photon-doc-extractor.js.map +1 -1
  221. package/dist/photons/maker.photon.d.ts +182 -0
  222. package/dist/photons/maker.photon.d.ts.map +1 -0
  223. package/dist/photons/maker.photon.js +504 -0
  224. package/dist/photons/maker.photon.js.map +1 -0
  225. package/dist/photons/maker.photon.ts +626 -0
  226. package/dist/photons/marketplace.photon.d.ts +110 -0
  227. package/dist/photons/marketplace.photon.d.ts.map +1 -0
  228. package/dist/photons/marketplace.photon.js +260 -0
  229. package/dist/photons/marketplace.photon.js.map +1 -0
  230. package/dist/photons/marketplace.photon.ts +378 -0
  231. package/dist/photons/tunnel.photon.d.ts +80 -0
  232. package/dist/photons/tunnel.photon.d.ts.map +1 -0
  233. package/dist/photons/tunnel.photon.js +269 -0
  234. package/dist/photons/tunnel.photon.js.map +1 -0
  235. package/dist/photons/tunnel.photon.ts +345 -0
  236. package/dist/security-scanner.d.ts.map +1 -1
  237. package/dist/security-scanner.js +18 -15
  238. package/dist/security-scanner.js.map +1 -1
  239. package/dist/serv/auth/jwt.d.ts +89 -0
  240. package/dist/serv/auth/jwt.d.ts.map +1 -0
  241. package/dist/serv/auth/jwt.js +239 -0
  242. package/dist/serv/auth/jwt.js.map +1 -0
  243. package/dist/serv/auth/oauth.d.ts +117 -0
  244. package/dist/serv/auth/oauth.d.ts.map +1 -0
  245. package/dist/serv/auth/oauth.js +395 -0
  246. package/dist/serv/auth/oauth.js.map +1 -0
  247. package/dist/serv/auth/well-known.d.ts +60 -0
  248. package/dist/serv/auth/well-known.d.ts.map +1 -0
  249. package/dist/serv/auth/well-known.js +154 -0
  250. package/dist/serv/auth/well-known.js.map +1 -0
  251. package/dist/serv/db/d1-client.d.ts +65 -0
  252. package/dist/serv/db/d1-client.d.ts.map +1 -0
  253. package/dist/serv/db/d1-client.js +137 -0
  254. package/dist/serv/db/d1-client.js.map +1 -0
  255. package/dist/serv/db/d1-stores.d.ts +62 -0
  256. package/dist/serv/db/d1-stores.d.ts.map +1 -0
  257. package/dist/serv/db/d1-stores.js +307 -0
  258. package/dist/serv/db/d1-stores.js.map +1 -0
  259. package/dist/serv/index.d.ts +114 -0
  260. package/dist/serv/index.d.ts.map +1 -0
  261. package/dist/serv/index.js +172 -0
  262. package/dist/serv/index.js.map +1 -0
  263. package/dist/serv/local.d.ts +118 -0
  264. package/dist/serv/local.d.ts.map +1 -0
  265. package/dist/serv/local.js +392 -0
  266. package/dist/serv/local.js.map +1 -0
  267. package/dist/serv/middleware/auth.d.ts +66 -0
  268. package/dist/serv/middleware/auth.d.ts.map +1 -0
  269. package/dist/serv/middleware/auth.js +178 -0
  270. package/dist/serv/middleware/auth.js.map +1 -0
  271. package/dist/serv/middleware/tenant.d.ts +94 -0
  272. package/dist/serv/middleware/tenant.d.ts.map +1 -0
  273. package/dist/serv/middleware/tenant.js +152 -0
  274. package/dist/serv/middleware/tenant.js.map +1 -0
  275. package/dist/serv/runtime/executor.d.ts +76 -0
  276. package/dist/serv/runtime/executor.d.ts.map +1 -0
  277. package/dist/serv/runtime/executor.js +105 -0
  278. package/dist/serv/runtime/executor.js.map +1 -0
  279. package/dist/serv/runtime/index.d.ts +8 -0
  280. package/dist/serv/runtime/index.d.ts.map +1 -0
  281. package/dist/serv/runtime/index.js +10 -0
  282. package/dist/serv/runtime/index.js.map +1 -0
  283. package/dist/serv/runtime/oauth-context.d.ts +121 -0
  284. package/dist/serv/runtime/oauth-context.d.ts.map +1 -0
  285. package/dist/serv/runtime/oauth-context.js +153 -0
  286. package/dist/serv/runtime/oauth-context.js.map +1 -0
  287. package/dist/serv/session/kv-store.d.ts +54 -0
  288. package/dist/serv/session/kv-store.d.ts.map +1 -0
  289. package/dist/serv/session/kv-store.js +149 -0
  290. package/dist/serv/session/kv-store.js.map +1 -0
  291. package/dist/serv/session/store.d.ts +113 -0
  292. package/dist/serv/session/store.d.ts.map +1 -0
  293. package/dist/serv/session/store.js +284 -0
  294. package/dist/serv/session/store.js.map +1 -0
  295. package/dist/serv/types/index.d.ts +147 -0
  296. package/dist/serv/types/index.d.ts.map +1 -0
  297. package/dist/serv/types/index.js +8 -0
  298. package/dist/serv/types/index.js.map +1 -0
  299. package/dist/serv/vault/token-vault.d.ts +102 -0
  300. package/dist/serv/vault/token-vault.d.ts.map +1 -0
  301. package/dist/serv/vault/token-vault.js +177 -0
  302. package/dist/serv/vault/token-vault.js.map +1 -0
  303. package/dist/server.d.ts +184 -0
  304. package/dist/server.d.ts.map +1 -1
  305. package/dist/server.js +1995 -86
  306. package/dist/server.js.map +1 -1
  307. package/dist/shared/cli-sections.d.ts +6 -0
  308. package/dist/shared/cli-sections.d.ts.map +1 -0
  309. package/dist/shared/cli-sections.js +16 -0
  310. package/dist/shared/cli-sections.js.map +1 -0
  311. package/dist/shared/cli-utils.d.ts +81 -0
  312. package/dist/shared/cli-utils.d.ts.map +1 -0
  313. package/dist/shared/cli-utils.js +174 -0
  314. package/dist/shared/cli-utils.js.map +1 -0
  315. package/dist/shared/config-docs.d.ts +6 -0
  316. package/dist/shared/config-docs.d.ts.map +1 -0
  317. package/dist/shared/config-docs.js +6 -0
  318. package/dist/shared/config-docs.js.map +1 -0
  319. package/dist/shared/error-handler.d.ts +128 -0
  320. package/dist/shared/error-handler.d.ts.map +1 -0
  321. package/dist/shared/error-handler.js +342 -0
  322. package/dist/shared/error-handler.js.map +1 -0
  323. package/dist/shared/logger.d.ts +42 -0
  324. package/dist/shared/logger.d.ts.map +1 -0
  325. package/dist/shared/logger.js +123 -0
  326. package/dist/shared/logger.js.map +1 -0
  327. package/dist/shared/performance.d.ts +65 -0
  328. package/dist/shared/performance.d.ts.map +1 -0
  329. package/dist/shared/performance.js +136 -0
  330. package/dist/shared/performance.js.map +1 -0
  331. package/dist/shared/task-runner.d.ts +2 -0
  332. package/dist/shared/task-runner.d.ts.map +1 -0
  333. package/dist/shared/task-runner.js +16 -0
  334. package/dist/shared/task-runner.js.map +1 -0
  335. package/dist/shared/validation.d.ts +6 -0
  336. package/dist/shared/validation.d.ts.map +1 -0
  337. package/dist/shared/validation.js +6 -0
  338. package/dist/shared/validation.js.map +1 -0
  339. package/dist/shared-utils.d.ts +63 -0
  340. package/dist/shared-utils.d.ts.map +1 -0
  341. package/dist/shared-utils.js +123 -0
  342. package/dist/shared-utils.js.map +1 -0
  343. package/dist/template-manager.d.ts +23 -2
  344. package/dist/template-manager.d.ts.map +1 -1
  345. package/dist/template-manager.js +176 -87
  346. package/dist/template-manager.js.map +1 -1
  347. package/dist/test-client.d.ts.map +1 -1
  348. package/dist/test-client.js +10 -8
  349. package/dist/test-client.js.map +1 -1
  350. package/dist/test-runner.d.ts +52 -0
  351. package/dist/test-runner.d.ts.map +1 -0
  352. package/dist/test-runner.js +785 -0
  353. package/dist/test-runner.js.map +1 -0
  354. package/dist/testing.d.ts +103 -0
  355. package/dist/testing.d.ts.map +1 -0
  356. package/dist/testing.js +163 -0
  357. package/dist/testing.js.map +1 -0
  358. package/dist/version-checker.d.ts.map +1 -1
  359. package/dist/version-checker.js +2 -2
  360. package/dist/version-checker.js.map +1 -1
  361. package/dist/version.d.ts +10 -0
  362. package/dist/version.d.ts.map +1 -0
  363. package/dist/version.js +21 -0
  364. package/dist/version.js.map +1 -0
  365. package/dist/watcher.d.ts +6 -3
  366. package/dist/watcher.d.ts.map +1 -1
  367. package/dist/watcher.js +49 -10
  368. package/dist/watcher.js.map +1 -1
  369. package/package.json +57 -7
  370. package/templates/cloudflare/worker.ts.template +381 -0
  371. package/templates/cloudflare/wrangler.toml.template +9 -0
  372. package/dist/base.d.ts +0 -58
  373. package/dist/base.d.ts.map +0 -1
  374. package/dist/base.js +0 -92
  375. package/dist/base.js.map +0 -1
  376. package/dist/dependency-manager.d.ts +0 -49
  377. package/dist/dependency-manager.d.ts.map +0 -1
  378. package/dist/dependency-manager.js +0 -165
  379. package/dist/dependency-manager.js.map +0 -1
  380. package/dist/registry-manager.d.ts +0 -76
  381. package/dist/registry-manager.d.ts.map +0 -1
  382. package/dist/registry-manager.js +0 -220
  383. package/dist/registry-manager.js.map +0 -1
  384. package/dist/schema-extractor.d.ts +0 -110
  385. package/dist/schema-extractor.d.ts.map +0 -1
  386. package/dist/schema-extractor.js +0 -727
  387. package/dist/schema-extractor.js.map +0 -1
  388. package/dist/test-marketplace-sources.d.ts +0 -5
  389. package/dist/test-marketplace-sources.d.ts.map +0 -1
  390. package/dist/test-marketplace-sources.js +0 -53
  391. package/dist/test-marketplace-sources.js.map +0 -1
  392. package/dist/types.d.ts +0 -109
  393. package/dist/types.d.ts.map +0 -1
  394. package/dist/types.js +0 -12
  395. package/dist/types.js.map +0 -1
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Layout Selector - Auto-detect best layout for data
3
+ *
4
+ * Determines the optimal component/layout to render data based on:
5
+ * 1. Explicit @format annotation (highest priority)
6
+ * 2. Data shape (array vs object vs primitive)
7
+ * 3. Data content (has images -> grid, etc.)
8
+ */
9
+ // Map legacy @format values to new layout types
10
+ const FORMAT_TO_LAYOUT = {
11
+ table: 'list', // table -> list (smart rendering)
12
+ list: 'list',
13
+ grid: 'grid',
14
+ card: 'card',
15
+ kv: 'kv',
16
+ tree: 'tree',
17
+ json: 'json',
18
+ markdown: 'markdown',
19
+ mermaid: 'mermaid',
20
+ code: 'code',
21
+ text: 'text',
22
+ primitive: 'text',
23
+ chips: 'chips',
24
+ html: 'html',
25
+ };
26
+ /**
27
+ * Select the best layout type for given data
28
+ */
29
+ export function selectLayout(data, format, hints) {
30
+ // 1. Explicit format takes precedence (backward compat)
31
+ if (format) {
32
+ // Handle code:language format
33
+ if (format.startsWith('code:'))
34
+ return 'code';
35
+ const layout = FORMAT_TO_LAYOUT[format] || 'json';
36
+ // Smart fallback: if list/table format but data is not an array, use card
37
+ if ((layout === 'list' || format === 'table') &&
38
+ !Array.isArray(data) &&
39
+ typeof data === 'object' &&
40
+ data !== null) {
41
+ return 'card';
42
+ }
43
+ return layout;
44
+ }
45
+ // 2. Null/undefined
46
+ if (data === null || data === undefined) {
47
+ return 'text';
48
+ }
49
+ // 3. Primitives
50
+ if (typeof data === 'string') {
51
+ // Check if it looks like markdown
52
+ if (hasMarkdownSyntax(data))
53
+ return 'markdown';
54
+ // Check if it looks like mermaid
55
+ if (data.trim().startsWith('graph ') || data.trim().startsWith('flowchart ')) {
56
+ return 'mermaid';
57
+ }
58
+ return 'text';
59
+ }
60
+ if (typeof data === 'number' || typeof data === 'boolean') {
61
+ return 'text';
62
+ }
63
+ // 4. Arrays
64
+ if (Array.isArray(data)) {
65
+ if (data.length === 0)
66
+ return 'text'; // Empty array
67
+ const first = data[0];
68
+ // Array of strings -> chips
69
+ if (typeof first === 'string') {
70
+ return 'chips';
71
+ }
72
+ // Array of objects
73
+ if (typeof first === 'object' && first !== null) {
74
+ // Check if items have image fields -> grid
75
+ if (hasImageFields(first)) {
76
+ return 'grid';
77
+ }
78
+ // Default: list
79
+ return 'list';
80
+ }
81
+ // Mixed or primitive arrays
82
+ return 'chips';
83
+ }
84
+ // 5. Objects
85
+ if (typeof data === 'object') {
86
+ // Check for special fields
87
+ if ('diagram' in data && typeof data.diagram === 'string') {
88
+ return 'mermaid';
89
+ }
90
+ // Check if deeply nested -> tree
91
+ if (isNested(data)) {
92
+ return 'tree';
93
+ }
94
+ // Flat object -> card (or kv for many fields)
95
+ const fieldCount = Object.keys(data).length;
96
+ if (fieldCount > 10) {
97
+ return 'kv'; // Too many fields for card
98
+ }
99
+ return 'card';
100
+ }
101
+ // Fallback
102
+ return 'json';
103
+ }
104
+ /**
105
+ * Check if object has fields that look like actual images (not just icon characters)
106
+ * We need to verify the VALUE looks like an image URL, not just the field name
107
+ */
108
+ export function hasImageFields(obj) {
109
+ const imageFieldNames = /^(image|photo|thumbnail|picture|poster|cover)$/i;
110
+ const avatarFieldName = /^(avatar)$/i;
111
+ const imageUrlPattern = /\.(jpg|jpeg|png|gif|webp|svg)(\?.*)?$/i;
112
+ const dataUrlPattern = /^data:image\//i;
113
+ for (const [key, value] of Object.entries(obj)) {
114
+ // Skip non-string values
115
+ if (typeof value !== 'string')
116
+ continue;
117
+ // Check for image URL patterns in value
118
+ if (imageUrlPattern.test(value) || dataUrlPattern.test(value))
119
+ return true;
120
+ // For image field names (not avatar), check if value looks like a URL
121
+ if (imageFieldNames.test(key) && (value.startsWith('http') || value.startsWith('/'))) {
122
+ return true;
123
+ }
124
+ // For avatar fields specifically, only treat as image if it's actually a URL
125
+ // Single characters or short strings are icons, not images
126
+ if (avatarFieldName.test(key) &&
127
+ value.length > 10 &&
128
+ (value.startsWith('http') || value.startsWith('/'))) {
129
+ return true;
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Check if object is nested (has object/array values)
136
+ */
137
+ export function isNested(obj, depth = 0) {
138
+ if (depth > 2)
139
+ return true; // Max depth check
140
+ for (const value of Object.values(obj)) {
141
+ if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {
142
+ return true;
143
+ }
144
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
145
+ if (isNested(value, depth + 1))
146
+ return true;
147
+ }
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * Check if string contains markdown syntax
153
+ */
154
+ export function hasMarkdownSyntax(text) {
155
+ // Check for common markdown patterns
156
+ const patterns = [
157
+ /^#{1,6}\s/m, // Headers
158
+ /\*\*[^*]+\*\*/, // Bold
159
+ /\*[^*]+\*/, // Italic
160
+ /\[[^\]]+\]\([^)]+\)/, // Links
161
+ /```[\s\S]*```/, // Code blocks
162
+ /^\s*[-*+]\s/m, // Lists
163
+ /^\s*\d+\.\s/m, // Numbered lists
164
+ ];
165
+ return patterns.some((p) => p.test(text));
166
+ }
167
+ /**
168
+ * Parse layout hints from nested JSDoc syntax
169
+ * Example: {@title name, @subtitle email, @style inset}
170
+ */
171
+ export function parseLayoutHints(hintsString) {
172
+ const hints = {};
173
+ if (!hintsString)
174
+ return hints;
175
+ // Split by comma and parse each hint
176
+ const parts = hintsString.split(',').map((s) => s.trim());
177
+ for (const part of parts) {
178
+ // Match @key value or @key value:renderer
179
+ const match = part.match(/@(\w+)\s+([^:]+)(?::(\w+))?/);
180
+ if (match) {
181
+ const [, key, value, renderer] = match;
182
+ const cleanValue = value.trim();
183
+ switch (key) {
184
+ case 'title':
185
+ hints.title = cleanValue;
186
+ break;
187
+ case 'subtitle':
188
+ hints.subtitle = cleanValue;
189
+ break;
190
+ case 'icon':
191
+ hints.icon = cleanValue;
192
+ break;
193
+ case 'badge':
194
+ hints.badge = cleanValue;
195
+ break;
196
+ case 'detail':
197
+ hints.detail = cleanValue;
198
+ break;
199
+ case 'image':
200
+ hints.image = cleanValue;
201
+ break;
202
+ case 'style':
203
+ hints.style = cleanValue;
204
+ break;
205
+ case 'accessory':
206
+ hints.accessory = cleanValue;
207
+ break;
208
+ case 'columns':
209
+ hints.columns = parseInt(cleanValue, 10);
210
+ break;
211
+ case 'fields':
212
+ hints.fields = cleanValue.split(/\s+/);
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ return hints;
218
+ }
219
+ /**
220
+ * Generate JavaScript code for layout selector (to embed in HTML)
221
+ */
222
+ export function generateLayoutSelectorJS() {
223
+ return `
224
+ // Layout Selector - Auto-detect best layout for data
225
+ const FORMAT_TO_LAYOUT = {
226
+ 'table': 'list',
227
+ 'list': 'list',
228
+ 'grid': 'grid',
229
+ 'card': 'card',
230
+ 'kv': 'kv',
231
+ 'tree': 'tree',
232
+ 'json': 'json',
233
+ 'markdown': 'markdown',
234
+ 'mermaid': 'mermaid',
235
+ 'code': 'code',
236
+ 'text': 'text',
237
+ 'primitive': 'text',
238
+ 'chips': 'chips',
239
+ 'html': 'html',
240
+ };
241
+
242
+ function selectLayout(data, format, hints) {
243
+ if (format) {
244
+ if (format.startsWith('code:')) return 'code';
245
+ var layout = FORMAT_TO_LAYOUT[format] || 'json';
246
+ // Smart fallback: if list/table format but data is not an array, use card
247
+ if ((layout === 'list' || format === 'table') && !Array.isArray(data) && typeof data === 'object' && data !== null) {
248
+ return 'card';
249
+ }
250
+ return layout;
251
+ }
252
+
253
+ if (data === null || data === undefined) return 'text';
254
+
255
+ if (typeof data === 'string') {
256
+ if (hasMarkdownSyntax(data)) return 'markdown';
257
+ if (data.trim().startsWith('graph ') || data.trim().startsWith('flowchart ')) {
258
+ return 'mermaid';
259
+ }
260
+ return 'text';
261
+ }
262
+
263
+ if (typeof data === 'number' || typeof data === 'boolean') return 'text';
264
+
265
+ if (Array.isArray(data)) {
266
+ if (data.length === 0) return 'text';
267
+ const first = data[0];
268
+ if (typeof first === 'string') return 'chips';
269
+ if (typeof first === 'object' && first !== null) {
270
+ if (hasImageFields(first)) return 'grid';
271
+ return 'list';
272
+ }
273
+ return 'chips';
274
+ }
275
+
276
+ if (typeof data === 'object') {
277
+ if ('diagram' in data && typeof data.diagram === 'string') return 'mermaid';
278
+ if (isNested(data)) return 'tree';
279
+ const fieldCount = Object.keys(data).length;
280
+ if (fieldCount > 10) return 'kv';
281
+ return 'card';
282
+ }
283
+
284
+ return 'json';
285
+ }
286
+
287
+ function hasImageFields(obj) {
288
+ const imageFieldNames = /^(image|photo|thumbnail|picture|poster|cover)$/i;
289
+ const avatarFieldName = /^(avatar)$/i;
290
+ const imageUrlPattern = /\\.(jpg|jpeg|png|gif|webp|svg)(\\?.*)?$/i;
291
+ const dataUrlPattern = /^data:image\\//i;
292
+ for (const [key, value] of Object.entries(obj)) {
293
+ if (typeof value !== 'string') continue;
294
+ if (imageUrlPattern.test(value) || dataUrlPattern.test(value)) return true;
295
+ if (imageFieldNames.test(key) && (value.startsWith('http') || value.startsWith('/'))) return true;
296
+ if (avatarFieldName.test(key) && value.length > 10 && (value.startsWith('http') || value.startsWith('/'))) return true;
297
+ }
298
+ return false;
299
+ }
300
+
301
+ function isNested(obj, depth = 0) {
302
+ if (depth > 2) return true;
303
+ for (const value of Object.values(obj)) {
304
+ if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') return true;
305
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
306
+ if (isNested(value, depth + 1)) return true;
307
+ }
308
+ }
309
+ return false;
310
+ }
311
+
312
+ function hasMarkdownSyntax(text) {
313
+ const patterns = [
314
+ /^#{1,6}\\s/m,
315
+ /\\*\\*[^*]+\\*\\*/,
316
+ /\\*[^*]+\\*/,
317
+ /\\[[^\\]]+\\]\\([^)]+\\)/,
318
+ /\`\`\`[\\s\\S]*\`\`\`/,
319
+ /^\\s*[-*+]\\s/m,
320
+ /^\\s*\\d+\\.\\s/m,
321
+ ];
322
+ return patterns.some(p => p.test(text));
323
+ }
324
+
325
+ function parseLayoutHints(hintsString) {
326
+ const hints = {};
327
+ if (!hintsString) return hints;
328
+ const parts = hintsString.split(',').map(s => s.trim());
329
+ for (const part of parts) {
330
+ const match = part.match(/@(\\w+)\\s+([^:]+)(?::(\\w+))?/);
331
+ if (match) {
332
+ const [, key, value, renderer] = match;
333
+ const cleanValue = value.trim();
334
+ switch (key) {
335
+ case 'title': hints.title = cleanValue; break;
336
+ case 'subtitle': hints.subtitle = cleanValue; break;
337
+ case 'icon': hints.icon = cleanValue; break;
338
+ case 'badge': hints.badge = cleanValue; break;
339
+ case 'detail': hints.detail = cleanValue; break;
340
+ case 'image': hints.image = cleanValue; break;
341
+ case 'style': hints.style = cleanValue; break;
342
+ case 'accessory': hints.accessory = cleanValue; break;
343
+ case 'columns': hints.columns = parseInt(cleanValue, 10); break;
344
+ case 'fields': hints.fields = cleanValue.split(/\\s+/); break;
345
+ }
346
+ }
347
+ }
348
+ return hints;
349
+ }
350
+ `;
351
+ }
352
+ //# sourceMappingURL=layout-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-selector.js","sourceRoot":"","sources":["../../../src/auto-ui/rendering/layout-selector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Template Engine - Custom HTML Template Support
3
+ *
4
+ * Enables custom UI templates that map elements to class methods.
5
+ * Perfect for specialized interfaces like:
6
+ * - TV remote control
7
+ * - Numeric keypad
8
+ * - Dashboard with gauges
9
+ * - Media player controls
10
+ *
11
+ * Template Binding Attributes:
12
+ * - data-method: Method to call on click
13
+ * - data-args: JSON arguments to pass
14
+ * - data-result: Container for method output
15
+ * - data-bind: Live data binding
16
+ * - data-if: Conditional visibility
17
+ */
18
+ export interface TemplateBinding {
19
+ element: string;
20
+ method: string;
21
+ args?: any;
22
+ event?: string;
23
+ }
24
+ export interface TemplateConfig {
25
+ id: string;
26
+ path: string;
27
+ bindings?: TemplateBinding[];
28
+ }
29
+ /**
30
+ * Parse template HTML and extract data-method bindings
31
+ */
32
+ export declare function parseTemplateBindings(html: string): TemplateBinding[];
33
+ /**
34
+ * Generate JavaScript for template engine (to embed in HTML)
35
+ */
36
+ export declare function generateTemplateEngineJS(): string;
37
+ /**
38
+ * Generate CSS for template engine
39
+ */
40
+ export declare function generateTemplateEngineCSS(): string;
41
+ //# sourceMappingURL=template-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/rendering/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAWrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CA0IjD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA8DlD"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Template Engine - Custom HTML Template Support
3
+ *
4
+ * Enables custom UI templates that map elements to class methods.
5
+ * Perfect for specialized interfaces like:
6
+ * - TV remote control
7
+ * - Numeric keypad
8
+ * - Dashboard with gauges
9
+ * - Media player controls
10
+ *
11
+ * Template Binding Attributes:
12
+ * - data-method: Method to call on click
13
+ * - data-args: JSON arguments to pass
14
+ * - data-result: Container for method output
15
+ * - data-bind: Live data binding
16
+ * - data-if: Conditional visibility
17
+ */
18
+ /**
19
+ * Parse template HTML and extract data-method bindings
20
+ */
21
+ export function parseTemplateBindings(html) {
22
+ const bindings = [];
23
+ // Match elements with data-method attribute
24
+ const methodRegex = /data-method=["']([^"']+)["']/g;
25
+ const argsRegex = /data-args=["']([^"']+)["']/g;
26
+ // Note: This is a simplified parser - actual implementation
27
+ // would use DOM parsing in the browser
28
+ return bindings;
29
+ }
30
+ /**
31
+ * Generate JavaScript for template engine (to embed in HTML)
32
+ */
33
+ export function generateTemplateEngineJS() {
34
+ return `
35
+ // ==========================================================================
36
+ // Template Engine - Custom UI Template Support
37
+ // ==========================================================================
38
+
39
+ /**
40
+ * Initialize template bindings for custom UI
41
+ * Finds all elements with data-method and binds click handlers
42
+ */
43
+ function initTemplateBindings(container, invokeMethod) {
44
+ // Find all elements with data-method attribute
45
+ const methodElements = container.querySelectorAll('[data-method]');
46
+
47
+ methodElements.forEach(el => {
48
+ const methodName = el.getAttribute('data-method');
49
+ const argsStr = el.getAttribute('data-args');
50
+ const eventType = el.getAttribute('data-event') || 'click';
51
+
52
+ // Parse args if present
53
+ let args = {};
54
+ if (argsStr) {
55
+ try {
56
+ args = JSON.parse(argsStr);
57
+ } catch (e) {
58
+ console.warn('Invalid data-args JSON:', argsStr);
59
+ }
60
+ }
61
+
62
+ // Add event listener
63
+ el.addEventListener(eventType, async (e) => {
64
+ e.preventDefault();
65
+ e.stopPropagation();
66
+
67
+ // Add loading state
68
+ el.classList.add('template-loading');
69
+
70
+ try {
71
+ // Invoke the method
72
+ const result = await invokeMethod(methodName, args);
73
+
74
+ // Find result container and update
75
+ const resultContainer = container.querySelector('[data-result]');
76
+ if (resultContainer && result !== undefined) {
77
+ // Use smart rendering for the result
78
+ const rendered = renderSmartResult(result, null, null);
79
+ if (rendered) {
80
+ resultContainer.innerHTML = rendered;
81
+ } else {
82
+ resultContainer.textContent = JSON.stringify(result, null, 2);
83
+ }
84
+ }
85
+ } catch (error) {
86
+ console.error('Template method error:', error);
87
+ const resultContainer = container.querySelector('[data-result]');
88
+ if (resultContainer) {
89
+ resultContainer.innerHTML = '<div class="template-error">' + escapeHtml(error.message) + '</div>';
90
+ }
91
+ } finally {
92
+ el.classList.remove('template-loading');
93
+ }
94
+ });
95
+ });
96
+
97
+ // Handle data-bind for live updates
98
+ const bindElements = container.querySelectorAll('[data-bind]');
99
+ bindElements.forEach(el => {
100
+ const bindKey = el.getAttribute('data-bind');
101
+ // Store reference for later updates
102
+ el._bindKey = bindKey;
103
+ });
104
+
105
+ // Handle data-if for conditional visibility
106
+ const ifElements = container.querySelectorAll('[data-if]');
107
+ ifElements.forEach(el => {
108
+ const condition = el.getAttribute('data-if');
109
+ el._ifCondition = condition;
110
+ // Initially hidden until condition is evaluated
111
+ el.style.display = 'none';
112
+ });
113
+ }
114
+
115
+ /**
116
+ * Update bound elements with new data
117
+ */
118
+ function updateTemplateBindings(container, data) {
119
+ // Update data-bind elements
120
+ const bindElements = container.querySelectorAll('[data-bind]');
121
+ bindElements.forEach(el => {
122
+ const bindKey = el._bindKey || el.getAttribute('data-bind');
123
+ if (bindKey && data[bindKey] !== undefined) {
124
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
125
+ el.value = data[bindKey];
126
+ } else {
127
+ el.textContent = data[bindKey];
128
+ }
129
+ }
130
+ });
131
+
132
+ // Update data-if elements
133
+ const ifElements = container.querySelectorAll('[data-if]');
134
+ ifElements.forEach(el => {
135
+ const condition = el._ifCondition || el.getAttribute('data-if');
136
+ if (condition) {
137
+ // Evaluate condition against data
138
+ const value = data[condition];
139
+ el.style.display = value ? '' : 'none';
140
+ }
141
+ });
142
+ }
143
+
144
+ /**
145
+ * Load and render a custom template
146
+ */
147
+ async function loadTemplate(templatePath, container, invokeMethod) {
148
+ try {
149
+ // Fetch template content
150
+ const response = await fetch('/api/template?path=' + encodeURIComponent(templatePath), {
151
+ signal: AbortSignal.timeout(10000), // 10s for template load
152
+ });
153
+ if (!response.ok) {
154
+ throw new Error('Failed to load template: ' + response.statusText);
155
+ }
156
+
157
+ const html = await response.text();
158
+ container.innerHTML = html;
159
+
160
+ // Initialize bindings
161
+ initTemplateBindings(container, invokeMethod);
162
+
163
+ return true;
164
+ } catch (error) {
165
+ console.error('Template load error:', error);
166
+ container.innerHTML = '<div class="template-error">Failed to load template: ' + escapeHtml(error.message) + '</div>';
167
+ return false;
168
+ }
169
+ }
170
+ `;
171
+ }
172
+ /**
173
+ * Generate CSS for template engine
174
+ */
175
+ export function generateTemplateEngineCSS() {
176
+ return `
177
+ /* Template Engine Styles */
178
+ .template-loading {
179
+ opacity: 0.6;
180
+ pointer-events: none;
181
+ position: relative;
182
+ }
183
+
184
+ .template-loading::after {
185
+ content: '';
186
+ position: absolute;
187
+ top: 50%;
188
+ left: 50%;
189
+ width: 16px;
190
+ height: 16px;
191
+ margin: -8px 0 0 -8px;
192
+ border: 2px solid var(--accent);
193
+ border-top-color: transparent;
194
+ border-radius: 50%;
195
+ animation: template-spin 0.8s linear infinite;
196
+ }
197
+
198
+ @keyframes template-spin {
199
+ to { transform: rotate(360deg); }
200
+ }
201
+
202
+ .template-error {
203
+ color: var(--error);
204
+ padding: 12px;
205
+ background: rgba(239, 68, 68, 0.1);
206
+ border-radius: 8px;
207
+ font-size: 0.875rem;
208
+ }
209
+
210
+ /* Template button styles */
211
+ [data-method] {
212
+ cursor: pointer;
213
+ transition: all 0.15s ease;
214
+ }
215
+
216
+ [data-method]:hover {
217
+ filter: brightness(1.1);
218
+ }
219
+
220
+ [data-method]:active {
221
+ transform: scale(0.98);
222
+ }
223
+
224
+ /* Result container */
225
+ [data-result] {
226
+ min-height: 40px;
227
+ padding: 8px;
228
+ border-radius: 8px;
229
+ background: var(--bg-tertiary);
230
+ }
231
+
232
+ [data-result]:empty::before {
233
+ content: '—';
234
+ color: var(--text-muted);
235
+ }
236
+ `;
237
+ }
238
+ //# sourceMappingURL=template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../../src/auto-ui/rendering/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAeH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,4CAA4C;IAC5C,MAAM,WAAW,GAAG,+BAA+B,CAAC;IACpD,MAAM,SAAS,GAAG,6BAA6B,CAAC;IAEhD,4DAA4D;IAC5D,uCAAuC;IAEvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwIR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DR,CAAC;AACF,CAAC"}