@frontmcp/ui 0.6.0 → 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 (445) hide show
  1. package/README.md +140 -362
  2. package/bridge/runtime/index.d.ts +2 -1
  3. package/bridge/runtime/index.d.ts.map +1 -1
  4. package/bundler/file-cache/component-builder.d.ts +1 -1
  5. package/bundler/file-cache/component-builder.d.ts.map +1 -1
  6. package/bundler/file-cache/hash-calculator.d.ts +1 -1
  7. package/bundler/file-cache/hash-calculator.d.ts.map +1 -1
  8. package/bundler/file-cache/storage/filesystem.d.ts +1 -1
  9. package/bundler/file-cache/storage/filesystem.d.ts.map +1 -1
  10. package/bundler/file-cache/storage/interface.d.ts +1 -1
  11. package/bundler/file-cache/storage/interface.d.ts.map +1 -1
  12. package/bundler/file-cache/storage/redis.d.ts +1 -1
  13. package/bundler/file-cache/storage/redis.d.ts.map +1 -1
  14. package/bundler/index.js +10 -1057
  15. package/components/alert.schema.d.ts +6 -6
  16. package/components/avatar.schema.d.ts +9 -9
  17. package/components/badge.schema.d.ts +9 -9
  18. package/components/button.schema.d.ts +9 -9
  19. package/components/card.schema.d.ts +7 -7
  20. package/components/form.schema.d.ts +24 -24
  21. package/components/index.js +128 -198
  22. package/components/modal.schema.d.ts +8 -8
  23. package/components/table.schema.d.ts +6 -6
  24. package/esm/bridge/runtime/index.d.ts +2 -1
  25. package/esm/bridge/runtime/index.d.ts.map +1 -1
  26. package/esm/bundler/file-cache/component-builder.d.ts +1 -1
  27. package/esm/bundler/file-cache/component-builder.d.ts.map +1 -1
  28. package/esm/bundler/file-cache/hash-calculator.d.ts +1 -1
  29. package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -1
  30. package/esm/bundler/file-cache/storage/filesystem.d.ts +1 -1
  31. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -1
  32. package/esm/bundler/file-cache/storage/interface.d.ts +1 -1
  33. package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -1
  34. package/esm/bundler/file-cache/storage/redis.d.ts +1 -1
  35. package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -1
  36. package/esm/bundler/index.js +3 -1050
  37. package/esm/components/alert.schema.d.ts +6 -6
  38. package/esm/components/avatar.schema.d.ts +9 -9
  39. package/esm/components/badge.schema.d.ts +9 -9
  40. package/esm/components/button.schema.d.ts +9 -9
  41. package/esm/components/card.schema.d.ts +7 -7
  42. package/esm/components/form.schema.d.ts +24 -24
  43. package/esm/components/index.js +136 -196
  44. package/esm/components/modal.schema.d.ts +8 -8
  45. package/esm/components/table.schema.d.ts +6 -6
  46. package/esm/index.d.ts +23 -39
  47. package/esm/index.d.ts.map +1 -1
  48. package/esm/index.js +4256 -16441
  49. package/esm/layouts/base.d.ts +2 -2
  50. package/esm/layouts/base.d.ts.map +1 -1
  51. package/esm/layouts/index.js +33 -516
  52. package/esm/package.json +8 -26
  53. package/esm/pages/index.js +100 -627
  54. package/esm/react/Alert.d.ts +1 -2
  55. package/esm/react/Alert.d.ts.map +1 -1
  56. package/esm/react/Badge.d.ts +1 -2
  57. package/esm/react/Badge.d.ts.map +1 -1
  58. package/esm/react/Button.d.ts +1 -2
  59. package/esm/react/Button.d.ts.map +1 -1
  60. package/esm/react/Card.d.ts +1 -2
  61. package/esm/react/Card.d.ts.map +1 -1
  62. package/esm/react/hooks/context.d.ts +1 -1
  63. package/esm/react/hooks/context.d.ts.map +1 -1
  64. package/esm/react/index.d.ts +5 -6
  65. package/esm/react/index.d.ts.map +1 -1
  66. package/esm/react/index.js +2074 -322
  67. package/esm/react/types.d.ts +1 -2
  68. package/esm/react/types.d.ts.map +1 -1
  69. package/esm/renderers/index.d.ts +10 -25
  70. package/esm/renderers/index.d.ts.map +1 -1
  71. package/esm/renderers/index.js +171 -1617
  72. package/esm/{runtime/adapters → renderers}/react.adapter.d.ts +2 -2
  73. package/esm/renderers/react.adapter.d.ts.map +1 -0
  74. package/esm/renderers/react.renderer.d.ts +3 -3
  75. package/esm/renderers/react.renderer.d.ts.map +1 -1
  76. package/esm/universal/index.js +1755 -0
  77. package/esm/web-components/index.js +232 -287
  78. package/esm/widgets/index.js +89 -147
  79. package/index.d.ts +23 -39
  80. package/index.d.ts.map +1 -1
  81. package/index.js +6123 -18539
  82. package/layouts/base.d.ts +2 -2
  83. package/layouts/base.d.ts.map +1 -1
  84. package/layouts/index.js +43 -536
  85. package/package.json +8 -26
  86. package/pages/index.js +111 -648
  87. package/react/Alert.d.ts +1 -2
  88. package/react/Alert.d.ts.map +1 -1
  89. package/react/Badge.d.ts +1 -2
  90. package/react/Badge.d.ts.map +1 -1
  91. package/react/Button.d.ts +1 -2
  92. package/react/Button.d.ts.map +1 -1
  93. package/react/Card.d.ts +1 -2
  94. package/react/Card.d.ts.map +1 -1
  95. package/react/hooks/context.d.ts +1 -1
  96. package/react/hooks/context.d.ts.map +1 -1
  97. package/react/index.d.ts +5 -6
  98. package/react/index.d.ts.map +1 -1
  99. package/react/index.js +2065 -335
  100. package/react/types.d.ts +1 -2
  101. package/react/types.d.ts.map +1 -1
  102. package/renderers/index.d.ts +10 -25
  103. package/renderers/index.d.ts.map +1 -1
  104. package/renderers/index.js +175 -1641
  105. package/{runtime/adapters → renderers}/react.adapter.d.ts +2 -2
  106. package/renderers/react.adapter.d.ts.map +1 -0
  107. package/renderers/react.renderer.d.ts +3 -3
  108. package/renderers/react.renderer.d.ts.map +1 -1
  109. package/universal/index.js +1841 -0
  110. package/web-components/index.js +224 -289
  111. package/widgets/index.js +80 -148
  112. package/adapters/index.d.ts +0 -13
  113. package/adapters/index.d.ts.map +0 -1
  114. package/adapters/index.js +0 -462
  115. package/adapters/platform-meta.d.ts +0 -166
  116. package/adapters/platform-meta.d.ts.map +0 -1
  117. package/adapters/response-builder.d.ts +0 -108
  118. package/adapters/response-builder.d.ts.map +0 -1
  119. package/adapters/serving-mode.d.ts +0 -107
  120. package/adapters/serving-mode.d.ts.map +0 -1
  121. package/base-template/bridge.d.ts +0 -90
  122. package/base-template/bridge.d.ts.map +0 -1
  123. package/base-template/default-base-template.d.ts +0 -92
  124. package/base-template/default-base-template.d.ts.map +0 -1
  125. package/base-template/index.d.ts +0 -15
  126. package/base-template/index.d.ts.map +0 -1
  127. package/base-template/index.js +0 -1398
  128. package/base-template/polyfills.d.ts +0 -31
  129. package/base-template/polyfills.d.ts.map +0 -1
  130. package/base-template/theme-styles.d.ts +0 -74
  131. package/base-template/theme-styles.d.ts.map +0 -1
  132. package/build/cdn-resources.d.ts +0 -243
  133. package/build/cdn-resources.d.ts.map +0 -1
  134. package/build/index.d.ts +0 -295
  135. package/build/index.d.ts.map +0 -1
  136. package/build/index.js +0 -7096
  137. package/build/widget-manifest.d.ts +0 -362
  138. package/build/widget-manifest.d.ts.map +0 -1
  139. package/dependency/cdn-registry.d.ts +0 -98
  140. package/dependency/cdn-registry.d.ts.map +0 -1
  141. package/dependency/import-map.d.ts +0 -186
  142. package/dependency/import-map.d.ts.map +0 -1
  143. package/dependency/import-parser.d.ts +0 -82
  144. package/dependency/import-parser.d.ts.map +0 -1
  145. package/dependency/index.d.ts +0 -17
  146. package/dependency/index.d.ts.map +0 -1
  147. package/dependency/resolver.d.ts +0 -164
  148. package/dependency/resolver.d.ts.map +0 -1
  149. package/dependency/schemas.d.ts +0 -486
  150. package/dependency/schemas.d.ts.map +0 -1
  151. package/dependency/template-loader.d.ts +0 -204
  152. package/dependency/template-loader.d.ts.map +0 -1
  153. package/dependency/template-processor.d.ts +0 -118
  154. package/dependency/template-processor.d.ts.map +0 -1
  155. package/dependency/types.d.ts +0 -739
  156. package/dependency/types.d.ts.map +0 -1
  157. package/esm/adapters/index.d.ts +0 -13
  158. package/esm/adapters/index.d.ts.map +0 -1
  159. package/esm/adapters/index.js +0 -427
  160. package/esm/adapters/platform-meta.d.ts +0 -166
  161. package/esm/adapters/platform-meta.d.ts.map +0 -1
  162. package/esm/adapters/response-builder.d.ts +0 -108
  163. package/esm/adapters/response-builder.d.ts.map +0 -1
  164. package/esm/adapters/serving-mode.d.ts +0 -107
  165. package/esm/adapters/serving-mode.d.ts.map +0 -1
  166. package/esm/base-template/bridge.d.ts +0 -90
  167. package/esm/base-template/bridge.d.ts.map +0 -1
  168. package/esm/base-template/default-base-template.d.ts +0 -92
  169. package/esm/base-template/default-base-template.d.ts.map +0 -1
  170. package/esm/base-template/index.d.ts +0 -15
  171. package/esm/base-template/index.d.ts.map +0 -1
  172. package/esm/base-template/index.js +0 -1364
  173. package/esm/base-template/polyfills.d.ts +0 -31
  174. package/esm/base-template/polyfills.d.ts.map +0 -1
  175. package/esm/base-template/theme-styles.d.ts +0 -74
  176. package/esm/base-template/theme-styles.d.ts.map +0 -1
  177. package/esm/build/cdn-resources.d.ts +0 -243
  178. package/esm/build/cdn-resources.d.ts.map +0 -1
  179. package/esm/build/index.d.ts +0 -295
  180. package/esm/build/index.d.ts.map +0 -1
  181. package/esm/build/index.js +0 -7021
  182. package/esm/build/widget-manifest.d.ts +0 -362
  183. package/esm/build/widget-manifest.d.ts.map +0 -1
  184. package/esm/dependency/cdn-registry.d.ts +0 -98
  185. package/esm/dependency/cdn-registry.d.ts.map +0 -1
  186. package/esm/dependency/import-map.d.ts +0 -186
  187. package/esm/dependency/import-map.d.ts.map +0 -1
  188. package/esm/dependency/import-parser.d.ts +0 -82
  189. package/esm/dependency/import-parser.d.ts.map +0 -1
  190. package/esm/dependency/index.d.ts +0 -17
  191. package/esm/dependency/index.d.ts.map +0 -1
  192. package/esm/dependency/resolver.d.ts +0 -164
  193. package/esm/dependency/resolver.d.ts.map +0 -1
  194. package/esm/dependency/schemas.d.ts +0 -486
  195. package/esm/dependency/schemas.d.ts.map +0 -1
  196. package/esm/dependency/template-loader.d.ts +0 -204
  197. package/esm/dependency/template-loader.d.ts.map +0 -1
  198. package/esm/dependency/template-processor.d.ts +0 -118
  199. package/esm/dependency/template-processor.d.ts.map +0 -1
  200. package/esm/dependency/types.d.ts +0 -739
  201. package/esm/dependency/types.d.ts.map +0 -1
  202. package/esm/handlebars/expression-extractor.d.ts +0 -147
  203. package/esm/handlebars/expression-extractor.d.ts.map +0 -1
  204. package/esm/handlebars/helpers.d.ts +0 -339
  205. package/esm/handlebars/helpers.d.ts.map +0 -1
  206. package/esm/handlebars/index.d.ts +0 -195
  207. package/esm/handlebars/index.d.ts.map +0 -1
  208. package/esm/handlebars/index.js +0 -587
  209. package/esm/registry/index.d.ts +0 -46
  210. package/esm/registry/index.d.ts.map +0 -1
  211. package/esm/registry/index.js +0 -6422
  212. package/esm/registry/render-template.d.ts +0 -91
  213. package/esm/registry/render-template.d.ts.map +0 -1
  214. package/esm/registry/tool-ui.registry.d.ts +0 -294
  215. package/esm/registry/tool-ui.registry.d.ts.map +0 -1
  216. package/esm/registry/uri-utils.d.ts +0 -56
  217. package/esm/registry/uri-utils.d.ts.map +0 -1
  218. package/esm/renderers/cache.d.ts +0 -145
  219. package/esm/renderers/cache.d.ts.map +0 -1
  220. package/esm/renderers/html.renderer.d.ts +0 -123
  221. package/esm/renderers/html.renderer.d.ts.map +0 -1
  222. package/esm/renderers/mdx.renderer.d.ts +0 -120
  223. package/esm/renderers/mdx.renderer.d.ts.map +0 -1
  224. package/esm/renderers/registry.d.ts +0 -134
  225. package/esm/renderers/registry.d.ts.map +0 -1
  226. package/esm/renderers/types.d.ts +0 -342
  227. package/esm/renderers/types.d.ts.map +0 -1
  228. package/esm/renderers/utils/detect.d.ts +0 -107
  229. package/esm/renderers/utils/detect.d.ts.map +0 -1
  230. package/esm/renderers/utils/hash.d.ts +0 -40
  231. package/esm/renderers/utils/hash.d.ts.map +0 -1
  232. package/esm/renderers/utils/index.d.ts +0 -9
  233. package/esm/renderers/utils/index.d.ts.map +0 -1
  234. package/esm/renderers/utils/transpiler.d.ts +0 -89
  235. package/esm/renderers/utils/transpiler.d.ts.map +0 -1
  236. package/esm/runtime/adapters/html.adapter.d.ts +0 -59
  237. package/esm/runtime/adapters/html.adapter.d.ts.map +0 -1
  238. package/esm/runtime/adapters/index.d.ts +0 -26
  239. package/esm/runtime/adapters/index.d.ts.map +0 -1
  240. package/esm/runtime/adapters/mdx.adapter.d.ts +0 -73
  241. package/esm/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  242. package/esm/runtime/adapters/react.adapter.d.ts.map +0 -1
  243. package/esm/runtime/adapters/types.d.ts +0 -95
  244. package/esm/runtime/adapters/types.d.ts.map +0 -1
  245. package/esm/runtime/csp.d.ts +0 -48
  246. package/esm/runtime/csp.d.ts.map +0 -1
  247. package/esm/runtime/index.d.ts +0 -17
  248. package/esm/runtime/index.d.ts.map +0 -1
  249. package/esm/runtime/index.js +0 -5186
  250. package/esm/runtime/mcp-bridge.d.ts +0 -101
  251. package/esm/runtime/mcp-bridge.d.ts.map +0 -1
  252. package/esm/runtime/renderer-runtime.d.ts +0 -133
  253. package/esm/runtime/renderer-runtime.d.ts.map +0 -1
  254. package/esm/runtime/sanitizer.d.ts +0 -172
  255. package/esm/runtime/sanitizer.d.ts.map +0 -1
  256. package/esm/runtime/types.d.ts +0 -415
  257. package/esm/runtime/types.d.ts.map +0 -1
  258. package/esm/runtime/wrapper.d.ts +0 -421
  259. package/esm/runtime/wrapper.d.ts.map +0 -1
  260. package/esm/styles/index.d.ts +0 -8
  261. package/esm/styles/index.d.ts.map +0 -1
  262. package/esm/styles/index.js +0 -171
  263. package/esm/styles/variants.d.ts +0 -51
  264. package/esm/styles/variants.d.ts.map +0 -1
  265. package/esm/theme/cdn.d.ts +0 -195
  266. package/esm/theme/cdn.d.ts.map +0 -1
  267. package/esm/theme/index.d.ts +0 -18
  268. package/esm/theme/index.d.ts.map +0 -1
  269. package/esm/theme/index.js +0 -700
  270. package/esm/theme/platforms.d.ts +0 -107
  271. package/esm/theme/platforms.d.ts.map +0 -1
  272. package/esm/theme/presets/github-openai.d.ts +0 -50
  273. package/esm/theme/presets/github-openai.d.ts.map +0 -1
  274. package/esm/theme/presets/index.d.ts +0 -11
  275. package/esm/theme/presets/index.d.ts.map +0 -1
  276. package/esm/theme/theme.d.ts +0 -396
  277. package/esm/theme/theme.d.ts.map +0 -1
  278. package/esm/tool-template/builder.d.ts +0 -213
  279. package/esm/tool-template/builder.d.ts.map +0 -1
  280. package/esm/tool-template/index.d.ts +0 -16
  281. package/esm/tool-template/index.d.ts.map +0 -1
  282. package/esm/tool-template/index.js +0 -3515
  283. package/esm/types/index.d.ts +0 -14
  284. package/esm/types/index.d.ts.map +0 -1
  285. package/esm/types/index.js +0 -75
  286. package/esm/types/ui-config.d.ts +0 -639
  287. package/esm/types/ui-config.d.ts.map +0 -1
  288. package/esm/types/ui-runtime.d.ts +0 -1007
  289. package/esm/types/ui-runtime.d.ts.map +0 -1
  290. package/esm/typings/cache/cache-adapter.d.ts +0 -125
  291. package/esm/typings/cache/cache-adapter.d.ts.map +0 -1
  292. package/esm/typings/cache/index.d.ts +0 -10
  293. package/esm/typings/cache/index.d.ts.map +0 -1
  294. package/esm/typings/cache/memory-cache.d.ts +0 -92
  295. package/esm/typings/cache/memory-cache.d.ts.map +0 -1
  296. package/esm/typings/dts-parser.d.ts +0 -90
  297. package/esm/typings/dts-parser.d.ts.map +0 -1
  298. package/esm/typings/index.d.ts +0 -48
  299. package/esm/typings/index.d.ts.map +0 -1
  300. package/esm/typings/schemas.d.ts +0 -232
  301. package/esm/typings/schemas.d.ts.map +0 -1
  302. package/esm/typings/type-fetcher.d.ts +0 -89
  303. package/esm/typings/type-fetcher.d.ts.map +0 -1
  304. package/esm/typings/types.d.ts +0 -320
  305. package/esm/typings/types.d.ts.map +0 -1
  306. package/esm/utils/escape-html.d.ts +0 -58
  307. package/esm/utils/escape-html.d.ts.map +0 -1
  308. package/esm/utils/index.d.ts +0 -10
  309. package/esm/utils/index.d.ts.map +0 -1
  310. package/esm/utils/index.js +0 -40
  311. package/esm/utils/safe-stringify.d.ts +0 -30
  312. package/esm/utils/safe-stringify.d.ts.map +0 -1
  313. package/esm/validation/error-box.d.ts +0 -56
  314. package/esm/validation/error-box.d.ts.map +0 -1
  315. package/esm/validation/index.d.ts +0 -13
  316. package/esm/validation/index.d.ts.map +0 -1
  317. package/esm/validation/index.js +0 -562
  318. package/esm/validation/schema-paths.d.ts +0 -118
  319. package/esm/validation/schema-paths.d.ts.map +0 -1
  320. package/esm/validation/template-validator.d.ts +0 -143
  321. package/esm/validation/template-validator.d.ts.map +0 -1
  322. package/esm/validation/wrapper.d.ts +0 -97
  323. package/esm/validation/wrapper.d.ts.map +0 -1
  324. package/handlebars/expression-extractor.d.ts +0 -147
  325. package/handlebars/expression-extractor.d.ts.map +0 -1
  326. package/handlebars/helpers.d.ts +0 -339
  327. package/handlebars/helpers.d.ts.map +0 -1
  328. package/handlebars/index.d.ts +0 -195
  329. package/handlebars/index.d.ts.map +0 -1
  330. package/handlebars/index.js +0 -666
  331. package/registry/index.d.ts +0 -46
  332. package/registry/index.d.ts.map +0 -1
  333. package/registry/index.js +0 -6465
  334. package/registry/render-template.d.ts +0 -91
  335. package/registry/render-template.d.ts.map +0 -1
  336. package/registry/tool-ui.registry.d.ts +0 -294
  337. package/registry/tool-ui.registry.d.ts.map +0 -1
  338. package/registry/uri-utils.d.ts +0 -56
  339. package/registry/uri-utils.d.ts.map +0 -1
  340. package/renderers/cache.d.ts +0 -145
  341. package/renderers/cache.d.ts.map +0 -1
  342. package/renderers/html.renderer.d.ts +0 -123
  343. package/renderers/html.renderer.d.ts.map +0 -1
  344. package/renderers/mdx.renderer.d.ts +0 -120
  345. package/renderers/mdx.renderer.d.ts.map +0 -1
  346. package/renderers/registry.d.ts +0 -134
  347. package/renderers/registry.d.ts.map +0 -1
  348. package/renderers/types.d.ts +0 -342
  349. package/renderers/types.d.ts.map +0 -1
  350. package/renderers/utils/detect.d.ts +0 -107
  351. package/renderers/utils/detect.d.ts.map +0 -1
  352. package/renderers/utils/hash.d.ts +0 -40
  353. package/renderers/utils/hash.d.ts.map +0 -1
  354. package/renderers/utils/index.d.ts +0 -9
  355. package/renderers/utils/index.d.ts.map +0 -1
  356. package/renderers/utils/transpiler.d.ts +0 -89
  357. package/renderers/utils/transpiler.d.ts.map +0 -1
  358. package/runtime/adapters/html.adapter.d.ts +0 -59
  359. package/runtime/adapters/html.adapter.d.ts.map +0 -1
  360. package/runtime/adapters/index.d.ts +0 -26
  361. package/runtime/adapters/index.d.ts.map +0 -1
  362. package/runtime/adapters/mdx.adapter.d.ts +0 -73
  363. package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  364. package/runtime/adapters/react.adapter.d.ts.map +0 -1
  365. package/runtime/adapters/types.d.ts +0 -95
  366. package/runtime/adapters/types.d.ts.map +0 -1
  367. package/runtime/csp.d.ts +0 -48
  368. package/runtime/csp.d.ts.map +0 -1
  369. package/runtime/index.d.ts +0 -17
  370. package/runtime/index.d.ts.map +0 -1
  371. package/runtime/index.js +0 -5264
  372. package/runtime/mcp-bridge.d.ts +0 -101
  373. package/runtime/mcp-bridge.d.ts.map +0 -1
  374. package/runtime/renderer-runtime.d.ts +0 -133
  375. package/runtime/renderer-runtime.d.ts.map +0 -1
  376. package/runtime/sanitizer.d.ts +0 -172
  377. package/runtime/sanitizer.d.ts.map +0 -1
  378. package/runtime/types.d.ts +0 -415
  379. package/runtime/types.d.ts.map +0 -1
  380. package/runtime/wrapper.d.ts +0 -421
  381. package/runtime/wrapper.d.ts.map +0 -1
  382. package/styles/index.d.ts +0 -8
  383. package/styles/index.d.ts.map +0 -1
  384. package/styles/index.js +0 -222
  385. package/styles/variants.d.ts +0 -51
  386. package/styles/variants.d.ts.map +0 -1
  387. package/theme/cdn.d.ts +0 -195
  388. package/theme/cdn.d.ts.map +0 -1
  389. package/theme/index.d.ts +0 -18
  390. package/theme/index.d.ts.map +0 -1
  391. package/theme/index.js +0 -757
  392. package/theme/platforms.d.ts +0 -107
  393. package/theme/platforms.d.ts.map +0 -1
  394. package/theme/presets/github-openai.d.ts +0 -50
  395. package/theme/presets/github-openai.d.ts.map +0 -1
  396. package/theme/presets/index.d.ts +0 -11
  397. package/theme/presets/index.d.ts.map +0 -1
  398. package/theme/theme.d.ts +0 -396
  399. package/theme/theme.d.ts.map +0 -1
  400. package/tool-template/builder.d.ts +0 -213
  401. package/tool-template/builder.d.ts.map +0 -1
  402. package/tool-template/index.d.ts +0 -16
  403. package/tool-template/index.d.ts.map +0 -1
  404. package/tool-template/index.js +0 -3559
  405. package/types/index.d.ts +0 -14
  406. package/types/index.d.ts.map +0 -1
  407. package/types/index.js +0 -108
  408. package/types/ui-config.d.ts +0 -639
  409. package/types/ui-config.d.ts.map +0 -1
  410. package/types/ui-runtime.d.ts +0 -1007
  411. package/types/ui-runtime.d.ts.map +0 -1
  412. package/typings/cache/cache-adapter.d.ts +0 -125
  413. package/typings/cache/cache-adapter.d.ts.map +0 -1
  414. package/typings/cache/index.d.ts +0 -10
  415. package/typings/cache/index.d.ts.map +0 -1
  416. package/typings/cache/memory-cache.d.ts +0 -92
  417. package/typings/cache/memory-cache.d.ts.map +0 -1
  418. package/typings/dts-parser.d.ts +0 -90
  419. package/typings/dts-parser.d.ts.map +0 -1
  420. package/typings/index.d.ts +0 -48
  421. package/typings/index.d.ts.map +0 -1
  422. package/typings/schemas.d.ts +0 -232
  423. package/typings/schemas.d.ts.map +0 -1
  424. package/typings/type-fetcher.d.ts +0 -89
  425. package/typings/type-fetcher.d.ts.map +0 -1
  426. package/typings/types.d.ts +0 -320
  427. package/typings/types.d.ts.map +0 -1
  428. package/utils/escape-html.d.ts +0 -58
  429. package/utils/escape-html.d.ts.map +0 -1
  430. package/utils/index.d.ts +0 -10
  431. package/utils/index.d.ts.map +0 -1
  432. package/utils/index.js +0 -70
  433. package/utils/safe-stringify.d.ts +0 -30
  434. package/utils/safe-stringify.d.ts.map +0 -1
  435. package/validation/error-box.d.ts +0 -56
  436. package/validation/error-box.d.ts.map +0 -1
  437. package/validation/index.d.ts +0 -13
  438. package/validation/index.d.ts.map +0 -1
  439. package/validation/index.js +0 -603
  440. package/validation/schema-paths.d.ts +0 -118
  441. package/validation/schema-paths.d.ts.map +0 -1
  442. package/validation/template-validator.d.ts +0 -143
  443. package/validation/template-validator.d.ts.map +0 -1
  444. package/validation/wrapper.d.ts +0 -97
  445. package/validation/wrapper.d.ts.map +0 -1
@@ -815,83 +815,13 @@ var ActionListOptionsSchema = import_zod9.z.object({
815
815
  className: import_zod9.z.string().optional()
816
816
  }).strict();
817
817
 
818
- // libs/ui/src/theme/platforms.ts
819
- var CLAUDE_PLATFORM = {
820
- id: "claude",
821
- name: "Claude (Artifacts)",
822
- supportsWidgets: true,
823
- supportsTailwind: true,
824
- supportsHtmx: false,
825
- // Network blocked, HTMX won't work for API calls
826
- networkMode: "blocked",
827
- scriptStrategy: "inline",
828
- maxInlineSize: 100 * 1024,
829
- // 100KB limit for artifacts
830
- cspRestrictions: ["script-src 'unsafe-inline'", "connect-src 'none'"],
831
- options: {
832
- mode: "artifacts",
833
- framework: "react"
834
- // Claude artifacts prefer React
835
- }
836
- };
837
-
838
- // libs/ui/src/utils/escape-html.ts
839
- function escapeHtml(str) {
840
- if (str === null || str === void 0) {
841
- return "";
842
- }
843
- const s = String(str);
844
- 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");
845
- }
846
-
847
- // libs/ui/src/validation/error-box.ts
848
- var errorIcon = `<svg class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
849
- <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"/>
850
- </svg>`;
851
- function validationErrorBox(options) {
852
- const { componentName, invalidParam } = options;
853
- return `<div
854
- class="validation-error flex items-start gap-3 p-4 bg-red-50 border border-red-200 text-red-800 rounded-lg"
855
- role="alert"
856
- data-testid="validation-error"
857
- data-component="${escapeHtml(componentName)}"
858
- data-param="${escapeHtml(invalidParam)}"
859
- >
860
- ${errorIcon}
861
- <div class="min-w-0">
862
- <p class="font-semibold text-sm">${escapeHtml(componentName)}: Invalid Configuration</p>
863
- <p class="text-sm opacity-90 mt-0.5">The "${escapeHtml(invalidParam)}" parameter is invalid.</p>
864
- </div>
865
- </div>`;
866
- }
867
-
868
- // libs/ui/src/validation/wrapper.ts
869
- function getFirstInvalidPath(error) {
870
- const firstError = error.issues[0];
871
- if (!firstError || firstError.path.length === 0) {
872
- return "options";
873
- }
874
- return firstError.path.map(String).join(".");
875
- }
876
- function validateOptions(options, config) {
877
- const result = config.schema.safeParse(options);
878
- if (result.success) {
879
- return { success: true, data: result.data };
880
- }
881
- const invalidParam = getFirstInvalidPath(result.error);
882
- return {
883
- success: false,
884
- error: validationErrorBox({
885
- componentName: config.componentName,
886
- invalidParam
887
- })
888
- };
889
- }
890
-
891
- // libs/ui/src/validation/schema-paths.ts
892
- var import_zod10 = require("zod");
818
+ // libs/ui/src/layouts/base.ts
819
+ var import_theme = require("@frontmcp/uipack/theme");
820
+ var import_utils = require("@frontmcp/uipack/utils");
821
+ var import_utils2 = require("@frontmcp/uipack/utils");
893
822
 
894
823
  // libs/ui/src/components/button.ts
824
+ var import_validation = require("@frontmcp/uipack/validation");
895
825
  function getVariantClasses(variant) {
896
826
  const variants = {
897
827
  primary: "bg-primary hover:bg-primary/90 text-white shadow-sm",
@@ -941,7 +871,7 @@ function isValidHrefProtocol(href) {
941
871
  return trimmed.startsWith("http://") || trimmed.startsWith("https://") || trimmed.startsWith("/") || trimmed.startsWith("#") || trimmed.startsWith("mailto:") || trimmed.startsWith("tel:");
942
872
  }
943
873
  function button(text, options = {}) {
944
- const validation = validateOptions(options, {
874
+ const validation = (0, import_validation.validateOptions)(options, {
945
875
  schema: ButtonOptionsSchema,
946
876
  componentName: "button"
947
877
  });
@@ -981,7 +911,7 @@ function button(text, options = {}) {
981
911
  }
982
912
  const variantClasses = getVariantClasses(variant);
983
913
  const sizeClasses = getSizeClasses(size, iconOnly);
984
- const safeClassName = className ? escapeHtml(className) : "";
914
+ const safeClassName = className ? (0, import_utils2.escapeHtml)(className) : "";
985
915
  const baseClasses = [
986
916
  "inline-flex items-center justify-center",
987
917
  "font-medium",
@@ -996,24 +926,24 @@ function button(text, options = {}) {
996
926
  ].filter(Boolean).join(" ");
997
927
  const dataAttrs = data ? Object.entries(data).map(([key, val]) => {
998
928
  const safeKey = sanitizeDataKey(key);
999
- return safeKey ? `data-${safeKey}="${escapeHtml(val)}"` : "";
929
+ return safeKey ? `data-${safeKey}="${(0, import_utils2.escapeHtml)(val)}"` : "";
1000
930
  }).filter(Boolean).join(" ") : "";
1001
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
1002
- const nameAttr = name ? `name="${escapeHtml(name)}"` : "";
1003
- const valueAttr = value ? `value="${escapeHtml(value)}"` : "";
931
+ const idAttr = id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "";
932
+ const nameAttr = name ? `name="${(0, import_utils2.escapeHtml)(name)}"` : "";
933
+ const valueAttr = value ? `value="${(0, import_utils2.escapeHtml)(value)}"` : "";
1004
934
  const disabledAttr = disabled || loading ? "disabled" : "";
1005
- const targetAttr = target ? `target="${escapeHtml(target)}"` : "";
935
+ const targetAttr = target ? `target="${(0, import_utils2.escapeHtml)(target)}"` : "";
1006
936
  const relAttr = target === "_blank" ? 'rel="noopener noreferrer"' : "";
1007
937
  const trimmedText = text.trim();
1008
938
  const effectiveAriaLabel = ariaLabel ?? (iconOnly && trimmedText ? trimmedText : void 0);
1009
- const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${escapeHtml(effectiveAriaLabel)}"` : "";
939
+ const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${(0, import_utils2.escapeHtml)(effectiveAriaLabel)}"` : "";
1010
940
  const iconBeforeHtml = iconBefore && !loading ? `<span class="${iconOnly ? "" : "mr-2"}">${iconBefore}</span>` : "";
1011
941
  const iconAfterHtml = iconAfter && !loading ? `<span class="${iconOnly ? "" : "ml-2"}">${iconAfter}</span>` : "";
1012
942
  const loadingHtml = loading ? loadingSpinner : "";
1013
- const textHtml = iconOnly ? "" : escapeHtml(text);
943
+ const textHtml = iconOnly ? "" : (0, import_utils2.escapeHtml)(text);
1014
944
  const contentHtml = `${loadingHtml}${iconBeforeHtml}${textHtml}${iconAfterHtml}`;
1015
945
  if (href && !disabled && !loading && isValidHrefProtocol(href)) {
1016
- return `<a href="${escapeHtml(
946
+ return `<a href="${(0, import_utils2.escapeHtml)(
1017
947
  href
1018
948
  )}" class="${baseClasses}" ${idAttr} ${dataAttrs} ${ariaLabelAttr} ${targetAttr} ${relAttr}>
1019
949
  ${contentHtml}
@@ -1028,7 +958,7 @@ function buttonGroup(buttons, options = {}) {
1028
958
  console.warn("[frontmcp/ui] buttonGroup called with empty buttons array");
1029
959
  return "";
1030
960
  }
1031
- const validation = validateOptions(options, {
961
+ const validation = (0, import_validation.validateOptions)(options, {
1032
962
  schema: ButtonGroupOptionsSchema,
1033
963
  componentName: "buttonGroup"
1034
964
  });
@@ -1037,7 +967,7 @@ function buttonGroup(buttons, options = {}) {
1037
967
  }
1038
968
  const validatedOptions = validation.data;
1039
969
  const { attached = false, direction = "horizontal", gap = "md", className = "" } = validatedOptions;
1040
- const safeClassName = className ? escapeHtml(className) : "";
970
+ const safeClassName = className ? (0, import_utils2.escapeHtml)(className) : "";
1041
971
  if (attached) {
1042
972
  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";
1043
973
  return `<div class="${classes} ${safeClassName}">${buttons.join("")}</div>`;
@@ -1074,7 +1004,7 @@ function getSizeClasses2(size) {
1074
1004
  }
1075
1005
  function buildDataAttrs(data) {
1076
1006
  if (!data) return "";
1077
- return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml(value)}"`).join(" ");
1007
+ return Object.entries(data).map(([key, value]) => `data-${key}="${(0, import_utils2.escapeHtml)(value)}"`).join(" ");
1078
1008
  }
1079
1009
  function card(content, options = {}) {
1080
1010
  const {
@@ -1095,18 +1025,18 @@ function card(content, options = {}) {
1095
1025
  const clickableClasses = clickable ? "cursor-pointer hover:shadow-md transition-shadow" : "";
1096
1026
  const allClasses = [variantClasses, sizeClasses, clickableClasses, className].filter(Boolean).join(" ");
1097
1027
  const dataAttrs = buildDataAttrs(data);
1098
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
1028
+ const idAttr = id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "";
1099
1029
  const hasHeader = title || subtitle || headerActions;
1100
1030
  const headerHtml = hasHeader ? `<div class="flex items-start justify-between mb-4">
1101
1031
  <div>
1102
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : ""}
1103
- ${subtitle ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml(subtitle)}</p>` : ""}
1032
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${(0, import_utils2.escapeHtml)(title)}</h3>` : ""}
1033
+ ${subtitle ? `<p class="text-sm text-text-secondary mt-1">${(0, import_utils2.escapeHtml)(subtitle)}</p>` : ""}
1104
1034
  </div>
1105
1035
  ${headerActions ? `<div class="flex items-center gap-2">${headerActions}</div>` : ""}
1106
1036
  </div>` : "";
1107
1037
  const footerHtml = footer ? `<div class="mt-4 pt-4 border-t border-divider">${footer}</div>` : "";
1108
1038
  if (href) {
1109
- return `<a href="${escapeHtml(href)}" class="${allClasses}" ${idAttr} ${dataAttrs}>
1039
+ return `<a href="${(0, import_utils2.escapeHtml)(href)}" class="${allClasses}" ${idAttr} ${dataAttrs}>
1110
1040
  ${headerHtml}
1111
1041
  ${content}
1112
1042
  ${footerHtml}
@@ -1147,7 +1077,7 @@ function getInputStateClasses(state) {
1147
1077
  }
1148
1078
  function buildDataAttrs2(data) {
1149
1079
  if (!data) return "";
1150
- return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml(value)}"`).join(" ");
1080
+ return Object.entries(data).map(([key, value]) => `data-${key}="${(0, import_utils2.escapeHtml)(value)}"`).join(" ");
1151
1081
  }
1152
1082
  function input(options) {
1153
1083
  const {
@@ -1190,26 +1120,26 @@ function input(options) {
1190
1120
  const dataAttrs = buildDataAttrs2(data);
1191
1121
  const inputAttrs = [
1192
1122
  `type="${type}"`,
1193
- `name="${escapeHtml(name)}"`,
1194
- `id="${escapeHtml(id)}"`,
1195
- value ? `value="${escapeHtml(value)}"` : "",
1196
- placeholder ? `placeholder="${escapeHtml(placeholder)}"` : "",
1123
+ `name="${(0, import_utils2.escapeHtml)(name)}"`,
1124
+ `id="${(0, import_utils2.escapeHtml)(id)}"`,
1125
+ value ? `value="${(0, import_utils2.escapeHtml)(value)}"` : "",
1126
+ placeholder ? `placeholder="${(0, import_utils2.escapeHtml)(placeholder)}"` : "",
1197
1127
  required ? "required" : "",
1198
1128
  disabled ? "disabled" : "",
1199
1129
  readonly ? "readonly" : "",
1200
- autocomplete ? `autocomplete="${escapeHtml(autocomplete)}"` : "",
1201
- pattern ? `pattern="${escapeHtml(pattern)}"` : "",
1202
- min !== void 0 ? `min="${escapeHtml(String(min))}"` : "",
1203
- max !== void 0 ? `max="${escapeHtml(String(max))}"` : "",
1204
- step !== void 0 ? `step="${escapeHtml(String(step))}"` : "",
1130
+ autocomplete ? `autocomplete="${(0, import_utils2.escapeHtml)(autocomplete)}"` : "",
1131
+ pattern ? `pattern="${(0, import_utils2.escapeHtml)(pattern)}"` : "",
1132
+ min !== void 0 ? `min="${(0, import_utils2.escapeHtml)(String(min))}"` : "",
1133
+ max !== void 0 ? `max="${(0, import_utils2.escapeHtml)(String(max))}"` : "",
1134
+ step !== void 0 ? `step="${(0, import_utils2.escapeHtml)(String(step))}"` : "",
1205
1135
  `class="${baseClasses}"`,
1206
1136
  dataAttrs
1207
1137
  ].filter(Boolean).join(" ");
1208
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1209
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1138
+ const labelHtml = label ? `<label for="${(0, import_utils2.escapeHtml)(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1139
+ ${(0, import_utils2.escapeHtml)(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1210
1140
  </label>` : "";
1211
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1212
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1141
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(helper)}</p>` : "";
1142
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${(0, import_utils2.escapeHtml)(error)}</p>` : "";
1213
1143
  const iconBeforeHtml = iconBefore ? `<span class="absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary">${iconBefore}</span>` : "";
1214
1144
  const iconAfterHtml = iconAfter ? `<span class="absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary">${iconAfter}</span>` : "";
1215
1145
  const inputHtml = hasIcon ? `<div class="relative">
@@ -1256,18 +1186,18 @@ function select(options) {
1256
1186
  const optionsHtml = selectOptions.map((opt) => {
1257
1187
  const selected = opt.selected || opt.value === value ? "selected" : "";
1258
1188
  const optDisabled = opt.disabled ? "disabled" : "";
1259
- return `<option value="${escapeHtml(opt.value)}" ${selected} ${optDisabled}>${escapeHtml(opt.label)}</option>`;
1189
+ return `<option value="${(0, import_utils2.escapeHtml)(opt.value)}" ${selected} ${optDisabled}>${(0, import_utils2.escapeHtml)(opt.label)}</option>`;
1260
1190
  }).join("\n");
1261
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1262
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1191
+ const labelHtml = label ? `<label for="${(0, import_utils2.escapeHtml)(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1192
+ ${(0, import_utils2.escapeHtml)(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1263
1193
  </label>` : "";
1264
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1265
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1194
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(helper)}</p>` : "";
1195
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${(0, import_utils2.escapeHtml)(error)}</p>` : "";
1266
1196
  return `<div class="form-field">
1267
1197
  ${labelHtml}
1268
1198
  <select
1269
- name="${escapeHtml(name)}"
1270
- id="${escapeHtml(id)}"
1199
+ name="${(0, import_utils2.escapeHtml)(name)}"
1200
+ id="${(0, import_utils2.escapeHtml)(id)}"
1271
1201
  class="${baseClasses}"
1272
1202
  ${required ? "required" : ""}
1273
1203
  ${disabled ? "disabled" : ""}
@@ -1318,24 +1248,24 @@ function textarea(options) {
1318
1248
  className
1319
1249
  ].filter(Boolean).join(" ");
1320
1250
  const dataAttrs = buildDataAttrs2(data);
1321
- const labelHtml = label ? `<label for="${escapeHtml(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1322
- ${escapeHtml(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1251
+ const labelHtml = label ? `<label for="${(0, import_utils2.escapeHtml)(id)}" class="block text-sm font-medium text-text-primary mb-1.5">
1252
+ ${(0, import_utils2.escapeHtml)(label)}${required ? '<span class="text-danger ml-1">*</span>' : ""}
1323
1253
  </label>` : "";
1324
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1325
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1254
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(helper)}</p>` : "";
1255
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${(0, import_utils2.escapeHtml)(error)}</p>` : "";
1326
1256
  return `<div class="form-field">
1327
1257
  ${labelHtml}
1328
1258
  <textarea
1329
- name="${escapeHtml(name)}"
1330
- id="${escapeHtml(id)}"
1259
+ name="${(0, import_utils2.escapeHtml)(name)}"
1260
+ id="${(0, import_utils2.escapeHtml)(id)}"
1331
1261
  rows="${rows}"
1332
1262
  class="${baseClasses}"
1333
- ${placeholder ? `placeholder="${escapeHtml(placeholder)}"` : ""}
1263
+ ${placeholder ? `placeholder="${(0, import_utils2.escapeHtml)(placeholder)}"` : ""}
1334
1264
  ${required ? "required" : ""}
1335
1265
  ${disabled ? "disabled" : ""}
1336
1266
  ${readonly ? "readonly" : ""}
1337
1267
  ${dataAttrs}
1338
- >${escapeHtml(value)}</textarea>
1268
+ >${(0, import_utils2.escapeHtml)(value)}</textarea>
1339
1269
  ${helperHtml}
1340
1270
  ${errorHtml}
1341
1271
  </div>`;
@@ -1357,21 +1287,21 @@ function checkbox(options) {
1357
1287
  "focus:ring-2 focus:ring-primary/20 focus:ring-offset-0",
1358
1288
  disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
1359
1289
  ].join(" ");
1360
- const helperHtml = helper && !error ? `<p class="text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1361
- const errorHtml = error ? `<p class="text-sm text-danger">${escapeHtml(error)}</p>` : "";
1290
+ const helperHtml = helper && !error ? `<p class="text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(helper)}</p>` : "";
1291
+ const errorHtml = error ? `<p class="text-sm text-danger">${(0, import_utils2.escapeHtml)(error)}</p>` : "";
1362
1292
  return `<div class="form-field ${className}">
1363
1293
  <label class="flex items-start gap-3 ${disabled ? "cursor-not-allowed" : "cursor-pointer"}">
1364
1294
  <input
1365
1295
  type="checkbox"
1366
- name="${escapeHtml(name)}"
1367
- id="${escapeHtml(id)}"
1368
- value="${escapeHtml(value)}"
1296
+ name="${(0, import_utils2.escapeHtml)(name)}"
1297
+ id="${(0, import_utils2.escapeHtml)(id)}"
1298
+ value="${(0, import_utils2.escapeHtml)(value)}"
1369
1299
  class="${checkboxClasses}"
1370
1300
  ${checked ? "checked" : ""}
1371
1301
  ${disabled ? "disabled" : ""}
1372
1302
  >
1373
1303
  <div>
1374
- <span class="text-sm font-medium text-text-primary">${escapeHtml(label)}</span>
1304
+ <span class="text-sm font-medium text-text-primary">${(0, import_utils2.escapeHtml)(label)}</span>
1375
1305
  ${helperHtml}
1376
1306
  ${errorHtml}
1377
1307
  </div>
@@ -1390,19 +1320,19 @@ function radioGroup(options) {
1390
1320
  return `<label class="flex items-center gap-2 ${cursorClass}">
1391
1321
  <input
1392
1322
  type="radio"
1393
- name="${escapeHtml(name)}"
1394
- id="${escapeHtml(radioId)}"
1395
- value="${escapeHtml(opt.value)}"
1323
+ name="${(0, import_utils2.escapeHtml)(name)}"
1324
+ id="${(0, import_utils2.escapeHtml)(radioId)}"
1325
+ value="${(0, import_utils2.escapeHtml)(opt.value)}"
1396
1326
  class="${radioClasses}"
1397
1327
  ${checked}
1398
1328
  ${disabled}
1399
1329
  >
1400
- <span class="text-sm text-text-primary">${escapeHtml(opt.label)}</span>
1330
+ <span class="text-sm text-text-primary">${(0, import_utils2.escapeHtml)(opt.label)}</span>
1401
1331
  </label>`;
1402
1332
  }).join("\n");
1403
- const labelHtml = label ? `<label class="block text-sm font-medium text-text-primary mb-2">${escapeHtml(label)}</label>` : "";
1404
- const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${escapeHtml(helper)}</p>` : "";
1405
- const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${escapeHtml(error)}</p>` : "";
1333
+ const labelHtml = label ? `<label class="block text-sm font-medium text-text-primary mb-2">${(0, import_utils2.escapeHtml)(label)}</label>` : "";
1334
+ const helperHtml = helper && !error ? `<p class="mt-1.5 text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(helper)}</p>` : "";
1335
+ const errorHtml = error ? `<p class="mt-1.5 text-sm text-danger">${(0, import_utils2.escapeHtml)(error)}</p>` : "";
1406
1336
  return `<div class="form-field ${className}" role="radiogroup">
1407
1337
  ${labelHtml}
1408
1338
  <div class="${directionClasses}">
@@ -1415,10 +1345,10 @@ function radioGroup(options) {
1415
1345
  function form(content, options = {}) {
1416
1346
  const { action, method = "post", id, className = "", preventDefault = false, autocomplete, enctype } = options;
1417
1347
  const attrs = [
1418
- action ? `action="${escapeHtml(action)}"` : "",
1348
+ action ? `action="${(0, import_utils2.escapeHtml)(action)}"` : "",
1419
1349
  `method="${method}"`,
1420
- id ? `id="${escapeHtml(id)}"` : "",
1421
- className ? `class="${escapeHtml(className)}"` : "",
1350
+ id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "",
1351
+ className ? `class="${(0, import_utils2.escapeHtml)(className)}"` : "",
1422
1352
  autocomplete ? `autocomplete="${autocomplete}"` : "",
1423
1353
  enctype ? `enctype="${enctype}"` : "",
1424
1354
  preventDefault ? 'onsubmit="return false;"' : ""
@@ -1435,8 +1365,8 @@ function formRow(fields, options = {}) {
1435
1365
  function formSection(content, options = {}) {
1436
1366
  const { title, description, className = "" } = options;
1437
1367
  const headerHtml = title ? `<div class="mb-4">
1438
- <h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>
1439
- ${description ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml(description)}</p>` : ""}
1368
+ <h3 class="text-lg font-semibold text-text-primary">${(0, import_utils2.escapeHtml)(title)}</h3>
1369
+ ${description ? `<p class="text-sm text-text-secondary mt-1">${(0, import_utils2.escapeHtml)(description)}</p>` : ""}
1440
1370
  </div>` : "";
1441
1371
  return `<div class="form-section ${className}">
1442
1372
  ${headerHtml}
@@ -1458,7 +1388,7 @@ function formActions(buttons, options = {}) {
1458
1388
  </div>`;
1459
1389
  }
1460
1390
  function hiddenInput(name, value) {
1461
- return `<input type="hidden" name="${escapeHtml(name)}" value="${escapeHtml(value)}">`;
1391
+ return `<input type="hidden" name="${(0, import_utils2.escapeHtml)(name)}" value="${(0, import_utils2.escapeHtml)(value)}">`;
1462
1392
  }
1463
1393
  function csrfInput(token) {
1464
1394
  return hiddenInput("_csrf", token);
@@ -1516,7 +1446,7 @@ function badge(text, options = {}) {
1516
1446
  outline: "border border-current"
1517
1447
  };
1518
1448
  const dotClasses = ["inline-block rounded-full", getSizeClasses3(size, true), dotVariants[variant], className].filter(Boolean).join(" ");
1519
- return `<span class="${dotClasses}" aria-label="${escapeHtml(text)}" title="${escapeHtml(text)}"></span>`;
1449
+ return `<span class="${dotClasses}" aria-label="${(0, import_utils2.escapeHtml)(text)}" title="${(0, import_utils2.escapeHtml)(text)}"></span>`;
1520
1450
  }
1521
1451
  const variantClasses = getVariantClasses3(variant);
1522
1452
  const sizeClasses = getSizeClasses3(size, false);
@@ -1539,7 +1469,7 @@ function badge(text, options = {}) {
1539
1469
  </svg>
1540
1470
  </button>` : "";
1541
1471
  return `<span class="${baseClasses}">
1542
- ${iconHtml}${escapeHtml(text)}${removeHtml}
1472
+ ${iconHtml}${(0, import_utils2.escapeHtml)(text)}${removeHtml}
1543
1473
  </span>`;
1544
1474
  }
1545
1475
  function badgeGroup(badges, options = {}) {
@@ -1610,7 +1540,7 @@ function alert(message, options = {}) {
1610
1540
  const iconHtml = showIcon ? `<div class="flex-shrink-0 ${variantClasses.icon}">
1611
1541
  ${icon || alertIcons[variant]}
1612
1542
  </div>` : "";
1613
- const titleHtml = title ? `<h3 class="font-semibold">${escapeHtml(title)}</h3>` : "";
1543
+ const titleHtml = title ? `<h3 class="font-semibold">${(0, import_utils2.escapeHtml)(title)}</h3>` : "";
1614
1544
  const dismissHtml = dismissible ? `<button
1615
1545
  type="button"
1616
1546
  class="flex-shrink-0 ml-auto -mr-1 -mt-1 p-1 rounded hover:bg-black/5 transition-colors"
@@ -1622,13 +1552,13 @@ function alert(message, options = {}) {
1622
1552
  </svg>
1623
1553
  </button>` : "";
1624
1554
  const actionsHtml = actions ? `<div class="mt-3">${actions}</div>` : "";
1625
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
1555
+ const idAttr = id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "";
1626
1556
  return `<div class="alert ${baseClasses}" role="alert" ${idAttr}>
1627
1557
  <div class="flex gap-3">
1628
1558
  ${iconHtml}
1629
1559
  <div class="flex-1">
1630
1560
  ${titleHtml}
1631
- <div class="${title ? "mt-1" : ""}">${escapeHtml(message)}</div>
1561
+ <div class="${title ? "mt-1" : ""}">${(0, import_utils2.escapeHtml)(message)}</div>
1632
1562
  ${actionsHtml}
1633
1563
  </div>
1634
1564
  ${dismissHtml}
@@ -1650,7 +1580,7 @@ function toast(message, options = {}) {
1650
1580
  "top-center": "top-4 left-1/2 -translate-x-1/2",
1651
1581
  "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
1652
1582
  };
1653
- const titleHtml = title ? `<h4 class="font-semibold">${escapeHtml(title)}</h4>` : "";
1583
+ const titleHtml = title ? `<h4 class="font-semibold">${(0, import_utils2.escapeHtml)(title)}</h4>` : "";
1654
1584
  const autoDismissScript = duration > 0 ? `<script>
1655
1585
  setTimeout(() => {
1656
1586
  const toast = document.getElementById('${id}');
@@ -1661,7 +1591,7 @@ function toast(message, options = {}) {
1661
1591
  }, ${duration});
1662
1592
  </script>` : "";
1663
1593
  return `<div
1664
- id="${escapeHtml(id)}"
1594
+ id="${(0, import_utils2.escapeHtml)(id)}"
1665
1595
  class="fixed ${positionClasses[position]} z-50 min-w-[300px] max-w-md rounded-lg border shadow-lg ${variantClasses.container} transition-all duration-300 transform"
1666
1596
  role="alert"
1667
1597
  >
@@ -1671,7 +1601,7 @@ function toast(message, options = {}) {
1671
1601
  </div>
1672
1602
  <div class="flex-1">
1673
1603
  ${titleHtml}
1674
- <p class="${title ? "mt-1 text-sm opacity-90" : ""}">${escapeHtml(message)}</p>
1604
+ <p class="${title ? "mt-1 text-sm opacity-90" : ""}">${(0, import_utils2.escapeHtml)(message)}</p>
1675
1605
  </div>
1676
1606
  <button
1677
1607
  type="button"
@@ -1696,7 +1626,7 @@ function toastContainer(position = "top-right", id = "toast-container") {
1696
1626
  "top-center": "top-4 left-1/2 -translate-x-1/2",
1697
1627
  "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
1698
1628
  };
1699
- return `<div id="${escapeHtml(id)}" class="fixed ${positionClasses[position]} z-50 flex flex-col gap-2"></div>`;
1629
+ return `<div id="${(0, import_utils2.escapeHtml)(id)}" class="fixed ${positionClasses[position]} z-50 flex flex-col gap-2"></div>`;
1700
1630
  }
1701
1631
 
1702
1632
  // libs/ui/src/components/avatar.ts
@@ -1769,7 +1699,7 @@ function avatar(options) {
1769
1699
  shapeClasses,
1770
1700
  className
1771
1701
  ].filter(Boolean).join(" ");
1772
- 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>`;
1702
+ const contentHtml = src ? `<img src="${(0, import_utils2.escapeHtml)(src)}" alt="${(0, import_utils2.escapeHtml)(alt)}" class="w-full h-full object-cover">` : `<span class="font-medium text-white ${sizeClasses.text}">${(0, import_utils2.escapeHtml)(displayInitials)}</span>`;
1773
1703
  const bgClasses = src ? "bg-gray-200" : displayBgColor;
1774
1704
  const statusHtml = status !== "none" ? `<span class="absolute bottom-0 right-0 block ${sizeClasses.status} ${shapeClasses} ${statusColor} border-white"></span>` : "";
1775
1705
  const innerHtml = `
@@ -1779,7 +1709,7 @@ function avatar(options) {
1779
1709
  </div>
1780
1710
  `;
1781
1711
  if (href) {
1782
- return `<a href="${escapeHtml(href)}" class="inline-block">${innerHtml}</a>`;
1712
+ return `<a href="${(0, import_utils2.escapeHtml)(href)}" class="inline-block">${innerHtml}</a>`;
1783
1713
  }
1784
1714
  return innerHtml;
1785
1715
  }
@@ -1814,8 +1744,8 @@ function avatarWithText(options) {
1814
1744
  const avatarHtml = avatar({ ...avatarOptions, alt: avatarOptions.alt || name });
1815
1745
  const textHtml = `
1816
1746
  <div class="${align === "right" ? "text-right" : ""}">
1817
- <div class="font-medium text-text-primary">${escapeHtml(name)}</div>
1818
- ${subtitle ? `<div class="text-sm text-text-secondary">${escapeHtml(subtitle)}</div>` : ""}
1747
+ <div class="font-medium text-text-primary">${(0, import_utils2.escapeHtml)(name)}</div>
1748
+ ${subtitle ? `<div class="text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(subtitle)}</div>` : ""}
1819
1749
  </div>
1820
1750
  `;
1821
1751
  const flexDirection = align === "right" ? "flex-row-reverse" : "flex-row";
@@ -1860,12 +1790,12 @@ function modal(content, options) {
1860
1790
  const sizeClasses = getSizeClasses5(size);
1861
1791
  const visibilityClasses = open ? "" : "hidden";
1862
1792
  const headerHtml = title || showClose ? `<div class="flex items-center justify-between p-4 border-b border-divider">
1863
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : "<div></div>"}
1793
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${(0, import_utils2.escapeHtml)(title)}</h3>` : "<div></div>"}
1864
1794
  ${showClose ? `
1865
1795
  <button
1866
1796
  type="button"
1867
1797
  class="p-1 rounded-lg text-text-secondary hover:text-text-primary hover:bg-gray-100 transition-colors"
1868
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1798
+ onclick="document.getElementById('${(0, import_utils2.escapeHtml)(id)}').classList.add('hidden')"
1869
1799
  aria-label="Close"
1870
1800
  >
1871
1801
  <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -1881,18 +1811,18 @@ function modal(content, options) {
1881
1811
  const escapeHandler = closeOnEscape ? `<script>
1882
1812
  document.addEventListener('keydown', function(e) {
1883
1813
  if (e.key === 'Escape') {
1884
- document.getElementById('${escapeHtml(id)}')?.classList.add('hidden');
1814
+ document.getElementById('${(0, import_utils2.escapeHtml)(id)}')?.classList.add('hidden');
1885
1815
  }
1886
1816
  });
1887
1817
  </script>` : "";
1888
1818
  return `
1889
1819
  <div
1890
- id="${escapeHtml(id)}"
1820
+ id="${(0, import_utils2.escapeHtml)(id)}"
1891
1821
  class="fixed inset-0 z-50 overflow-y-auto ${visibilityClasses}"
1892
1822
  ${backdropClickHandler}
1893
1823
  role="dialog"
1894
1824
  aria-modal="true"
1895
- aria-labelledby="${escapeHtml(id)}-title"
1825
+ aria-labelledby="${(0, import_utils2.escapeHtml)(id)}-title"
1896
1826
  >
1897
1827
  <!-- Backdrop -->
1898
1828
  <div class="fixed inset-0 bg-black/50 transition-opacity"></div>
@@ -1915,7 +1845,7 @@ function modalTrigger(triggerContent, modalId, options = {}) {
1915
1845
  const { className = "", tag = "button" } = options;
1916
1846
  const attrs = `
1917
1847
  class="${className}"
1918
- onclick="document.getElementById('${escapeHtml(modalId)}').classList.remove('hidden')"
1848
+ onclick="document.getElementById('${(0, import_utils2.escapeHtml)(modalId)}').classList.remove('hidden')"
1919
1849
  `;
1920
1850
  if (tag === "button") {
1921
1851
  return `<button type="button" ${attrs}>${triggerContent}</button>`;
@@ -1960,29 +1890,29 @@ function confirmModal(options) {
1960
1890
  <div class="mx-auto w-12 h-12 rounded-full ${iconColors[variant]} flex items-center justify-center mb-4">
1961
1891
  ${displayIcon}
1962
1892
  </div>
1963
- <h3 class="text-lg font-semibold text-text-primary mb-2">${escapeHtml(title)}</h3>
1964
- <p class="text-text-secondary">${escapeHtml(message)}</p>
1893
+ <h3 class="text-lg font-semibold text-text-primary mb-2">${(0, import_utils2.escapeHtml)(title)}</h3>
1894
+ <p class="text-text-secondary">${(0, import_utils2.escapeHtml)(message)}</p>
1965
1895
  </div>
1966
1896
  `;
1967
1897
  const confirmButton = confirmHref && isSafeUrl(confirmHref) ? `<a
1968
- href="${escapeHtml(confirmHref)}"
1898
+ href="${(0, import_utils2.escapeHtml)(confirmHref)}"
1969
1899
  class="px-4 py-2 rounded-lg ${variantClasses[variant]} transition-colors"
1970
1900
  >
1971
- ${escapeHtml(confirmText)}
1901
+ ${(0, import_utils2.escapeHtml)(confirmText)}
1972
1902
  </a>` : `<button
1973
1903
  type="button"
1974
1904
  class="px-4 py-2 rounded-lg ${variantClasses[variant]} transition-colors"
1975
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1905
+ onclick="document.getElementById('${(0, import_utils2.escapeHtml)(id)}').classList.add('hidden')"
1976
1906
  >
1977
- ${escapeHtml(confirmText)}
1907
+ ${(0, import_utils2.escapeHtml)(confirmText)}
1978
1908
  </button>`;
1979
1909
  const footer = `
1980
1910
  <button
1981
1911
  type="button"
1982
1912
  class="px-4 py-2 rounded-lg border border-border text-text-primary hover:bg-gray-50 transition-colors"
1983
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1913
+ onclick="document.getElementById('${(0, import_utils2.escapeHtml)(id)}').classList.add('hidden')"
1984
1914
  >
1985
- ${escapeHtml(cancelText)}
1915
+ ${(0, import_utils2.escapeHtml)(cancelText)}
1986
1916
  </button>
1987
1917
  ${confirmButton}
1988
1918
  `;
@@ -2025,12 +1955,12 @@ function drawer(content, options) {
2025
1955
  };
2026
1956
  const visibilityClasses = open ? "" : "hidden";
2027
1957
  const headerHtml = title || showClose ? `<div class="flex items-center justify-between p-4 border-b border-divider">
2028
- ${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml(title)}</h3>` : "<div></div>"}
1958
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${(0, import_utils2.escapeHtml)(title)}</h3>` : "<div></div>"}
2029
1959
  ${showClose ? `
2030
1960
  <button
2031
1961
  type="button"
2032
1962
  class="p-1 rounded-lg text-text-secondary hover:text-text-primary hover:bg-gray-100 transition-colors"
2033
- onclick="document.getElementById('${escapeHtml(id)}').classList.add('hidden')"
1963
+ onclick="document.getElementById('${(0, import_utils2.escapeHtml)(id)}').classList.add('hidden')"
2034
1964
  aria-label="Close"
2035
1965
  >
2036
1966
  <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2043,7 +1973,7 @@ function drawer(content, options) {
2043
1973
  const backdropClickHandler = closeOnBackdrop ? `onclick="if (event.target === this) this.classList.add('hidden')"` : "";
2044
1974
  return `
2045
1975
  <div
2046
- id="${escapeHtml(id)}"
1976
+ id="${(0, import_utils2.escapeHtml)(id)}"
2047
1977
  class="fixed inset-0 z-50 ${visibilityClasses}"
2048
1978
  ${backdropClickHandler}
2049
1979
  role="dialog"
@@ -2106,9 +2036,9 @@ function buildTableHeader(columns, options) {
2106
2036
  class="${paddingClass} ${alignClass} font-semibold text-text-primary ${sortableClasses} ${col.headerClass || ""}"
2107
2037
  ${widthStyle}
2108
2038
  >
2109
- ${col.sortable ? `<span class="inline-flex items-center">${escapeHtml(col.header)}${buildSortIndicator(
2039
+ ${col.sortable ? `<span class="inline-flex items-center">${(0, import_utils2.escapeHtml)(col.header)}${buildSortIndicator(
2110
2040
  col.sortDirection || null
2111
- )}</span>` : escapeHtml(col.header)}
2041
+ )}</span>` : (0, import_utils2.escapeHtml)(col.header)}
2112
2042
  </th>`;
2113
2043
  }).join("\n");
2114
2044
  return `<thead class="bg-gray-50 border-b border-border">
@@ -2145,20 +2075,20 @@ function buildTableBody(data, columns, options) {
2145
2075
  bordered ? "border-b border-border" : "",
2146
2076
  onRowClick ? "cursor-pointer" : ""
2147
2077
  ].filter(Boolean).join(" ");
2148
- const clickHandler = onRowClick ? `onclick="window.location.href='${escapeHtml(onRowClick.replace("{key}", rowId))}'"` : "";
2078
+ const clickHandler = onRowClick ? `onclick="window.location.href='${(0, import_utils2.escapeHtml)(onRowClick.replace("{key}", rowId))}'"` : "";
2149
2079
  const selectCell = selectable ? `<td class="${paddingClass}" onclick="event.stopPropagation()">
2150
2080
  <input
2151
2081
  type="checkbox"
2152
2082
  class="w-4 h-4 rounded border-border text-primary focus:ring-primary/20"
2153
2083
  name="selected[]"
2154
- value="${escapeHtml(rowId)}"
2084
+ value="${(0, import_utils2.escapeHtml)(rowId)}"
2155
2085
  aria-label="Select row"
2156
2086
  >
2157
2087
  </td>` : "";
2158
2088
  const cells = columns.map((col) => {
2159
2089
  const value = row[col.key];
2160
2090
  const alignClass = getAlignClasses(col.align);
2161
- const cellContent = col.render ? col.render(value, row, rowIndex) : escapeHtml(String(value ?? ""));
2091
+ const cellContent = col.render ? col.render(value, row, rowIndex) : (0, import_utils2.escapeHtml)(String(value ?? ""));
2162
2092
  return `<td class="${paddingClass} ${alignClass} ${col.cellClass || ""}">${cellContent}</td>`;
2163
2093
  }).join("\n");
2164
2094
  return `<tr class="${rowClasses}" ${clickHandler}>
@@ -2180,7 +2110,7 @@ function table(data, options) {
2180
2110
  const { id, bordered, stickyHeader, className = "", loading = false } = options;
2181
2111
  const tableClasses = ["w-full", bordered ? "border border-border" : "", "text-sm"].filter(Boolean).join(" ");
2182
2112
  const wrapperClasses = ["relative overflow-x-auto", stickyHeader ? "max-h-96 overflow-y-auto" : "", className].filter(Boolean).join(" ");
2183
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
2113
+ const idAttr = id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "";
2184
2114
  const header = buildTableHeader(options.columns, options);
2185
2115
  const body = buildTableBody(data, options.columns, options);
2186
2116
  const loadingOverlay = loading ? buildLoadingOverlay() : "";
@@ -2210,7 +2140,7 @@ function pagination(options) {
2210
2140
  return `<span class="${baseClasses} ${stateClasses}">${label}</span>`;
2211
2141
  }
2212
2142
  const pageUrl = baseUrl ? `${baseUrl}${baseUrl.includes("?") ? "&" : "?"}page=${pageNum}` : `?page=${pageNum}`;
2213
- return `<a href="${escapeHtml(pageUrl)}" class="${baseClasses} ${stateClasses}">${label}</a>`;
2143
+ return `<a href="${(0, import_utils2.escapeHtml)(pageUrl)}" class="${baseClasses} ${stateClasses}">${label}</a>`;
2214
2144
  };
2215
2145
  const pageNumbers = [];
2216
2146
  const maxVisible = 5;
@@ -2308,19 +2238,19 @@ function getPermissionIcon(scope, customIcon) {
2308
2238
  }
2309
2239
  function permissionList(permissions, options = {}) {
2310
2240
  const { id, checkable = false, inputName = "scopes", title, className = "" } = options;
2311
- const titleHtml = title ? `<h4 class="font-medium text-text-primary mb-3">${escapeHtml(title)}</h4>` : "";
2241
+ const titleHtml = title ? `<h4 class="font-medium text-text-primary mb-3">${(0, import_utils2.escapeHtml)(title)}</h4>` : "";
2312
2242
  const itemsHtml = permissions.map((perm, index) => {
2313
2243
  const icon = getPermissionIcon(perm.scope, perm.icon);
2314
2244
  const sensitiveClasses = perm.sensitive ? "border-warning/30 bg-warning/5" : "border-border";
2315
2245
  const sensitiveLabel = perm.sensitive ? '<span class="text-xs text-warning font-medium ml-2">Sensitive</span>' : "";
2316
2246
  const checkboxHtml = checkable ? `<input
2317
2247
  type="checkbox"
2318
- name="${escapeHtml(inputName)}[]"
2319
- value="${escapeHtml(perm.scope)}"
2248
+ name="${(0, import_utils2.escapeHtml)(inputName)}[]"
2249
+ value="${(0, import_utils2.escapeHtml)(perm.scope)}"
2320
2250
  class="w-4 h-4 rounded border-border text-primary focus:ring-primary/20"
2321
2251
  ${perm.checked || perm.required ? "checked" : ""}
2322
2252
  ${perm.required ? "disabled" : ""}
2323
- id="${id ? escapeHtml(id) : "perm"}-${index}"
2253
+ id="${id ? (0, import_utils2.escapeHtml)(id) : "perm"}-${index}"
2324
2254
  >` : `<div class="w-5 h-5 rounded-full bg-success/10 text-success flex items-center justify-center">
2325
2255
  <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2326
2256
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/>
@@ -2332,18 +2262,18 @@ function permissionList(permissions, options = {}) {
2332
2262
  </div>
2333
2263
  <div class="flex-1 min-w-0">
2334
2264
  <div class="flex items-center">
2335
- <span class="font-medium text-text-primary">${escapeHtml(perm.name)}</span>
2265
+ <span class="font-medium text-text-primary">${(0, import_utils2.escapeHtml)(perm.name)}</span>
2336
2266
  ${perm.required ? '<span class="text-xs text-text-secondary ml-2">(Required)</span>' : ""}
2337
2267
  ${sensitiveLabel}
2338
2268
  </div>
2339
- ${perm.description ? `<p class="text-sm text-text-secondary mt-0.5">${escapeHtml(perm.description)}</p>` : ""}
2269
+ ${perm.description ? `<p class="text-sm text-text-secondary mt-0.5">${(0, import_utils2.escapeHtml)(perm.description)}</p>` : ""}
2340
2270
  </div>
2341
2271
  <div class="flex-shrink-0">
2342
2272
  ${checkboxHtml}
2343
2273
  </div>
2344
2274
  </div>`;
2345
2275
  }).join("\n");
2346
- const idAttr = id ? `id="${escapeHtml(id)}"` : "";
2276
+ const idAttr = id ? `id="${(0, import_utils2.escapeHtml)(id)}"` : "";
2347
2277
  return `<div class="permission-list ${className}" ${idAttr}>
2348
2278
  ${titleHtml}
2349
2279
  <div class="space-y-2">
@@ -2373,8 +2303,8 @@ function featureList(features, options = {}) {
2373
2303
  return `<li class="flex items-start gap-3">
2374
2304
  <div class="flex-shrink-0 mt-0.5">${iconHtml}</div>
2375
2305
  <div class="flex-1">
2376
- <span class="${textClasses}">${escapeHtml(feature.name)}</span>
2377
- ${feature.description ? `<p class="text-sm text-text-secondary">${escapeHtml(feature.description)}</p>` : ""}
2306
+ <span class="${textClasses}">${(0, import_utils2.escapeHtml)(feature.name)}</span>
2307
+ ${feature.description ? `<p class="text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(feature.description)}</p>` : ""}
2378
2308
  </div>
2379
2309
  </li>`;
2380
2310
  }).join("\n");
@@ -2396,7 +2326,7 @@ function descriptionList(items, options = {}) {
2396
2326
  const hasCopyable = items.some((item) => item.copyable);
2397
2327
  if (layout === "horizontal") {
2398
2328
  const itemsHtml2 = items.map((item) => {
2399
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2329
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${(0, import_utils2.escapeHtml)(
2400
2330
  item.description
2401
2331
  )}', this)" class="ml-2 p-1 rounded hover:bg-gray-100 transition-colors">
2402
2332
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2404,9 +2334,9 @@ function descriptionList(items, options = {}) {
2404
2334
  </svg>
2405
2335
  </button>` : "";
2406
2336
  return `<div class="py-3 sm:grid sm:grid-cols-3 sm:gap-4 ${dividers ? "border-b border-divider" : ""}">
2407
- <dt class="text-sm font-medium text-text-secondary">${escapeHtml(item.term)}</dt>
2337
+ <dt class="text-sm font-medium text-text-secondary">${(0, import_utils2.escapeHtml)(item.term)}</dt>
2408
2338
  <dd class="mt-1 sm:mt-0 sm:col-span-2 text-sm text-text-primary flex items-center">
2409
- ${escapeHtml(item.description)}
2339
+ ${(0, import_utils2.escapeHtml)(item.description)}
2410
2340
  ${copyBtn}
2411
2341
  </dd>
2412
2342
  </div>`;
@@ -2415,7 +2345,7 @@ function descriptionList(items, options = {}) {
2415
2345
  }
2416
2346
  if (layout === "grid") {
2417
2347
  const itemsHtml2 = items.map((item) => {
2418
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2348
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${(0, import_utils2.escapeHtml)(
2419
2349
  item.description
2420
2350
  )}', this)" class="absolute top-2 right-2 p-1 rounded hover:bg-gray-100 transition-colors">
2421
2351
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2423,15 +2353,15 @@ function descriptionList(items, options = {}) {
2423
2353
  </svg>
2424
2354
  </button>` : "";
2425
2355
  return `<div class="relative p-4 bg-gray-50 rounded-lg">
2426
- <dt class="text-sm font-medium text-text-secondary">${escapeHtml(item.term)}</dt>
2427
- <dd class="mt-1 text-sm text-text-primary font-medium">${escapeHtml(item.description)}</dd>
2356
+ <dt class="text-sm font-medium text-text-secondary">${(0, import_utils2.escapeHtml)(item.term)}</dt>
2357
+ <dd class="mt-1 text-sm text-text-primary font-medium">${(0, import_utils2.escapeHtml)(item.description)}</dd>
2428
2358
  ${copyBtn}
2429
2359
  </div>`;
2430
2360
  }).join("\n");
2431
2361
  return `<dl class="grid grid-cols-2 gap-4 ${className}">${itemsHtml2}</dl>${hasCopyable ? copyScript : ""}`;
2432
2362
  }
2433
2363
  const itemsHtml = items.map((item) => {
2434
- const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${escapeHtml(
2364
+ const copyBtn = item.copyable ? `<button type="button" onclick="copyToClipboard('${(0, import_utils2.escapeHtml)(
2435
2365
  item.description
2436
2366
  )}', this)" class="ml-2 p-1 rounded hover:bg-gray-100 transition-colors">
2437
2367
  <svg class="w-4 h-4 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -2439,9 +2369,9 @@ function descriptionList(items, options = {}) {
2439
2369
  </svg>
2440
2370
  </button>` : "";
2441
2371
  return `<div class="${dividers ? "py-3 border-b border-divider last:border-0" : "py-2"}">
2442
- <dt class="text-sm text-text-secondary">${escapeHtml(item.term)}</dt>
2372
+ <dt class="text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(item.term)}</dt>
2443
2373
  <dd class="mt-1 text-sm text-text-primary font-medium flex items-center">
2444
- ${escapeHtml(item.description)}
2374
+ ${(0, import_utils2.escapeHtml)(item.description)}
2445
2375
  ${copyBtn}
2446
2376
  </dd>
2447
2377
  </div>`;
@@ -2458,10 +2388,10 @@ function actionList(items, className = "") {
2458
2388
  const contentHtml = `
2459
2389
  ${iconHtml}
2460
2390
  <div class="flex-1 min-w-0">
2461
- <div class="font-medium ${item.destructive ? "text-danger" : "text-text-primary"}">${escapeHtml(
2391
+ <div class="font-medium ${item.destructive ? "text-danger" : "text-text-primary"}">${(0, import_utils2.escapeHtml)(
2462
2392
  item.label
2463
2393
  )}</div>
2464
- ${item.description ? `<p class="text-sm text-text-secondary">${escapeHtml(item.description)}</p>` : ""}
2394
+ ${item.description ? `<p class="text-sm text-text-secondary">${(0, import_utils2.escapeHtml)(item.description)}</p>` : ""}
2465
2395
  </div>
2466
2396
  <svg class="w-5 h-5 text-text-secondary" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2467
2397
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
@@ -2471,7 +2401,7 @@ function actionList(items, className = "") {
2471
2401
  return `<div class="${baseClasses}">${contentHtml}</div>`;
2472
2402
  }
2473
2403
  if (item.href) {
2474
- return `<a href="${escapeHtml(item.href)}" class="${baseClasses}">${contentHtml}</a>`;
2404
+ return `<a href="${(0, import_utils2.escapeHtml)(item.href)}" class="${baseClasses}">${contentHtml}</a>`;
2475
2405
  }
2476
2406
  return `<div class="${baseClasses}">${contentHtml}</div>`;
2477
2407
  }).join("\n");