@frontmcp/ui 0.6.0 → 0.6.2

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 (650) hide show
  1. package/README.md +140 -362
  2. package/bridge/core/bridge-factory.d.ts +1 -0
  3. package/bridge/core/bridge-factory.d.ts.map +1 -1
  4. package/bridge/index.d.ts +1 -1
  5. package/bridge/index.d.ts.map +1 -1
  6. package/bridge/index.js +39 -881
  7. package/bridge/runtime/index.d.ts +2 -1
  8. package/bridge/runtime/index.d.ts.map +1 -1
  9. package/bundler/browser-components.d.ts +42 -0
  10. package/bundler/browser-components.d.ts.map +1 -0
  11. package/bundler/bundler.d.ts +78 -4
  12. package/bundler/bundler.d.ts.map +1 -1
  13. package/bundler/index.d.ts +8 -8
  14. package/bundler/index.d.ts.map +1 -1
  15. package/bundler/index.js +1411 -2997
  16. package/bundler/types.d.ts +188 -7
  17. package/bundler/types.d.ts.map +1 -1
  18. package/components/alert.schema.d.ts +6 -6
  19. package/components/avatar.schema.d.ts +9 -9
  20. package/components/badge.schema.d.ts +9 -9
  21. package/components/button.schema.d.ts +9 -9
  22. package/components/card.schema.d.ts +7 -7
  23. package/components/form.schema.d.ts +24 -24
  24. package/components/index.js +128 -198
  25. package/components/modal.schema.d.ts +8 -8
  26. package/components/table.schema.d.ts +6 -6
  27. package/esm/bridge/{index.js → index.mjs} +40 -877
  28. package/esm/bundler/index.mjs +3136 -0
  29. package/esm/components/{index.js → index.mjs} +136 -196
  30. package/esm/index.mjs +5450 -0
  31. package/esm/layouts/index.mjs +409 -0
  32. package/esm/package.json +15 -32
  33. package/esm/react/{index.js → index.mjs} +71 -260
  34. package/esm/renderers/index.mjs +611 -0
  35. package/esm/universal/index.mjs +1951 -0
  36. package/esm/web-components/{index.js → index.mjs} +232 -287
  37. package/index.d.ts +22 -41
  38. package/index.d.ts.map +1 -1
  39. package/index.js +4286 -19607
  40. package/layouts/base.d.ts +2 -2
  41. package/layouts/base.d.ts.map +1 -1
  42. package/layouts/index.js +46 -539
  43. package/layouts/presets.d.ts.map +1 -1
  44. package/package.json +15 -32
  45. package/react/Alert.d.ts +1 -2
  46. package/react/Alert.d.ts.map +1 -1
  47. package/react/Badge.d.ts +1 -2
  48. package/react/Badge.d.ts.map +1 -1
  49. package/react/Button.d.ts +1 -2
  50. package/react/Button.d.ts.map +1 -1
  51. package/react/Card.d.ts +1 -2
  52. package/react/Card.d.ts.map +1 -1
  53. package/react/hooks/context.d.ts +1 -1
  54. package/react/hooks/context.d.ts.map +1 -1
  55. package/react/index.d.ts +5 -7
  56. package/react/index.d.ts.map +1 -1
  57. package/react/index.js +55 -269
  58. package/react/types.d.ts +1 -2
  59. package/react/types.d.ts.map +1 -1
  60. package/renderers/index.d.ts +15 -25
  61. package/renderers/index.d.ts.map +1 -1
  62. package/renderers/index.js +393 -1619
  63. package/renderers/mdx.renderer.d.ts +13 -34
  64. package/renderers/mdx.renderer.d.ts.map +1 -1
  65. package/{esm/runtime/adapters → renderers}/react.adapter.d.ts +2 -2
  66. package/renderers/react.adapter.d.ts.map +1 -0
  67. package/renderers/react.renderer.d.ts +25 -16
  68. package/renderers/react.renderer.d.ts.map +1 -1
  69. package/renderers/transpiler.d.ts +49 -0
  70. package/renderers/transpiler.d.ts.map +1 -0
  71. package/universal/cached-runtime.d.ts +25 -1
  72. package/universal/cached-runtime.d.ts.map +1 -1
  73. package/universal/index.js +2037 -0
  74. package/universal/runtime-builder.d.ts.map +1 -1
  75. package/universal/types.d.ts.map +1 -1
  76. package/web-components/elements/fmcp-input.d.ts.map +1 -1
  77. package/web-components/elements/fmcp-select.d.ts.map +1 -1
  78. package/web-components/index.d.ts +0 -1
  79. package/web-components/index.d.ts.map +1 -1
  80. package/web-components/index.js +224 -289
  81. package/adapters/index.d.ts +0 -13
  82. package/adapters/index.d.ts.map +0 -1
  83. package/adapters/index.js +0 -462
  84. package/adapters/platform-meta.d.ts +0 -166
  85. package/adapters/platform-meta.d.ts.map +0 -1
  86. package/adapters/response-builder.d.ts +0 -108
  87. package/adapters/response-builder.d.ts.map +0 -1
  88. package/adapters/serving-mode.d.ts +0 -107
  89. package/adapters/serving-mode.d.ts.map +0 -1
  90. package/base-template/bridge.d.ts +0 -90
  91. package/base-template/bridge.d.ts.map +0 -1
  92. package/base-template/default-base-template.d.ts +0 -92
  93. package/base-template/default-base-template.d.ts.map +0 -1
  94. package/base-template/index.d.ts +0 -15
  95. package/base-template/index.d.ts.map +0 -1
  96. package/base-template/index.js +0 -1398
  97. package/base-template/polyfills.d.ts +0 -31
  98. package/base-template/polyfills.d.ts.map +0 -1
  99. package/base-template/theme-styles.d.ts +0 -74
  100. package/base-template/theme-styles.d.ts.map +0 -1
  101. package/build/cdn-resources.d.ts +0 -243
  102. package/build/cdn-resources.d.ts.map +0 -1
  103. package/build/index.d.ts +0 -295
  104. package/build/index.d.ts.map +0 -1
  105. package/build/index.js +0 -7096
  106. package/build/widget-manifest.d.ts +0 -362
  107. package/build/widget-manifest.d.ts.map +0 -1
  108. package/bundler/cache.d.ts +0 -173
  109. package/bundler/cache.d.ts.map +0 -1
  110. package/bundler/file-cache/component-builder.d.ts +0 -167
  111. package/bundler/file-cache/component-builder.d.ts.map +0 -1
  112. package/bundler/file-cache/hash-calculator.d.ts +0 -155
  113. package/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  114. package/bundler/file-cache/index.d.ts +0 -12
  115. package/bundler/file-cache/index.d.ts.map +0 -1
  116. package/bundler/file-cache/storage/filesystem.d.ts +0 -149
  117. package/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  118. package/bundler/file-cache/storage/index.d.ts +0 -11
  119. package/bundler/file-cache/storage/index.d.ts.map +0 -1
  120. package/bundler/file-cache/storage/interface.d.ts +0 -152
  121. package/bundler/file-cache/storage/interface.d.ts.map +0 -1
  122. package/bundler/file-cache/storage/redis.d.ts +0 -139
  123. package/bundler/file-cache/storage/redis.d.ts.map +0 -1
  124. package/bundler/sandbox/enclave-adapter.d.ts +0 -121
  125. package/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  126. package/bundler/sandbox/executor.d.ts +0 -14
  127. package/bundler/sandbox/executor.d.ts.map +0 -1
  128. package/bundler/sandbox/policy.d.ts +0 -62
  129. package/bundler/sandbox/policy.d.ts.map +0 -1
  130. package/dependency/cdn-registry.d.ts +0 -98
  131. package/dependency/cdn-registry.d.ts.map +0 -1
  132. package/dependency/import-map.d.ts +0 -186
  133. package/dependency/import-map.d.ts.map +0 -1
  134. package/dependency/import-parser.d.ts +0 -82
  135. package/dependency/import-parser.d.ts.map +0 -1
  136. package/dependency/index.d.ts +0 -17
  137. package/dependency/index.d.ts.map +0 -1
  138. package/dependency/resolver.d.ts +0 -164
  139. package/dependency/resolver.d.ts.map +0 -1
  140. package/dependency/schemas.d.ts +0 -486
  141. package/dependency/schemas.d.ts.map +0 -1
  142. package/dependency/template-loader.d.ts +0 -204
  143. package/dependency/template-loader.d.ts.map +0 -1
  144. package/dependency/template-processor.d.ts +0 -118
  145. package/dependency/template-processor.d.ts.map +0 -1
  146. package/dependency/types.d.ts +0 -739
  147. package/dependency/types.d.ts.map +0 -1
  148. package/esm/adapters/index.d.ts +0 -13
  149. package/esm/adapters/index.d.ts.map +0 -1
  150. package/esm/adapters/index.js +0 -427
  151. package/esm/adapters/platform-meta.d.ts +0 -166
  152. package/esm/adapters/platform-meta.d.ts.map +0 -1
  153. package/esm/adapters/response-builder.d.ts +0 -108
  154. package/esm/adapters/response-builder.d.ts.map +0 -1
  155. package/esm/adapters/serving-mode.d.ts +0 -107
  156. package/esm/adapters/serving-mode.d.ts.map +0 -1
  157. package/esm/base-template/bridge.d.ts +0 -90
  158. package/esm/base-template/bridge.d.ts.map +0 -1
  159. package/esm/base-template/default-base-template.d.ts +0 -92
  160. package/esm/base-template/default-base-template.d.ts.map +0 -1
  161. package/esm/base-template/index.d.ts +0 -15
  162. package/esm/base-template/index.d.ts.map +0 -1
  163. package/esm/base-template/index.js +0 -1364
  164. package/esm/base-template/polyfills.d.ts +0 -31
  165. package/esm/base-template/polyfills.d.ts.map +0 -1
  166. package/esm/base-template/theme-styles.d.ts +0 -74
  167. package/esm/base-template/theme-styles.d.ts.map +0 -1
  168. package/esm/bridge/adapters/base-adapter.d.ts +0 -104
  169. package/esm/bridge/adapters/base-adapter.d.ts.map +0 -1
  170. package/esm/bridge/adapters/claude.adapter.d.ts +0 -67
  171. package/esm/bridge/adapters/claude.adapter.d.ts.map +0 -1
  172. package/esm/bridge/adapters/ext-apps.adapter.d.ts +0 -143
  173. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +0 -1
  174. package/esm/bridge/adapters/gemini.adapter.d.ts +0 -64
  175. package/esm/bridge/adapters/gemini.adapter.d.ts.map +0 -1
  176. package/esm/bridge/adapters/generic.adapter.d.ts +0 -56
  177. package/esm/bridge/adapters/generic.adapter.d.ts.map +0 -1
  178. package/esm/bridge/adapters/index.d.ts +0 -26
  179. package/esm/bridge/adapters/index.d.ts.map +0 -1
  180. package/esm/bridge/adapters/openai.adapter.d.ts +0 -65
  181. package/esm/bridge/adapters/openai.adapter.d.ts.map +0 -1
  182. package/esm/bridge/core/adapter-registry.d.ts +0 -122
  183. package/esm/bridge/core/adapter-registry.d.ts.map +0 -1
  184. package/esm/bridge/core/bridge-factory.d.ts +0 -199
  185. package/esm/bridge/core/bridge-factory.d.ts.map +0 -1
  186. package/esm/bridge/core/index.d.ts +0 -10
  187. package/esm/bridge/core/index.d.ts.map +0 -1
  188. package/esm/bridge/index.d.ts +0 -62
  189. package/esm/bridge/index.d.ts.map +0 -1
  190. package/esm/bridge/runtime/iife-generator.d.ts +0 -62
  191. package/esm/bridge/runtime/iife-generator.d.ts.map +0 -1
  192. package/esm/bridge/runtime/index.d.ts +0 -9
  193. package/esm/bridge/runtime/index.d.ts.map +0 -1
  194. package/esm/bridge/types.d.ts +0 -386
  195. package/esm/bridge/types.d.ts.map +0 -1
  196. package/esm/build/cdn-resources.d.ts +0 -243
  197. package/esm/build/cdn-resources.d.ts.map +0 -1
  198. package/esm/build/index.d.ts +0 -295
  199. package/esm/build/index.d.ts.map +0 -1
  200. package/esm/build/index.js +0 -7021
  201. package/esm/build/widget-manifest.d.ts +0 -362
  202. package/esm/build/widget-manifest.d.ts.map +0 -1
  203. package/esm/bundler/bundler.d.ts +0 -208
  204. package/esm/bundler/bundler.d.ts.map +0 -1
  205. package/esm/bundler/cache.d.ts +0 -173
  206. package/esm/bundler/cache.d.ts.map +0 -1
  207. package/esm/bundler/file-cache/component-builder.d.ts +0 -167
  208. package/esm/bundler/file-cache/component-builder.d.ts.map +0 -1
  209. package/esm/bundler/file-cache/hash-calculator.d.ts +0 -155
  210. package/esm/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  211. package/esm/bundler/file-cache/index.d.ts +0 -12
  212. package/esm/bundler/file-cache/index.d.ts.map +0 -1
  213. package/esm/bundler/file-cache/storage/filesystem.d.ts +0 -149
  214. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  215. package/esm/bundler/file-cache/storage/index.d.ts +0 -11
  216. package/esm/bundler/file-cache/storage/index.d.ts.map +0 -1
  217. package/esm/bundler/file-cache/storage/interface.d.ts +0 -152
  218. package/esm/bundler/file-cache/storage/interface.d.ts.map +0 -1
  219. package/esm/bundler/file-cache/storage/redis.d.ts +0 -139
  220. package/esm/bundler/file-cache/storage/redis.d.ts.map +0 -1
  221. package/esm/bundler/index.d.ts +0 -43
  222. package/esm/bundler/index.d.ts.map +0 -1
  223. package/esm/bundler/index.js +0 -4687
  224. package/esm/bundler/sandbox/enclave-adapter.d.ts +0 -121
  225. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  226. package/esm/bundler/sandbox/executor.d.ts +0 -14
  227. package/esm/bundler/sandbox/executor.d.ts.map +0 -1
  228. package/esm/bundler/sandbox/policy.d.ts +0 -62
  229. package/esm/bundler/sandbox/policy.d.ts.map +0 -1
  230. package/esm/bundler/types.d.ts +0 -702
  231. package/esm/bundler/types.d.ts.map +0 -1
  232. package/esm/components/alert.d.ts +0 -66
  233. package/esm/components/alert.d.ts.map +0 -1
  234. package/esm/components/alert.schema.d.ts +0 -98
  235. package/esm/components/alert.schema.d.ts.map +0 -1
  236. package/esm/components/avatar.d.ts +0 -77
  237. package/esm/components/avatar.d.ts.map +0 -1
  238. package/esm/components/avatar.schema.d.ts +0 -170
  239. package/esm/components/avatar.schema.d.ts.map +0 -1
  240. package/esm/components/badge.d.ts +0 -64
  241. package/esm/components/badge.d.ts.map +0 -1
  242. package/esm/components/badge.schema.d.ts +0 -91
  243. package/esm/components/badge.schema.d.ts.map +0 -1
  244. package/esm/components/button.d.ts +0 -100
  245. package/esm/components/button.d.ts.map +0 -1
  246. package/esm/components/button.schema.d.ts +0 -120
  247. package/esm/components/button.schema.d.ts.map +0 -1
  248. package/esm/components/card.d.ts +0 -53
  249. package/esm/components/card.d.ts.map +0 -1
  250. package/esm/components/card.schema.d.ts +0 -93
  251. package/esm/components/card.schema.d.ts.map +0 -1
  252. package/esm/components/form.d.ts +0 -212
  253. package/esm/components/form.d.ts.map +0 -1
  254. package/esm/components/form.schema.d.ts +0 -365
  255. package/esm/components/form.schema.d.ts.map +0 -1
  256. package/esm/components/index.d.ts +0 -29
  257. package/esm/components/index.d.ts.map +0 -1
  258. package/esm/components/list.d.ts +0 -121
  259. package/esm/components/list.d.ts.map +0 -1
  260. package/esm/components/list.schema.d.ts +0 -129
  261. package/esm/components/list.schema.d.ts.map +0 -1
  262. package/esm/components/modal.d.ts +0 -100
  263. package/esm/components/modal.d.ts.map +0 -1
  264. package/esm/components/modal.schema.d.ts +0 -151
  265. package/esm/components/modal.schema.d.ts.map +0 -1
  266. package/esm/components/table.d.ts +0 -91
  267. package/esm/components/table.d.ts.map +0 -1
  268. package/esm/components/table.schema.d.ts +0 -123
  269. package/esm/components/table.schema.d.ts.map +0 -1
  270. package/esm/dependency/cdn-registry.d.ts +0 -98
  271. package/esm/dependency/cdn-registry.d.ts.map +0 -1
  272. package/esm/dependency/import-map.d.ts +0 -186
  273. package/esm/dependency/import-map.d.ts.map +0 -1
  274. package/esm/dependency/import-parser.d.ts +0 -82
  275. package/esm/dependency/import-parser.d.ts.map +0 -1
  276. package/esm/dependency/index.d.ts +0 -17
  277. package/esm/dependency/index.d.ts.map +0 -1
  278. package/esm/dependency/resolver.d.ts +0 -164
  279. package/esm/dependency/resolver.d.ts.map +0 -1
  280. package/esm/dependency/schemas.d.ts +0 -486
  281. package/esm/dependency/schemas.d.ts.map +0 -1
  282. package/esm/dependency/template-loader.d.ts +0 -204
  283. package/esm/dependency/template-loader.d.ts.map +0 -1
  284. package/esm/dependency/template-processor.d.ts +0 -118
  285. package/esm/dependency/template-processor.d.ts.map +0 -1
  286. package/esm/dependency/types.d.ts +0 -739
  287. package/esm/dependency/types.d.ts.map +0 -1
  288. package/esm/handlebars/expression-extractor.d.ts +0 -147
  289. package/esm/handlebars/expression-extractor.d.ts.map +0 -1
  290. package/esm/handlebars/helpers.d.ts +0 -339
  291. package/esm/handlebars/helpers.d.ts.map +0 -1
  292. package/esm/handlebars/index.d.ts +0 -195
  293. package/esm/handlebars/index.d.ts.map +0 -1
  294. package/esm/handlebars/index.js +0 -587
  295. package/esm/index.d.ts +0 -56
  296. package/esm/index.d.ts.map +0 -1
  297. package/esm/index.js +0 -20511
  298. package/esm/layouts/base.d.ts +0 -86
  299. package/esm/layouts/base.d.ts.map +0 -1
  300. package/esm/layouts/index.d.ts +0 -8
  301. package/esm/layouts/index.d.ts.map +0 -1
  302. package/esm/layouts/index.js +0 -892
  303. package/esm/layouts/presets.d.ts +0 -134
  304. package/esm/layouts/presets.d.ts.map +0 -1
  305. package/esm/pages/consent.d.ts +0 -117
  306. package/esm/pages/consent.d.ts.map +0 -1
  307. package/esm/pages/error.d.ts +0 -101
  308. package/esm/pages/error.d.ts.map +0 -1
  309. package/esm/pages/index.d.ts +0 -9
  310. package/esm/pages/index.d.ts.map +0 -1
  311. package/esm/pages/index.js +0 -1563
  312. package/esm/react/Alert.d.ts +0 -102
  313. package/esm/react/Alert.d.ts.map +0 -1
  314. package/esm/react/Badge.d.ts +0 -101
  315. package/esm/react/Badge.d.ts.map +0 -1
  316. package/esm/react/Button.d.ts +0 -109
  317. package/esm/react/Button.d.ts.map +0 -1
  318. package/esm/react/Card.d.ts +0 -104
  319. package/esm/react/Card.d.ts.map +0 -1
  320. package/esm/react/hooks/context.d.ts +0 -179
  321. package/esm/react/hooks/context.d.ts.map +0 -1
  322. package/esm/react/hooks/index.d.ts +0 -42
  323. package/esm/react/hooks/index.d.ts.map +0 -1
  324. package/esm/react/hooks/tools.d.ts +0 -284
  325. package/esm/react/hooks/tools.d.ts.map +0 -1
  326. package/esm/react/index.d.ts +0 -81
  327. package/esm/react/index.d.ts.map +0 -1
  328. package/esm/react/types.d.ts +0 -106
  329. package/esm/react/types.d.ts.map +0 -1
  330. package/esm/react/utils.d.ts +0 -43
  331. package/esm/react/utils.d.ts.map +0 -1
  332. package/esm/registry/index.d.ts +0 -46
  333. package/esm/registry/index.d.ts.map +0 -1
  334. package/esm/registry/index.js +0 -6422
  335. package/esm/registry/render-template.d.ts +0 -91
  336. package/esm/registry/render-template.d.ts.map +0 -1
  337. package/esm/registry/tool-ui.registry.d.ts +0 -294
  338. package/esm/registry/tool-ui.registry.d.ts.map +0 -1
  339. package/esm/registry/uri-utils.d.ts +0 -56
  340. package/esm/registry/uri-utils.d.ts.map +0 -1
  341. package/esm/render/index.d.ts +0 -8
  342. package/esm/render/index.d.ts.map +0 -1
  343. package/esm/render/prerender.d.ts +0 -57
  344. package/esm/render/prerender.d.ts.map +0 -1
  345. package/esm/renderers/cache.d.ts +0 -145
  346. package/esm/renderers/cache.d.ts.map +0 -1
  347. package/esm/renderers/html.renderer.d.ts +0 -123
  348. package/esm/renderers/html.renderer.d.ts.map +0 -1
  349. package/esm/renderers/index.d.ts +0 -36
  350. package/esm/renderers/index.d.ts.map +0 -1
  351. package/esm/renderers/index.js +0 -1827
  352. package/esm/renderers/mdx.renderer.d.ts +0 -120
  353. package/esm/renderers/mdx.renderer.d.ts.map +0 -1
  354. package/esm/renderers/react.renderer.d.ts +0 -96
  355. package/esm/renderers/react.renderer.d.ts.map +0 -1
  356. package/esm/renderers/registry.d.ts +0 -134
  357. package/esm/renderers/registry.d.ts.map +0 -1
  358. package/esm/renderers/types.d.ts +0 -342
  359. package/esm/renderers/types.d.ts.map +0 -1
  360. package/esm/renderers/utils/detect.d.ts +0 -107
  361. package/esm/renderers/utils/detect.d.ts.map +0 -1
  362. package/esm/renderers/utils/hash.d.ts +0 -40
  363. package/esm/renderers/utils/hash.d.ts.map +0 -1
  364. package/esm/renderers/utils/index.d.ts +0 -9
  365. package/esm/renderers/utils/index.d.ts.map +0 -1
  366. package/esm/renderers/utils/transpiler.d.ts +0 -89
  367. package/esm/renderers/utils/transpiler.d.ts.map +0 -1
  368. package/esm/runtime/adapters/html.adapter.d.ts +0 -59
  369. package/esm/runtime/adapters/html.adapter.d.ts.map +0 -1
  370. package/esm/runtime/adapters/index.d.ts +0 -26
  371. package/esm/runtime/adapters/index.d.ts.map +0 -1
  372. package/esm/runtime/adapters/mdx.adapter.d.ts +0 -73
  373. package/esm/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  374. package/esm/runtime/adapters/react.adapter.d.ts.map +0 -1
  375. package/esm/runtime/adapters/types.d.ts +0 -95
  376. package/esm/runtime/adapters/types.d.ts.map +0 -1
  377. package/esm/runtime/csp.d.ts +0 -48
  378. package/esm/runtime/csp.d.ts.map +0 -1
  379. package/esm/runtime/index.d.ts +0 -17
  380. package/esm/runtime/index.d.ts.map +0 -1
  381. package/esm/runtime/index.js +0 -5186
  382. package/esm/runtime/mcp-bridge.d.ts +0 -101
  383. package/esm/runtime/mcp-bridge.d.ts.map +0 -1
  384. package/esm/runtime/renderer-runtime.d.ts +0 -133
  385. package/esm/runtime/renderer-runtime.d.ts.map +0 -1
  386. package/esm/runtime/sanitizer.d.ts +0 -172
  387. package/esm/runtime/sanitizer.d.ts.map +0 -1
  388. package/esm/runtime/types.d.ts +0 -415
  389. package/esm/runtime/types.d.ts.map +0 -1
  390. package/esm/runtime/wrapper.d.ts +0 -421
  391. package/esm/runtime/wrapper.d.ts.map +0 -1
  392. package/esm/styles/index.d.ts +0 -8
  393. package/esm/styles/index.d.ts.map +0 -1
  394. package/esm/styles/index.js +0 -171
  395. package/esm/styles/variants.d.ts +0 -51
  396. package/esm/styles/variants.d.ts.map +0 -1
  397. package/esm/theme/cdn.d.ts +0 -195
  398. package/esm/theme/cdn.d.ts.map +0 -1
  399. package/esm/theme/index.d.ts +0 -18
  400. package/esm/theme/index.d.ts.map +0 -1
  401. package/esm/theme/index.js +0 -700
  402. package/esm/theme/platforms.d.ts +0 -107
  403. package/esm/theme/platforms.d.ts.map +0 -1
  404. package/esm/theme/presets/github-openai.d.ts +0 -50
  405. package/esm/theme/presets/github-openai.d.ts.map +0 -1
  406. package/esm/theme/presets/index.d.ts +0 -11
  407. package/esm/theme/presets/index.d.ts.map +0 -1
  408. package/esm/theme/theme.d.ts +0 -396
  409. package/esm/theme/theme.d.ts.map +0 -1
  410. package/esm/tool-template/builder.d.ts +0 -213
  411. package/esm/tool-template/builder.d.ts.map +0 -1
  412. package/esm/tool-template/index.d.ts +0 -16
  413. package/esm/tool-template/index.d.ts.map +0 -1
  414. package/esm/tool-template/index.js +0 -3515
  415. package/esm/types/index.d.ts +0 -14
  416. package/esm/types/index.d.ts.map +0 -1
  417. package/esm/types/index.js +0 -75
  418. package/esm/types/ui-config.d.ts +0 -639
  419. package/esm/types/ui-config.d.ts.map +0 -1
  420. package/esm/types/ui-runtime.d.ts +0 -1007
  421. package/esm/types/ui-runtime.d.ts.map +0 -1
  422. package/esm/typings/cache/cache-adapter.d.ts +0 -125
  423. package/esm/typings/cache/cache-adapter.d.ts.map +0 -1
  424. package/esm/typings/cache/index.d.ts +0 -10
  425. package/esm/typings/cache/index.d.ts.map +0 -1
  426. package/esm/typings/cache/memory-cache.d.ts +0 -92
  427. package/esm/typings/cache/memory-cache.d.ts.map +0 -1
  428. package/esm/typings/dts-parser.d.ts +0 -90
  429. package/esm/typings/dts-parser.d.ts.map +0 -1
  430. package/esm/typings/index.d.ts +0 -48
  431. package/esm/typings/index.d.ts.map +0 -1
  432. package/esm/typings/schemas.d.ts +0 -232
  433. package/esm/typings/schemas.d.ts.map +0 -1
  434. package/esm/typings/type-fetcher.d.ts +0 -89
  435. package/esm/typings/type-fetcher.d.ts.map +0 -1
  436. package/esm/typings/types.d.ts +0 -320
  437. package/esm/typings/types.d.ts.map +0 -1
  438. package/esm/universal/UniversalApp.d.ts +0 -108
  439. package/esm/universal/UniversalApp.d.ts.map +0 -1
  440. package/esm/universal/cached-runtime.d.ts +0 -115
  441. package/esm/universal/cached-runtime.d.ts.map +0 -1
  442. package/esm/universal/context.d.ts +0 -122
  443. package/esm/universal/context.d.ts.map +0 -1
  444. package/esm/universal/index.d.ts +0 -57
  445. package/esm/universal/index.d.ts.map +0 -1
  446. package/esm/universal/renderers/html.renderer.d.ts +0 -37
  447. package/esm/universal/renderers/html.renderer.d.ts.map +0 -1
  448. package/esm/universal/renderers/index.d.ts +0 -112
  449. package/esm/universal/renderers/index.d.ts.map +0 -1
  450. package/esm/universal/renderers/markdown.renderer.d.ts +0 -33
  451. package/esm/universal/renderers/markdown.renderer.d.ts.map +0 -1
  452. package/esm/universal/renderers/mdx.renderer.d.ts +0 -38
  453. package/esm/universal/renderers/mdx.renderer.d.ts.map +0 -1
  454. package/esm/universal/renderers/react.renderer.d.ts +0 -46
  455. package/esm/universal/renderers/react.renderer.d.ts.map +0 -1
  456. package/esm/universal/runtime-builder.d.ts +0 -33
  457. package/esm/universal/runtime-builder.d.ts.map +0 -1
  458. package/esm/universal/store.d.ts +0 -135
  459. package/esm/universal/store.d.ts.map +0 -1
  460. package/esm/universal/types.d.ts +0 -199
  461. package/esm/universal/types.d.ts.map +0 -1
  462. package/esm/utils/escape-html.d.ts +0 -58
  463. package/esm/utils/escape-html.d.ts.map +0 -1
  464. package/esm/utils/index.d.ts +0 -10
  465. package/esm/utils/index.d.ts.map +0 -1
  466. package/esm/utils/index.js +0 -40
  467. package/esm/utils/safe-stringify.d.ts +0 -30
  468. package/esm/utils/safe-stringify.d.ts.map +0 -1
  469. package/esm/validation/error-box.d.ts +0 -56
  470. package/esm/validation/error-box.d.ts.map +0 -1
  471. package/esm/validation/index.d.ts +0 -13
  472. package/esm/validation/index.d.ts.map +0 -1
  473. package/esm/validation/index.js +0 -562
  474. package/esm/validation/schema-paths.d.ts +0 -118
  475. package/esm/validation/schema-paths.d.ts.map +0 -1
  476. package/esm/validation/template-validator.d.ts +0 -143
  477. package/esm/validation/template-validator.d.ts.map +0 -1
  478. package/esm/validation/wrapper.d.ts +0 -97
  479. package/esm/validation/wrapper.d.ts.map +0 -1
  480. package/esm/web-components/core/attribute-parser.d.ts +0 -82
  481. package/esm/web-components/core/attribute-parser.d.ts.map +0 -1
  482. package/esm/web-components/core/base-element.d.ts +0 -197
  483. package/esm/web-components/core/base-element.d.ts.map +0 -1
  484. package/esm/web-components/core/index.d.ts +0 -9
  485. package/esm/web-components/core/index.d.ts.map +0 -1
  486. package/esm/web-components/elements/fmcp-alert.d.ts +0 -46
  487. package/esm/web-components/elements/fmcp-alert.d.ts.map +0 -1
  488. package/esm/web-components/elements/fmcp-badge.d.ts +0 -47
  489. package/esm/web-components/elements/fmcp-badge.d.ts.map +0 -1
  490. package/esm/web-components/elements/fmcp-button.d.ts +0 -117
  491. package/esm/web-components/elements/fmcp-button.d.ts.map +0 -1
  492. package/esm/web-components/elements/fmcp-card.d.ts +0 -53
  493. package/esm/web-components/elements/fmcp-card.d.ts.map +0 -1
  494. package/esm/web-components/elements/fmcp-input.d.ts +0 -96
  495. package/esm/web-components/elements/fmcp-input.d.ts.map +0 -1
  496. package/esm/web-components/elements/fmcp-select.d.ts +0 -100
  497. package/esm/web-components/elements/fmcp-select.d.ts.map +0 -1
  498. package/esm/web-components/elements/index.d.ts +0 -13
  499. package/esm/web-components/elements/index.d.ts.map +0 -1
  500. package/esm/web-components/index.d.ts +0 -50
  501. package/esm/web-components/index.d.ts.map +0 -1
  502. package/esm/web-components/register.d.ts +0 -57
  503. package/esm/web-components/register.d.ts.map +0 -1
  504. package/esm/web-components/types.d.ts +0 -122
  505. package/esm/web-components/types.d.ts.map +0 -1
  506. package/esm/widgets/index.d.ts +0 -8
  507. package/esm/widgets/index.d.ts.map +0 -1
  508. package/esm/widgets/index.js +0 -941
  509. package/esm/widgets/progress.d.ts +0 -133
  510. package/esm/widgets/progress.d.ts.map +0 -1
  511. package/esm/widgets/resource.d.ts +0 -163
  512. package/esm/widgets/resource.d.ts.map +0 -1
  513. package/handlebars/expression-extractor.d.ts +0 -147
  514. package/handlebars/expression-extractor.d.ts.map +0 -1
  515. package/handlebars/helpers.d.ts +0 -339
  516. package/handlebars/helpers.d.ts.map +0 -1
  517. package/handlebars/index.d.ts +0 -195
  518. package/handlebars/index.d.ts.map +0 -1
  519. package/handlebars/index.js +0 -666
  520. package/pages/consent.d.ts +0 -117
  521. package/pages/consent.d.ts.map +0 -1
  522. package/pages/error.d.ts +0 -101
  523. package/pages/error.d.ts.map +0 -1
  524. package/pages/index.d.ts +0 -9
  525. package/pages/index.d.ts.map +0 -1
  526. package/pages/index.js +0 -1602
  527. package/react/utils.d.ts +0 -43
  528. package/react/utils.d.ts.map +0 -1
  529. package/registry/index.d.ts +0 -46
  530. package/registry/index.d.ts.map +0 -1
  531. package/registry/index.js +0 -6465
  532. package/registry/render-template.d.ts +0 -91
  533. package/registry/render-template.d.ts.map +0 -1
  534. package/registry/tool-ui.registry.d.ts +0 -294
  535. package/registry/tool-ui.registry.d.ts.map +0 -1
  536. package/registry/uri-utils.d.ts +0 -56
  537. package/registry/uri-utils.d.ts.map +0 -1
  538. package/renderers/cache.d.ts +0 -145
  539. package/renderers/cache.d.ts.map +0 -1
  540. package/renderers/html.renderer.d.ts +0 -123
  541. package/renderers/html.renderer.d.ts.map +0 -1
  542. package/renderers/registry.d.ts +0 -134
  543. package/renderers/registry.d.ts.map +0 -1
  544. package/renderers/types.d.ts +0 -342
  545. package/renderers/types.d.ts.map +0 -1
  546. package/renderers/utils/detect.d.ts +0 -107
  547. package/renderers/utils/detect.d.ts.map +0 -1
  548. package/renderers/utils/hash.d.ts +0 -40
  549. package/renderers/utils/hash.d.ts.map +0 -1
  550. package/renderers/utils/index.d.ts +0 -9
  551. package/renderers/utils/index.d.ts.map +0 -1
  552. package/renderers/utils/transpiler.d.ts +0 -89
  553. package/renderers/utils/transpiler.d.ts.map +0 -1
  554. package/runtime/adapters/html.adapter.d.ts +0 -59
  555. package/runtime/adapters/html.adapter.d.ts.map +0 -1
  556. package/runtime/adapters/index.d.ts +0 -26
  557. package/runtime/adapters/index.d.ts.map +0 -1
  558. package/runtime/adapters/mdx.adapter.d.ts +0 -73
  559. package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  560. package/runtime/adapters/react.adapter.d.ts +0 -70
  561. package/runtime/adapters/react.adapter.d.ts.map +0 -1
  562. package/runtime/adapters/types.d.ts +0 -95
  563. package/runtime/adapters/types.d.ts.map +0 -1
  564. package/runtime/csp.d.ts +0 -48
  565. package/runtime/csp.d.ts.map +0 -1
  566. package/runtime/index.d.ts +0 -17
  567. package/runtime/index.d.ts.map +0 -1
  568. package/runtime/index.js +0 -5264
  569. package/runtime/mcp-bridge.d.ts +0 -101
  570. package/runtime/mcp-bridge.d.ts.map +0 -1
  571. package/runtime/renderer-runtime.d.ts +0 -133
  572. package/runtime/renderer-runtime.d.ts.map +0 -1
  573. package/runtime/sanitizer.d.ts +0 -172
  574. package/runtime/sanitizer.d.ts.map +0 -1
  575. package/runtime/types.d.ts +0 -415
  576. package/runtime/types.d.ts.map +0 -1
  577. package/runtime/wrapper.d.ts +0 -421
  578. package/runtime/wrapper.d.ts.map +0 -1
  579. package/styles/index.d.ts +0 -8
  580. package/styles/index.d.ts.map +0 -1
  581. package/styles/index.js +0 -222
  582. package/styles/variants.d.ts +0 -51
  583. package/styles/variants.d.ts.map +0 -1
  584. package/theme/cdn.d.ts +0 -195
  585. package/theme/cdn.d.ts.map +0 -1
  586. package/theme/index.d.ts +0 -18
  587. package/theme/index.d.ts.map +0 -1
  588. package/theme/index.js +0 -757
  589. package/theme/platforms.d.ts +0 -107
  590. package/theme/platforms.d.ts.map +0 -1
  591. package/theme/presets/github-openai.d.ts +0 -50
  592. package/theme/presets/github-openai.d.ts.map +0 -1
  593. package/theme/presets/index.d.ts +0 -11
  594. package/theme/presets/index.d.ts.map +0 -1
  595. package/theme/theme.d.ts +0 -396
  596. package/theme/theme.d.ts.map +0 -1
  597. package/tool-template/builder.d.ts +0 -213
  598. package/tool-template/builder.d.ts.map +0 -1
  599. package/tool-template/index.d.ts +0 -16
  600. package/tool-template/index.d.ts.map +0 -1
  601. package/tool-template/index.js +0 -3559
  602. package/types/index.d.ts +0 -14
  603. package/types/index.d.ts.map +0 -1
  604. package/types/index.js +0 -108
  605. package/types/ui-config.d.ts +0 -639
  606. package/types/ui-config.d.ts.map +0 -1
  607. package/types/ui-runtime.d.ts +0 -1007
  608. package/types/ui-runtime.d.ts.map +0 -1
  609. package/typings/cache/cache-adapter.d.ts +0 -125
  610. package/typings/cache/cache-adapter.d.ts.map +0 -1
  611. package/typings/cache/index.d.ts +0 -10
  612. package/typings/cache/index.d.ts.map +0 -1
  613. package/typings/cache/memory-cache.d.ts +0 -92
  614. package/typings/cache/memory-cache.d.ts.map +0 -1
  615. package/typings/dts-parser.d.ts +0 -90
  616. package/typings/dts-parser.d.ts.map +0 -1
  617. package/typings/index.d.ts +0 -48
  618. package/typings/index.d.ts.map +0 -1
  619. package/typings/schemas.d.ts +0 -232
  620. package/typings/schemas.d.ts.map +0 -1
  621. package/typings/type-fetcher.d.ts +0 -89
  622. package/typings/type-fetcher.d.ts.map +0 -1
  623. package/typings/types.d.ts +0 -320
  624. package/typings/types.d.ts.map +0 -1
  625. package/utils/escape-html.d.ts +0 -58
  626. package/utils/escape-html.d.ts.map +0 -1
  627. package/utils/index.d.ts +0 -10
  628. package/utils/index.d.ts.map +0 -1
  629. package/utils/index.js +0 -70
  630. package/utils/safe-stringify.d.ts +0 -30
  631. package/utils/safe-stringify.d.ts.map +0 -1
  632. package/validation/error-box.d.ts +0 -56
  633. package/validation/error-box.d.ts.map +0 -1
  634. package/validation/index.d.ts +0 -13
  635. package/validation/index.d.ts.map +0 -1
  636. package/validation/index.js +0 -603
  637. package/validation/schema-paths.d.ts +0 -118
  638. package/validation/schema-paths.d.ts.map +0 -1
  639. package/validation/template-validator.d.ts +0 -143
  640. package/validation/template-validator.d.ts.map +0 -1
  641. package/validation/wrapper.d.ts +0 -97
  642. package/validation/wrapper.d.ts.map +0 -1
  643. package/widgets/index.d.ts +0 -8
  644. package/widgets/index.d.ts.map +0 -1
  645. package/widgets/index.js +0 -978
  646. package/widgets/progress.d.ts +0 -133
  647. package/widgets/progress.d.ts.map +0 -1
  648. package/widgets/resource.d.ts +0 -163
  649. package/widgets/resource.d.ts.map +0 -1
  650. /package/esm/render/{index.js → index.mjs} +0 -0
@@ -677,83 +677,23 @@ var ActionListOptionsSchema = z9.object({
677
677
  className: z9.string().optional()
678
678
  }).strict();
679
679
 
680
- // libs/ui/src/theme/platforms.ts
681
- var CLAUDE_PLATFORM = {
682
- id: "claude",
683
- name: "Claude (Artifacts)",
684
- supportsWidgets: true,
685
- supportsTailwind: true,
686
- supportsHtmx: false,
687
- // Network blocked, HTMX won't work for API calls
688
- networkMode: "blocked",
689
- scriptStrategy: "inline",
690
- maxInlineSize: 100 * 1024,
691
- // 100KB limit for artifacts
692
- cspRestrictions: ["script-src 'unsafe-inline'", "connect-src 'none'"],
693
- options: {
694
- mode: "artifacts",
695
- framework: "react"
696
- // Claude artifacts prefer React
697
- }
698
- };
699
-
700
- // libs/ui/src/utils/escape-html.ts
701
- function escapeHtml(str) {
702
- if (str === null || str === void 0) {
703
- return "";
704
- }
705
- const s = String(str);
706
- return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
707
- }
708
-
709
- // libs/ui/src/validation/error-box.ts
710
- var errorIcon = `<svg class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
711
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
712
- </svg>`;
713
- function validationErrorBox(options) {
714
- const { componentName, invalidParam } = options;
715
- return `<div
716
- class="validation-error flex items-start gap-3 p-4 bg-red-50 border border-red-200 text-red-800 rounded-lg"
717
- role="alert"
718
- data-testid="validation-error"
719
- data-component="${escapeHtml(componentName)}"
720
- data-param="${escapeHtml(invalidParam)}"
721
- >
722
- ${errorIcon}
723
- <div class="min-w-0">
724
- <p class="font-semibold text-sm">${escapeHtml(componentName)}: Invalid Configuration</p>
725
- <p class="text-sm opacity-90 mt-0.5">The "${escapeHtml(invalidParam)}" parameter is invalid.</p>
726
- </div>
727
- </div>`;
728
- }
729
-
730
- // libs/ui/src/validation/wrapper.ts
731
- function getFirstInvalidPath(error) {
732
- const firstError = error.issues[0];
733
- if (!firstError || firstError.path.length === 0) {
734
- return "options";
735
- }
736
- return firstError.path.map(String).join(".");
737
- }
738
- function validateOptions(options, config) {
739
- const result = config.schema.safeParse(options);
740
- if (result.success) {
741
- return { success: true, data: result.data };
742
- }
743
- const invalidParam = getFirstInvalidPath(result.error);
744
- return {
745
- success: false,
746
- error: validationErrorBox({
747
- componentName: config.componentName,
748
- invalidParam
749
- })
750
- };
751
- }
752
-
753
- // libs/ui/src/validation/schema-paths.ts
754
- import { z as z10 } from "zod";
680
+ // libs/ui/src/layouts/base.ts
681
+ import {
682
+ OPENAI_PLATFORM,
683
+ canUseCdn,
684
+ needsInlineScripts,
685
+ DEFAULT_THEME,
686
+ buildThemeCss,
687
+ mergeThemes,
688
+ buildFontPreconnect,
689
+ buildFontStylesheets,
690
+ buildCdnScripts
691
+ } from "@frontmcp/uipack/theme";
692
+ import { escapeHtml } from "@frontmcp/uipack/utils";
693
+ import { escapeHtml as escapeHtml2 } from "@frontmcp/uipack/utils";
755
694
 
756
695
  // libs/ui/src/components/button.ts
696
+ import { validateOptions } from "@frontmcp/uipack/validation";
757
697
  function getVariantClasses(variant) {
758
698
  const variants = {
759
699
  primary: "bg-primary hover:bg-primary/90 text-white shadow-sm",
@@ -843,7 +783,7 @@ function button(text, options = {}) {
843
783
  }
844
784
  const variantClasses = getVariantClasses(variant);
845
785
  const sizeClasses = getSizeClasses(size, iconOnly);
846
- const safeClassName = className ? escapeHtml(className) : "";
786
+ const safeClassName = className ? escapeHtml2(className) : "";
847
787
  const baseClasses = [
848
788
  "inline-flex items-center justify-center",
849
789
  "font-medium",
@@ -858,24 +798,24 @@ function button(text, options = {}) {
858
798
  ].filter(Boolean).join(" ");
859
799
  const dataAttrs = data ? Object.entries(data).map(([key, val]) => {
860
800
  const safeKey = sanitizeDataKey(key);
861
- return safeKey ? `data-${safeKey}="${escapeHtml(val)}"` : "";
801
+ return safeKey ? `data-${safeKey}="${escapeHtml2(val)}"` : "";
862
802
  }).filter(Boolean).join(" ") : "";
863
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
864
- const nameAttr = name ? `name="${escapeHtml(name)}"` : "";
865
- const valueAttr = value ? `value="${escapeHtml(value)}"` : "";
803
+ const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
804
+ const nameAttr = name ? `name="${escapeHtml2(name)}"` : "";
805
+ const valueAttr = value ? `value="${escapeHtml2(value)}"` : "";
866
806
  const disabledAttr = disabled || loading ? "disabled" : "";
867
- const targetAttr = target ? `target="${escapeHtml(target)}"` : "";
807
+ const targetAttr = target ? `target="${escapeHtml2(target)}"` : "";
868
808
  const relAttr = target === "_blank" ? 'rel="noopener noreferrer"' : "";
869
809
  const trimmedText = text.trim();
870
810
  const effectiveAriaLabel = ariaLabel ?? (iconOnly && trimmedText ? trimmedText : void 0);
871
- const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${escapeHtml(effectiveAriaLabel)}"` : "";
811
+ const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${escapeHtml2(effectiveAriaLabel)}"` : "";
872
812
  const iconBeforeHtml = iconBefore && !loading ? `<span class="${iconOnly ? "" : "mr-2"}">${iconBefore}</span>` : "";
873
813
  const iconAfterHtml = iconAfter && !loading ? `<span class="${iconOnly ? "" : "ml-2"}">${iconAfter}</span>` : "";
874
814
  const loadingHtml = loading ? loadingSpinner : "";
875
- const textHtml = iconOnly ? "" : escapeHtml(text);
815
+ const textHtml = iconOnly ? "" : escapeHtml2(text);
876
816
  const contentHtml = `${loadingHtml}${iconBeforeHtml}${textHtml}${iconAfterHtml}`;
877
817
  if (href && !disabled && !loading && isValidHrefProtocol(href)) {
878
- return `<a href="${escapeHtml(
818
+ return `<a href="${escapeHtml2(
879
819
  href
880
820
  )}" class="${baseClasses}" ${idAttr} ${dataAttrs} ${ariaLabelAttr} ${targetAttr} ${relAttr}>
881
821
  ${contentHtml}
@@ -899,7 +839,7 @@ function buttonGroup(buttons, options = {}) {
899
839
  }
900
840
  const validatedOptions = validation.data;
901
841
  const { attached = false, direction = "horizontal", gap = "md", className = "" } = validatedOptions;
902
- const safeClassName = className ? escapeHtml(className) : "";
842
+ const safeClassName = className ? escapeHtml2(className) : "";
903
843
  if (attached) {
904
844
  const classes = direction === "horizontal" ? "inline-flex rounded-lg shadow-sm [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:not(:first-child)]:-ml-px" : "inline-flex flex-col rounded-lg shadow-sm [&>*:first-child]:rounded-b-none [&>*:last-child]:rounded-t-none [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:not(:first-child)]:-mt-px";
905
845
  return `<div class="${classes} ${safeClassName}">${buttons.join("")}</div>`;
@@ -936,7 +876,7 @@ function getSizeClasses2(size) {
936
876
  }
937
877
  function buildDataAttrs(data) {
938
878
  if (!data) return "";
939
- return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml(value)}"`).join(" ");
879
+ return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml2(value)}"`).join(" ");
940
880
  }
941
881
  function card(content, options = {}) {
942
882
  const {
@@ -957,18 +897,18 @@ function card(content, options = {}) {
957
897
  const clickableClasses = clickable ? "cursor-pointer hover:shadow-md transition-shadow" : "";
958
898
  const allClasses = [variantClasses, sizeClasses, clickableClasses, className].filter(Boolean).join(" ");
959
899
  const dataAttrs = buildDataAttrs(data);
960
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
900
+ const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
961
901
  const hasHeader = title || subtitle || headerActions;
962
902
  const headerHtml = hasHeader ? `<div class="flex items-start justify-between mb-4">
963
903
  <div>
964
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : ""}
965
- ${subtitle ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml(subtitle)}</p>` : ""}
904
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml2(title)}</h3>` : ""}
905
+ ${subtitle ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml2(subtitle)}</p>` : ""}
966
906
  </div>
967
907
  ${headerActions ? `<div class="flex items-center gap-2">${headerActions}</div>` : ""}
968
908
  </div>` : "";
969
909
  const footerHtml = footer ? `<div class="mt-4 pt-4 border-t border-divider">${footer}</div>` : "";
970
910
  if (href) {
971
- return `<a href="${escapeHtml(href)}" class="${allClasses}" ${idAttr} ${dataAttrs}>
911
+ return `<a href="${escapeHtml2(href)}" class="${allClasses}" ${idAttr} ${dataAttrs}>
972
912
  ${headerHtml}
973
913
  ${content}
974
914
  ${footerHtml}
@@ -1009,7 +949,7 @@ function getInputStateClasses(state) {
1009
949
  }
1010
950
  function buildDataAttrs2(data) {
1011
951
  if (!data) return "";
1012
- return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml(value)}"`).join(" ");
952
+ return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml2(value)}"`).join(" ");
1013
953
  }
1014
954
  function input(options) {
1015
955
  const {
@@ -1052,26 +992,26 @@ function input(options) {
1052
992
  const dataAttrs = buildDataAttrs2(data);
1053
993
  const inputAttrs = [
1054
994
  `type="${type}"`,
1055
- `name="${escapeHtml(name)}"`,
1056
- `id="${escapeHtml(id)}"`,
1057
- value ? `value="${escapeHtml(value)}"` : "",
1058
- placeholder ? `placeholder="${escapeHtml(placeholder)}"` : "",
995
+ `name="${escapeHtml2(name)}"`,
996
+ `id="${escapeHtml2(id)}"`,
997
+ value ? `value="${escapeHtml2(value)}"` : "",
998
+ placeholder ? `placeholder="${escapeHtml2(placeholder)}"` : "",
1059
999
  required ? "required" : "",
1060
1000
  disabled ? "disabled" : "",
1061
1001
  readonly ? "readonly" : "",
1062
- autocomplete ? `autocomplete="${escapeHtml(autocomplete)}"` : "",
1063
- pattern ? `pattern="${escapeHtml(pattern)}"` : "",
1064
- min !== void 0 ? `min="${escapeHtml(String(min))}"` : "",
1065
- max !== void 0 ? `max="${escapeHtml(String(max))}"` : "",
1066
- step !== void 0 ? `step="${escapeHtml(String(step))}"` : "",
1002
+ autocomplete ? `autocomplete="${escapeHtml2(autocomplete)}"` : "",
1003
+ pattern ? `pattern="${escapeHtml2(pattern)}"` : "",
1004
+ min !== void 0 ? `min="${escapeHtml2(String(min))}"` : "",
1005
+ max !== void 0 ? `max="${escapeHtml2(String(max))}"` : "",
1006
+ step !== void 0 ? `step="${escapeHtml2(String(step))}"` : "",
1067
1007
  `class="${baseClasses}"`,
1068
1008
  dataAttrs
1069
1009
  ].filter(Boolean).join(" ");
1070
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1071
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1010
+ const labelHtml = label ? `<label for="${escapeHtml2(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1011
+ ${escapeHtml2(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1072
1012
  </label>` : "";
1073
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1074
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1013
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml2(helper)}</p>` : "";
1014
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml2(error)}</p>` : "";
1075
1015
  const iconBeforeHtml = iconBefore ? `<span class="absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary">${iconBefore}</span>` : "";
1076
1016
  const iconAfterHtml = iconAfter ? `<span class="absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary">${iconAfter}</span>` : "";
1077
1017
  const inputHtml = hasIcon ? `<div class="relative">
@@ -1118,18 +1058,18 @@ function select(options) {
1118
1058
  const optionsHtml = selectOptions.map((opt) => {
1119
1059
  const selected = opt.selected || opt.value === value ? "selected" : "";
1120
1060
  const optDisabled = opt.disabled ? "disabled" : "";
1121
- return `<option value="${escapeHtml(opt.value)}" ${selected} ${optDisabled}>${escapeHtml(opt.label)}</option>`;
1061
+ return `<option value="${escapeHtml2(opt.value)}" ${selected} ${optDisabled}>${escapeHtml2(opt.label)}</option>`;
1122
1062
  }).join("\n");
1123
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1124
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1063
+ const labelHtml = label ? `<label for="${escapeHtml2(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1064
+ ${escapeHtml2(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1125
1065
  </label>` : "";
1126
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1127
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1066
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml2(helper)}</p>` : "";
1067
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml2(error)}</p>` : "";
1128
1068
  return `<div class="form-field">
1129
1069
  ${labelHtml}
1130
1070
  <select
1131
- name="${escapeHtml(name)}"
1132
- id="${escapeHtml(id)}"
1071
+ name="${escapeHtml2(name)}"
1072
+ id="${escapeHtml2(id)}"
1133
1073
  class="${baseClasses}"
1134
1074
  ${required ? "required" : ""}
1135
1075
  ${disabled ? "disabled" : ""}
@@ -1180,24 +1120,24 @@ function textarea(options) {
1180
1120
  className
1181
1121
  ].filter(Boolean).join(" ");
1182
1122
  const dataAttrs = buildDataAttrs2(data);
1183
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1184
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1123
+ const labelHtml = label ? `<label for="${escapeHtml2(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1124
+ ${escapeHtml2(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1185
1125
  </label>` : "";
1186
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1187
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1126
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml2(helper)}</p>` : "";
1127
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml2(error)}</p>` : "";
1188
1128
  return `<div class="form-field">
1189
1129
  ${labelHtml}
1190
1130
  <textarea
1191
- name="${escapeHtml(name)}"
1192
- id="${escapeHtml(id)}"
1131
+ name="${escapeHtml2(name)}"
1132
+ id="${escapeHtml2(id)}"
1193
1133
  rows="${rows}"
1194
1134
  class="${baseClasses}"
1195
- ${placeholder ? `placeholder="${escapeHtml(placeholder)}"` : ""}
1135
+ ${placeholder ? `placeholder="${escapeHtml2(placeholder)}"` : ""}
1196
1136
  ${required ? "required" : ""}
1197
1137
  ${disabled ? "disabled" : ""}
1198
1138
  ${readonly ? "readonly" : ""}
1199
1139
  ${dataAttrs}
1200
- >${escapeHtml(value)}</textarea>
1140
+ >${escapeHtml2(value)}</textarea>
1201
1141
  ${helperHtml}
1202
1142
  ${errorHtml}
1203
1143
  </div>`;
@@ -1219,21 +1159,21 @@ function checkbox(options) {
1219
1159
  "focus:ring-2 focus:ring-primary/20 focus:ring-offset-0",
1220
1160
  disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
1221
1161
  ].join(" ");
1222
- const helperHtml = helper && !error ? `<p class="text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1223
- const errorHtml = error ? `<p class="text-sm text-danger">${escapeHtml(error)}</p>` : "";
1162
+ const helperHtml = helper && !error ? `<p class="text-sm text-text-secondary">${escapeHtml2(helper)}</p>` : "";
1163
+ const errorHtml = error ? `<p class="text-sm text-danger">${escapeHtml2(error)}</p>` : "";
1224
1164
  return `<div class="form-field ${className}">
1225
1165
  <label class="flex items-start gap-3 ${disabled ? "cursor-not-allowed" : "cursor-pointer"}">
1226
1166
  <input
1227
1167
  type="checkbox"
1228
- name="${escapeHtml(name)}"
1229
- id="${escapeHtml(id)}"
1230
- value="${escapeHtml(value)}"
1168
+ name="${escapeHtml2(name)}"
1169
+ id="${escapeHtml2(id)}"
1170
+ value="${escapeHtml2(value)}"
1231
1171
  class="${checkboxClasses}"
1232
1172
  ${checked ? "checked" : ""}
1233
1173
  ${disabled ? "disabled" : ""}
1234
1174
  >
1235
1175
  <div>
1236
- <span class="text-sm font-medium text-text-primary">${escapeHtml(label)}</span>
1176
+ <span class="text-sm font-medium text-text-primary">${escapeHtml2(label)}</span>
1237
1177
  ${helperHtml}
1238
1178
  ${errorHtml}
1239
1179
  </div>
@@ -1252,19 +1192,19 @@ function radioGroup(options) {
1252
1192
  return `<label class="flex items-center gap-2 ${cursorClass}">
1253
1193
  <input
1254
1194
  type="radio"
1255
- name="${escapeHtml(name)}"
1256
- id="${escapeHtml(radioId)}"
1257
- value="${escapeHtml(opt.value)}"
1195
+ name="${escapeHtml2(name)}"
1196
+ id="${escapeHtml2(radioId)}"
1197
+ value="${escapeHtml2(opt.value)}"
1258
1198
  class="${radioClasses}"
1259
1199
  ${checked}
1260
1200
  ${disabled}
1261
1201
  >
1262
- <span class="text-sm text-text-primary">${escapeHtml(opt.label)}</span>
1202
+ <span class="text-sm text-text-primary">${escapeHtml2(opt.label)}</span>
1263
1203
  </label>`;
1264
1204
  }).join("\n");
1265
- const labelHtml = label ? `<label class="block text-sm font-medium text-text-primary mb-2">${escapeHtml(label)}</label>` : "";
1266
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1267
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1205
+ const labelHtml = label ? `<label class="block text-sm font-medium text-text-primary mb-2">${escapeHtml2(label)}</label>` : "";
1206
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml2(helper)}</p>` : "";
1207
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml2(error)}</p>` : "";
1268
1208
  return `<div class="form-field ${className}" role="radiogroup">
1269
1209
  ${labelHtml}
1270
1210
  <div class="${directionClasses}">
@@ -1277,10 +1217,10 @@ function radioGroup(options) {
1277
1217
  function form(content, options = {}) {
1278
1218
  const { action, method = "post", id, className = "", preventDefault = false, autocomplete, enctype } = options;
1279
1219
  const attrs = [
1280
- action ? `action="${escapeHtml(action)}"` : "",
1220
+ action ? `action="${escapeHtml2(action)}"` : "",
1281
1221
  `method="${method}"`,
1282
- id ? `id="${escapeHtml(id)}"` : "",
1283
- className ? `class="${escapeHtml(className)}"` : "",
1222
+ id ? `id="${escapeHtml2(id)}"` : "",
1223
+ className ? `class="${escapeHtml2(className)}"` : "",
1284
1224
  autocomplete ? `autocomplete="${autocomplete}"` : "",
1285
1225
  enctype ? `enctype="${enctype}"` : "",
1286
1226
  preventDefault ? 'onsubmit="return false;"' : ""
@@ -1297,8 +1237,8 @@ function formRow(fields, options = {}) {
1297
1237
  function formSection(content, options = {}) {
1298
1238
  const { title, description, className = "" } = options;
1299
1239
  const headerHtml = title ? `<div class="mb-4">
1300
- <h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>
1301
- ${description ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml(description)}</p>` : ""}
1240
+ <h3 class="text-lg font-semibold text-text-primary">${escapeHtml2(title)}</h3>
1241
+ ${description ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml2(description)}</p>` : ""}
1302
1242
  </div>` : "";
1303
1243
  return `<div class="form-section ${className}">
1304
1244
  ${headerHtml}
@@ -1320,7 +1260,7 @@ function formActions(buttons, options = {}) {
1320
1260
  </div>`;
1321
1261
  }
1322
1262
  function hiddenInput(name, value) {
1323
- return `<input type="hidden" name="${escapeHtml(name)}" value="${escapeHtml(value)}">`;
1263
+ return `<input type="hidden" name="${escapeHtml2(name)}" value="${escapeHtml2(value)}">`;
1324
1264
  }
1325
1265
  function csrfInput(token) {
1326
1266
  return hiddenInput("_csrf", token);
@@ -1378,7 +1318,7 @@ function badge(text, options = {}) {
1378
1318
  outline: "border border-current"
1379
1319
  };
1380
1320
  const dotClasses = ["inline-block rounded-full", getSizeClasses3(size, true), dotVariants[variant], className].filter(Boolean).join(" ");
1381
- return `<span class="${dotClasses}" aria-label="${escapeHtml(text)}" title="${escapeHtml(text)}"></span>`;
1321
+ return `<span class="${dotClasses}" aria-label="${escapeHtml2(text)}" title="${escapeHtml2(text)}"></span>`;
1382
1322
  }
1383
1323
  const variantClasses = getVariantClasses3(variant);
1384
1324
  const sizeClasses = getSizeClasses3(size, false);
@@ -1401,7 +1341,7 @@ function badge(text, options = {}) {
1401
1341
  </svg>
1402
1342
  </button>` : "";
1403
1343
  return `<span class="${baseClasses}">
1404
- ${iconHtml}${escapeHtml(text)}${removeHtml}
1344
+ ${iconHtml}${escapeHtml2(text)}${removeHtml}
1405
1345
  </span>`;
1406
1346
  }
1407
1347
  function badgeGroup(badges, options = {}) {
@@ -1472,7 +1412,7 @@ function alert(message, options = {}) {
1472
1412
  const iconHtml = showIcon ? `<div class="flex-shrink-0 ${variantClasses.icon}">
1473
1413
  ${icon || alertIcons[variant]}
1474
1414
  </div>` : "";
1475
- const titleHtml = title ? `<h3 class="font-semibold">${escapeHtml(title)}</h3>` : "";
1415
+ const titleHtml = title ? `<h3 class="font-semibold">${escapeHtml2(title)}</h3>` : "";
1476
1416
  const dismissHtml = dismissible ? `<button
1477
1417
  type="button"
1478
1418
  class="flex-shrink-0 ml-auto -mr-1 -mt-1 p-1 rounded hover:bg-black/5 transition-colors"
@@ -1484,13 +1424,13 @@ function alert(message, options = {}) {
1484
1424
  </svg>
1485
1425
  </button>` : "";
1486
1426
  const actionsHtml = actions ? `<div class="mt-3">${actions}</div>` : "";
1487
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
1427
+ const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
1488
1428
  return `<div class="alert ${baseClasses}" role="alert" ${idAttr}>
1489
1429
  <div class="flex gap-3">
1490
1430
  ${iconHtml}
1491
1431
  <div class="flex-1">
1492
1432
  ${titleHtml}
1493
- <div class="${title ? "mt-1" : ""}">${escapeHtml(message)}</div>
1433
+ <div class="${title ? "mt-1" : ""}">${escapeHtml2(message)}</div>
1494
1434
  ${actionsHtml}
1495
1435
  </div>
1496
1436
  ${dismissHtml}
@@ -1512,7 +1452,7 @@ function toast(message, options = {}) {
1512
1452
  "top-center": "top-4 left-1/2 -translate-x-1/2",
1513
1453
  "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
1514
1454
  };
1515
- const titleHtml = title ? `<h4 class="font-semibold">${escapeHtml(title)}</h4>` : "";
1455
+ const titleHtml = title ? `<h4 class="font-semibold">${escapeHtml2(title)}</h4>` : "";
1516
1456
  const autoDismissScript = duration > 0 ? `<script>
1517
1457
  setTimeout(() => {
1518
1458
  const toast = document.getElementById('${id}');
@@ -1523,7 +1463,7 @@ function toast(message, options = {}) {
1523
1463
  }, ${duration});
1524
1464
  </script>` : "";
1525
1465
  return `<div
1526
- id="${escapeHtml(id)}"
1466
+ id="${escapeHtml2(id)}"
1527
1467
  class="fixed ${positionClasses[position]} z-50 min-w-[300px] max-w-md rounded-lg border shadow-lg ${variantClasses.container} transition-all duration-300 transform"
1528
1468
  role="alert"
1529
1469
  >
@@ -1533,7 +1473,7 @@ function toast(message, options = {}) {
1533
1473
  </div>
1534
1474
  <div class="flex-1">
1535
1475
  ${titleHtml}
1536
- <p class="${title ? "mt-1 text-sm opacity-90" : ""}">${escapeHtml(message)}</p>
1476
+ <p class="${title ? "mt-1 text-sm opacity-90" : ""}">${escapeHtml2(message)}</p>
1537
1477
  </div>
1538
1478
  <button
1539
1479
  type="button"
@@ -1558,7 +1498,7 @@ function toastContainer(position = "top-right", id = "toast-container") {
1558
1498
  "top-center": "top-4 left-1/2 -translate-x-1/2",
1559
1499
  "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
1560
1500
  };
1561
- return `<div id="${escapeHtml(id)}" class="fixed ${positionClasses[position]} z-50 flex flex-col gap-2"></div>`;
1501
+ return `<div id="${escapeHtml2(id)}" class="fixed ${positionClasses[position]} z-50 flex flex-col gap-2"></div>`;
1562
1502
  }
1563
1503
 
1564
1504
  // libs/ui/src/components/avatar.ts
@@ -1631,7 +1571,7 @@ function avatar(options) {
1631
1571
  shapeClasses,
1632
1572
  className
1633
1573
  ].filter(Boolean).join(" ");
1634
- const contentHtml = src ? `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" class="w-full h-full object-cover">` : `<span class="font-medium text-white ${sizeClasses.text}">${escapeHtml(displayInitials)}</span>`;
1574
+ const contentHtml = src ? `<img src="${escapeHtml2(src)}" alt="${escapeHtml2(alt)}" class="w-full h-full object-cover">` : `<span class="font-medium text-white ${sizeClasses.text}">${escapeHtml2(displayInitials)}</span>`;
1635
1575
  const bgClasses = src ? "bg-gray-200" : displayBgColor;
1636
1576
  const statusHtml = status !== "none" ? `<span class="absolute bottom-0 right-0 block ${sizeClasses.status} ${shapeClasses} ${statusColor} border-white"></span>` : "";
1637
1577
  const innerHtml = `
@@ -1641,7 +1581,7 @@ function avatar(options) {
1641
1581
  </div>
1642
1582
  `;
1643
1583
  if (href) {
1644
- return `<a href="${escapeHtml(href)}" class="inline-block">${innerHtml}</a>`;
1584
+ return `<a href="${escapeHtml2(href)}" class="inline-block">${innerHtml}</a>`;
1645
1585
  }
1646
1586
  return innerHtml;
1647
1587
  }
@@ -1676,8 +1616,8 @@ function avatarWithText(options) {
1676
1616
  const avatarHtml = avatar({ ...avatarOptions, alt: avatarOptions.alt || name });
1677
1617
  const textHtml = `
1678
1618
  <div class="${align === "right" ? "text-right" : ""}">
1679
- <div class="font-medium text-text-primary">${escapeHtml(name)}</div>
1680
- ${subtitle ? `<div class="text-sm text-text-secondary">${escapeHtml(subtitle)}</div>` : ""}
1619
+ <div class="font-medium text-text-primary">${escapeHtml2(name)}</div>
1620
+ ${subtitle ? `<div class="text-sm text-text-secondary">${escapeHtml2(subtitle)}</div>` : ""}
1681
1621
  </div>
1682
1622
  `;
1683
1623
  const flexDirection = align === "right" ? "flex-row-reverse" : "flex-row";
@@ -1722,12 +1662,12 @@ function modal(content, options) {
1722
1662
  const sizeClasses = getSizeClasses5(size);
1723
1663
  const visibilityClasses = open ? "" : "hidden";
1724
1664
  const headerHtml = title || showClose ? `<div class="flex items-center justify-between p-4 border-b border-divider">
1725
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : "<div></div>"}
1665
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml2(title)}</h3>` : "<div></div>"}
1726
1666
  ${showClose ? `
1727
1667
  <button
1728
1668
  type="button"
1729
1669
  class="p-1 rounded-lg text-text-secondary hover:text-text-primary hover:bg-gray-100 transition-colors"
1730
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1670
+ onclick="document.getElementById('${escapeHtml2(id)}').classList.add('hidden')"
1731
1671
  aria-label="Close"
1732
1672
  >
1733
1673
  <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -1743,18 +1683,18 @@ function modal(content, options) {
1743
1683
  const escapeHandler = closeOnEscape ? `<script>
1744
1684
  document.addEventListener('keydown', function(e) {
1745
1685
  if (e.key === 'Escape') {
1746
- document.getElementById('${escapeHtml(id)}')?.classList.add('hidden');
1686
+ document.getElementById('${escapeHtml2(id)}')?.classList.add('hidden');
1747
1687
  }
1748
1688
  });
1749
1689
  </script>` : "";
1750
1690
  return `
1751
1691
  <div
1752
- id="${escapeHtml(id)}"
1692
+ id="${escapeHtml2(id)}"
1753
1693
  class="fixed inset-0 z-50 overflow-y-auto ${visibilityClasses}"
1754
1694
  ${backdropClickHandler}
1755
1695
  role="dialog"
1756
1696
  aria-modal="true"
1757
- aria-labelledby="${escapeHtml(id)}-title"
1697
+ aria-labelledby="${escapeHtml2(id)}-title"
1758
1698
  >
1759
1699
  <!-- Backdrop -->
1760
1700
  <div class="fixed inset-0 bg-black/50 transition-opacity"></div>
@@ -1777,7 +1717,7 @@ function modalTrigger(triggerContent, modalId, options = {}) {
1777
1717
  const { className = "", tag = "button" } = options;
1778
1718
  const attrs = `
1779
1719
  class="${className}"
1780
- onclick="document.getElementById('${escapeHtml(modalId)}').classList.remove('hidden')"
1720
+ onclick="document.getElementById('${escapeHtml2(modalId)}').classList.remove('hidden')"
1781
1721
  `;
1782
1722
  if (tag === "button") {
1783
1723
  return `<button type="button" ${attrs}>${triggerContent}</button>`;
@@ -1822,29 +1762,29 @@ function confirmModal(options) {
1822
1762
  <div class="mx-auto w-12 h-12 rounded-full ${iconColors[variant]} flex items-center justify-center mb-4">
1823
1763
  ${displayIcon}
1824
1764
  </div>
1825
- <h3 class="text-lg font-semibold text-text-primary mb-2">${escapeHtml(title)}</h3>
1826
- <p class="text-text-secondary">${escapeHtml(message)}</p>
1765
+ <h3 class="text-lg font-semibold text-text-primary mb-2">${escapeHtml2(title)}</h3>
1766
+ <p class="text-text-secondary">${escapeHtml2(message)}</p>
1827
1767
  </div>
1828
1768
  `;
1829
1769
  const confirmButton = confirmHref && isSafeUrl(confirmHref) ? `<a
1830
- href="${escapeHtml(confirmHref)}"
1770
+ href="${escapeHtml2(confirmHref)}"
1831
1771
  class="px-4 py-2 rounded-lg ${variantClasses[variant]} transition-colors"
1832
1772
  >
1833
- ${escapeHtml(confirmText)}
1773
+ ${escapeHtml2(confirmText)}
1834
1774
  </a>` : `<button
1835
1775
  type="button"
1836
1776
  class="px-4 py-2 rounded-lg ${variantClasses[variant]} transition-colors"
1837
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1777
+ onclick="document.getElementById('${escapeHtml2(id)}').classList.add('hidden')"
1838
1778
  >
1839
- ${escapeHtml(confirmText)}
1779
+ ${escapeHtml2(confirmText)}
1840
1780
  </button>`;
1841
1781
  const footer = `
1842
1782
  <button
1843
1783
  type="button"
1844
1784
  class="px-4 py-2 rounded-lg border border-border text-text-primary hover:bg-gray-50 transition-colors"
1845
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1785
+ onclick="document.getElementById('${escapeHtml2(id)}').classList.add('hidden')"
1846
1786
  >
1847
- ${escapeHtml(cancelText)}
1787
+ ${escapeHtml2(cancelText)}
1848
1788
  </button>
1849
1789
  ${confirmButton}
1850
1790
  `;
@@ -1887,12 +1827,12 @@ function drawer(content, options) {
1887
1827
  };
1888
1828
  const visibilityClasses = open ? "" : "hidden";
1889
1829
  const headerHtml = title || showClose ? `<div class="flex items-center justify-between p-4 border-b border-divider">
1890
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : "<div></div>"}
1830
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml2(title)}</h3>` : "<div></div>"}
1891
1831
  ${showClose ? `
1892
1832
  <button
1893
1833
  type="button"
1894
1834
  class="p-1 rounded-lg text-text-secondary hover:text-text-primary hover:bg-gray-100 transition-colors"
1895
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1835
+ onclick="document.getElementById('${escapeHtml2(id)}').classList.add('hidden')"
1896
1836
  aria-label="Close"
1897
1837
  >
1898
1838
  <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -1905,7 +1845,7 @@ function drawer(content, options) {
1905
1845
  const backdropClickHandler = closeOnBackdrop ? `onclick="if (event.target === this) this.classList.add('hidden')"` : "";
1906
1846
  return `
1907
1847
  <div
1908
- id="${escapeHtml(id)}"
1848
+ id="${escapeHtml2(id)}"
1909
1849
  class="fixed inset-0 z-50 ${visibilityClasses}"
1910
1850
  ${backdropClickHandler}
1911
1851
  role="dialog"
@@ -1968,9 +1908,9 @@ function buildTableHeader(columns, options) {
1968
1908
  class="${paddingClass} ${alignClass} font-semibold text-text-primary ${sortableClasses} ${col.headerClass || ""}"
1969
1909
  ${widthStyle}
1970
1910
  >
1971
- ${col.sortable ? `<span class="inline-flex items-center">${escapeHtml(col.header)}${buildSortIndicator(
1911
+ ${col.sortable ? `<span class="inline-flex items-center">${escapeHtml2(col.header)}${buildSortIndicator(
1972
1912
  col.sortDirection || null
1973
- )}</span>` : escapeHtml(col.header)}
1913
+ )}</span>` : escapeHtml2(col.header)}
1974
1914
  </th>`;
1975
1915
  }).join("\n");
1976
1916
  return `<thead class="bg-gray-50 border-b border-border">
@@ -2007,20 +1947,20 @@ function buildTableBody(data, columns, options) {
2007
1947
  bordered ? "border-b border-border" : "",
2008
1948
  onRowClick ? "cursor-pointer" : ""
2009
1949
  ].filter(Boolean).join(" ");
2010
- const clickHandler = onRowClick ? `onclick="window.location.href='${escapeHtml(onRowClick.replace("{key}", rowId))}'"` : "";
1950
+ const clickHandler = onRowClick ? `onclick="window.location.href='${escapeHtml2(onRowClick.replace("{key}", rowId))}'"` : "";
2011
1951
  const selectCell = selectable ? `<td class="${paddingClass}" onclick="event.stopPropagation()">
2012
1952
  <input
2013
1953
  type="checkbox"
2014
1954
  class="w-4 h-4 rounded border-border text-primary focus:ring-primary/20"
2015
1955
  name="selected[]"
2016
- value="${escapeHtml(rowId)}"
1956
+ value="${escapeHtml2(rowId)}"
2017
1957
  aria-label="Select row"
2018
1958
  >
2019
1959
  </td>` : "";
2020
1960
  const cells = columns.map((col) => {
2021
1961
  const value = row[col.key];
2022
1962
  const alignClass = getAlignClasses(col.align);
2023
- const cellContent = col.render ? col.render(value, row, rowIndex) : escapeHtml(String(value ?? ""));
1963
+ const cellContent = col.render ? col.render(value, row, rowIndex) : escapeHtml2(String(value ?? ""));
2024
1964
  return `<td class="${paddingClass} ${alignClass} ${col.cellClass || ""}">${cellContent}</td>`;
2025
1965
  }).join("\n");
2026
1966
  return `<tr class="${rowClasses}" ${clickHandler}>
@@ -2042,7 +1982,7 @@ function table(data, options) {
2042
1982
  const { id, bordered, stickyHeader, className = "", loading = false } = options;
2043
1983
  const tableClasses = ["w-full", bordered ? "border border-border" : "", "text-sm"].filter(Boolean).join(" ");
2044
1984
  const wrapperClasses = ["relative overflow-x-auto", stickyHeader ? "max-h-96 overflow-y-auto" : "", className].filter(Boolean).join(" ");
2045
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
1985
+ const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
2046
1986
  const header = buildTableHeader(options.columns, options);
2047
1987
  const body = buildTableBody(data, options.columns, options);
2048
1988
  const loadingOverlay = loading ? buildLoadingOverlay() : "";
@@ -2072,7 +2012,7 @@ function pagination(options) {
2072
2012
  return `<span class="${baseClasses} ${stateClasses}">${label}</span>`;
2073
2013
  }
2074
2014
  const pageUrl = baseUrl ? `${baseUrl}${baseUrl.includes("?") ? "&" : "?"}page=${pageNum}` : `?page=${pageNum}`;
2075
- return `<a href="${escapeHtml(pageUrl)}" class="${baseClasses} ${stateClasses}">${label}</a>`;
2015
+ return `<a href="${escapeHtml2(pageUrl)}" class="${baseClasses} ${stateClasses}">${label}</a>`;
2076
2016
  };
2077
2017
  const pageNumbers = [];
2078
2018
  const maxVisible = 5;
@@ -2170,19 +2110,19 @@ function getPermissionIcon(scope, customIcon) {
2170
2110
  }
2171
2111
  function permissionList(permissions, options = {}) {
2172
2112
  const { id, checkable = false, inputName = "scopes", title, className = "" } = options;
2173
- const titleHtml = title ? `<h4 class="font-medium text-text-primary mb-3">${escapeHtml(title)}</h4>` : "";
2113
+ const titleHtml = title ? `<h4 class="font-medium text-text-primary mb-3">${escapeHtml2(title)}</h4>` : "";
2174
2114
  const itemsHtml = permissions.map((perm, index) => {
2175
2115
  const icon = getPermissionIcon(perm.scope, perm.icon);
2176
2116
  const sensitiveClasses = perm.sensitive ? "border-warning/30 bg-warning/5" : "border-border";
2177
2117
  const sensitiveLabel = perm.sensitive ? '<span class="text-xs text-warning font-medium ml-2">Sensitive</span>' : "";
2178
2118
  const checkboxHtml = checkable ? `<input
2179
2119
  type="checkbox"
2180
- name="${escapeHtml(inputName)}[]"
2181
- value="${escapeHtml(perm.scope)}"
2120
+ name="${escapeHtml2(inputName)}[]"
2121
+ value="${escapeHtml2(perm.scope)}"
2182
2122
  class="w-4 h-4 rounded border-border text-primary focus:ring-primary/20"
2183
2123
  ${perm.checked || perm.required ? "checked" : ""}
2184
2124
  ${perm.required ? "disabled" : ""}
2185
- id="${id ? escapeHtml(id) : "perm"}-${index}"
2125
+ id="${id ? escapeHtml2(id) : "perm"}-${index}"
2186
2126
  >` : `<div class="w-5 h-5 rounded-full bg-success/10 text-success flex items-center justify-center">
2187
2127
  <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2188
2128
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/>
@@ -2194,18 +2134,18 @@ function permissionList(permissions, options = {}) {
2194
2134
  </div>
2195
2135
  <div class="flex-1 min-w-0">
2196
2136
  <div class="flex items-center">
2197
- <span class="font-medium text-text-primary">${escapeHtml(perm.name)}</span>
2137
+ <span class="font-medium text-text-primary">${escapeHtml2(perm.name)}</span>
2198
2138
  ${perm.required ? '<span class="text-xs text-text-secondary ml-2">(Required)</span>' : ""}
2199
2139
  ${sensitiveLabel}
2200
2140
  </div>
2201
- ${perm.description ? `<p class="text-sm text-text-secondary mt-0.5">${escapeHtml(perm.description)}</p>` : ""}
2141
+ ${perm.description ? `<p class="text-sm text-text-secondary mt-0.5">${escapeHtml2(perm.description)}</p>` : ""}
2202
2142
  </div>
2203
2143
  <div class="flex-shrink-0">
2204
2144
  ${checkboxHtml}
2205
2145
  </div>
2206
2146
  </div>`;
2207
2147
  }).join("\n");
2208
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
2148
+ const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
2209
2149
  return `<div class="permission-list ${className}" ${idAttr}>
2210
2150
  ${titleHtml}
2211
2151
  <div class="space-y-2">
@@ -2235,8 +2175,8 @@ function featureList(features, options = {}) {
2235
2175
  return `<li class="flex items-start gap-3">
2236
2176
  <div class="flex-shrink-0 mt-0.5">${iconHtml}</div>
2237
2177
  <div class="flex-1">
2238
- <span class="${textClasses}">${escapeHtml(feature.name)}</span>
2239
- ${feature.description ? `<p class="text-sm text-text-secondary">${escapeHtml(feature.description)}</p>` : ""}
2178
+ <span class="${textClasses}">${escapeHtml2(feature.name)}</span>
2179
+ ${feature.description ? `<p class="text-sm text-text-secondary">${escapeHtml2(feature.description)}</p>` : ""}
2240
2180
  </div>
2241
2181
  </li>`;
2242
2182
  }).join("\n");
@@ -2258,7 +2198,7 @@ function descriptionList(items, options = {}) {
2258
2198
  const hasCopyable = items.some((item) => item.copyable);
2259
2199
  if (layout === "horizontal") {
2260
2200
  const itemsHtml2 = items.map((item) => {
2261
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2201
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml2(
2262
2202
  item.description
2263
2203
  )}', this)" class="ml-2 p-1 rounded hover:bg-gray-100 transition-colors">
2264
2204
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2266,9 +2206,9 @@ function descriptionList(items, options = {}) {
2266
2206
  </svg>
2267
2207
  </button>` : "";
2268
2208
  return `<div class="py-3 sm:grid sm:grid-cols-3 sm:gap-4 ${dividers ? "border-b border-divider" : ""}">
2269
- <dt class="text-sm font-medium text-text-secondary">${escapeHtml(item.term)}</dt>
2209
+ <dt class="text-sm font-medium text-text-secondary">${escapeHtml2(item.term)}</dt>
2270
2210
  <dd class="mt-1 sm:mt-0 sm:col-span-2 text-sm text-text-primary flex items-center">
2271
- ${escapeHtml(item.description)}
2211
+ ${escapeHtml2(item.description)}
2272
2212
  ${copyBtn}
2273
2213
  </dd>
2274
2214
  </div>`;
@@ -2277,7 +2217,7 @@ function descriptionList(items, options = {}) {
2277
2217
  }
2278
2218
  if (layout === "grid") {
2279
2219
  const itemsHtml2 = items.map((item) => {
2280
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2220
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml2(
2281
2221
  item.description
2282
2222
  )}', this)" class="absolute top-2 right-2 p-1 rounded hover:bg-gray-100 transition-colors">
2283
2223
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2285,15 +2225,15 @@ function descriptionList(items, options = {}) {
2285
2225
  </svg>
2286
2226
  </button>` : "";
2287
2227
  return `<div class="relative p-4 bg-gray-50 rounded-lg">
2288
- <dt class="text-sm font-medium text-text-secondary">${escapeHtml(item.term)}</dt>
2289
- <dd class="mt-1 text-sm text-text-primary font-medium">${escapeHtml(item.description)}</dd>
2228
+ <dt class="text-sm font-medium text-text-secondary">${escapeHtml2(item.term)}</dt>
2229
+ <dd class="mt-1 text-sm text-text-primary font-medium">${escapeHtml2(item.description)}</dd>
2290
2230
  ${copyBtn}
2291
2231
  </div>`;
2292
2232
  }).join("\n");
2293
2233
  return `<dl class="grid grid-cols-2 gap-4 ${className}">${itemsHtml2}</dl>${hasCopyable ? copyScript : ""}`;
2294
2234
  }
2295
2235
  const itemsHtml = items.map((item) => {
2296
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2236
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml2(
2297
2237
  item.description
2298
2238
  )}', this)" class="ml-2 p-1 rounded hover:bg-gray-100 transition-colors">
2299
2239
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2301,9 +2241,9 @@ function descriptionList(items, options = {}) {
2301
2241
  </svg>
2302
2242
  </button>` : "";
2303
2243
  return `<div class="${dividers ? "py-3 border-b border-divider last:border-0" : "py-2"}">
2304
- <dt class="text-sm text-text-secondary">${escapeHtml(item.term)}</dt>
2244
+ <dt class="text-sm text-text-secondary">${escapeHtml2(item.term)}</dt>
2305
2245
  <dd class="mt-1 text-sm text-text-primary font-medium flex items-center">
2306
- ${escapeHtml(item.description)}
2246
+ ${escapeHtml2(item.description)}
2307
2247
  ${copyBtn}
2308
2248
  </dd>
2309
2249
  </div>`;
@@ -2320,10 +2260,10 @@ function actionList(items, className = "") {
2320
2260
  const contentHtml = `
2321
2261
  ${iconHtml}
2322
2262
  <div class="flex-1 min-w-0">
2323
- <div class="font-medium ${item.destructive ? "text-danger" : "text-text-primary"}">${escapeHtml(
2263
+ <div class="font-medium ${item.destructive ? "text-danger" : "text-text-primary"}">${escapeHtml2(
2324
2264
  item.label
2325
2265
  )}</div>
2326
- ${item.description ? `<p class="text-sm text-text-secondary">${escapeHtml(item.description)}</p>` : ""}
2266
+ ${item.description ? `<p class="text-sm text-text-secondary">${escapeHtml2(item.description)}</p>` : ""}
2327
2267
  </div>
2328
2268
  <svg class="w-5 h-5 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2329
2269
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
@@ -2333,7 +2273,7 @@ function actionList(items, className = "") {
2333
2273
  return `<div class="${baseClasses}">${contentHtml}</div>`;
2334
2274
  }
2335
2275
  if (item.href) {
2336
- return `<a href="${escapeHtml(item.href)}" class="${baseClasses}">${contentHtml}</a>`;
2276
+ return `<a href="${escapeHtml2(item.href)}" class="${baseClasses}">${contentHtml}</a>`;
2337
2277
  }
2338
2278
  return `<div class="${baseClasses}">${contentHtml}</div>`;
2339
2279
  }).join("\n");