@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 @@
1
+ {"version":3,"file":"button.schema.js","sourceRoot":"","sources":["../../../src/components/button.schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @file button.schema.ts\n * @description Zod schemas for Button component options validation.\n *\n * Provides strict validation schemas for button options including variants,\n * sizes, HTMX attributes, and data attributes. All schemas use .strict()\n * to reject unknown properties.\n *\n * @example\n * ```typescript\n * import { ButtonOptionsSchema } from '@frontmcp/ui';\n *\n * // Validate button options\n * const result = ButtonOptionsSchema.safeParse({ variant: 'primary' });\n * if (result.success) {\n * // Use result.data\n * }\n * ```\n *\n * @module @frontmcp/ui/components/button.schema\n */\n\nimport { z } from 'zod';\n\n// ============================================\n// Variant and Size Schemas\n// ============================================\n\n/**\n * Button variant enum schema\n */\nexport const ButtonVariantSchema = z.enum(['primary', 'secondary', 'outline', 'ghost', 'danger', 'success', 'link']);\n\n/**\n * Button variant type\n */\nexport type ButtonVariant = z.infer<typeof ButtonVariantSchema>;\n\n/**\n * Button size enum schema\n */\nexport const ButtonSizeSchema = z.enum(['xs', 'sm', 'md', 'lg', 'xl']);\n\n/**\n * Button size type\n */\nexport type ButtonSize = z.infer<typeof ButtonSizeSchema>;\n\n// ============================================\n// HTMX Schema\n// ============================================\n\n/**\n * HTMX attributes schema for button\n */\nexport const ButtonHtmxSchema = z\n .object({\n get: z.string().optional(),\n post: z.string().optional(),\n put: z.string().optional(),\n delete: z.string().optional(),\n target: z.string().optional(),\n swap: z.string().optional(),\n trigger: z.string().optional(),\n confirm: z.string().optional(),\n indicator: z.string().optional(),\n })\n .strict()\n .optional();\n\n/**\n * HTMX attributes type\n */\nexport type ButtonHtmx = z.infer<typeof ButtonHtmxSchema>;\n\n// ============================================\n// Button Options Schema\n// ============================================\n\n/**\n * Complete button options schema\n */\nexport const ButtonOptionsSchema = z\n .object({\n /** Button variant */\n variant: ButtonVariantSchema.optional(),\n /** Button size */\n size: ButtonSizeSchema.optional(),\n /** Button type attribute */\n type: z.enum(['button', 'submit', 'reset']).optional(),\n /** Disabled state */\n disabled: z.boolean().optional(),\n /** Loading state */\n loading: z.boolean().optional(),\n /** Full width */\n fullWidth: z.boolean().optional(),\n /** Icon before text (HTML string) */\n iconBefore: z.string().optional(),\n /** Icon after text (HTML string) */\n iconAfter: z.string().optional(),\n /** Icon only (no text) */\n iconOnly: z.boolean().optional(),\n /** Additional CSS classes */\n className: z.string().optional(),\n /** Button ID */\n id: z.string().optional(),\n /** Name attribute */\n name: z.string().optional(),\n /** Value attribute */\n value: z.string().optional(),\n /** Click handler (URL for links) */\n href: z.string().optional(),\n /** Open in new tab */\n target: z.enum(['_blank', '_self']).optional(),\n /** HTMX attributes */\n htmx: ButtonHtmxSchema,\n /** Data attributes */\n data: z.record(z.string(), z.string()).optional(),\n /** ARIA label */\n ariaLabel: z.string().optional(),\n })\n .strict();\n\n/**\n * Button options type (derived from schema)\n */\nexport type ButtonOptions = z.infer<typeof ButtonOptionsSchema>;\n\n// ============================================\n// Button Group Schema\n// ============================================\n\n/**\n * Button group options schema\n */\nexport const ButtonGroupOptionsSchema = z\n .object({\n /** Attach buttons visually */\n attached: z.boolean().optional(),\n /** Direction */\n direction: z.enum(['horizontal', 'vertical']).optional(),\n /** Gap between buttons */\n gap: z.enum(['sm', 'md', 'lg']).optional(),\n /** Additional CSS classes */\n className: z.string().optional(),\n })\n .strict();\n\n/**\n * Button group options type\n */\nexport type ButtonGroupOptions = z.infer<typeof ButtonGroupOptionsSchema>;\n"]}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Card Component
3
+ *
4
+ * Versatile card component for content containers.
5
+ */
6
+ /**
7
+ * Card variant styles
8
+ */
9
+ export type CardVariant = 'default' | 'outlined' | 'elevated' | 'filled' | 'ghost';
10
+ /**
11
+ * Card size options
12
+ */
13
+ export type CardSize = 'sm' | 'md' | 'lg';
14
+ /**
15
+ * Card component options
16
+ */
17
+ export interface CardOptions {
18
+ /** Card variant */
19
+ variant?: CardVariant;
20
+ /** Card size (padding) */
21
+ size?: CardSize;
22
+ /** Card title */
23
+ title?: string;
24
+ /** Card subtitle/description */
25
+ subtitle?: string;
26
+ /** Header actions (HTML) */
27
+ headerActions?: string;
28
+ /** Footer content (HTML) */
29
+ footer?: string;
30
+ /** Additional CSS classes */
31
+ className?: string;
32
+ /** Card ID */
33
+ id?: string;
34
+ /** HTMX attributes */
35
+ htmx?: {
36
+ get?: string;
37
+ post?: string;
38
+ target?: string;
39
+ swap?: string;
40
+ trigger?: string;
41
+ };
42
+ /** Data attributes */
43
+ data?: Record<string, string>;
44
+ /** Clickable card (adds hover effects) */
45
+ clickable?: boolean;
46
+ /** Click handler URL */
47
+ href?: string;
48
+ }
49
+ /**
50
+ * Build a card component
51
+ */
52
+ export declare function card(content: string, options?: CardOptions): string;
53
+ /**
54
+ * Build a card group (horizontal or vertical)
55
+ */
56
+ export declare function cardGroup(cards: string[], options?: {
57
+ direction?: 'horizontal' | 'vertical';
58
+ gap?: 'sm' | 'md' | 'lg';
59
+ className?: string;
60
+ }): string;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Card Component
4
+ *
5
+ * Versatile card component for content containers.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.card = card;
9
+ exports.cardGroup = cardGroup;
10
+ const base_1 = require("../layouts/base");
11
+ // ============================================
12
+ // Card Builder
13
+ // ============================================
14
+ /**
15
+ * Get variant CSS classes
16
+ */
17
+ function getVariantClasses(variant) {
18
+ const variants = {
19
+ default: 'bg-white border border-border rounded-xl shadow-sm',
20
+ outlined: 'bg-transparent border-2 border-border rounded-xl',
21
+ elevated: 'bg-white rounded-xl shadow-lg',
22
+ filled: 'bg-gray-50 rounded-xl',
23
+ ghost: 'bg-transparent',
24
+ };
25
+ return variants[variant];
26
+ }
27
+ /**
28
+ * Get size CSS classes
29
+ */
30
+ function getSizeClasses(size) {
31
+ const sizes = {
32
+ sm: 'p-4',
33
+ md: 'p-6',
34
+ lg: 'p-8',
35
+ };
36
+ return sizes[size];
37
+ }
38
+ /**
39
+ * Build HTMX attributes string
40
+ */
41
+ function buildHtmxAttrs(htmx) {
42
+ if (!htmx)
43
+ return '';
44
+ const attrs = [];
45
+ if (htmx.get)
46
+ attrs.push(`hx-get="${(0, base_1.escapeHtml)(htmx.get)}"`);
47
+ if (htmx.post)
48
+ attrs.push(`hx-post="${(0, base_1.escapeHtml)(htmx.post)}"`);
49
+ if (htmx.target)
50
+ attrs.push(`hx-target="${(0, base_1.escapeHtml)(htmx.target)}"`);
51
+ if (htmx.swap)
52
+ attrs.push(`hx-swap="${(0, base_1.escapeHtml)(htmx.swap)}"`);
53
+ if (htmx.trigger)
54
+ attrs.push(`hx-trigger="${(0, base_1.escapeHtml)(htmx.trigger)}"`);
55
+ return attrs.join(' ');
56
+ }
57
+ /**
58
+ * Build data attributes string
59
+ */
60
+ function buildDataAttrs(data) {
61
+ if (!data)
62
+ return '';
63
+ return Object.entries(data)
64
+ .map(([key, value]) => `data-${key}="${(0, base_1.escapeHtml)(value)}"`)
65
+ .join(' ');
66
+ }
67
+ /**
68
+ * Build a card component
69
+ */
70
+ function card(content, options = {}) {
71
+ const { variant = 'default', size = 'md', title, subtitle, headerActions, footer, className = '', id, htmx, data, clickable = false, href, } = options;
72
+ const variantClasses = getVariantClasses(variant);
73
+ const sizeClasses = getSizeClasses(size);
74
+ const clickableClasses = clickable ? 'cursor-pointer hover:shadow-md transition-shadow' : '';
75
+ const allClasses = [variantClasses, sizeClasses, clickableClasses, className].filter(Boolean).join(' ');
76
+ const htmxAttrs = buildHtmxAttrs(htmx);
77
+ const dataAttrs = buildDataAttrs(data);
78
+ const idAttr = id ? `id="${(0, base_1.escapeHtml)(id)}"` : '';
79
+ // Build header if title exists
80
+ const hasHeader = title || subtitle || headerActions;
81
+ const headerHtml = hasHeader
82
+ ? `<div class="flex items-start justify-between mb-4">
83
+ <div>
84
+ ${title ? `<h3 class="text-lg font-semibold text-text-primary">${(0, base_1.escapeHtml)(title)}</h3>` : ''}
85
+ ${subtitle ? `<p class="text-sm text-text-secondary mt-1">${(0, base_1.escapeHtml)(subtitle)}</p>` : ''}
86
+ </div>
87
+ ${headerActions ? `<div class="flex items-center gap-2">${headerActions}</div>` : ''}
88
+ </div>`
89
+ : '';
90
+ // Build footer if exists
91
+ const footerHtml = footer ? `<div class="mt-4 pt-4 border-t border-divider">${footer}</div>` : '';
92
+ // Wrap in anchor tag if href provided
93
+ if (href) {
94
+ return `<a href="${(0, base_1.escapeHtml)(href)}" class="${allClasses}" ${idAttr} ${htmxAttrs} ${dataAttrs}>
95
+ ${headerHtml}
96
+ ${content}
97
+ ${footerHtml}
98
+ </a>`;
99
+ }
100
+ return `<div class="${allClasses}" ${idAttr} ${htmxAttrs} ${dataAttrs}>
101
+ ${headerHtml}
102
+ ${content}
103
+ ${footerHtml}
104
+ </div>`;
105
+ }
106
+ /**
107
+ * Build a card group (horizontal or vertical)
108
+ */
109
+ function cardGroup(cards, options = {}) {
110
+ const { direction = 'vertical', gap = 'md', className = '' } = options;
111
+ const gapClasses = { sm: 'gap-2', md: 'gap-4', lg: 'gap-6' };
112
+ const directionClasses = direction === 'horizontal' ? 'flex flex-row flex-wrap' : 'flex flex-col';
113
+ return `<div class="${directionClasses} ${gapClasses[gap]} ${className}">
114
+ ${cards.join('\n')}
115
+ </div>`;
116
+ }
117
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../src/components/card.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Card Component\n *\n * Versatile card component for content containers.\n */\n\nimport { escapeHtml } from '../layouts/base';\n\n// ============================================\n// Card Types\n// ============================================\n\n/**\n * Card variant styles\n */\nexport type CardVariant = 'default' | 'outlined' | 'elevated' | 'filled' | 'ghost';\n\n/**\n * Card size options\n */\nexport type CardSize = 'sm' | 'md' | 'lg';\n\n/**\n * Card component options\n */\nexport interface CardOptions {\n /** Card variant */\n variant?: CardVariant;\n /** Card size (padding) */\n size?: CardSize;\n /** Card title */\n title?: string;\n /** Card subtitle/description */\n subtitle?: string;\n /** Header actions (HTML) */\n headerActions?: string;\n /** Footer content (HTML) */\n footer?: string;\n /** Additional CSS classes */\n className?: string;\n /** Card ID */\n id?: string;\n /** HTMX attributes */\n htmx?: {\n get?: string;\n post?: string;\n target?: string;\n swap?: string;\n trigger?: string;\n };\n /** Data attributes */\n data?: Record<string, string>;\n /** Clickable card (adds hover effects) */\n clickable?: boolean;\n /** Click handler URL */\n href?: string;\n}\n\n// ============================================\n// Card Builder\n// ============================================\n\n/**\n * Get variant CSS classes\n */\nfunction getVariantClasses(variant: CardVariant): string {\n const variants: Record<CardVariant, string> = {\n default: 'bg-white border border-border rounded-xl shadow-sm',\n outlined: 'bg-transparent border-2 border-border rounded-xl',\n elevated: 'bg-white rounded-xl shadow-lg',\n filled: 'bg-gray-50 rounded-xl',\n ghost: 'bg-transparent',\n };\n return variants[variant];\n}\n\n/**\n * Get size CSS classes\n */\nfunction getSizeClasses(size: CardSize): string {\n const sizes: Record<CardSize, string> = {\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n };\n return sizes[size];\n}\n\n/**\n * Build HTMX attributes string\n */\nfunction buildHtmxAttrs(htmx?: CardOptions['htmx']): string {\n if (!htmx) return '';\n const attrs: string[] = [];\n if (htmx.get) attrs.push(`hx-get=\"${escapeHtml(htmx.get)}\"`);\n if (htmx.post) attrs.push(`hx-post=\"${escapeHtml(htmx.post)}\"`);\n if (htmx.target) attrs.push(`hx-target=\"${escapeHtml(htmx.target)}\"`);\n if (htmx.swap) attrs.push(`hx-swap=\"${escapeHtml(htmx.swap)}\"`);\n if (htmx.trigger) attrs.push(`hx-trigger=\"${escapeHtml(htmx.trigger)}\"`);\n return attrs.join(' ');\n}\n\n/**\n * Build data attributes string\n */\nfunction buildDataAttrs(data?: Record<string, string>): string {\n if (!data) return '';\n return Object.entries(data)\n .map(([key, value]) => `data-${key}=\"${escapeHtml(value)}\"`)\n .join(' ');\n}\n\n/**\n * Build a card component\n */\nexport function card(content: string, options: CardOptions = {}): string {\n const {\n variant = 'default',\n size = 'md',\n title,\n subtitle,\n headerActions,\n footer,\n className = '',\n id,\n htmx,\n data,\n clickable = false,\n href,\n } = options;\n\n const variantClasses = getVariantClasses(variant);\n const sizeClasses = getSizeClasses(size);\n const clickableClasses = clickable ? 'cursor-pointer hover:shadow-md transition-shadow' : '';\n\n const allClasses = [variantClasses, sizeClasses, clickableClasses, className].filter(Boolean).join(' ');\n const htmxAttrs = buildHtmxAttrs(htmx);\n const dataAttrs = buildDataAttrs(data);\n const idAttr = id ? `id=\"${escapeHtml(id)}\"` : '';\n\n // Build header if title exists\n const hasHeader = title || subtitle || headerActions;\n const headerHtml = hasHeader\n ? `<div class=\"flex items-start justify-between mb-4\">\n <div>\n ${title ? `<h3 class=\"text-lg font-semibold text-text-primary\">${escapeHtml(title)}</h3>` : ''}\n ${subtitle ? `<p class=\"text-sm text-text-secondary mt-1\">${escapeHtml(subtitle)}</p>` : ''}\n </div>\n ${headerActions ? `<div class=\"flex items-center gap-2\">${headerActions}</div>` : ''}\n </div>`\n : '';\n\n // Build footer if exists\n const footerHtml = footer ? `<div class=\"mt-4 pt-4 border-t border-divider\">${footer}</div>` : '';\n\n // Wrap in anchor tag if href provided\n if (href) {\n return `<a href=\"${escapeHtml(href)}\" class=\"${allClasses}\" ${idAttr} ${htmxAttrs} ${dataAttrs}>\n ${headerHtml}\n ${content}\n ${footerHtml}\n </a>`;\n }\n\n return `<div class=\"${allClasses}\" ${idAttr} ${htmxAttrs} ${dataAttrs}>\n ${headerHtml}\n ${content}\n ${footerHtml}\n </div>`;\n}\n\n/**\n * Build a card group (horizontal or vertical)\n */\nexport function cardGroup(\n cards: string[],\n options: {\n direction?: 'horizontal' | 'vertical';\n gap?: 'sm' | 'md' | 'lg';\n className?: string;\n } = {},\n): string {\n const { direction = 'vertical', gap = 'md', className = '' } = options;\n\n const gapClasses = { sm: 'gap-2', md: 'gap-4', lg: 'gap-6' };\n const directionClasses = direction === 'horizontal' ? 'flex flex-row flex-wrap' : 'flex flex-col';\n\n return `<div class=\"${directionClasses} ${gapClasses[gap]} ${className}\">\n ${cards.join('\\n')}\n </div>`;\n}\n"]}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @file card.schema.ts
3
+ * @description Zod schemas for Card component options validation.
4
+ *
5
+ * Provides strict validation schemas for card options including variants,
6
+ * sizes, HTMX attributes, and clickable behavior.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { CardOptionsSchema } from '@frontmcp/ui';
11
+ *
12
+ * const result = CardOptionsSchema.safeParse({ variant: 'elevated' });
13
+ * ```
14
+ *
15
+ * @module @frontmcp/ui/components/card.schema
16
+ */
17
+ import { z } from 'zod';
18
+ /**
19
+ * Card variant enum schema
20
+ */
21
+ export declare const CardVariantSchema: z.ZodEnum<{
22
+ elevated: "elevated";
23
+ default: "default";
24
+ ghost: "ghost";
25
+ outlined: "outlined";
26
+ filled: "filled";
27
+ }>;
28
+ /**
29
+ * Card variant type
30
+ */
31
+ export type CardVariant = z.infer<typeof CardVariantSchema>;
32
+ /**
33
+ * Card size enum schema
34
+ */
35
+ export declare const CardSizeSchema: z.ZodEnum<{
36
+ sm: "sm";
37
+ lg: "lg";
38
+ md: "md";
39
+ }>;
40
+ /**
41
+ * Card size type
42
+ */
43
+ export type CardSize = z.infer<typeof CardSizeSchema>;
44
+ /**
45
+ * HTMX attributes schema for card
46
+ */
47
+ export declare const CardHtmxSchema: z.ZodOptional<z.ZodObject<{
48
+ get: z.ZodOptional<z.ZodString>;
49
+ post: z.ZodOptional<z.ZodString>;
50
+ target: z.ZodOptional<z.ZodString>;
51
+ swap: z.ZodOptional<z.ZodString>;
52
+ trigger: z.ZodOptional<z.ZodString>;
53
+ }, z.core.$strict>>;
54
+ /**
55
+ * Card HTMX type
56
+ */
57
+ export type CardHtmx = z.infer<typeof CardHtmxSchema>;
58
+ /**
59
+ * Complete card options schema
60
+ */
61
+ export declare const CardOptionsSchema: z.ZodObject<{
62
+ variant: z.ZodOptional<z.ZodEnum<{
63
+ elevated: "elevated";
64
+ default: "default";
65
+ ghost: "ghost";
66
+ outlined: "outlined";
67
+ filled: "filled";
68
+ }>>;
69
+ size: z.ZodOptional<z.ZodEnum<{
70
+ sm: "sm";
71
+ lg: "lg";
72
+ md: "md";
73
+ }>>;
74
+ title: z.ZodOptional<z.ZodString>;
75
+ subtitle: z.ZodOptional<z.ZodString>;
76
+ headerActions: z.ZodOptional<z.ZodString>;
77
+ footer: z.ZodOptional<z.ZodString>;
78
+ className: z.ZodOptional<z.ZodString>;
79
+ id: z.ZodOptional<z.ZodString>;
80
+ htmx: z.ZodOptional<z.ZodObject<{
81
+ get: z.ZodOptional<z.ZodString>;
82
+ post: z.ZodOptional<z.ZodString>;
83
+ target: z.ZodOptional<z.ZodString>;
84
+ swap: z.ZodOptional<z.ZodString>;
85
+ trigger: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strict>>;
87
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
88
+ clickable: z.ZodOptional<z.ZodBoolean>;
89
+ href: z.ZodOptional<z.ZodString>;
90
+ }, z.core.$strict>;
91
+ /**
92
+ * Card options type (derived from schema)
93
+ */
94
+ export type CardOptions = z.infer<typeof CardOptionsSchema>;
95
+ /**
96
+ * Card group options schema
97
+ */
98
+ export declare const CardGroupOptionsSchema: z.ZodObject<{
99
+ direction: z.ZodOptional<z.ZodEnum<{
100
+ horizontal: "horizontal";
101
+ vertical: "vertical";
102
+ }>>;
103
+ gap: z.ZodOptional<z.ZodEnum<{
104
+ sm: "sm";
105
+ lg: "lg";
106
+ md: "md";
107
+ }>>;
108
+ className: z.ZodOptional<z.ZodString>;
109
+ }, z.core.$strict>;
110
+ /**
111
+ * Card group options type
112
+ */
113
+ export type CardGroupOptions = z.infer<typeof CardGroupOptionsSchema>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * @file card.schema.ts
4
+ * @description Zod schemas for Card component options validation.
5
+ *
6
+ * Provides strict validation schemas for card options including variants,
7
+ * sizes, HTMX attributes, and clickable behavior.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { CardOptionsSchema } from '@frontmcp/ui';
12
+ *
13
+ * const result = CardOptionsSchema.safeParse({ variant: 'elevated' });
14
+ * ```
15
+ *
16
+ * @module @frontmcp/ui/components/card.schema
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.CardGroupOptionsSchema = exports.CardOptionsSchema = exports.CardHtmxSchema = exports.CardSizeSchema = exports.CardVariantSchema = void 0;
20
+ const zod_1 = require("zod");
21
+ // ============================================
22
+ // Variant and Size Schemas
23
+ // ============================================
24
+ /**
25
+ * Card variant enum schema
26
+ */
27
+ exports.CardVariantSchema = zod_1.z.enum(['default', 'outlined', 'elevated', 'filled', 'ghost']);
28
+ /**
29
+ * Card size enum schema
30
+ */
31
+ exports.CardSizeSchema = zod_1.z.enum(['sm', 'md', 'lg']);
32
+ // ============================================
33
+ // HTMX Schema
34
+ // ============================================
35
+ /**
36
+ * HTMX attributes schema for card
37
+ */
38
+ exports.CardHtmxSchema = zod_1.z
39
+ .object({
40
+ get: zod_1.z.string().optional(),
41
+ post: zod_1.z.string().optional(),
42
+ target: zod_1.z.string().optional(),
43
+ swap: zod_1.z.string().optional(),
44
+ trigger: zod_1.z.string().optional(),
45
+ })
46
+ .strict()
47
+ .optional();
48
+ // ============================================
49
+ // Card Options Schema
50
+ // ============================================
51
+ /**
52
+ * Complete card options schema
53
+ */
54
+ exports.CardOptionsSchema = zod_1.z
55
+ .object({
56
+ /** Card variant */
57
+ variant: exports.CardVariantSchema.optional(),
58
+ /** Card size (padding) */
59
+ size: exports.CardSizeSchema.optional(),
60
+ /** Card title */
61
+ title: zod_1.z.string().optional(),
62
+ /** Card subtitle/description */
63
+ subtitle: zod_1.z.string().optional(),
64
+ /** Header actions (HTML string) */
65
+ headerActions: zod_1.z.string().optional(),
66
+ /** Footer content (HTML string) */
67
+ footer: zod_1.z.string().optional(),
68
+ /** Additional CSS classes */
69
+ className: zod_1.z.string().optional(),
70
+ /** Card ID */
71
+ id: zod_1.z.string().optional(),
72
+ /** HTMX attributes */
73
+ htmx: exports.CardHtmxSchema,
74
+ /** Data attributes */
75
+ data: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
76
+ /** Clickable card (adds hover effects) */
77
+ clickable: zod_1.z.boolean().optional(),
78
+ /** Click handler URL */
79
+ href: zod_1.z.string().optional(),
80
+ })
81
+ .strict();
82
+ // ============================================
83
+ // Card Group Schema
84
+ // ============================================
85
+ /**
86
+ * Card group options schema
87
+ */
88
+ exports.CardGroupOptionsSchema = zod_1.z
89
+ .object({
90
+ /** Direction */
91
+ direction: zod_1.z.enum(['horizontal', 'vertical']).optional(),
92
+ /** Gap between cards */
93
+ gap: zod_1.z.enum(['sm', 'md', 'lg']).optional(),
94
+ /** Additional CSS classes */
95
+ className: zod_1.z.string().optional(),
96
+ })
97
+ .strict();
98
+ //# sourceMappingURL=card.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.schema.js","sourceRoot":"","sources":["../../../src/components/card.schema.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,6BAAwB;AAExB,+CAA+C;AAC/C,2BAA2B;AAC3B,+CAA+C;AAE/C;;GAEG;AACU,QAAA,iBAAiB,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAOhG;;GAEG;AACU,QAAA,cAAc,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAOzD,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;GAEG;AACU,QAAA,cAAc,GAAG,OAAC;KAC5B,MAAM,CAAC;IACN,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,EAAE,CAAC;AAOd,+CAA+C;AAC/C,sBAAsB;AACtB,+CAA+C;AAE/C;;GAEG;AACU,QAAA,iBAAiB,GAAG,OAAC;KAC/B,MAAM,CAAC;IACN,mBAAmB;IACnB,OAAO,EAAE,yBAAiB,CAAC,QAAQ,EAAE;IACrC,0BAA0B;IAC1B,IAAI,EAAE,sBAAc,CAAC,QAAQ,EAAE;IAC/B,iBAAiB;IACjB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,gCAAgC;IAChC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,mCAAmC;IACnC,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,mCAAmC;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,6BAA6B;IAC7B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,cAAc;IACd,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,sBAAsB;IACtB,IAAI,EAAE,sBAAc;IACpB,sBAAsB;IACtB,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjD,0CAA0C;IAC1C,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,wBAAwB;IACxB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC;KACD,MAAM,EAAE,CAAC;AAOZ,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;GAEG;AACU,QAAA,sBAAsB,GAAG,OAAC;KACpC,MAAM,CAAC;IACN,gBAAgB;IAChB,SAAS,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxD,wBAAwB;IACxB,GAAG,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,6BAA6B;IAC7B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,MAAM,EAAE,CAAC","sourcesContent":["/**\n * @file card.schema.ts\n * @description Zod schemas for Card component options validation.\n *\n * Provides strict validation schemas for card options including variants,\n * sizes, HTMX attributes, and clickable behavior.\n *\n * @example\n * ```typescript\n * import { CardOptionsSchema } from '@frontmcp/ui';\n *\n * const result = CardOptionsSchema.safeParse({ variant: 'elevated' });\n * ```\n *\n * @module @frontmcp/ui/components/card.schema\n */\n\nimport { z } from 'zod';\n\n// ============================================\n// Variant and Size Schemas\n// ============================================\n\n/**\n * Card variant enum schema\n */\nexport const CardVariantSchema = z.enum(['default', 'outlined', 'elevated', 'filled', 'ghost']);\n\n/**\n * Card variant type\n */\nexport type CardVariant = z.infer<typeof CardVariantSchema>;\n\n/**\n * Card size enum schema\n */\nexport const CardSizeSchema = z.enum(['sm', 'md', 'lg']);\n\n/**\n * Card size type\n */\nexport type CardSize = z.infer<typeof CardSizeSchema>;\n\n// ============================================\n// HTMX Schema\n// ============================================\n\n/**\n * HTMX attributes schema for card\n */\nexport const CardHtmxSchema = z\n .object({\n get: z.string().optional(),\n post: z.string().optional(),\n target: z.string().optional(),\n swap: z.string().optional(),\n trigger: z.string().optional(),\n })\n .strict()\n .optional();\n\n/**\n * Card HTMX type\n */\nexport type CardHtmx = z.infer<typeof CardHtmxSchema>;\n\n// ============================================\n// Card Options Schema\n// ============================================\n\n/**\n * Complete card options schema\n */\nexport const CardOptionsSchema = z\n .object({\n /** Card variant */\n variant: CardVariantSchema.optional(),\n /** Card size (padding) */\n size: CardSizeSchema.optional(),\n /** Card title */\n title: z.string().optional(),\n /** Card subtitle/description */\n subtitle: z.string().optional(),\n /** Header actions (HTML string) */\n headerActions: z.string().optional(),\n /** Footer content (HTML string) */\n footer: z.string().optional(),\n /** Additional CSS classes */\n className: z.string().optional(),\n /** Card ID */\n id: z.string().optional(),\n /** HTMX attributes */\n htmx: CardHtmxSchema,\n /** Data attributes */\n data: z.record(z.string(), z.string()).optional(),\n /** Clickable card (adds hover effects) */\n clickable: z.boolean().optional(),\n /** Click handler URL */\n href: z.string().optional(),\n })\n .strict();\n\n/**\n * Card options type (derived from schema)\n */\nexport type CardOptions = z.infer<typeof CardOptionsSchema>;\n\n// ============================================\n// Card Group Schema\n// ============================================\n\n/**\n * Card group options schema\n */\nexport const CardGroupOptionsSchema = z\n .object({\n /** Direction */\n direction: z.enum(['horizontal', 'vertical']).optional(),\n /** Gap between cards */\n gap: z.enum(['sm', 'md', 'lg']).optional(),\n /** Additional CSS classes */\n className: z.string().optional(),\n })\n .strict();\n\n/**\n * Card group options type\n */\nexport type CardGroupOptions = z.infer<typeof CardGroupOptionsSchema>;\n"]}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Form Components
3
+ *
4
+ * Form elements including inputs, selects, textareas, and form layouts.
5
+ */
6
+ /**
7
+ * Input type options
8
+ */
9
+ export type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'date' | 'time' | 'datetime-local' | 'hidden';
10
+ /**
11
+ * Input size options
12
+ */
13
+ export type InputSize = 'sm' | 'md' | 'lg';
14
+ /**
15
+ * Input state
16
+ */
17
+ export type InputState = 'default' | 'error' | 'success' | 'warning';
18
+ /**
19
+ * Base input options
20
+ */
21
+ export interface InputOptions {
22
+ /** Input type */
23
+ type?: InputType;
24
+ /** Input name */
25
+ name: string;
26
+ /** Input ID (defaults to name) */
27
+ id?: string;
28
+ /** Input value */
29
+ value?: string;
30
+ /** Placeholder text */
31
+ placeholder?: string;
32
+ /** Label text */
33
+ label?: string;
34
+ /** Helper text */
35
+ helper?: string;
36
+ /** Error message */
37
+ error?: string;
38
+ /** Input size */
39
+ size?: InputSize;
40
+ /** Input state */
41
+ state?: InputState;
42
+ /** Required field */
43
+ required?: boolean;
44
+ /** Disabled state */
45
+ disabled?: boolean;
46
+ /** Readonly state */
47
+ readonly?: boolean;
48
+ /** Autocomplete attribute */
49
+ autocomplete?: string;
50
+ /** Pattern for validation */
51
+ pattern?: string;
52
+ /** Min value (for number/date) */
53
+ min?: string | number;
54
+ /** Max value (for number/date) */
55
+ max?: string | number;
56
+ /** Step value (for number) */
57
+ step?: string | number;
58
+ /** Additional CSS classes */
59
+ className?: string;
60
+ /** HTMX attributes */
61
+ htmx?: {
62
+ post?: string;
63
+ get?: string;
64
+ target?: string;
65
+ swap?: string;
66
+ trigger?: string;
67
+ validate?: boolean;
68
+ };
69
+ /** Data attributes */
70
+ data?: Record<string, string>;
71
+ /** Icon before input */
72
+ iconBefore?: string;
73
+ /** Icon after input */
74
+ iconAfter?: string;
75
+ }
76
+ /**
77
+ * Select options
78
+ */
79
+ export interface SelectOption {
80
+ value: string;
81
+ label: string;
82
+ disabled?: boolean;
83
+ selected?: boolean;
84
+ }
85
+ export interface SelectOptions extends Omit<InputOptions, 'type' | 'pattern' | 'min' | 'max' | 'step' | 'autocomplete'> {
86
+ /** Select options */
87
+ options: SelectOption[];
88
+ /** Multiple selection */
89
+ multiple?: boolean;
90
+ }
91
+ /**
92
+ * Textarea options
93
+ */
94
+ export interface TextareaOptions extends Omit<InputOptions, 'type' | 'pattern' | 'min' | 'max' | 'step'> {
95
+ /** Number of rows */
96
+ rows?: number;
97
+ /** Resize behavior */
98
+ resize?: 'none' | 'vertical' | 'horizontal' | 'both';
99
+ }
100
+ /**
101
+ * Checkbox options
102
+ */
103
+ export interface CheckboxOptions {
104
+ /** Input name */
105
+ name: string;
106
+ /** Input ID */
107
+ id?: string;
108
+ /** Input value */
109
+ value?: string;
110
+ /** Label text */
111
+ label: string;
112
+ /** Checked state */
113
+ checked?: boolean;
114
+ /** Disabled state */
115
+ disabled?: boolean;
116
+ /** Helper text */
117
+ helper?: string;
118
+ /** Error message */
119
+ error?: string;
120
+ /** Additional CSS classes */
121
+ className?: string;
122
+ /** HTMX attributes */
123
+ htmx?: {
124
+ post?: string;
125
+ get?: string;
126
+ target?: string;
127
+ swap?: string;
128
+ trigger?: string;
129
+ };
130
+ }
131
+ /**
132
+ * Radio group options
133
+ */
134
+ export interface RadioGroupOptions {
135
+ /** Group name */
136
+ name: string;
137
+ /** Radio options */
138
+ options: Array<{
139
+ value: string;
140
+ label: string;
141
+ disabled?: boolean;
142
+ }>;
143
+ /** Selected value */
144
+ value?: string;
145
+ /** Label for the group */
146
+ label?: string;
147
+ /** Helper text */
148
+ helper?: string;
149
+ /** Error message */
150
+ error?: string;
151
+ /** Layout direction */
152
+ direction?: 'horizontal' | 'vertical';
153
+ /** Additional CSS classes */
154
+ className?: string;
155
+ }
156
+ /**
157
+ * Build a text input component
158
+ */
159
+ export declare function input(options: InputOptions): string;
160
+ /**
161
+ * Build a select component
162
+ */
163
+ export declare function select(options: SelectOptions): string;
164
+ /**
165
+ * Build a textarea component
166
+ */
167
+ export declare function textarea(options: TextareaOptions): string;
168
+ /**
169
+ * Build a checkbox component
170
+ */
171
+ export declare function checkbox(options: CheckboxOptions): string;
172
+ /**
173
+ * Build a radio group component
174
+ */
175
+ export declare function radioGroup(options: RadioGroupOptions): string;
176
+ /**
177
+ * Form wrapper options
178
+ */
179
+ export interface FormOptions {
180
+ /** Form action URL */
181
+ action?: string;
182
+ /** HTTP method */
183
+ method?: 'get' | 'post';
184
+ /** Form ID */
185
+ id?: string;
186
+ /** Additional CSS classes */
187
+ className?: string;
188
+ /** HTMX attributes */
189
+ htmx?: {
190
+ post?: string;
191
+ get?: string;
192
+ put?: string;
193
+ delete?: string;
194
+ target?: string;
195
+ swap?: string;
196
+ indicator?: string;
197
+ confirm?: string;
198
+ };
199
+ /** Prevent default submission */
200
+ preventDefault?: boolean;
201
+ /** Autocomplete */
202
+ autocomplete?: 'on' | 'off';
203
+ /** Enctype for file uploads */
204
+ enctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
205
+ }
206
+ /**
207
+ * Build form wrapper
208
+ */
209
+ export declare function form(content: string, options?: FormOptions): string;
210
+ /**
211
+ * Build form row (for horizontal forms)
212
+ */
213
+ export declare function formRow(fields: string[], options?: {
214
+ gap?: 'sm' | 'md' | 'lg';
215
+ className?: string;
216
+ }): string;
217
+ /**
218
+ * Build form section with title
219
+ */
220
+ export declare function formSection(content: string, options?: {
221
+ title?: string;
222
+ description?: string;
223
+ className?: string;
224
+ }): string;
225
+ /**
226
+ * Build form actions (submit/cancel buttons area)
227
+ */
228
+ export declare function formActions(buttons: string[], options?: {
229
+ align?: 'left' | 'center' | 'right' | 'between';
230
+ className?: string;
231
+ }): string;
232
+ /**
233
+ * Build a hidden input
234
+ */
235
+ export declare function hiddenInput(name: string, value: string): string;
236
+ /**
237
+ * Build CSRF token hidden input
238
+ */
239
+ export declare function csrfInput(token: string): string;