@frontmcp/ui 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +438 -0
  3. package/package.json +147 -0
  4. package/src/adapters/index.d.ts +10 -0
  5. package/src/adapters/index.js +18 -0
  6. package/src/adapters/index.js.map +1 -0
  7. package/src/adapters/platform-meta.d.ts +165 -0
  8. package/src/adapters/platform-meta.js +310 -0
  9. package/src/adapters/platform-meta.js.map +1 -0
  10. package/src/base-template/bridge.d.ts +89 -0
  11. package/src/base-template/bridge.js +452 -0
  12. package/src/base-template/bridge.js.map +1 -0
  13. package/src/base-template/default-base-template.d.ts +91 -0
  14. package/src/base-template/default-base-template.js +435 -0
  15. package/src/base-template/default-base-template.js.map +1 -0
  16. package/src/base-template/index.d.ts +14 -0
  17. package/src/base-template/index.js +30 -0
  18. package/src/base-template/index.js.map +1 -0
  19. package/src/base-template/polyfills.d.ts +30 -0
  20. package/src/base-template/polyfills.js +190 -0
  21. package/src/base-template/polyfills.js.map +1 -0
  22. package/src/base-template/theme-styles.d.ts +73 -0
  23. package/src/base-template/theme-styles.js +95 -0
  24. package/src/base-template/theme-styles.js.map +1 -0
  25. package/src/bridge/adapters/base-adapter.d.ts +103 -0
  26. package/src/bridge/adapters/base-adapter.js +314 -0
  27. package/src/bridge/adapters/base-adapter.js.map +1 -0
  28. package/src/bridge/adapters/claude.adapter.d.ts +66 -0
  29. package/src/bridge/adapters/claude.adapter.js +145 -0
  30. package/src/bridge/adapters/claude.adapter.js.map +1 -0
  31. package/src/bridge/adapters/ext-apps.adapter.d.ts +142 -0
  32. package/src/bridge/adapters/ext-apps.adapter.js +416 -0
  33. package/src/bridge/adapters/ext-apps.adapter.js.map +1 -0
  34. package/src/bridge/adapters/gemini.adapter.d.ts +63 -0
  35. package/src/bridge/adapters/gemini.adapter.js +160 -0
  36. package/src/bridge/adapters/gemini.adapter.js.map +1 -0
  37. package/src/bridge/adapters/generic.adapter.d.ts +55 -0
  38. package/src/bridge/adapters/generic.adapter.js +108 -0
  39. package/src/bridge/adapters/generic.adapter.js.map +1 -0
  40. package/src/bridge/adapters/index.d.ts +25 -0
  41. package/src/bridge/adapters/index.js +65 -0
  42. package/src/bridge/adapters/index.js.map +1 -0
  43. package/src/bridge/adapters/openai.adapter.d.ts +64 -0
  44. package/src/bridge/adapters/openai.adapter.js +194 -0
  45. package/src/bridge/adapters/openai.adapter.js.map +1 -0
  46. package/src/bridge/core/adapter-registry.d.ts +121 -0
  47. package/src/bridge/core/adapter-registry.js +271 -0
  48. package/src/bridge/core/adapter-registry.js.map +1 -0
  49. package/src/bridge/core/bridge-factory.d.ts +198 -0
  50. package/src/bridge/core/bridge-factory.js +428 -0
  51. package/src/bridge/core/bridge-factory.js.map +1 -0
  52. package/src/bridge/core/index.d.ts +9 -0
  53. package/src/bridge/core/index.js +22 -0
  54. package/src/bridge/core/index.js.map +1 -0
  55. package/src/bridge/index.d.ts +61 -0
  56. package/src/bridge/index.js +94 -0
  57. package/src/bridge/index.js.map +1 -0
  58. package/src/bridge/runtime/iife-generator.d.ts +61 -0
  59. package/src/bridge/runtime/iife-generator.js +940 -0
  60. package/src/bridge/runtime/iife-generator.js.map +1 -0
  61. package/src/bridge/runtime/index.d.ts +8 -0
  62. package/src/bridge/runtime/index.js +16 -0
  63. package/src/bridge/runtime/index.js.map +1 -0
  64. package/src/bridge/types.d.ts +385 -0
  65. package/src/bridge/types.js +11 -0
  66. package/src/bridge/types.js.map +1 -0
  67. package/src/build/cdn-resources.d.ts +140 -0
  68. package/src/build/cdn-resources.js +314 -0
  69. package/src/build/cdn-resources.js.map +1 -0
  70. package/src/build/index.d.ts +294 -0
  71. package/src/build/index.js +325 -0
  72. package/src/build/index.js.map +1 -0
  73. package/src/build/widget-manifest.d.ts +212 -0
  74. package/src/build/widget-manifest.js +652 -0
  75. package/src/build/widget-manifest.js.map +1 -0
  76. package/src/bundler/bundler.d.ts +110 -0
  77. package/src/bundler/bundler.js +432 -0
  78. package/src/bundler/bundler.js.map +1 -0
  79. package/src/bundler/cache.d.ts +172 -0
  80. package/src/bundler/cache.js +250 -0
  81. package/src/bundler/cache.js.map +1 -0
  82. package/src/bundler/index.d.ts +41 -0
  83. package/src/bundler/index.js +73 -0
  84. package/src/bundler/index.js.map +1 -0
  85. package/src/bundler/sandbox/enclave-adapter.d.ts +120 -0
  86. package/src/bundler/sandbox/enclave-adapter.js +339 -0
  87. package/src/bundler/sandbox/enclave-adapter.js.map +1 -0
  88. package/src/bundler/sandbox/executor.d.ts +13 -0
  89. package/src/bundler/sandbox/executor.js +22 -0
  90. package/src/bundler/sandbox/executor.js.map +1 -0
  91. package/src/bundler/sandbox/policy.d.ts +61 -0
  92. package/src/bundler/sandbox/policy.js +238 -0
  93. package/src/bundler/sandbox/policy.js.map +1 -0
  94. package/src/bundler/types.d.ts +347 -0
  95. package/src/bundler/types.js +132 -0
  96. package/src/bundler/types.js.map +1 -0
  97. package/src/components/alert.d.ts +71 -0
  98. package/src/components/alert.js +189 -0
  99. package/src/components/alert.js.map +1 -0
  100. package/src/components/alert.schema.d.ts +114 -0
  101. package/src/components/alert.schema.js +105 -0
  102. package/src/components/alert.schema.js.map +1 -0
  103. package/src/components/avatar.d.ts +76 -0
  104. package/src/components/avatar.js +176 -0
  105. package/src/components/avatar.js.map +1 -0
  106. package/src/components/avatar.schema.d.ts +169 -0
  107. package/src/components/avatar.schema.js +103 -0
  108. package/src/components/avatar.schema.js.map +1 -0
  109. package/src/components/badge.d.ts +70 -0
  110. package/src/components/badge.js +149 -0
  111. package/src/components/badge.js.map +1 -0
  112. package/src/components/badge.schema.d.ts +109 -0
  113. package/src/components/badge.schema.js +96 -0
  114. package/src/components/badge.schema.js.map +1 -0
  115. package/src/components/button.d.ts +111 -0
  116. package/src/components/button.js +336 -0
  117. package/src/components/button.js.map +1 -0
  118. package/src/components/button.schema.d.ts +148 -0
  119. package/src/components/button.schema.js +121 -0
  120. package/src/components/button.schema.js.map +1 -0
  121. package/src/components/card.d.ts +60 -0
  122. package/src/components/card.js +117 -0
  123. package/src/components/card.js.map +1 -0
  124. package/src/components/card.schema.d.ts +113 -0
  125. package/src/components/card.schema.js +98 -0
  126. package/src/components/card.schema.js.map +1 -0
  127. package/src/components/form.d.ts +239 -0
  128. package/src/components/form.js +420 -0
  129. package/src/components/form.js.map +1 -0
  130. package/src/components/form.schema.d.ts +441 -0
  131. package/src/components/form.schema.js +406 -0
  132. package/src/components/form.schema.js.map +1 -0
  133. package/src/components/index.d.ts +29 -0
  134. package/src/components/index.js +98 -0
  135. package/src/components/index.js.map +1 -0
  136. package/src/components/list.d.ts +127 -0
  137. package/src/components/list.js +279 -0
  138. package/src/components/list.js.map +1 -0
  139. package/src/components/list.schema.d.ts +134 -0
  140. package/src/components/list.schema.js +168 -0
  141. package/src/components/list.schema.js.map +1 -0
  142. package/src/components/modal.d.ts +111 -0
  143. package/src/components/modal.js +260 -0
  144. package/src/components/modal.js.map +1 -0
  145. package/src/components/modal.schema.d.ts +186 -0
  146. package/src/components/modal.schema.js +167 -0
  147. package/src/components/modal.schema.js.map +1 -0
  148. package/src/components/table.d.ts +105 -0
  149. package/src/components/table.js +283 -0
  150. package/src/components/table.js.map +1 -0
  151. package/src/components/table.schema.d.ts +159 -0
  152. package/src/components/table.schema.js +173 -0
  153. package/src/components/table.schema.js.map +1 -0
  154. package/src/handlebars/helpers.d.ts +348 -0
  155. package/src/handlebars/helpers.js +605 -0
  156. package/src/handlebars/helpers.js.map +1 -0
  157. package/src/handlebars/index.d.ts +193 -0
  158. package/src/handlebars/index.js +350 -0
  159. package/src/handlebars/index.js.map +1 -0
  160. package/src/index.d.ts +50 -0
  161. package/src/index.js +192 -0
  162. package/src/index.js.map +1 -0
  163. package/src/layouts/base.d.ts +88 -0
  164. package/src/layouts/base.js +227 -0
  165. package/src/layouts/base.js.map +1 -0
  166. package/src/layouts/index.d.ts +7 -0
  167. package/src/layouts/index.js +25 -0
  168. package/src/layouts/index.js.map +1 -0
  169. package/src/layouts/presets.d.ts +133 -0
  170. package/src/layouts/presets.js +277 -0
  171. package/src/layouts/presets.js.map +1 -0
  172. package/src/pages/consent.d.ts +116 -0
  173. package/src/pages/consent.js +218 -0
  174. package/src/pages/consent.js.map +1 -0
  175. package/src/pages/error.d.ts +100 -0
  176. package/src/pages/error.js +263 -0
  177. package/src/pages/error.js.map +1 -0
  178. package/src/pages/index.d.ts +8 -0
  179. package/src/pages/index.js +27 -0
  180. package/src/pages/index.js.map +1 -0
  181. package/src/react/Alert.d.ts +101 -0
  182. package/src/react/Alert.js +51 -0
  183. package/src/react/Alert.js.map +1 -0
  184. package/src/react/Badge.d.ts +100 -0
  185. package/src/react/Badge.js +55 -0
  186. package/src/react/Badge.js.map +1 -0
  187. package/src/react/Button.d.ts +108 -0
  188. package/src/react/Button.js +52 -0
  189. package/src/react/Button.js.map +1 -0
  190. package/src/react/Card.d.ts +103 -0
  191. package/src/react/Card.js +55 -0
  192. package/src/react/Card.js.map +1 -0
  193. package/src/react/hooks/context.d.ts +178 -0
  194. package/src/react/hooks/context.js +287 -0
  195. package/src/react/hooks/context.js.map +1 -0
  196. package/src/react/hooks/index.d.ts +41 -0
  197. package/src/react/hooks/index.js +61 -0
  198. package/src/react/hooks/index.js.map +1 -0
  199. package/src/react/hooks/tools.d.ts +283 -0
  200. package/src/react/hooks/tools.js +465 -0
  201. package/src/react/hooks/tools.js.map +1 -0
  202. package/src/react/index.d.ts +80 -0
  203. package/src/react/index.js +113 -0
  204. package/src/react/index.js.map +1 -0
  205. package/src/react/types.d.ts +105 -0
  206. package/src/react/types.js +12 -0
  207. package/src/react/types.js.map +1 -0
  208. package/src/react/utils.d.ts +42 -0
  209. package/src/react/utils.js +99 -0
  210. package/src/react/utils.js.map +1 -0
  211. package/src/registry/index.d.ts +45 -0
  212. package/src/registry/index.js +67 -0
  213. package/src/registry/index.js.map +1 -0
  214. package/src/registry/render-template.d.ts +86 -0
  215. package/src/registry/render-template.js +239 -0
  216. package/src/registry/render-template.js.map +1 -0
  217. package/src/registry/tool-ui.registry.d.ts +260 -0
  218. package/src/registry/tool-ui.registry.js +438 -0
  219. package/src/registry/tool-ui.registry.js.map +1 -0
  220. package/src/registry/uri-utils.d.ts +55 -0
  221. package/src/registry/uri-utils.js +97 -0
  222. package/src/registry/uri-utils.js.map +1 -0
  223. package/src/render/index.d.ts +7 -0
  224. package/src/render/index.js +14 -0
  225. package/src/render/index.js.map +1 -0
  226. package/src/render/prerender.d.ts +56 -0
  227. package/src/render/prerender.js +98 -0
  228. package/src/render/prerender.js.map +1 -0
  229. package/src/renderers/cache.d.ts +144 -0
  230. package/src/renderers/cache.js +240 -0
  231. package/src/renderers/cache.js.map +1 -0
  232. package/src/renderers/html.renderer.d.ts +122 -0
  233. package/src/renderers/html.renderer.js +204 -0
  234. package/src/renderers/html.renderer.js.map +1 -0
  235. package/src/renderers/index.d.ts +35 -0
  236. package/src/renderers/index.js +70 -0
  237. package/src/renderers/index.js.map +1 -0
  238. package/src/renderers/mdx.renderer.d.ts +119 -0
  239. package/src/renderers/mdx.renderer.js +305 -0
  240. package/src/renderers/mdx.renderer.js.map +1 -0
  241. package/src/renderers/react.renderer.d.ts +95 -0
  242. package/src/renderers/react.renderer.js +260 -0
  243. package/src/renderers/react.renderer.js.map +1 -0
  244. package/src/renderers/registry.d.ts +133 -0
  245. package/src/renderers/registry.js +232 -0
  246. package/src/renderers/registry.js.map +1 -0
  247. package/src/renderers/types.d.ts +341 -0
  248. package/src/renderers/types.js +9 -0
  249. package/src/renderers/types.js.map +1 -0
  250. package/src/renderers/utils/detect.d.ts +106 -0
  251. package/src/renderers/utils/detect.js +267 -0
  252. package/src/renderers/utils/detect.js.map +1 -0
  253. package/src/renderers/utils/hash.d.ts +39 -0
  254. package/src/renderers/utils/hash.js +75 -0
  255. package/src/renderers/utils/hash.js.map +1 -0
  256. package/src/renderers/utils/index.d.ts +8 -0
  257. package/src/renderers/utils/index.js +28 -0
  258. package/src/renderers/utils/index.js.map +1 -0
  259. package/src/renderers/utils/transpiler.d.ts +88 -0
  260. package/src/renderers/utils/transpiler.js +215 -0
  261. package/src/renderers/utils/transpiler.js.map +1 -0
  262. package/src/runtime/adapters/html.adapter.d.ts +58 -0
  263. package/src/runtime/adapters/html.adapter.js +131 -0
  264. package/src/runtime/adapters/html.adapter.js.map +1 -0
  265. package/src/runtime/adapters/index.d.ts +25 -0
  266. package/src/runtime/adapters/index.js +54 -0
  267. package/src/runtime/adapters/index.js.map +1 -0
  268. package/src/runtime/adapters/mdx.adapter.d.ts +72 -0
  269. package/src/runtime/adapters/mdx.adapter.js +241 -0
  270. package/src/runtime/adapters/mdx.adapter.js.map +1 -0
  271. package/src/runtime/adapters/react.adapter.d.ts +69 -0
  272. package/src/runtime/adapters/react.adapter.js +245 -0
  273. package/src/runtime/adapters/react.adapter.js.map +1 -0
  274. package/src/runtime/adapters/types.d.ts +94 -0
  275. package/src/runtime/adapters/types.js +11 -0
  276. package/src/runtime/adapters/types.js.map +1 -0
  277. package/src/runtime/csp.d.ts +37 -0
  278. package/src/runtime/csp.js +140 -0
  279. package/src/runtime/csp.js.map +1 -0
  280. package/src/runtime/index.d.ts +16 -0
  281. package/src/runtime/index.js +72 -0
  282. package/src/runtime/index.js.map +1 -0
  283. package/src/runtime/mcp-bridge.d.ts +100 -0
  284. package/src/runtime/mcp-bridge.js +581 -0
  285. package/src/runtime/mcp-bridge.js.map +1 -0
  286. package/src/runtime/renderer-runtime.d.ts +132 -0
  287. package/src/runtime/renderer-runtime.js +389 -0
  288. package/src/runtime/renderer-runtime.js.map +1 -0
  289. package/src/runtime/sanitizer.d.ts +171 -0
  290. package/src/runtime/sanitizer.js +318 -0
  291. package/src/runtime/sanitizer.js.map +1 -0
  292. package/src/runtime/types.d.ts +414 -0
  293. package/src/runtime/types.js +12 -0
  294. package/src/runtime/types.js.map +1 -0
  295. package/src/runtime/wrapper.d.ts +375 -0
  296. package/src/runtime/wrapper.js +1793 -0
  297. package/src/runtime/wrapper.js.map +1 -0
  298. package/src/styles/index.d.ts +7 -0
  299. package/src/styles/index.js +11 -0
  300. package/src/styles/index.js.map +1 -0
  301. package/src/styles/variants.d.ts +50 -0
  302. package/src/styles/variants.js +175 -0
  303. package/src/styles/variants.js.map +1 -0
  304. package/src/theme/cdn.d.ts +194 -0
  305. package/src/theme/cdn.js +375 -0
  306. package/src/theme/cdn.js.map +1 -0
  307. package/src/theme/index.d.ts +17 -0
  308. package/src/theme/index.js +57 -0
  309. package/src/theme/index.js.map +1 -0
  310. package/src/theme/platforms.d.ts +106 -0
  311. package/src/theme/platforms.js +161 -0
  312. package/src/theme/platforms.js.map +1 -0
  313. package/src/theme/presets/github-openai.d.ts +49 -0
  314. package/src/theme/presets/github-openai.js +189 -0
  315. package/src/theme/presets/github-openai.js.map +1 -0
  316. package/src/theme/presets/index.d.ts +10 -0
  317. package/src/theme/presets/index.js +17 -0
  318. package/src/theme/presets/index.js.map +1 -0
  319. package/src/theme/theme.d.ts +395 -0
  320. package/src/theme/theme.js +332 -0
  321. package/src/theme/theme.js.map +1 -0
  322. package/src/tool-template/builder.d.ts +212 -0
  323. package/src/tool-template/builder.js +397 -0
  324. package/src/tool-template/builder.js.map +1 -0
  325. package/src/tool-template/index.d.ts +15 -0
  326. package/src/tool-template/index.js +38 -0
  327. package/src/tool-template/index.js.map +1 -0
  328. package/src/types/index.d.ts +13 -0
  329. package/src/types/index.js +26 -0
  330. package/src/types/index.js.map +1 -0
  331. package/src/types/ui-config.d.ts +357 -0
  332. package/src/types/ui-config.js +12 -0
  333. package/src/types/ui-config.js.map +1 -0
  334. package/src/types/ui-runtime.d.ts +965 -0
  335. package/src/types/ui-runtime.js +117 -0
  336. package/src/types/ui-runtime.js.map +1 -0
  337. package/src/validation/error-box.d.ts +55 -0
  338. package/src/validation/error-box.js +75 -0
  339. package/src/validation/error-box.js.map +1 -0
  340. package/src/validation/index.d.ts +12 -0
  341. package/src/validation/index.js +21 -0
  342. package/src/validation/index.js.map +1 -0
  343. package/src/validation/wrapper.d.ts +96 -0
  344. package/src/validation/wrapper.js +117 -0
  345. package/src/validation/wrapper.js.map +1 -0
  346. package/src/web-components/core/attribute-parser.d.ts +85 -0
  347. package/src/web-components/core/attribute-parser.js +189 -0
  348. package/src/web-components/core/attribute-parser.js.map +1 -0
  349. package/src/web-components/core/base-element.d.ts +197 -0
  350. package/src/web-components/core/base-element.js +289 -0
  351. package/src/web-components/core/base-element.js.map +1 -0
  352. package/src/web-components/core/index.d.ts +8 -0
  353. package/src/web-components/core/index.js +18 -0
  354. package/src/web-components/core/index.js.map +1 -0
  355. package/src/web-components/elements/fmcp-alert.d.ts +45 -0
  356. package/src/web-components/elements/fmcp-alert.js +93 -0
  357. package/src/web-components/elements/fmcp-alert.js.map +1 -0
  358. package/src/web-components/elements/fmcp-badge.d.ts +46 -0
  359. package/src/web-components/elements/fmcp-badge.js +99 -0
  360. package/src/web-components/elements/fmcp-badge.js.map +1 -0
  361. package/src/web-components/elements/fmcp-button.d.ts +124 -0
  362. package/src/web-components/elements/fmcp-button.js +233 -0
  363. package/src/web-components/elements/fmcp-button.js.map +1 -0
  364. package/src/web-components/elements/fmcp-card.d.ts +52 -0
  365. package/src/web-components/elements/fmcp-card.js +115 -0
  366. package/src/web-components/elements/fmcp-card.js.map +1 -0
  367. package/src/web-components/elements/fmcp-input.d.ts +95 -0
  368. package/src/web-components/elements/fmcp-input.js +248 -0
  369. package/src/web-components/elements/fmcp-input.js.map +1 -0
  370. package/src/web-components/elements/fmcp-select.d.ts +99 -0
  371. package/src/web-components/elements/fmcp-select.js +243 -0
  372. package/src/web-components/elements/fmcp-select.js.map +1 -0
  373. package/src/web-components/elements/index.d.ts +12 -0
  374. package/src/web-components/elements/index.js +34 -0
  375. package/src/web-components/elements/index.js.map +1 -0
  376. package/src/web-components/index.d.ts +49 -0
  377. package/src/web-components/index.js +75 -0
  378. package/src/web-components/index.js.map +1 -0
  379. package/src/web-components/register.d.ts +56 -0
  380. package/src/web-components/register.js +80 -0
  381. package/src/web-components/register.js.map +1 -0
  382. package/src/web-components/types.d.ts +121 -0
  383. package/src/web-components/types.js +25 -0
  384. package/src/web-components/types.js.map +1 -0
  385. package/src/widgets/index.d.ts +7 -0
  386. package/src/widgets/index.js +24 -0
  387. package/src/widgets/index.js.map +1 -0
  388. package/src/widgets/progress.d.ts +132 -0
  389. package/src/widgets/progress.js +303 -0
  390. package/src/widgets/progress.js.map +1 -0
  391. package/src/widgets/resource.d.ts +162 -0
  392. package/src/widgets/resource.js +340 -0
  393. package/src/widgets/resource.js.map +1 -0
@@ -0,0 +1,395 @@
1
+ /**
2
+ * @file theme.ts
3
+ * @description Theme Configuration System for FrontMCP UI.
4
+ *
5
+ * Provides a comprehensive theming system with:
6
+ * - Color palettes with semantic naming
7
+ * - Typography configuration
8
+ * - Spacing and sizing
9
+ * - Component-specific tokens
10
+ * - Customizable CDN URLs for fonts, icons, and scripts
11
+ * - Dark mode support
12
+ * - Tailwind CSS v4 @theme integration
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { createTheme, DEFAULT_THEME } from '@frontmcp/ui';
17
+ *
18
+ * // Use the default GitHub/OpenAI theme
19
+ * const theme = DEFAULT_THEME;
20
+ *
21
+ * // Or create a custom theme
22
+ * const customTheme = createTheme({
23
+ * colors: {
24
+ * semantic: { primary: '#0969da' },
25
+ * },
26
+ * cdn: {
27
+ * fonts: {
28
+ * preconnect: ['https://fonts.googleapis.com'],
29
+ * stylesheets: ['https://fonts.googleapis.com/css2?family=Roboto&display=swap'],
30
+ * },
31
+ * },
32
+ * });
33
+ * ```
34
+ *
35
+ * @module @frontmcp/ui/theme
36
+ */
37
+ /**
38
+ * Deep partial type - makes all properties and nested properties optional
39
+ */
40
+ export type DeepPartial<T> = T extends object ? {
41
+ [P in keyof T]?: DeepPartial<T[P]>;
42
+ } : T;
43
+ /**
44
+ * Semantic color scale (50-950)
45
+ */
46
+ export interface ColorScale {
47
+ 50?: string;
48
+ 100?: string;
49
+ 200?: string;
50
+ 300?: string;
51
+ 400?: string;
52
+ 500?: string;
53
+ 600?: string;
54
+ 700?: string;
55
+ 800?: string;
56
+ 900?: string;
57
+ 950?: string;
58
+ }
59
+ /**
60
+ * Semantic color tokens
61
+ */
62
+ export interface SemanticColors {
63
+ /** Primary brand color */
64
+ primary: string | ColorScale;
65
+ /** Secondary brand color */
66
+ secondary?: string | ColorScale;
67
+ /** Accent/highlight color */
68
+ accent?: string | ColorScale;
69
+ /** Neutral/gray tones */
70
+ neutral?: string | ColorScale;
71
+ /** Success state */
72
+ success?: string;
73
+ /** Warning state */
74
+ warning?: string;
75
+ /** Error/danger state */
76
+ danger?: string;
77
+ /** Info state */
78
+ info?: string;
79
+ }
80
+ /**
81
+ * Surface colors for backgrounds
82
+ */
83
+ export interface SurfaceColors {
84
+ /** Page background */
85
+ background?: string;
86
+ /** Card/panel background */
87
+ surface?: string;
88
+ /** Elevated surface (modal, dropdown) */
89
+ elevated?: string;
90
+ /** Overlay/backdrop */
91
+ overlay?: string;
92
+ }
93
+ /**
94
+ * Text colors
95
+ */
96
+ export interface TextColors {
97
+ /** Primary text */
98
+ primary?: string;
99
+ /** Secondary/muted text */
100
+ secondary?: string;
101
+ /** Disabled text */
102
+ disabled?: string;
103
+ /** Inverse text (on dark backgrounds) */
104
+ inverse?: string;
105
+ /** Link text */
106
+ link?: string;
107
+ }
108
+ /**
109
+ * Border colors
110
+ */
111
+ export interface BorderColors {
112
+ /** Default border */
113
+ default?: string;
114
+ /** Hover border */
115
+ hover?: string;
116
+ /** Focus border */
117
+ focus?: string;
118
+ /** Divider lines */
119
+ divider?: string;
120
+ }
121
+ /**
122
+ * Complete color configuration
123
+ */
124
+ export interface ThemeColors {
125
+ /** Semantic colors */
126
+ semantic: SemanticColors;
127
+ /** Surface/background colors */
128
+ surface?: SurfaceColors;
129
+ /** Text colors */
130
+ text?: TextColors;
131
+ /** Border colors */
132
+ border?: BorderColors;
133
+ /** Additional custom colors */
134
+ custom?: Record<string, string>;
135
+ }
136
+ /**
137
+ * Font family configuration
138
+ */
139
+ export interface FontFamilies {
140
+ /** Sans-serif (default) */
141
+ sans?: string;
142
+ /** Serif */
143
+ serif?: string;
144
+ /** Monospace */
145
+ mono?: string;
146
+ /** Display/heading */
147
+ display?: string;
148
+ }
149
+ /**
150
+ * Font size configuration
151
+ */
152
+ export interface FontSizes {
153
+ xs?: string;
154
+ sm?: string;
155
+ base?: string;
156
+ lg?: string;
157
+ xl?: string;
158
+ '2xl'?: string;
159
+ '3xl'?: string;
160
+ '4xl'?: string;
161
+ '5xl'?: string;
162
+ }
163
+ /**
164
+ * Font weight configuration
165
+ */
166
+ export interface FontWeights {
167
+ normal?: string;
168
+ medium?: string;
169
+ semibold?: string;
170
+ bold?: string;
171
+ }
172
+ /**
173
+ * Complete typography configuration
174
+ */
175
+ export interface ThemeTypography {
176
+ families?: FontFamilies;
177
+ sizes?: FontSizes;
178
+ weights?: FontWeights;
179
+ lineHeight?: {
180
+ tight?: string;
181
+ normal?: string;
182
+ relaxed?: string;
183
+ };
184
+ }
185
+ /**
186
+ * Spacing scale
187
+ */
188
+ export interface ThemeSpacing {
189
+ px?: string;
190
+ 0?: string;
191
+ 1?: string;
192
+ 2?: string;
193
+ 3?: string;
194
+ 4?: string;
195
+ 5?: string;
196
+ 6?: string;
197
+ 8?: string;
198
+ 10?: string;
199
+ 12?: string;
200
+ 16?: string;
201
+ 20?: string;
202
+ 24?: string;
203
+ }
204
+ /**
205
+ * Border radius
206
+ */
207
+ export interface ThemeRadius {
208
+ none?: string;
209
+ sm?: string;
210
+ md?: string;
211
+ lg?: string;
212
+ xl?: string;
213
+ '2xl'?: string;
214
+ full?: string;
215
+ }
216
+ /**
217
+ * Shadow configuration
218
+ */
219
+ export interface ThemeShadows {
220
+ sm?: string;
221
+ md?: string;
222
+ lg?: string;
223
+ xl?: string;
224
+ }
225
+ /**
226
+ * Button component tokens
227
+ */
228
+ export interface ButtonTokens {
229
+ radius?: string;
230
+ paddingX?: string;
231
+ paddingY?: string;
232
+ fontSize?: string;
233
+ fontWeight?: string;
234
+ }
235
+ /**
236
+ * Card component tokens
237
+ */
238
+ export interface CardTokens {
239
+ radius?: string;
240
+ padding?: string;
241
+ shadow?: string;
242
+ borderWidth?: string;
243
+ }
244
+ /**
245
+ * Input component tokens
246
+ */
247
+ export interface InputTokens {
248
+ radius?: string;
249
+ paddingX?: string;
250
+ paddingY?: string;
251
+ borderWidth?: string;
252
+ focusRingWidth?: string;
253
+ }
254
+ /**
255
+ * Component-specific tokens
256
+ */
257
+ export interface ComponentTokens {
258
+ button?: ButtonTokens;
259
+ card?: CardTokens;
260
+ input?: InputTokens;
261
+ }
262
+ /**
263
+ * Script resource with optional integrity hash
264
+ */
265
+ export interface CdnScriptResource {
266
+ /** URL to the script */
267
+ url: string;
268
+ /** Subresource integrity hash */
269
+ integrity?: string;
270
+ }
271
+ /**
272
+ * Font CDN configuration
273
+ */
274
+ export interface ThemeCdnFonts {
275
+ /** Preconnect URLs for font providers */
276
+ preconnect?: string[];
277
+ /** Font stylesheet URLs */
278
+ stylesheets?: string[];
279
+ }
280
+ /**
281
+ * Icon CDN configuration
282
+ */
283
+ export interface ThemeCdnIcons {
284
+ /** Icon library script */
285
+ script?: CdnScriptResource;
286
+ }
287
+ /**
288
+ * Scripts CDN configuration
289
+ */
290
+ export interface ThemeCdnScripts {
291
+ /** Tailwind CSS Browser CDN URL */
292
+ tailwind?: string;
293
+ /** HTMX script resource */
294
+ htmx?: CdnScriptResource;
295
+ /** Alpine.js script resource */
296
+ alpine?: CdnScriptResource;
297
+ }
298
+ /**
299
+ * Complete CDN configuration for theme
300
+ *
301
+ * Allows customizing all external resource URLs used by the theme.
302
+ * Useful for:
303
+ * - Using private CDN mirrors
304
+ * - Self-hosting resources
305
+ * - Compliance with CSP policies
306
+ * - Using different font families
307
+ */
308
+ export interface ThemeCdnConfig {
309
+ /** Font configuration */
310
+ fonts?: ThemeCdnFonts;
311
+ /** Icon library configuration */
312
+ icons?: ThemeCdnIcons;
313
+ /** Script CDN configuration */
314
+ scripts?: ThemeCdnScripts;
315
+ }
316
+ /**
317
+ * Complete theme configuration
318
+ */
319
+ export interface ThemeConfig {
320
+ /** Theme name/identifier */
321
+ name?: string;
322
+ /** Color configuration */
323
+ colors: ThemeColors;
324
+ /** Typography configuration */
325
+ typography?: ThemeTypography;
326
+ /** Spacing scale */
327
+ spacing?: ThemeSpacing;
328
+ /** Border radius */
329
+ radius?: ThemeRadius;
330
+ /** Shadows */
331
+ shadows?: ThemeShadows;
332
+ /** Component-specific tokens */
333
+ components?: ComponentTokens;
334
+ /** CDN resource configuration */
335
+ cdn?: ThemeCdnConfig;
336
+ /** Dark mode variant */
337
+ dark?: Partial<ThemeConfig>;
338
+ /** Additional CSS custom properties */
339
+ customVars?: Record<string, string>;
340
+ /** Additional CSS (outside @theme) */
341
+ customCss?: string;
342
+ }
343
+ /**
344
+ * Default FrontMCP theme - GitHub/OpenAI inspired gray-black aesthetic
345
+ *
346
+ * Re-exported from presets for convenience. The default theme features:
347
+ * - Monochromatic gray-black color palette
348
+ * - System UI font stack
349
+ * - Smaller border radii (GitHub style)
350
+ * - Subtle shadows with gray tones
351
+ *
352
+ * @see ./presets/github-openai.ts for full theme definition
353
+ */
354
+ export declare const GITHUB_OPENAI_THEME: ThemeConfig;
355
+ export declare const DEFAULT_THEME: ThemeConfig;
356
+ /**
357
+ * Deep merge two theme configurations
358
+ *
359
+ * @remarks
360
+ * Dark variant handling:
361
+ * - When override.dark is provided, it's merged on top of base.dark (if present) or base
362
+ * - The resulting dark variant never contains a nested .dark property
363
+ * - This prevents infinite recursion and ensures clean dark theme composition
364
+ */
365
+ export declare function mergeThemes(base: ThemeConfig, override: DeepPartial<ThemeConfig>): ThemeConfig;
366
+ /**
367
+ * Create a theme by extending the default theme
368
+ */
369
+ export declare function createTheme(overrides: Partial<ThemeConfig>): ThemeConfig;
370
+ /**
371
+ * Build Tailwind @theme CSS from theme configuration
372
+ */
373
+ export declare function buildThemeCss(theme: ThemeConfig): string;
374
+ /**
375
+ * Build complete style block with @theme and custom CSS
376
+ *
377
+ * @remarks
378
+ * **Security/Trust Model:**
379
+ * The `theme.customCss` property is injected directly into a `<style>` tag without
380
+ * sanitization. This is intentional - CSS customization requires full CSS syntax support.
381
+ *
382
+ * **Trust assumptions:**
383
+ * - Theme configurations should only come from trusted sources (developer-defined themes)
384
+ * - Never pass user-provided input directly to `customCss`
385
+ * - If you need user-customizable styles, validate/sanitize them before including in a theme
386
+ *
387
+ * **Why no sanitization:**
388
+ * - CSS sanitization is complex and often breaks legitimate styles
389
+ * - The theme system is designed for developer use, not end-user customization
390
+ * - Developers creating themes are trusted to provide safe CSS
391
+ *
392
+ * @param theme - Theme configuration with optional customCss
393
+ * @returns HTML style block with Tailwind @theme directive
394
+ */
395
+ export declare function buildStyleBlock(theme: ThemeConfig): string;