@frontmcp/ui 0.5.1 → 0.6.1

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 (805) hide show
  1. package/README.md +140 -362
  2. package/bridge/adapters/base-adapter.d.ts +104 -0
  3. package/bridge/adapters/base-adapter.d.ts.map +1 -0
  4. package/bridge/adapters/claude.adapter.d.ts +67 -0
  5. package/bridge/adapters/claude.adapter.d.ts.map +1 -0
  6. package/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  7. package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  8. package/bridge/adapters/gemini.adapter.d.ts +64 -0
  9. package/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  10. package/bridge/adapters/generic.adapter.d.ts +56 -0
  11. package/bridge/adapters/generic.adapter.d.ts.map +1 -0
  12. package/bridge/adapters/index.d.ts +26 -0
  13. package/bridge/adapters/index.d.ts.map +1 -0
  14. package/bridge/adapters/openai.adapter.d.ts +65 -0
  15. package/bridge/adapters/openai.adapter.d.ts.map +1 -0
  16. package/bridge/core/adapter-registry.d.ts +122 -0
  17. package/bridge/core/adapter-registry.d.ts.map +1 -0
  18. package/bridge/core/bridge-factory.d.ts +199 -0
  19. package/bridge/core/bridge-factory.d.ts.map +1 -0
  20. package/bridge/core/index.d.ts +10 -0
  21. package/bridge/core/index.d.ts.map +1 -0
  22. package/bridge/index.d.ts +62 -0
  23. package/bridge/index.d.ts.map +1 -0
  24. package/bridge/index.js +2540 -0
  25. package/bridge/runtime/iife-generator.d.ts +62 -0
  26. package/bridge/runtime/iife-generator.d.ts.map +1 -0
  27. package/bridge/runtime/index.d.ts +10 -0
  28. package/bridge/runtime/index.d.ts.map +1 -0
  29. package/bridge/types.d.ts +386 -0
  30. package/bridge/types.d.ts.map +1 -0
  31. package/bundler/bundler.d.ts +208 -0
  32. package/bundler/bundler.d.ts.map +1 -0
  33. package/bundler/cache.d.ts +173 -0
  34. package/bundler/cache.d.ts.map +1 -0
  35. package/bundler/file-cache/component-builder.d.ts +167 -0
  36. package/bundler/file-cache/component-builder.d.ts.map +1 -0
  37. package/bundler/file-cache/hash-calculator.d.ts +155 -0
  38. package/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  39. package/bundler/file-cache/index.d.ts +12 -0
  40. package/bundler/file-cache/index.d.ts.map +1 -0
  41. package/bundler/file-cache/storage/filesystem.d.ts +149 -0
  42. package/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  43. package/bundler/file-cache/storage/index.d.ts +11 -0
  44. package/bundler/file-cache/storage/index.d.ts.map +1 -0
  45. package/bundler/file-cache/storage/interface.d.ts +152 -0
  46. package/bundler/file-cache/storage/interface.d.ts.map +1 -0
  47. package/bundler/file-cache/storage/redis.d.ts +139 -0
  48. package/bundler/file-cache/storage/redis.d.ts.map +1 -0
  49. package/bundler/index.d.ts +43 -0
  50. package/bundler/index.d.ts.map +1 -0
  51. package/bundler/index.js +3707 -0
  52. package/bundler/sandbox/enclave-adapter.d.ts +121 -0
  53. package/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  54. package/bundler/sandbox/executor.d.ts +14 -0
  55. package/bundler/sandbox/executor.d.ts.map +1 -0
  56. package/bundler/sandbox/policy.d.ts +62 -0
  57. package/bundler/sandbox/policy.d.ts.map +1 -0
  58. package/bundler/types.d.ts +702 -0
  59. package/bundler/types.d.ts.map +1 -0
  60. package/components/alert.d.ts +66 -0
  61. package/components/alert.d.ts.map +1 -0
  62. package/components/alert.schema.d.ts +98 -0
  63. package/components/alert.schema.d.ts.map +1 -0
  64. package/components/avatar.d.ts +77 -0
  65. package/components/avatar.d.ts.map +1 -0
  66. package/components/avatar.schema.d.ts +170 -0
  67. package/components/avatar.schema.d.ts.map +1 -0
  68. package/components/badge.d.ts +64 -0
  69. package/components/badge.d.ts.map +1 -0
  70. package/components/badge.schema.d.ts +91 -0
  71. package/components/badge.schema.d.ts.map +1 -0
  72. package/components/button.d.ts +100 -0
  73. package/components/button.d.ts.map +1 -0
  74. package/components/button.schema.d.ts +120 -0
  75. package/components/button.schema.d.ts.map +1 -0
  76. package/components/card.d.ts +53 -0
  77. package/components/card.d.ts.map +1 -0
  78. package/components/card.schema.d.ts +93 -0
  79. package/components/card.schema.d.ts.map +1 -0
  80. package/components/form.d.ts +212 -0
  81. package/components/form.d.ts.map +1 -0
  82. package/components/form.schema.d.ts +365 -0
  83. package/components/form.schema.d.ts.map +1 -0
  84. package/components/index.d.ts +29 -0
  85. package/components/index.d.ts.map +1 -0
  86. package/components/index.js +2525 -0
  87. package/components/list.d.ts +121 -0
  88. package/components/list.d.ts.map +1 -0
  89. package/components/list.schema.d.ts +129 -0
  90. package/components/list.schema.d.ts.map +1 -0
  91. package/components/modal.d.ts +100 -0
  92. package/components/modal.d.ts.map +1 -0
  93. package/components/modal.schema.d.ts +151 -0
  94. package/components/modal.schema.d.ts.map +1 -0
  95. package/components/table.d.ts +91 -0
  96. package/components/table.d.ts.map +1 -0
  97. package/components/table.schema.d.ts +123 -0
  98. package/components/table.schema.d.ts.map +1 -0
  99. package/esm/bridge/adapters/base-adapter.d.ts +104 -0
  100. package/esm/bridge/adapters/base-adapter.d.ts.map +1 -0
  101. package/esm/bridge/adapters/claude.adapter.d.ts +67 -0
  102. package/esm/bridge/adapters/claude.adapter.d.ts.map +1 -0
  103. package/esm/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  104. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  105. package/esm/bridge/adapters/gemini.adapter.d.ts +64 -0
  106. package/esm/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  107. package/esm/bridge/adapters/generic.adapter.d.ts +56 -0
  108. package/esm/bridge/adapters/generic.adapter.d.ts.map +1 -0
  109. package/esm/bridge/adapters/index.d.ts +26 -0
  110. package/esm/bridge/adapters/index.d.ts.map +1 -0
  111. package/esm/bridge/adapters/openai.adapter.d.ts +65 -0
  112. package/esm/bridge/adapters/openai.adapter.d.ts.map +1 -0
  113. package/esm/bridge/core/adapter-registry.d.ts +122 -0
  114. package/esm/bridge/core/adapter-registry.d.ts.map +1 -0
  115. package/esm/bridge/core/bridge-factory.d.ts +199 -0
  116. package/esm/bridge/core/bridge-factory.d.ts.map +1 -0
  117. package/esm/bridge/core/index.d.ts +10 -0
  118. package/esm/bridge/core/index.d.ts.map +1 -0
  119. package/esm/bridge/index.d.ts +62 -0
  120. package/esm/bridge/index.d.ts.map +1 -0
  121. package/esm/bridge/index.js +2487 -0
  122. package/esm/bridge/runtime/iife-generator.d.ts +62 -0
  123. package/esm/bridge/runtime/iife-generator.d.ts.map +1 -0
  124. package/esm/bridge/runtime/index.d.ts +10 -0
  125. package/esm/bridge/runtime/index.d.ts.map +1 -0
  126. package/esm/bridge/types.d.ts +386 -0
  127. package/esm/bridge/types.d.ts.map +1 -0
  128. package/esm/bundler/bundler.d.ts +208 -0
  129. package/esm/bundler/bundler.d.ts.map +1 -0
  130. package/esm/bundler/cache.d.ts +173 -0
  131. package/esm/bundler/cache.d.ts.map +1 -0
  132. package/esm/bundler/file-cache/component-builder.d.ts +167 -0
  133. package/esm/bundler/file-cache/component-builder.d.ts.map +1 -0
  134. package/esm/bundler/file-cache/hash-calculator.d.ts +155 -0
  135. package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  136. package/esm/bundler/file-cache/index.d.ts +12 -0
  137. package/esm/bundler/file-cache/index.d.ts.map +1 -0
  138. package/esm/bundler/file-cache/storage/filesystem.d.ts +149 -0
  139. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  140. package/esm/bundler/file-cache/storage/index.d.ts +11 -0
  141. package/esm/bundler/file-cache/storage/index.d.ts.map +1 -0
  142. package/esm/bundler/file-cache/storage/interface.d.ts +152 -0
  143. package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -0
  144. package/esm/bundler/file-cache/storage/redis.d.ts +139 -0
  145. package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -0
  146. package/esm/bundler/index.d.ts +43 -0
  147. package/esm/bundler/index.d.ts.map +1 -0
  148. package/esm/bundler/index.js +3640 -0
  149. package/esm/bundler/sandbox/enclave-adapter.d.ts +121 -0
  150. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  151. package/esm/bundler/sandbox/executor.d.ts +14 -0
  152. package/esm/bundler/sandbox/executor.d.ts.map +1 -0
  153. package/esm/bundler/sandbox/policy.d.ts +62 -0
  154. package/esm/bundler/sandbox/policy.d.ts.map +1 -0
  155. package/esm/bundler/types.d.ts +702 -0
  156. package/esm/bundler/types.d.ts.map +1 -0
  157. package/esm/components/alert.d.ts +66 -0
  158. package/esm/components/alert.d.ts.map +1 -0
  159. package/esm/components/alert.schema.d.ts +98 -0
  160. package/esm/components/alert.schema.d.ts.map +1 -0
  161. package/esm/components/avatar.d.ts +77 -0
  162. package/esm/components/avatar.d.ts.map +1 -0
  163. package/esm/components/avatar.schema.d.ts +170 -0
  164. package/esm/components/avatar.schema.d.ts.map +1 -0
  165. package/esm/components/badge.d.ts +64 -0
  166. package/esm/components/badge.d.ts.map +1 -0
  167. package/esm/components/badge.schema.d.ts +91 -0
  168. package/esm/components/badge.schema.d.ts.map +1 -0
  169. package/esm/components/button.d.ts +100 -0
  170. package/esm/components/button.d.ts.map +1 -0
  171. package/esm/components/button.schema.d.ts +120 -0
  172. package/esm/components/button.schema.d.ts.map +1 -0
  173. package/esm/components/card.d.ts +53 -0
  174. package/esm/components/card.d.ts.map +1 -0
  175. package/esm/components/card.schema.d.ts +93 -0
  176. package/esm/components/card.schema.d.ts.map +1 -0
  177. package/esm/components/form.d.ts +212 -0
  178. package/esm/components/form.d.ts.map +1 -0
  179. package/esm/components/form.schema.d.ts +365 -0
  180. package/esm/components/form.schema.d.ts.map +1 -0
  181. package/esm/components/index.d.ts +29 -0
  182. package/esm/components/index.d.ts.map +1 -0
  183. package/esm/components/index.js +2396 -0
  184. package/esm/components/list.d.ts +121 -0
  185. package/esm/components/list.d.ts.map +1 -0
  186. package/esm/components/list.schema.d.ts +129 -0
  187. package/esm/components/list.schema.d.ts.map +1 -0
  188. package/esm/components/modal.d.ts +100 -0
  189. package/esm/components/modal.d.ts.map +1 -0
  190. package/esm/components/modal.schema.d.ts +151 -0
  191. package/esm/components/modal.schema.d.ts.map +1 -0
  192. package/esm/components/table.d.ts +91 -0
  193. package/esm/components/table.d.ts.map +1 -0
  194. package/esm/components/table.schema.d.ts +123 -0
  195. package/esm/components/table.schema.d.ts.map +1 -0
  196. package/esm/index.d.ts +40 -0
  197. package/esm/index.d.ts.map +1 -0
  198. package/esm/index.js +8326 -0
  199. package/esm/layouts/base.d.ts +86 -0
  200. package/esm/layouts/base.d.ts.map +1 -0
  201. package/esm/layouts/index.d.ts +8 -0
  202. package/esm/layouts/index.d.ts.map +1 -0
  203. package/esm/layouts/index.js +409 -0
  204. package/esm/layouts/presets.d.ts +134 -0
  205. package/esm/layouts/presets.d.ts.map +1 -0
  206. package/esm/package.json +72 -0
  207. package/esm/pages/consent.d.ts +117 -0
  208. package/esm/pages/consent.d.ts.map +1 -0
  209. package/esm/pages/error.d.ts +101 -0
  210. package/esm/pages/error.d.ts.map +1 -0
  211. package/esm/pages/index.d.ts +9 -0
  212. package/esm/pages/index.d.ts.map +1 -0
  213. package/esm/pages/index.js +1036 -0
  214. package/esm/react/Alert.d.ts +101 -0
  215. package/esm/react/Alert.d.ts.map +1 -0
  216. package/esm/react/Badge.d.ts +100 -0
  217. package/esm/react/Badge.d.ts.map +1 -0
  218. package/esm/react/Button.d.ts +108 -0
  219. package/esm/react/Button.d.ts.map +1 -0
  220. package/esm/react/Card.d.ts +103 -0
  221. package/esm/react/Card.d.ts.map +1 -0
  222. package/esm/react/hooks/context.d.ts +179 -0
  223. package/esm/react/hooks/context.d.ts.map +1 -0
  224. package/esm/react/hooks/index.d.ts +42 -0
  225. package/esm/react/hooks/index.d.ts.map +1 -0
  226. package/esm/react/hooks/tools.d.ts +284 -0
  227. package/esm/react/hooks/tools.d.ts.map +1 -0
  228. package/esm/react/index.d.ts +80 -0
  229. package/esm/react/index.d.ts.map +1 -0
  230. package/esm/react/index.js +3124 -0
  231. package/esm/react/types.d.ts +105 -0
  232. package/esm/react/types.d.ts.map +1 -0
  233. package/esm/react/utils.d.ts +43 -0
  234. package/esm/react/utils.d.ts.map +1 -0
  235. package/esm/render/index.d.ts +8 -0
  236. package/esm/render/index.d.ts.map +1 -0
  237. package/esm/render/index.js +45 -0
  238. package/esm/render/prerender.d.ts +57 -0
  239. package/esm/render/prerender.d.ts.map +1 -0
  240. package/esm/renderers/index.d.ts +21 -0
  241. package/esm/renderers/index.d.ts.map +1 -0
  242. package/esm/renderers/index.js +381 -0
  243. package/esm/renderers/react.adapter.d.ts +70 -0
  244. package/esm/renderers/react.adapter.d.ts.map +1 -0
  245. package/esm/renderers/react.renderer.d.ts +96 -0
  246. package/esm/renderers/react.renderer.d.ts.map +1 -0
  247. package/esm/universal/UniversalApp.d.ts +108 -0
  248. package/esm/universal/UniversalApp.d.ts.map +1 -0
  249. package/esm/universal/cached-runtime.d.ts +115 -0
  250. package/esm/universal/cached-runtime.d.ts.map +1 -0
  251. package/esm/universal/context.d.ts +122 -0
  252. package/esm/universal/context.d.ts.map +1 -0
  253. package/esm/universal/index.d.ts +57 -0
  254. package/esm/universal/index.d.ts.map +1 -0
  255. package/esm/universal/index.js +1755 -0
  256. package/esm/universal/renderers/html.renderer.d.ts +37 -0
  257. package/esm/universal/renderers/html.renderer.d.ts.map +1 -0
  258. package/esm/universal/renderers/index.d.ts +112 -0
  259. package/esm/universal/renderers/index.d.ts.map +1 -0
  260. package/esm/universal/renderers/markdown.renderer.d.ts +33 -0
  261. package/esm/universal/renderers/markdown.renderer.d.ts.map +1 -0
  262. package/esm/universal/renderers/mdx.renderer.d.ts +38 -0
  263. package/esm/universal/renderers/mdx.renderer.d.ts.map +1 -0
  264. package/esm/universal/renderers/react.renderer.d.ts +46 -0
  265. package/esm/universal/renderers/react.renderer.d.ts.map +1 -0
  266. package/esm/universal/runtime-builder.d.ts +33 -0
  267. package/esm/universal/runtime-builder.d.ts.map +1 -0
  268. package/esm/universal/store.d.ts +135 -0
  269. package/esm/universal/store.d.ts.map +1 -0
  270. package/esm/universal/types.d.ts +199 -0
  271. package/esm/universal/types.d.ts.map +1 -0
  272. package/esm/web-components/core/attribute-parser.d.ts +82 -0
  273. package/esm/web-components/core/attribute-parser.d.ts.map +1 -0
  274. package/esm/web-components/core/base-element.d.ts +197 -0
  275. package/esm/web-components/core/base-element.d.ts.map +1 -0
  276. package/esm/web-components/core/index.d.ts +9 -0
  277. package/esm/web-components/core/index.d.ts.map +1 -0
  278. package/esm/web-components/elements/fmcp-alert.d.ts +46 -0
  279. package/esm/web-components/elements/fmcp-alert.d.ts.map +1 -0
  280. package/esm/web-components/elements/fmcp-badge.d.ts +47 -0
  281. package/esm/web-components/elements/fmcp-badge.d.ts.map +1 -0
  282. package/esm/web-components/elements/fmcp-button.d.ts +117 -0
  283. package/esm/web-components/elements/fmcp-button.d.ts.map +1 -0
  284. package/esm/web-components/elements/fmcp-card.d.ts +53 -0
  285. package/esm/web-components/elements/fmcp-card.d.ts.map +1 -0
  286. package/esm/web-components/elements/fmcp-input.d.ts +96 -0
  287. package/esm/web-components/elements/fmcp-input.d.ts.map +1 -0
  288. package/esm/web-components/elements/fmcp-select.d.ts +100 -0
  289. package/esm/web-components/elements/fmcp-select.d.ts.map +1 -0
  290. package/esm/web-components/elements/index.d.ts +13 -0
  291. package/esm/web-components/elements/index.d.ts.map +1 -0
  292. package/esm/web-components/index.d.ts +50 -0
  293. package/esm/web-components/index.d.ts.map +1 -0
  294. package/esm/web-components/index.js +1993 -0
  295. package/esm/web-components/register.d.ts +57 -0
  296. package/esm/web-components/register.d.ts.map +1 -0
  297. package/esm/web-components/types.d.ts +122 -0
  298. package/esm/web-components/types.d.ts.map +1 -0
  299. package/esm/widgets/index.d.ts +8 -0
  300. package/esm/widgets/index.d.ts.map +1 -0
  301. package/esm/widgets/index.js +883 -0
  302. package/esm/widgets/progress.d.ts +133 -0
  303. package/esm/widgets/progress.d.ts.map +1 -0
  304. package/esm/widgets/resource.d.ts +163 -0
  305. package/esm/widgets/resource.d.ts.map +1 -0
  306. package/index.d.ts +40 -0
  307. package/index.d.ts.map +1 -0
  308. package/index.js +8526 -0
  309. package/layouts/base.d.ts +86 -0
  310. package/layouts/base.d.ts.map +1 -0
  311. package/layouts/index.d.ts +8 -0
  312. package/layouts/index.d.ts.map +1 -0
  313. package/layouts/index.js +437 -0
  314. package/layouts/presets.d.ts +134 -0
  315. package/layouts/presets.d.ts.map +1 -0
  316. package/package.json +33 -110
  317. package/pages/consent.d.ts +117 -0
  318. package/pages/consent.d.ts.map +1 -0
  319. package/pages/error.d.ts +101 -0
  320. package/pages/error.d.ts.map +1 -0
  321. package/pages/index.d.ts +9 -0
  322. package/pages/index.d.ts.map +1 -0
  323. package/pages/index.js +1065 -0
  324. package/react/Alert.d.ts +101 -0
  325. package/react/Alert.d.ts.map +1 -0
  326. package/react/Badge.d.ts +100 -0
  327. package/react/Badge.d.ts.map +1 -0
  328. package/react/Button.d.ts +108 -0
  329. package/react/Button.d.ts.map +1 -0
  330. package/react/Card.d.ts +103 -0
  331. package/react/Card.d.ts.map +1 -0
  332. package/react/hooks/context.d.ts +179 -0
  333. package/react/hooks/context.d.ts.map +1 -0
  334. package/react/hooks/index.d.ts +42 -0
  335. package/react/hooks/index.d.ts.map +1 -0
  336. package/react/hooks/tools.d.ts +284 -0
  337. package/react/hooks/tools.d.ts.map +1 -0
  338. package/react/index.d.ts +80 -0
  339. package/react/index.d.ts.map +1 -0
  340. package/react/index.js +3160 -0
  341. package/react/types.d.ts +105 -0
  342. package/react/types.d.ts.map +1 -0
  343. package/react/utils.d.ts +43 -0
  344. package/react/utils.d.ts.map +1 -0
  345. package/render/index.d.ts +8 -0
  346. package/render/index.d.ts.map +1 -0
  347. package/render/index.js +77 -0
  348. package/render/prerender.d.ts +57 -0
  349. package/render/prerender.d.ts.map +1 -0
  350. package/renderers/index.d.ts +21 -0
  351. package/renderers/index.d.ts.map +1 -0
  352. package/renderers/index.js +416 -0
  353. package/renderers/react.adapter.d.ts +70 -0
  354. package/renderers/react.adapter.d.ts.map +1 -0
  355. package/renderers/react.renderer.d.ts +96 -0
  356. package/renderers/react.renderer.d.ts.map +1 -0
  357. package/universal/UniversalApp.d.ts +108 -0
  358. package/universal/UniversalApp.d.ts.map +1 -0
  359. package/universal/cached-runtime.d.ts +115 -0
  360. package/universal/cached-runtime.d.ts.map +1 -0
  361. package/universal/context.d.ts +122 -0
  362. package/universal/context.d.ts.map +1 -0
  363. package/universal/index.d.ts +57 -0
  364. package/universal/index.d.ts.map +1 -0
  365. package/universal/index.js +1841 -0
  366. package/universal/renderers/html.renderer.d.ts +37 -0
  367. package/universal/renderers/html.renderer.d.ts.map +1 -0
  368. package/universal/renderers/index.d.ts +112 -0
  369. package/universal/renderers/index.d.ts.map +1 -0
  370. package/universal/renderers/markdown.renderer.d.ts +33 -0
  371. package/universal/renderers/markdown.renderer.d.ts.map +1 -0
  372. package/universal/renderers/mdx.renderer.d.ts +38 -0
  373. package/universal/renderers/mdx.renderer.d.ts.map +1 -0
  374. package/universal/renderers/react.renderer.d.ts +46 -0
  375. package/universal/renderers/react.renderer.d.ts.map +1 -0
  376. package/universal/runtime-builder.d.ts +33 -0
  377. package/universal/runtime-builder.d.ts.map +1 -0
  378. package/universal/store.d.ts +135 -0
  379. package/universal/store.d.ts.map +1 -0
  380. package/universal/types.d.ts +199 -0
  381. package/universal/types.d.ts.map +1 -0
  382. package/web-components/core/attribute-parser.d.ts +82 -0
  383. package/web-components/core/attribute-parser.d.ts.map +1 -0
  384. package/web-components/core/base-element.d.ts +197 -0
  385. package/web-components/core/base-element.d.ts.map +1 -0
  386. package/web-components/core/index.d.ts +9 -0
  387. package/web-components/core/index.d.ts.map +1 -0
  388. package/web-components/elements/fmcp-alert.d.ts +46 -0
  389. package/web-components/elements/fmcp-alert.d.ts.map +1 -0
  390. package/web-components/elements/fmcp-badge.d.ts +47 -0
  391. package/web-components/elements/fmcp-badge.d.ts.map +1 -0
  392. package/web-components/elements/fmcp-button.d.ts +117 -0
  393. package/web-components/elements/fmcp-button.d.ts.map +1 -0
  394. package/web-components/elements/fmcp-card.d.ts +53 -0
  395. package/web-components/elements/fmcp-card.d.ts.map +1 -0
  396. package/web-components/elements/fmcp-input.d.ts +96 -0
  397. package/web-components/elements/fmcp-input.d.ts.map +1 -0
  398. package/web-components/elements/fmcp-select.d.ts +100 -0
  399. package/web-components/elements/fmcp-select.d.ts.map +1 -0
  400. package/web-components/elements/index.d.ts +13 -0
  401. package/web-components/elements/index.d.ts.map +1 -0
  402. package/web-components/index.d.ts +50 -0
  403. package/web-components/index.d.ts.map +1 -0
  404. package/web-components/index.js +2028 -0
  405. package/web-components/register.d.ts +57 -0
  406. package/web-components/register.d.ts.map +1 -0
  407. package/web-components/types.d.ts +122 -0
  408. package/web-components/types.d.ts.map +1 -0
  409. package/widgets/index.d.ts +8 -0
  410. package/widgets/index.d.ts.map +1 -0
  411. package/widgets/index.js +910 -0
  412. package/widgets/progress.d.ts +133 -0
  413. package/widgets/progress.d.ts.map +1 -0
  414. package/widgets/resource.d.ts +163 -0
  415. package/widgets/resource.d.ts.map +1 -0
  416. package/src/adapters/index.d.ts +0 -10
  417. package/src/adapters/index.js +0 -18
  418. package/src/adapters/index.js.map +0 -1
  419. package/src/adapters/platform-meta.d.ts +0 -165
  420. package/src/adapters/platform-meta.js +0 -310
  421. package/src/adapters/platform-meta.js.map +0 -1
  422. package/src/base-template/bridge.d.ts +0 -89
  423. package/src/base-template/bridge.js +0 -452
  424. package/src/base-template/bridge.js.map +0 -1
  425. package/src/base-template/default-base-template.d.ts +0 -91
  426. package/src/base-template/default-base-template.js +0 -435
  427. package/src/base-template/default-base-template.js.map +0 -1
  428. package/src/base-template/index.d.ts +0 -14
  429. package/src/base-template/index.js +0 -30
  430. package/src/base-template/index.js.map +0 -1
  431. package/src/base-template/polyfills.d.ts +0 -30
  432. package/src/base-template/polyfills.js +0 -190
  433. package/src/base-template/polyfills.js.map +0 -1
  434. package/src/base-template/theme-styles.d.ts +0 -73
  435. package/src/base-template/theme-styles.js +0 -95
  436. package/src/base-template/theme-styles.js.map +0 -1
  437. package/src/bridge/adapters/base-adapter.d.ts +0 -103
  438. package/src/bridge/adapters/base-adapter.js +0 -314
  439. package/src/bridge/adapters/base-adapter.js.map +0 -1
  440. package/src/bridge/adapters/claude.adapter.d.ts +0 -66
  441. package/src/bridge/adapters/claude.adapter.js +0 -145
  442. package/src/bridge/adapters/claude.adapter.js.map +0 -1
  443. package/src/bridge/adapters/ext-apps.adapter.d.ts +0 -142
  444. package/src/bridge/adapters/ext-apps.adapter.js +0 -416
  445. package/src/bridge/adapters/ext-apps.adapter.js.map +0 -1
  446. package/src/bridge/adapters/gemini.adapter.d.ts +0 -63
  447. package/src/bridge/adapters/gemini.adapter.js +0 -160
  448. package/src/bridge/adapters/gemini.adapter.js.map +0 -1
  449. package/src/bridge/adapters/generic.adapter.d.ts +0 -55
  450. package/src/bridge/adapters/generic.adapter.js +0 -108
  451. package/src/bridge/adapters/generic.adapter.js.map +0 -1
  452. package/src/bridge/adapters/index.d.ts +0 -25
  453. package/src/bridge/adapters/index.js +0 -65
  454. package/src/bridge/adapters/index.js.map +0 -1
  455. package/src/bridge/adapters/openai.adapter.d.ts +0 -64
  456. package/src/bridge/adapters/openai.adapter.js +0 -194
  457. package/src/bridge/adapters/openai.adapter.js.map +0 -1
  458. package/src/bridge/core/adapter-registry.d.ts +0 -121
  459. package/src/bridge/core/adapter-registry.js +0 -271
  460. package/src/bridge/core/adapter-registry.js.map +0 -1
  461. package/src/bridge/core/bridge-factory.d.ts +0 -198
  462. package/src/bridge/core/bridge-factory.js +0 -428
  463. package/src/bridge/core/bridge-factory.js.map +0 -1
  464. package/src/bridge/core/index.d.ts +0 -9
  465. package/src/bridge/core/index.js +0 -22
  466. package/src/bridge/core/index.js.map +0 -1
  467. package/src/bridge/index.d.ts +0 -61
  468. package/src/bridge/index.js +0 -94
  469. package/src/bridge/index.js.map +0 -1
  470. package/src/bridge/runtime/iife-generator.d.ts +0 -61
  471. package/src/bridge/runtime/iife-generator.js +0 -940
  472. package/src/bridge/runtime/iife-generator.js.map +0 -1
  473. package/src/bridge/runtime/index.d.ts +0 -8
  474. package/src/bridge/runtime/index.js +0 -16
  475. package/src/bridge/runtime/index.js.map +0 -1
  476. package/src/bridge/types.d.ts +0 -385
  477. package/src/bridge/types.js +0 -11
  478. package/src/bridge/types.js.map +0 -1
  479. package/src/build/cdn-resources.d.ts +0 -140
  480. package/src/build/cdn-resources.js +0 -314
  481. package/src/build/cdn-resources.js.map +0 -1
  482. package/src/build/index.d.ts +0 -294
  483. package/src/build/index.js +0 -325
  484. package/src/build/index.js.map +0 -1
  485. package/src/build/widget-manifest.d.ts +0 -212
  486. package/src/build/widget-manifest.js +0 -652
  487. package/src/build/widget-manifest.js.map +0 -1
  488. package/src/bundler/bundler.d.ts +0 -110
  489. package/src/bundler/bundler.js +0 -432
  490. package/src/bundler/bundler.js.map +0 -1
  491. package/src/bundler/cache.d.ts +0 -172
  492. package/src/bundler/cache.js +0 -250
  493. package/src/bundler/cache.js.map +0 -1
  494. package/src/bundler/index.d.ts +0 -41
  495. package/src/bundler/index.js +0 -73
  496. package/src/bundler/index.js.map +0 -1
  497. package/src/bundler/sandbox/enclave-adapter.d.ts +0 -120
  498. package/src/bundler/sandbox/enclave-adapter.js +0 -339
  499. package/src/bundler/sandbox/enclave-adapter.js.map +0 -1
  500. package/src/bundler/sandbox/executor.d.ts +0 -13
  501. package/src/bundler/sandbox/executor.js +0 -22
  502. package/src/bundler/sandbox/executor.js.map +0 -1
  503. package/src/bundler/sandbox/policy.d.ts +0 -61
  504. package/src/bundler/sandbox/policy.js +0 -238
  505. package/src/bundler/sandbox/policy.js.map +0 -1
  506. package/src/bundler/types.d.ts +0 -347
  507. package/src/bundler/types.js +0 -132
  508. package/src/bundler/types.js.map +0 -1
  509. package/src/components/alert.d.ts +0 -71
  510. package/src/components/alert.js +0 -189
  511. package/src/components/alert.js.map +0 -1
  512. package/src/components/alert.schema.d.ts +0 -114
  513. package/src/components/alert.schema.js +0 -105
  514. package/src/components/alert.schema.js.map +0 -1
  515. package/src/components/avatar.d.ts +0 -76
  516. package/src/components/avatar.js +0 -176
  517. package/src/components/avatar.js.map +0 -1
  518. package/src/components/avatar.schema.d.ts +0 -169
  519. package/src/components/avatar.schema.js +0 -103
  520. package/src/components/avatar.schema.js.map +0 -1
  521. package/src/components/badge.d.ts +0 -70
  522. package/src/components/badge.js +0 -149
  523. package/src/components/badge.js.map +0 -1
  524. package/src/components/badge.schema.d.ts +0 -109
  525. package/src/components/badge.schema.js +0 -96
  526. package/src/components/badge.schema.js.map +0 -1
  527. package/src/components/button.d.ts +0 -111
  528. package/src/components/button.js +0 -336
  529. package/src/components/button.js.map +0 -1
  530. package/src/components/button.schema.d.ts +0 -148
  531. package/src/components/button.schema.js +0 -121
  532. package/src/components/button.schema.js.map +0 -1
  533. package/src/components/card.d.ts +0 -60
  534. package/src/components/card.js +0 -117
  535. package/src/components/card.js.map +0 -1
  536. package/src/components/card.schema.d.ts +0 -113
  537. package/src/components/card.schema.js +0 -98
  538. package/src/components/card.schema.js.map +0 -1
  539. package/src/components/form.d.ts +0 -239
  540. package/src/components/form.js +0 -420
  541. package/src/components/form.js.map +0 -1
  542. package/src/components/form.schema.d.ts +0 -441
  543. package/src/components/form.schema.js +0 -406
  544. package/src/components/form.schema.js.map +0 -1
  545. package/src/components/index.d.ts +0 -29
  546. package/src/components/index.js +0 -98
  547. package/src/components/index.js.map +0 -1
  548. package/src/components/list.d.ts +0 -127
  549. package/src/components/list.js +0 -279
  550. package/src/components/list.js.map +0 -1
  551. package/src/components/list.schema.d.ts +0 -134
  552. package/src/components/list.schema.js +0 -168
  553. package/src/components/list.schema.js.map +0 -1
  554. package/src/components/modal.d.ts +0 -111
  555. package/src/components/modal.js +0 -260
  556. package/src/components/modal.js.map +0 -1
  557. package/src/components/modal.schema.d.ts +0 -186
  558. package/src/components/modal.schema.js +0 -167
  559. package/src/components/modal.schema.js.map +0 -1
  560. package/src/components/table.d.ts +0 -105
  561. package/src/components/table.js +0 -283
  562. package/src/components/table.js.map +0 -1
  563. package/src/components/table.schema.d.ts +0 -159
  564. package/src/components/table.schema.js +0 -173
  565. package/src/components/table.schema.js.map +0 -1
  566. package/src/handlebars/helpers.d.ts +0 -348
  567. package/src/handlebars/helpers.js +0 -605
  568. package/src/handlebars/helpers.js.map +0 -1
  569. package/src/handlebars/index.d.ts +0 -193
  570. package/src/handlebars/index.js +0 -350
  571. package/src/handlebars/index.js.map +0 -1
  572. package/src/index.d.ts +0 -50
  573. package/src/index.js +0 -192
  574. package/src/index.js.map +0 -1
  575. package/src/layouts/base.d.ts +0 -88
  576. package/src/layouts/base.js +0 -227
  577. package/src/layouts/base.js.map +0 -1
  578. package/src/layouts/index.d.ts +0 -7
  579. package/src/layouts/index.js +0 -25
  580. package/src/layouts/index.js.map +0 -1
  581. package/src/layouts/presets.d.ts +0 -133
  582. package/src/layouts/presets.js +0 -277
  583. package/src/layouts/presets.js.map +0 -1
  584. package/src/pages/consent.d.ts +0 -116
  585. package/src/pages/consent.js +0 -218
  586. package/src/pages/consent.js.map +0 -1
  587. package/src/pages/error.d.ts +0 -100
  588. package/src/pages/error.js +0 -263
  589. package/src/pages/error.js.map +0 -1
  590. package/src/pages/index.d.ts +0 -8
  591. package/src/pages/index.js +0 -27
  592. package/src/pages/index.js.map +0 -1
  593. package/src/react/Alert.d.ts +0 -101
  594. package/src/react/Alert.js +0 -51
  595. package/src/react/Alert.js.map +0 -1
  596. package/src/react/Badge.d.ts +0 -100
  597. package/src/react/Badge.js +0 -55
  598. package/src/react/Badge.js.map +0 -1
  599. package/src/react/Button.d.ts +0 -108
  600. package/src/react/Button.js +0 -52
  601. package/src/react/Button.js.map +0 -1
  602. package/src/react/Card.d.ts +0 -103
  603. package/src/react/Card.js +0 -55
  604. package/src/react/Card.js.map +0 -1
  605. package/src/react/hooks/context.d.ts +0 -178
  606. package/src/react/hooks/context.js +0 -287
  607. package/src/react/hooks/context.js.map +0 -1
  608. package/src/react/hooks/index.d.ts +0 -41
  609. package/src/react/hooks/index.js +0 -61
  610. package/src/react/hooks/index.js.map +0 -1
  611. package/src/react/hooks/tools.d.ts +0 -283
  612. package/src/react/hooks/tools.js +0 -465
  613. package/src/react/hooks/tools.js.map +0 -1
  614. package/src/react/index.d.ts +0 -80
  615. package/src/react/index.js +0 -113
  616. package/src/react/index.js.map +0 -1
  617. package/src/react/types.d.ts +0 -105
  618. package/src/react/types.js +0 -12
  619. package/src/react/types.js.map +0 -1
  620. package/src/react/utils.d.ts +0 -42
  621. package/src/react/utils.js +0 -99
  622. package/src/react/utils.js.map +0 -1
  623. package/src/registry/index.d.ts +0 -45
  624. package/src/registry/index.js +0 -67
  625. package/src/registry/index.js.map +0 -1
  626. package/src/registry/render-template.d.ts +0 -86
  627. package/src/registry/render-template.js +0 -239
  628. package/src/registry/render-template.js.map +0 -1
  629. package/src/registry/tool-ui.registry.d.ts +0 -260
  630. package/src/registry/tool-ui.registry.js +0 -438
  631. package/src/registry/tool-ui.registry.js.map +0 -1
  632. package/src/registry/uri-utils.d.ts +0 -55
  633. package/src/registry/uri-utils.js +0 -97
  634. package/src/registry/uri-utils.js.map +0 -1
  635. package/src/render/index.d.ts +0 -7
  636. package/src/render/index.js +0 -14
  637. package/src/render/index.js.map +0 -1
  638. package/src/render/prerender.d.ts +0 -56
  639. package/src/render/prerender.js +0 -98
  640. package/src/render/prerender.js.map +0 -1
  641. package/src/renderers/cache.d.ts +0 -144
  642. package/src/renderers/cache.js +0 -240
  643. package/src/renderers/cache.js.map +0 -1
  644. package/src/renderers/html.renderer.d.ts +0 -122
  645. package/src/renderers/html.renderer.js +0 -204
  646. package/src/renderers/html.renderer.js.map +0 -1
  647. package/src/renderers/index.d.ts +0 -35
  648. package/src/renderers/index.js +0 -70
  649. package/src/renderers/index.js.map +0 -1
  650. package/src/renderers/mdx.renderer.d.ts +0 -119
  651. package/src/renderers/mdx.renderer.js +0 -305
  652. package/src/renderers/mdx.renderer.js.map +0 -1
  653. package/src/renderers/react.renderer.d.ts +0 -95
  654. package/src/renderers/react.renderer.js +0 -260
  655. package/src/renderers/react.renderer.js.map +0 -1
  656. package/src/renderers/registry.d.ts +0 -133
  657. package/src/renderers/registry.js +0 -232
  658. package/src/renderers/registry.js.map +0 -1
  659. package/src/renderers/types.d.ts +0 -341
  660. package/src/renderers/types.js +0 -9
  661. package/src/renderers/types.js.map +0 -1
  662. package/src/renderers/utils/detect.d.ts +0 -106
  663. package/src/renderers/utils/detect.js +0 -267
  664. package/src/renderers/utils/detect.js.map +0 -1
  665. package/src/renderers/utils/hash.d.ts +0 -39
  666. package/src/renderers/utils/hash.js +0 -75
  667. package/src/renderers/utils/hash.js.map +0 -1
  668. package/src/renderers/utils/index.d.ts +0 -8
  669. package/src/renderers/utils/index.js +0 -28
  670. package/src/renderers/utils/index.js.map +0 -1
  671. package/src/renderers/utils/transpiler.d.ts +0 -88
  672. package/src/renderers/utils/transpiler.js +0 -215
  673. package/src/renderers/utils/transpiler.js.map +0 -1
  674. package/src/runtime/adapters/html.adapter.d.ts +0 -58
  675. package/src/runtime/adapters/html.adapter.js +0 -131
  676. package/src/runtime/adapters/html.adapter.js.map +0 -1
  677. package/src/runtime/adapters/index.d.ts +0 -25
  678. package/src/runtime/adapters/index.js +0 -54
  679. package/src/runtime/adapters/index.js.map +0 -1
  680. package/src/runtime/adapters/mdx.adapter.d.ts +0 -72
  681. package/src/runtime/adapters/mdx.adapter.js +0 -241
  682. package/src/runtime/adapters/mdx.adapter.js.map +0 -1
  683. package/src/runtime/adapters/react.adapter.d.ts +0 -69
  684. package/src/runtime/adapters/react.adapter.js +0 -245
  685. package/src/runtime/adapters/react.adapter.js.map +0 -1
  686. package/src/runtime/adapters/types.d.ts +0 -94
  687. package/src/runtime/adapters/types.js +0 -11
  688. package/src/runtime/adapters/types.js.map +0 -1
  689. package/src/runtime/csp.d.ts +0 -37
  690. package/src/runtime/csp.js +0 -140
  691. package/src/runtime/csp.js.map +0 -1
  692. package/src/runtime/index.d.ts +0 -16
  693. package/src/runtime/index.js +0 -72
  694. package/src/runtime/index.js.map +0 -1
  695. package/src/runtime/mcp-bridge.d.ts +0 -100
  696. package/src/runtime/mcp-bridge.js +0 -581
  697. package/src/runtime/mcp-bridge.js.map +0 -1
  698. package/src/runtime/renderer-runtime.d.ts +0 -132
  699. package/src/runtime/renderer-runtime.js +0 -389
  700. package/src/runtime/renderer-runtime.js.map +0 -1
  701. package/src/runtime/sanitizer.d.ts +0 -171
  702. package/src/runtime/sanitizer.js +0 -318
  703. package/src/runtime/sanitizer.js.map +0 -1
  704. package/src/runtime/types.d.ts +0 -414
  705. package/src/runtime/types.js +0 -12
  706. package/src/runtime/types.js.map +0 -1
  707. package/src/runtime/wrapper.d.ts +0 -375
  708. package/src/runtime/wrapper.js +0 -1793
  709. package/src/runtime/wrapper.js.map +0 -1
  710. package/src/styles/index.d.ts +0 -7
  711. package/src/styles/index.js +0 -11
  712. package/src/styles/index.js.map +0 -1
  713. package/src/styles/variants.d.ts +0 -50
  714. package/src/styles/variants.js +0 -175
  715. package/src/styles/variants.js.map +0 -1
  716. package/src/theme/cdn.d.ts +0 -194
  717. package/src/theme/cdn.js +0 -375
  718. package/src/theme/cdn.js.map +0 -1
  719. package/src/theme/index.d.ts +0 -17
  720. package/src/theme/index.js +0 -57
  721. package/src/theme/index.js.map +0 -1
  722. package/src/theme/platforms.d.ts +0 -106
  723. package/src/theme/platforms.js +0 -161
  724. package/src/theme/platforms.js.map +0 -1
  725. package/src/theme/presets/github-openai.d.ts +0 -49
  726. package/src/theme/presets/github-openai.js +0 -189
  727. package/src/theme/presets/github-openai.js.map +0 -1
  728. package/src/theme/presets/index.d.ts +0 -10
  729. package/src/theme/presets/index.js +0 -17
  730. package/src/theme/presets/index.js.map +0 -1
  731. package/src/theme/theme.d.ts +0 -395
  732. package/src/theme/theme.js +0 -332
  733. package/src/theme/theme.js.map +0 -1
  734. package/src/tool-template/builder.d.ts +0 -212
  735. package/src/tool-template/builder.js +0 -397
  736. package/src/tool-template/builder.js.map +0 -1
  737. package/src/tool-template/index.d.ts +0 -15
  738. package/src/tool-template/index.js +0 -38
  739. package/src/tool-template/index.js.map +0 -1
  740. package/src/types/index.d.ts +0 -13
  741. package/src/types/index.js +0 -26
  742. package/src/types/index.js.map +0 -1
  743. package/src/types/ui-config.d.ts +0 -357
  744. package/src/types/ui-config.js +0 -12
  745. package/src/types/ui-config.js.map +0 -1
  746. package/src/types/ui-runtime.d.ts +0 -965
  747. package/src/types/ui-runtime.js +0 -117
  748. package/src/types/ui-runtime.js.map +0 -1
  749. package/src/validation/error-box.d.ts +0 -55
  750. package/src/validation/error-box.js +0 -75
  751. package/src/validation/error-box.js.map +0 -1
  752. package/src/validation/index.d.ts +0 -12
  753. package/src/validation/index.js +0 -21
  754. package/src/validation/index.js.map +0 -1
  755. package/src/validation/wrapper.d.ts +0 -96
  756. package/src/validation/wrapper.js +0 -117
  757. package/src/validation/wrapper.js.map +0 -1
  758. package/src/web-components/core/attribute-parser.d.ts +0 -85
  759. package/src/web-components/core/attribute-parser.js +0 -189
  760. package/src/web-components/core/attribute-parser.js.map +0 -1
  761. package/src/web-components/core/base-element.d.ts +0 -197
  762. package/src/web-components/core/base-element.js +0 -289
  763. package/src/web-components/core/base-element.js.map +0 -1
  764. package/src/web-components/core/index.d.ts +0 -8
  765. package/src/web-components/core/index.js +0 -18
  766. package/src/web-components/core/index.js.map +0 -1
  767. package/src/web-components/elements/fmcp-alert.d.ts +0 -45
  768. package/src/web-components/elements/fmcp-alert.js +0 -93
  769. package/src/web-components/elements/fmcp-alert.js.map +0 -1
  770. package/src/web-components/elements/fmcp-badge.d.ts +0 -46
  771. package/src/web-components/elements/fmcp-badge.js +0 -99
  772. package/src/web-components/elements/fmcp-badge.js.map +0 -1
  773. package/src/web-components/elements/fmcp-button.d.ts +0 -124
  774. package/src/web-components/elements/fmcp-button.js +0 -233
  775. package/src/web-components/elements/fmcp-button.js.map +0 -1
  776. package/src/web-components/elements/fmcp-card.d.ts +0 -52
  777. package/src/web-components/elements/fmcp-card.js +0 -115
  778. package/src/web-components/elements/fmcp-card.js.map +0 -1
  779. package/src/web-components/elements/fmcp-input.d.ts +0 -95
  780. package/src/web-components/elements/fmcp-input.js +0 -248
  781. package/src/web-components/elements/fmcp-input.js.map +0 -1
  782. package/src/web-components/elements/fmcp-select.d.ts +0 -99
  783. package/src/web-components/elements/fmcp-select.js +0 -243
  784. package/src/web-components/elements/fmcp-select.js.map +0 -1
  785. package/src/web-components/elements/index.d.ts +0 -12
  786. package/src/web-components/elements/index.js +0 -34
  787. package/src/web-components/elements/index.js.map +0 -1
  788. package/src/web-components/index.d.ts +0 -49
  789. package/src/web-components/index.js +0 -75
  790. package/src/web-components/index.js.map +0 -1
  791. package/src/web-components/register.d.ts +0 -56
  792. package/src/web-components/register.js +0 -80
  793. package/src/web-components/register.js.map +0 -1
  794. package/src/web-components/types.d.ts +0 -121
  795. package/src/web-components/types.js +0 -25
  796. package/src/web-components/types.js.map +0 -1
  797. package/src/widgets/index.d.ts +0 -7
  798. package/src/widgets/index.js +0 -24
  799. package/src/widgets/index.js.map +0 -1
  800. package/src/widgets/progress.d.ts +0 -132
  801. package/src/widgets/progress.js +0 -303
  802. package/src/widgets/progress.js.map +0 -1
  803. package/src/widgets/resource.d.ts +0 -162
  804. package/src/widgets/resource.js +0 -340
  805. package/src/widgets/resource.js.map +0 -1
@@ -1,605 +0,0 @@
1
- "use strict";
2
- /**
3
- * Handlebars Built-in Helpers
4
- *
5
- * Provides a collection of helper functions for Handlebars templates.
6
- * Includes formatting, escaping, conditionals, and iteration helpers.
7
- *
8
- * @packageDocumentation
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.builtinHelpers = void 0;
12
- exports.escapeHtml = escapeHtml;
13
- exports.formatDate = formatDate;
14
- exports.formatCurrency = formatCurrency;
15
- exports.formatNumber = formatNumber;
16
- exports.jsonEmbed = jsonEmbed;
17
- exports.json = json;
18
- exports.eq = eq;
19
- exports.ne = ne;
20
- exports.gt = gt;
21
- exports.gte = gte;
22
- exports.lt = lt;
23
- exports.lte = lte;
24
- exports.and = and;
25
- exports.or = or;
26
- exports.not = not;
27
- exports.first = first;
28
- exports.last = last;
29
- exports.length = length;
30
- exports.includes = includes;
31
- exports.join = join;
32
- exports.uppercase = uppercase;
33
- exports.lowercase = lowercase;
34
- exports.capitalize = capitalize;
35
- exports.truncate = truncate;
36
- exports.defaultValue = defaultValue;
37
- exports.uniqueId = uniqueId;
38
- exports.resetUniqueIdCounter = resetUniqueIdCounter;
39
- exports.classNames = classNames;
40
- /**
41
- * Escape HTML special characters to prevent XSS.
42
- *
43
- * @param str - String to escape
44
- * @returns Escaped string safe for HTML output
45
- *
46
- * @example
47
- * ```handlebars
48
- * {{escapeHtml output.userInput}}
49
- * ```
50
- */
51
- function escapeHtml(str) {
52
- if (str === null || str === undefined) {
53
- return '';
54
- }
55
- const s = String(str);
56
- return s
57
- .replace(/&/g, '&')
58
- .replace(/</g, '&lt;')
59
- .replace(/>/g, '&gt;')
60
- .replace(/"/g, '&quot;')
61
- .replace(/'/g, '&#39;');
62
- }
63
- /**
64
- * Format a date for display.
65
- *
66
- * @param date - Date object, ISO string, or timestamp
67
- * @param format - Optional format string (default: localized date)
68
- * @returns Formatted date string
69
- *
70
- * @example
71
- * ```handlebars
72
- * {{formatDate output.createdAt}}
73
- * {{formatDate output.createdAt "short"}}
74
- * {{formatDate output.createdAt "long"}}
75
- * ```
76
- */
77
- function formatDate(date, format) {
78
- if (date === null || date === undefined) {
79
- return '';
80
- }
81
- let dateObj;
82
- if (date instanceof Date) {
83
- dateObj = date;
84
- }
85
- else if (typeof date === 'string' || typeof date === 'number') {
86
- dateObj = new Date(date);
87
- }
88
- else {
89
- return String(date);
90
- }
91
- if (isNaN(dateObj.getTime())) {
92
- return String(date);
93
- }
94
- const options = {};
95
- switch (format) {
96
- case 'short':
97
- options.dateStyle = 'short';
98
- break;
99
- case 'medium':
100
- options.dateStyle = 'medium';
101
- break;
102
- case 'long':
103
- options.dateStyle = 'long';
104
- break;
105
- case 'full':
106
- options.dateStyle = 'full';
107
- break;
108
- case 'time':
109
- options.timeStyle = 'short';
110
- break;
111
- case 'datetime':
112
- options.dateStyle = 'medium';
113
- options.timeStyle = 'short';
114
- break;
115
- case 'iso':
116
- return dateObj.toISOString();
117
- case 'relative':
118
- return formatRelativeDate(dateObj);
119
- default:
120
- options.dateStyle = 'medium';
121
- }
122
- return new Intl.DateTimeFormat('en-US', options).format(dateObj);
123
- }
124
- /**
125
- * Format a date relative to now.
126
- */
127
- function formatRelativeDate(date) {
128
- const now = new Date();
129
- const diffMs = now.getTime() - date.getTime();
130
- const diffSecs = Math.floor(diffMs / 1000);
131
- const diffMins = Math.floor(diffSecs / 60);
132
- const diffHours = Math.floor(diffMins / 60);
133
- const diffDays = Math.floor(diffHours / 24);
134
- if (diffSecs < 60) {
135
- return 'just now';
136
- }
137
- else if (diffMins < 60) {
138
- return `${diffMins} minute${diffMins === 1 ? '' : 's'} ago`;
139
- }
140
- else if (diffHours < 24) {
141
- return `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;
142
- }
143
- else if (diffDays < 7) {
144
- return `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;
145
- }
146
- else {
147
- return formatDate(date, 'medium');
148
- }
149
- }
150
- /**
151
- * Format a number as currency.
152
- *
153
- * @param amount - Numeric amount
154
- * @param currency - ISO 4217 currency code (default: 'USD')
155
- * @returns Formatted currency string
156
- *
157
- * @example
158
- * ```handlebars
159
- * {{formatCurrency output.price}}
160
- * {{formatCurrency output.price "EUR"}}
161
- * ```
162
- */
163
- function formatCurrency(amount, currency) {
164
- if (amount === null || amount === undefined) {
165
- return '';
166
- }
167
- const num = typeof amount === 'number' ? amount : parseFloat(String(amount));
168
- if (isNaN(num)) {
169
- return String(amount);
170
- }
171
- return new Intl.NumberFormat('en-US', {
172
- style: 'currency',
173
- currency: typeof currency === 'string' ? currency : 'USD',
174
- }).format(num);
175
- }
176
- /**
177
- * Format a number with locale-aware separators.
178
- *
179
- * @param value - Number to format
180
- * @param decimals - Number of decimal places (optional)
181
- * @returns Formatted number string
182
- *
183
- * @example
184
- * ```handlebars
185
- * {{formatNumber output.count}}
186
- * {{formatNumber output.percentage 2}}
187
- * ```
188
- */
189
- function formatNumber(value, decimals) {
190
- if (value === null || value === undefined) {
191
- return '';
192
- }
193
- const num = typeof value === 'number' ? value : parseFloat(String(value));
194
- if (isNaN(num)) {
195
- return String(value);
196
- }
197
- const options = {};
198
- if (typeof decimals === 'number') {
199
- options.minimumFractionDigits = decimals;
200
- options.maximumFractionDigits = decimals;
201
- }
202
- return new Intl.NumberFormat('en-US', options).format(num);
203
- }
204
- /**
205
- * Safely embed JSON data in HTML.
206
- * Escapes script-breaking characters.
207
- *
208
- * @param data - Data to serialize
209
- * @returns JSON string safe for embedding
210
- *
211
- * @example
212
- * ```handlebars
213
- * <script type="application/json" id="data">
214
- * {{{jsonEmbed output}}}
215
- * </script>
216
- * ```
217
- */
218
- function jsonEmbed(data) {
219
- const json = JSON.stringify(data ?? null);
220
- // Escape characters that could break out of script tags
221
- return json
222
- .replace(/</g, '\\u003c')
223
- .replace(/>/g, '\\u003e')
224
- .replace(/&/g, '\\u0026')
225
- .replace(/\u2028/g, '\\u2028')
226
- .replace(/\u2029/g, '\\u2029');
227
- }
228
- /**
229
- * Convert data to JSON string.
230
- *
231
- * @param data - Data to serialize
232
- * @param pretty - Whether to pretty-print (optional)
233
- * @returns JSON string
234
- *
235
- * @example
236
- * ```handlebars
237
- * <pre>{{json output true}}</pre>
238
- * ```
239
- */
240
- function json(data, pretty) {
241
- return JSON.stringify(data ?? null, null, pretty ? 2 : undefined);
242
- }
243
- /**
244
- * Equality comparison.
245
- *
246
- * @param a - First value
247
- * @param b - Second value
248
- * @returns true if values are equal
249
- *
250
- * @example
251
- * ```handlebars
252
- * {{#if (eq output.status "active")}}Active{{/if}}
253
- * ```
254
- */
255
- function eq(a, b) {
256
- return a === b;
257
- }
258
- /**
259
- * Inequality comparison.
260
- *
261
- * @param a - First value
262
- * @param b - Second value
263
- * @returns true if values are not equal
264
- *
265
- * @example
266
- * ```handlebars
267
- * {{#if (ne output.status "deleted")}}Visible{{/if}}
268
- * ```
269
- */
270
- function ne(a, b) {
271
- return a !== b;
272
- }
273
- /**
274
- * Greater than comparison.
275
- *
276
- * @param a - First value
277
- * @param b - Second value
278
- * @returns true if a > b
279
- *
280
- * @example
281
- * ```handlebars
282
- * {{#if (gt output.count 10)}}Many items{{/if}}
283
- * ```
284
- */
285
- function gt(a, b) {
286
- return Number(a) > Number(b);
287
- }
288
- /**
289
- * Greater than or equal comparison.
290
- *
291
- * @param a - First value
292
- * @param b - Second value
293
- * @returns true if a >= b
294
- */
295
- function gte(a, b) {
296
- return Number(a) >= Number(b);
297
- }
298
- /**
299
- * Less than comparison.
300
- *
301
- * @param a - First value
302
- * @param b - Second value
303
- * @returns true if a < b
304
- *
305
- * @example
306
- * ```handlebars
307
- * {{#if (lt output.remaining 5)}}Running low{{/if}}
308
- * ```
309
- */
310
- function lt(a, b) {
311
- return Number(a) < Number(b);
312
- }
313
- /**
314
- * Less than or equal comparison.
315
- *
316
- * @param a - First value
317
- * @param b - Second value
318
- * @returns true if a <= b
319
- */
320
- function lte(a, b) {
321
- return Number(a) <= Number(b);
322
- }
323
- /**
324
- * Logical AND.
325
- *
326
- * @param a - First value
327
- * @param b - Second value
328
- * @returns true if both values are truthy
329
- *
330
- * @example
331
- * ```handlebars
332
- * {{#if (and output.enabled output.visible)}}Show content{{/if}}
333
- * ```
334
- */
335
- function and(a, b) {
336
- return Boolean(a) && Boolean(b);
337
- }
338
- /**
339
- * Logical OR.
340
- *
341
- * @param a - First value
342
- * @param b - Second value
343
- * @returns true if either value is truthy
344
- *
345
- * @example
346
- * ```handlebars
347
- * {{#if (or output.featured output.promoted)}}Highlight{{/if}}
348
- * ```
349
- */
350
- function or(a, b) {
351
- return Boolean(a) || Boolean(b);
352
- }
353
- /**
354
- * Logical NOT.
355
- *
356
- * @param value - Value to negate
357
- * @returns Negated boolean
358
- *
359
- * @example
360
- * ```handlebars
361
- * {{#if (not output.hidden)}}Visible{{/if}}
362
- * ```
363
- */
364
- function not(value) {
365
- return !value;
366
- }
367
- /**
368
- * Get the first element of an array.
369
- *
370
- * @param arr - Array
371
- * @returns First element
372
- *
373
- * @example
374
- * ```handlebars
375
- * {{first output.items}}
376
- * ```
377
- */
378
- function first(arr) {
379
- if (!Array.isArray(arr))
380
- return undefined;
381
- return arr[0];
382
- }
383
- /**
384
- * Get the last element of an array.
385
- *
386
- * @param arr - Array
387
- * @returns Last element
388
- *
389
- * @example
390
- * ```handlebars
391
- * {{last output.items}}
392
- * ```
393
- */
394
- function last(arr) {
395
- if (!Array.isArray(arr))
396
- return undefined;
397
- return arr[arr.length - 1];
398
- }
399
- /**
400
- * Get the length of an array or string.
401
- *
402
- * @param value - Array or string
403
- * @returns Length
404
- *
405
- * @example
406
- * ```handlebars
407
- * {{length output.items}} items
408
- * ```
409
- */
410
- function length(value) {
411
- if (Array.isArray(value))
412
- return value.length;
413
- if (typeof value === 'string')
414
- return value.length;
415
- return 0;
416
- }
417
- /**
418
- * Check if a value is in an array.
419
- *
420
- * @param arr - Array to search
421
- * @param value - Value to find
422
- * @returns true if value is in array
423
- *
424
- * @example
425
- * ```handlebars
426
- * {{#if (includes output.tags "featured")}}Featured{{/if}}
427
- * ```
428
- */
429
- function includes(arr, value) {
430
- if (!Array.isArray(arr))
431
- return false;
432
- return arr.includes(value);
433
- }
434
- /**
435
- * Join array elements with a separator.
436
- *
437
- * @param arr - Array to join
438
- * @param separator - Separator string (default: ', ')
439
- * @returns Joined string
440
- *
441
- * @example
442
- * ```handlebars
443
- * {{join output.tags ", "}}
444
- * ```
445
- */
446
- function join(arr, separator) {
447
- if (!Array.isArray(arr))
448
- return '';
449
- return arr.join(typeof separator === 'string' ? separator : ', ');
450
- }
451
- /**
452
- * Convert to uppercase.
453
- *
454
- * @param str - String to convert
455
- * @returns Uppercase string
456
- *
457
- * @example
458
- * ```handlebars
459
- * {{uppercase output.status}}
460
- * ```
461
- */
462
- function uppercase(str) {
463
- return String(str ?? '').toUpperCase();
464
- }
465
- /**
466
- * Convert to lowercase.
467
- *
468
- * @param str - String to convert
469
- * @returns Lowercase string
470
- *
471
- * @example
472
- * ```handlebars
473
- * {{lowercase output.name}}
474
- * ```
475
- */
476
- function lowercase(str) {
477
- return String(str ?? '').toLowerCase();
478
- }
479
- /**
480
- * Capitalize the first letter.
481
- *
482
- * @param str - String to capitalize
483
- * @returns Capitalized string
484
- *
485
- * @example
486
- * ```handlebars
487
- * {{capitalize output.name}}
488
- * ```
489
- */
490
- function capitalize(str) {
491
- const s = String(str ?? '');
492
- return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
493
- }
494
- /**
495
- * Truncate a string to a maximum length.
496
- *
497
- * @param str - String to truncate
498
- * @param maxLength - Maximum length
499
- * @param suffix - Suffix to add if truncated (default: '...')
500
- * @returns Truncated string
501
- *
502
- * @example
503
- * ```handlebars
504
- * {{truncate output.description 100}}
505
- * ```
506
- */
507
- function truncate(str, maxLength, suffix) {
508
- const s = String(str ?? '');
509
- const len = typeof maxLength === 'number' ? maxLength : 50;
510
- const suf = typeof suffix === 'string' ? suffix : '...';
511
- if (s.length <= len)
512
- return s;
513
- return s.slice(0, len - suf.length) + suf;
514
- }
515
- /**
516
- * Provide a default value if the input is falsy.
517
- *
518
- * @param value - Value to check
519
- * @param defaultValue - Default value if falsy
520
- * @returns Value or default
521
- *
522
- * @example
523
- * ```handlebars
524
- * {{default output.name "Unknown"}}
525
- * ```
526
- */
527
- function defaultValue(value, defaultValue) {
528
- return value || defaultValue;
529
- }
530
- /**
531
- * Generate a unique ID.
532
- *
533
- * @param prefix - Optional prefix
534
- * @returns Unique ID string
535
- *
536
- * @example
537
- * ```handlebars
538
- * <div id="{{uniqueId 'widget'}}">...</div>
539
- * ```
540
- */
541
- let idCounter = 0;
542
- function uniqueId(prefix) {
543
- const id = ++idCounter;
544
- return prefix ? `${prefix}-${id}` : `id-${id}`;
545
- }
546
- /**
547
- * Reset the unique ID counter (for testing).
548
- */
549
- function resetUniqueIdCounter() {
550
- idCounter = 0;
551
- }
552
- /**
553
- * Conditionally join class names.
554
- *
555
- * @param classes - Class names (falsy values are filtered)
556
- * @returns Space-separated class string
557
- *
558
- * @example
559
- * ```handlebars
560
- * <div class="{{classNames 'base' (if active 'active') (if disabled 'disabled')}}">
561
- * ```
562
- */
563
- function classNames(...classes) {
564
- return classes.filter(Boolean).map(String).join(' ');
565
- }
566
- /**
567
- * Collection of all built-in helpers.
568
- */
569
- exports.builtinHelpers = {
570
- // Escaping
571
- escapeHtml,
572
- // Formatting
573
- formatDate,
574
- formatCurrency,
575
- formatNumber,
576
- json,
577
- jsonEmbed,
578
- // Comparison
579
- eq,
580
- ne,
581
- gt,
582
- gte,
583
- lt,
584
- lte,
585
- // Logical
586
- and,
587
- or,
588
- not,
589
- // Array
590
- first,
591
- last,
592
- length,
593
- includes,
594
- join,
595
- // String
596
- uppercase,
597
- lowercase,
598
- capitalize,
599
- truncate,
600
- // Utility
601
- default: defaultValue,
602
- uniqueId,
603
- classNames,
604
- };
605
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/handlebars/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Handlebars Built-in Helpers\n *\n * Provides a collection of helper functions for Handlebars templates.\n * Includes formatting, escaping, conditionals, and iteration helpers.\n *\n * @packageDocumentation\n */\n\n/**\n * Helper function type for Handlebars.\n * Allows any function signature since Handlebars helpers vary widely.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type HelperFunction = (...args: any[]) => string | boolean | unknown;\n\n/**\n * Escape HTML special characters to prevent XSS.\n *\n * @param str - String to escape\n * @returns Escaped string safe for HTML output\n *\n * @example\n * ```handlebars\n * {{escapeHtml output.userInput}}\n * ```\n */\nexport function escapeHtml(str: unknown): string {\n if (str === null || str === undefined) {\n return '';\n }\n\n const s = String(str);\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n/**\n * Format a date for display.\n *\n * @param date - Date object, ISO string, or timestamp\n * @param format - Optional format string (default: localized date)\n * @returns Formatted date string\n *\n * @example\n * ```handlebars\n * {{formatDate output.createdAt}}\n * {{formatDate output.createdAt \"short\"}}\n * {{formatDate output.createdAt \"long\"}}\n * ```\n */\nexport function formatDate(date: unknown, format?: string): string {\n if (date === null || date === undefined) {\n return '';\n }\n\n let dateObj: Date;\n\n if (date instanceof Date) {\n dateObj = date;\n } else if (typeof date === 'string' || typeof date === 'number') {\n dateObj = new Date(date);\n } else {\n return String(date);\n }\n\n if (isNaN(dateObj.getTime())) {\n return String(date);\n }\n\n const options: Intl.DateTimeFormatOptions = {};\n\n switch (format) {\n case 'short':\n options.dateStyle = 'short';\n break;\n case 'medium':\n options.dateStyle = 'medium';\n break;\n case 'long':\n options.dateStyle = 'long';\n break;\n case 'full':\n options.dateStyle = 'full';\n break;\n case 'time':\n options.timeStyle = 'short';\n break;\n case 'datetime':\n options.dateStyle = 'medium';\n options.timeStyle = 'short';\n break;\n case 'iso':\n return dateObj.toISOString();\n case 'relative':\n return formatRelativeDate(dateObj);\n default:\n options.dateStyle = 'medium';\n }\n\n return new Intl.DateTimeFormat('en-US', options).format(dateObj);\n}\n\n/**\n * Format a date relative to now.\n */\nfunction formatRelativeDate(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffSecs < 60) {\n return 'just now';\n } else if (diffMins < 60) {\n return `${diffMins} minute${diffMins === 1 ? '' : 's'} ago`;\n } else if (diffHours < 24) {\n return `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;\n } else if (diffDays < 7) {\n return `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;\n } else {\n return formatDate(date, 'medium');\n }\n}\n\n/**\n * Format a number as currency.\n *\n * @param amount - Numeric amount\n * @param currency - ISO 4217 currency code (default: 'USD')\n * @returns Formatted currency string\n *\n * @example\n * ```handlebars\n * {{formatCurrency output.price}}\n * {{formatCurrency output.price \"EUR\"}}\n * ```\n */\nexport function formatCurrency(amount: unknown, currency?: string): string {\n if (amount === null || amount === undefined) {\n return '';\n }\n\n const num = typeof amount === 'number' ? amount : parseFloat(String(amount));\n\n if (isNaN(num)) {\n return String(amount);\n }\n\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: typeof currency === 'string' ? currency : 'USD',\n }).format(num);\n}\n\n/**\n * Format a number with locale-aware separators.\n *\n * @param value - Number to format\n * @param decimals - Number of decimal places (optional)\n * @returns Formatted number string\n *\n * @example\n * ```handlebars\n * {{formatNumber output.count}}\n * {{formatNumber output.percentage 2}}\n * ```\n */\nexport function formatNumber(value: unknown, decimals?: number): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n const num = typeof value === 'number' ? value : parseFloat(String(value));\n\n if (isNaN(num)) {\n return String(value);\n }\n\n const options: Intl.NumberFormatOptions = {};\n if (typeof decimals === 'number') {\n options.minimumFractionDigits = decimals;\n options.maximumFractionDigits = decimals;\n }\n\n return new Intl.NumberFormat('en-US', options).format(num);\n}\n\n/**\n * Safely embed JSON data in HTML.\n * Escapes script-breaking characters.\n *\n * @param data - Data to serialize\n * @returns JSON string safe for embedding\n *\n * @example\n * ```handlebars\n * <script type=\"application/json\" id=\"data\">\n * {{{jsonEmbed output}}}\n * </script>\n * ```\n */\nexport function jsonEmbed(data: unknown): string {\n const json = JSON.stringify(data ?? null);\n // Escape characters that could break out of script tags\n return json\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\n/**\n * Convert data to JSON string.\n *\n * @param data - Data to serialize\n * @param pretty - Whether to pretty-print (optional)\n * @returns JSON string\n *\n * @example\n * ```handlebars\n * <pre>{{json output true}}</pre>\n * ```\n */\nexport function json(data: unknown, pretty?: boolean): string {\n return JSON.stringify(data ?? null, null, pretty ? 2 : undefined);\n}\n\n/**\n * Equality comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if values are equal\n *\n * @example\n * ```handlebars\n * {{#if (eq output.status \"active\")}}Active{{/if}}\n * ```\n */\nexport function eq(a: unknown, b: unknown): boolean {\n return a === b;\n}\n\n/**\n * Inequality comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if values are not equal\n *\n * @example\n * ```handlebars\n * {{#if (ne output.status \"deleted\")}}Visible{{/if}}\n * ```\n */\nexport function ne(a: unknown, b: unknown): boolean {\n return a !== b;\n}\n\n/**\n * Greater than comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if a > b\n *\n * @example\n * ```handlebars\n * {{#if (gt output.count 10)}}Many items{{/if}}\n * ```\n */\nexport function gt(a: unknown, b: unknown): boolean {\n return Number(a) > Number(b);\n}\n\n/**\n * Greater than or equal comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if a >= b\n */\nexport function gte(a: unknown, b: unknown): boolean {\n return Number(a) >= Number(b);\n}\n\n/**\n * Less than comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if a < b\n *\n * @example\n * ```handlebars\n * {{#if (lt output.remaining 5)}}Running low{{/if}}\n * ```\n */\nexport function lt(a: unknown, b: unknown): boolean {\n return Number(a) < Number(b);\n}\n\n/**\n * Less than or equal comparison.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if a <= b\n */\nexport function lte(a: unknown, b: unknown): boolean {\n return Number(a) <= Number(b);\n}\n\n/**\n * Logical AND.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if both values are truthy\n *\n * @example\n * ```handlebars\n * {{#if (and output.enabled output.visible)}}Show content{{/if}}\n * ```\n */\nexport function and(a: unknown, b: unknown): boolean {\n return Boolean(a) && Boolean(b);\n}\n\n/**\n * Logical OR.\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if either value is truthy\n *\n * @example\n * ```handlebars\n * {{#if (or output.featured output.promoted)}}Highlight{{/if}}\n * ```\n */\nexport function or(a: unknown, b: unknown): boolean {\n return Boolean(a) || Boolean(b);\n}\n\n/**\n * Logical NOT.\n *\n * @param value - Value to negate\n * @returns Negated boolean\n *\n * @example\n * ```handlebars\n * {{#if (not output.hidden)}}Visible{{/if}}\n * ```\n */\nexport function not(value: unknown): boolean {\n return !value;\n}\n\n/**\n * Get the first element of an array.\n *\n * @param arr - Array\n * @returns First element\n *\n * @example\n * ```handlebars\n * {{first output.items}}\n * ```\n */\nexport function first<T>(arr: T[]): T | undefined {\n if (!Array.isArray(arr)) return undefined;\n return arr[0];\n}\n\n/**\n * Get the last element of an array.\n *\n * @param arr - Array\n * @returns Last element\n *\n * @example\n * ```handlebars\n * {{last output.items}}\n * ```\n */\nexport function last<T>(arr: T[]): T | undefined {\n if (!Array.isArray(arr)) return undefined;\n return arr[arr.length - 1];\n}\n\n/**\n * Get the length of an array or string.\n *\n * @param value - Array or string\n * @returns Length\n *\n * @example\n * ```handlebars\n * {{length output.items}} items\n * ```\n */\nexport function length(value: unknown): number {\n if (Array.isArray(value)) return value.length;\n if (typeof value === 'string') return value.length;\n return 0;\n}\n\n/**\n * Check if a value is in an array.\n *\n * @param arr - Array to search\n * @param value - Value to find\n * @returns true if value is in array\n *\n * @example\n * ```handlebars\n * {{#if (includes output.tags \"featured\")}}Featured{{/if}}\n * ```\n */\nexport function includes(arr: unknown, value: unknown): boolean {\n if (!Array.isArray(arr)) return false;\n return arr.includes(value);\n}\n\n/**\n * Join array elements with a separator.\n *\n * @param arr - Array to join\n * @param separator - Separator string (default: ', ')\n * @returns Joined string\n *\n * @example\n * ```handlebars\n * {{join output.tags \", \"}}\n * ```\n */\nexport function join(arr: unknown, separator?: string): string {\n if (!Array.isArray(arr)) return '';\n return arr.join(typeof separator === 'string' ? separator : ', ');\n}\n\n/**\n * Convert to uppercase.\n *\n * @param str - String to convert\n * @returns Uppercase string\n *\n * @example\n * ```handlebars\n * {{uppercase output.status}}\n * ```\n */\nexport function uppercase(str: unknown): string {\n return String(str ?? '').toUpperCase();\n}\n\n/**\n * Convert to lowercase.\n *\n * @param str - String to convert\n * @returns Lowercase string\n *\n * @example\n * ```handlebars\n * {{lowercase output.name}}\n * ```\n */\nexport function lowercase(str: unknown): string {\n return String(str ?? '').toLowerCase();\n}\n\n/**\n * Capitalize the first letter.\n *\n * @param str - String to capitalize\n * @returns Capitalized string\n *\n * @example\n * ```handlebars\n * {{capitalize output.name}}\n * ```\n */\nexport function capitalize(str: unknown): string {\n const s = String(str ?? '');\n return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();\n}\n\n/**\n * Truncate a string to a maximum length.\n *\n * @param str - String to truncate\n * @param maxLength - Maximum length\n * @param suffix - Suffix to add if truncated (default: '...')\n * @returns Truncated string\n *\n * @example\n * ```handlebars\n * {{truncate output.description 100}}\n * ```\n */\nexport function truncate(str: unknown, maxLength?: number, suffix?: string): string {\n const s = String(str ?? '');\n const len = typeof maxLength === 'number' ? maxLength : 50;\n const suf = typeof suffix === 'string' ? suffix : '...';\n\n if (s.length <= len) return s;\n return s.slice(0, len - suf.length) + suf;\n}\n\n/**\n * Provide a default value if the input is falsy.\n *\n * @param value - Value to check\n * @param defaultValue - Default value if falsy\n * @returns Value or default\n *\n * @example\n * ```handlebars\n * {{default output.name \"Unknown\"}}\n * ```\n */\nexport function defaultValue(value: unknown, defaultValue: unknown): unknown {\n return value || defaultValue;\n}\n\n/**\n * Generate a unique ID.\n *\n * @param prefix - Optional prefix\n * @returns Unique ID string\n *\n * @example\n * ```handlebars\n * <div id=\"{{uniqueId 'widget'}}\">...</div>\n * ```\n */\nlet idCounter = 0;\nexport function uniqueId(prefix?: string): string {\n const id = ++idCounter;\n return prefix ? `${prefix}-${id}` : `id-${id}`;\n}\n\n/**\n * Reset the unique ID counter (for testing).\n */\nexport function resetUniqueIdCounter(): void {\n idCounter = 0;\n}\n\n/**\n * Conditionally join class names.\n *\n * @param classes - Class names (falsy values are filtered)\n * @returns Space-separated class string\n *\n * @example\n * ```handlebars\n * <div class=\"{{classNames 'base' (if active 'active') (if disabled 'disabled')}}\">\n * ```\n */\nexport function classNames(...classes: unknown[]): string {\n return classes.filter(Boolean).map(String).join(' ');\n}\n\n/**\n * Collection of all built-in helpers.\n */\nexport const builtinHelpers: Record<string, HelperFunction> = {\n // Escaping\n escapeHtml,\n\n // Formatting\n formatDate,\n formatCurrency,\n formatNumber,\n json,\n jsonEmbed,\n\n // Comparison\n eq,\n ne,\n gt,\n gte,\n lt,\n lte,\n\n // Logical\n and,\n or,\n not,\n\n // Array\n first,\n last,\n length,\n includes,\n join,\n\n // String\n uppercase,\n lowercase,\n capitalize,\n truncate,\n\n // Utility\n default: defaultValue,\n uniqueId,\n classNames,\n};\n"]}