@invisibleloop/pulse 0.1.21

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 (344) hide show
  1. package/.claude/commands/build-page.md +59 -0
  2. package/.claude/commands/new-doc-page.md +45 -0
  3. package/.claude/commands/verify.md +52 -0
  4. package/.claude/pulse-checklist.md +111 -0
  5. package/.claude/settings.local.json +102 -0
  6. package/.github/workflows/ci.yml +22 -0
  7. package/.github/workflows/publish.yml +41 -0
  8. package/.pulse/load-reports/home/1773432711417.json +22 -0
  9. package/CLAUDE.md +383 -0
  10. package/README.md +95 -0
  11. package/docs/.claude/pulse-checklist.md +111 -0
  12. package/docs/public/.pulse-ui-version +1 -0
  13. package/docs/public/dist/accessibility.boot-5DVTARJU.js +115 -0
  14. package/docs/public/dist/actions.boot-P66HKQEM.js +164 -0
  15. package/docs/public/dist/auth.boot-IMAJAUPH.js +140 -0
  16. package/docs/public/dist/caching.boot-DVR6KDE7.js +53 -0
  17. package/docs/public/dist/components--accordion.boot-3HVKMNWC.js +11 -0
  18. package/docs/public/dist/components--alert.boot-GCEXOZAC.js +6 -0
  19. package/docs/public/dist/components--app-badge.boot-DVT3GCHJ.js +6 -0
  20. package/docs/public/dist/components--avatar.boot-PSW24EVA.js +5 -0
  21. package/docs/public/dist/components--badge.boot-TYDY2RMK.js +7 -0
  22. package/docs/public/dist/components--banner.boot-EI5PZSZK.js +7 -0
  23. package/docs/public/dist/components--breadcrumbs.boot-SMA2E2GO.js +34 -0
  24. package/docs/public/dist/components--button.boot-J54BQM2E.js +23 -0
  25. package/docs/public/dist/components--card.boot-PZGNDIB6.js +138 -0
  26. package/docs/public/dist/components--carousel.boot-TP6LPFZZ.js +12 -0
  27. package/docs/public/dist/components--charts.boot-2EOYQWKL.js +108 -0
  28. package/docs/public/dist/components--checkbox.boot-DS5BSL6T.js +54 -0
  29. package/docs/public/dist/components--cluster.boot-HHVIBBJG.js +9 -0
  30. package/docs/public/dist/components--code-window.boot-2GR2DV33.js +20 -0
  31. package/docs/public/dist/components--container.boot-7LOOGK2K.js +5 -0
  32. package/docs/public/dist/components--cta.boot-FSNZ5YRT.js +11 -0
  33. package/docs/public/dist/components--divider.boot-3NI2C3QG.js +6 -0
  34. package/docs/public/dist/components--empty.boot-YX2UR3PV.js +7 -0
  35. package/docs/public/dist/components--feature.boot-MUD7NSUO.js +13 -0
  36. package/docs/public/dist/components--fieldset.boot-J7BYHMKF.js +19 -0
  37. package/docs/public/dist/components--fileupload.boot-NIKVTTPD.js +52 -0
  38. package/docs/public/dist/components--footer.boot-EYUK5FRG.js +14 -0
  39. package/docs/public/dist/components--grid.boot-URDQVDDR.js +59 -0
  40. package/docs/public/dist/components--heading.boot-BPQKU43E.js +44 -0
  41. package/docs/public/dist/components--hero.boot-4RAPRGAB.js +17 -0
  42. package/docs/public/dist/components--icons.boot-ZITNU5JP.js +68 -0
  43. package/docs/public/dist/components--image.boot-XEEGHQZF.js +19 -0
  44. package/docs/public/dist/components--input.boot-SGASZG5K.js +7 -0
  45. package/docs/public/dist/components--list.boot-W3XC5MHD.js +55 -0
  46. package/docs/public/dist/components--media.boot-5VFIETZO.js +13 -0
  47. package/docs/public/dist/components--modal.boot-RZUYXBN2.js +47 -0
  48. package/docs/public/dist/components--nav.boot-ODBOHU7O.js +33 -0
  49. package/docs/public/dist/components--pricing.boot-4AQ4ZVBY.js +21 -0
  50. package/docs/public/dist/components--progress.boot-GHAGYZOK.js +30 -0
  51. package/docs/public/dist/components--prose.boot-QANJL6JI.js +67 -0
  52. package/docs/public/dist/components--pullquote.boot-Q2WMNAZU.js +22 -0
  53. package/docs/public/dist/components--radio.boot-TJRDQ2OL.js +75 -0
  54. package/docs/public/dist/components--rating.boot-QBAN6DEL.js +38 -0
  55. package/docs/public/dist/components--search.boot-PXH5O5AG.js +17 -0
  56. package/docs/public/dist/components--section.boot-AQGIYHWW.js +12 -0
  57. package/docs/public/dist/components--segmented.boot-BEVTKEJO.js +33 -0
  58. package/docs/public/dist/components--select.boot-47X5RHOC.js +10 -0
  59. package/docs/public/dist/components--slider.boot-PSRRX7XL.js +47 -0
  60. package/docs/public/dist/components--spinner.boot-MZ5MO2OH.js +22 -0
  61. package/docs/public/dist/components--stack.boot-DI4NJXBF.js +9 -0
  62. package/docs/public/dist/components--stat.boot-QMFUWBQT.js +9 -0
  63. package/docs/public/dist/components--stepper.boot-34PP2NEV.js +22 -0
  64. package/docs/public/dist/components--table.boot-FCQGSFIQ.js +11 -0
  65. package/docs/public/dist/components--testimonial.boot-DWQPDKYG.js +11 -0
  66. package/docs/public/dist/components--textarea.boot-QVXLBOJ5.js +4 -0
  67. package/docs/public/dist/components--timeline.boot-26LN52P2.js +95 -0
  68. package/docs/public/dist/components--toggle.boot-IQQEI76S.js +29 -0
  69. package/docs/public/dist/components--tooltip.boot-LGHCO6NN.js +9 -0
  70. package/docs/public/dist/components.boot-SE6PQ4P7.js +103 -0
  71. package/docs/public/dist/config.boot-DTRRWUE6.js +126 -0
  72. package/docs/public/dist/constraints.boot-DUHDZBMC.js +71 -0
  73. package/docs/public/dist/deploy.boot-SLAD3NI2.js +163 -0
  74. package/docs/public/dist/docs-8e3d4b5c.css +1 -0
  75. package/docs/public/dist/extending.boot-UA3CN243.js +159 -0
  76. package/docs/public/dist/faq.boot-6EQAWLQR.js +43 -0
  77. package/docs/public/dist/getting-started.boot-TDKIFL5U.js +86 -0
  78. package/docs/public/dist/guard.boot-AUHAWTG4.js +80 -0
  79. package/docs/public/dist/home.boot-BVQXRH32.js +383 -0
  80. package/docs/public/dist/how-it-works.boot-LTWAKWKW.js +104 -0
  81. package/docs/public/dist/hydration.boot-JRM6IPJL.js +78 -0
  82. package/docs/public/dist/images.boot-M6ZVKTZS.js +80 -0
  83. package/docs/public/dist/manifest.json +94 -0
  84. package/docs/public/dist/meta.boot-7NXGPHR4.js +79 -0
  85. package/docs/public/dist/mutations.boot-F6F43UDX.js +79 -0
  86. package/docs/public/dist/navigation.boot-AOXWS3ZF.js +57 -0
  87. package/docs/public/dist/performance.boot-C3UPCOBK.js +98 -0
  88. package/docs/public/dist/persist.boot-WT32PQOQ.js +61 -0
  89. package/docs/public/dist/project-structure.boot-FB3LRVJ4.js +63 -0
  90. package/docs/public/dist/prompt-examples.boot-YKR4VDK4.js +31 -0
  91. package/docs/public/dist/pulse-ui-81a85c03.css +1 -0
  92. package/docs/public/dist/raw-responses.boot-M4KA5YXL.js +104 -0
  93. package/docs/public/dist/routing.boot-FNX5FDGH.js +70 -0
  94. package/docs/public/dist/runtime-B73WLANC.js +1 -0
  95. package/docs/public/dist/runtime-KO4BHUQ3.js +49 -0
  96. package/docs/public/dist/runtime-L2HNXIHW.js +59 -0
  97. package/docs/public/dist/runtime-QFURDKA2.js +5 -0
  98. package/docs/public/dist/runtime-UVPXO4IR.js +375 -0
  99. package/docs/public/dist/runtime-VMJA3Z4N.js +10 -0
  100. package/docs/public/dist/runtime-ZJ4FXT5O.js +11 -0
  101. package/docs/public/dist/server-api.boot-K7X3LCFB.js +219 -0
  102. package/docs/public/dist/server-data.boot-Y7HQYC4R.js +157 -0
  103. package/docs/public/dist/slash-commands.boot-V2UV7OW2.js +26 -0
  104. package/docs/public/dist/spec.boot-2WU7ZHCV.js +159 -0
  105. package/docs/public/dist/state.boot-B24GUE3R.js +73 -0
  106. package/docs/public/dist/store.boot-TLIB4XHH.js +150 -0
  107. package/docs/public/dist/streaming.boot-W2DZSMW4.js +80 -0
  108. package/docs/public/dist/stripe.boot-QN3C2GEL.js +164 -0
  109. package/docs/public/dist/supabase.boot-BG4XXLZE.js +303 -0
  110. package/docs/public/dist/testing.boot-6U4WKMTE.js +130 -0
  111. package/docs/public/dist/validation.boot-PQHYGW5B.js +100 -0
  112. package/docs/public/docs.css +2020 -0
  113. package/docs/public/menu.js +83 -0
  114. package/docs/public/pulse-ui.css +2739 -0
  115. package/docs/public/pulse-ui.js +236 -0
  116. package/docs/server.js +192 -0
  117. package/docs/src/lib/component-page.js +47 -0
  118. package/docs/src/lib/highlight.js +255 -0
  119. package/docs/src/lib/layout.js +131 -0
  120. package/docs/src/lib/metrics-store.js +6 -0
  121. package/docs/src/lib/nav.js +159 -0
  122. package/docs/src/lib/stats.js +81 -0
  123. package/docs/src/pages/accessibility.js +157 -0
  124. package/docs/src/pages/actions.js +191 -0
  125. package/docs/src/pages/auth.js +177 -0
  126. package/docs/src/pages/caching.js +95 -0
  127. package/docs/src/pages/components/accordion.js +48 -0
  128. package/docs/src/pages/components/alert.js +35 -0
  129. package/docs/src/pages/components/app-badge.js +41 -0
  130. package/docs/src/pages/components/avatar.js +35 -0
  131. package/docs/src/pages/components/badge.js +36 -0
  132. package/docs/src/pages/components/banner.js +45 -0
  133. package/docs/src/pages/components/breadcrumbs.js +94 -0
  134. package/docs/src/pages/components/button.js +84 -0
  135. package/docs/src/pages/components/card.js +225 -0
  136. package/docs/src/pages/components/carousel.js +72 -0
  137. package/docs/src/pages/components/charts.js +278 -0
  138. package/docs/src/pages/components/checkbox.js +129 -0
  139. package/docs/src/pages/components/cluster.js +47 -0
  140. package/docs/src/pages/components/code-window.js +57 -0
  141. package/docs/src/pages/components/container.js +40 -0
  142. package/docs/src/pages/components/cta.js +53 -0
  143. package/docs/src/pages/components/divider.js +37 -0
  144. package/docs/src/pages/components/empty.js +36 -0
  145. package/docs/src/pages/components/feature.js +60 -0
  146. package/docs/src/pages/components/fieldset.js +65 -0
  147. package/docs/src/pages/components/fileupload.js +127 -0
  148. package/docs/src/pages/components/footer.js +58 -0
  149. package/docs/src/pages/components/grid.js +165 -0
  150. package/docs/src/pages/components/heading.js +107 -0
  151. package/docs/src/pages/components/hero.js +65 -0
  152. package/docs/src/pages/components/icons.js +285 -0
  153. package/docs/src/pages/components/image.js +71 -0
  154. package/docs/src/pages/components/input.js +51 -0
  155. package/docs/src/pages/components/list.js +112 -0
  156. package/docs/src/pages/components/media.js +51 -0
  157. package/docs/src/pages/components/modal.js +111 -0
  158. package/docs/src/pages/components/nav.js +86 -0
  159. package/docs/src/pages/components/pricing.js +68 -0
  160. package/docs/src/pages/components/progress.js +102 -0
  161. package/docs/src/pages/components/prose.js +111 -0
  162. package/docs/src/pages/components/pullquote.js +71 -0
  163. package/docs/src/pages/components/radio.js +194 -0
  164. package/docs/src/pages/components/rating.js +106 -0
  165. package/docs/src/pages/components/search.js +61 -0
  166. package/docs/src/pages/components/section.js +59 -0
  167. package/docs/src/pages/components/segmented.js +121 -0
  168. package/docs/src/pages/components/select.js +45 -0
  169. package/docs/src/pages/components/slider.js +114 -0
  170. package/docs/src/pages/components/spinner.js +73 -0
  171. package/docs/src/pages/components/stack.js +48 -0
  172. package/docs/src/pages/components/stat.js +55 -0
  173. package/docs/src/pages/components/stepper.js +66 -0
  174. package/docs/src/pages/components/table.js +45 -0
  175. package/docs/src/pages/components/testimonial.js +49 -0
  176. package/docs/src/pages/components/textarea.js +31 -0
  177. package/docs/src/pages/components/timeline.js +227 -0
  178. package/docs/src/pages/components/toggle.js +84 -0
  179. package/docs/src/pages/components/tooltip.js +48 -0
  180. package/docs/src/pages/components.js +204 -0
  181. package/docs/src/pages/config.js +193 -0
  182. package/docs/src/pages/constraints.js +99 -0
  183. package/docs/src/pages/deploy.js +233 -0
  184. package/docs/src/pages/extending.js +198 -0
  185. package/docs/src/pages/faq.js +96 -0
  186. package/docs/src/pages/getting-started.js +106 -0
  187. package/docs/src/pages/guard.js +121 -0
  188. package/docs/src/pages/home.js +401 -0
  189. package/docs/src/pages/how-it-works.js +183 -0
  190. package/docs/src/pages/hydration.js +98 -0
  191. package/docs/src/pages/images.js +121 -0
  192. package/docs/src/pages/meta.js +120 -0
  193. package/docs/src/pages/mutations.js +106 -0
  194. package/docs/src/pages/navigation.js +85 -0
  195. package/docs/src/pages/performance.js +157 -0
  196. package/docs/src/pages/persist.js +88 -0
  197. package/docs/src/pages/project-structure.js +90 -0
  198. package/docs/src/pages/prompt-examples.js +186 -0
  199. package/docs/src/pages/raw-responses.js +124 -0
  200. package/docs/src/pages/routing.js +99 -0
  201. package/docs/src/pages/server-api.js +281 -0
  202. package/docs/src/pages/server-data.js +185 -0
  203. package/docs/src/pages/slash-commands.js +55 -0
  204. package/docs/src/pages/spec.js +207 -0
  205. package/docs/src/pages/state.js +101 -0
  206. package/docs/src/pages/store.js +181 -0
  207. package/docs/src/pages/streaming.js +108 -0
  208. package/docs/src/pages/stripe.js +193 -0
  209. package/docs/src/pages/supabase.js +323 -0
  210. package/docs/src/pages/testing.js +198 -0
  211. package/docs/src/pages/validation.js +138 -0
  212. package/examples/contact.js +166 -0
  213. package/examples/counter.js +94 -0
  214. package/examples/dev.server.js +91 -0
  215. package/examples/examples.test.js +394 -0
  216. package/examples/pricing.js +244 -0
  217. package/examples/products.js +191 -0
  218. package/examples/quiz.js +208 -0
  219. package/examples/shared.js +78 -0
  220. package/examples/todos.js +162 -0
  221. package/package.json +75 -0
  222. package/public/.pulse-ui-version +1 -0
  223. package/public/chippy-bird.css +246 -0
  224. package/public/examples/contact.css +119 -0
  225. package/public/examples/counter.css +79 -0
  226. package/public/examples/pricing.css +132 -0
  227. package/public/examples/products.css +100 -0
  228. package/public/examples/quiz.css +200 -0
  229. package/public/examples/todos.css +137 -0
  230. package/public/favicon.ico +0 -0
  231. package/public/log-dashboard.css +383 -0
  232. package/public/pulse-ui.css +2740 -0
  233. package/public/pulse-ui.js +236 -0
  234. package/public/pulse.css +149 -0
  235. package/scripts/build.js +411 -0
  236. package/src/agent/checklist.md +111 -0
  237. package/src/agent/coverage-check.js +66 -0
  238. package/src/agent/guide-components.md +274 -0
  239. package/src/agent/guide-examples.md +54 -0
  240. package/src/agent/guide-routing.md +36 -0
  241. package/src/agent/guide-server.md +258 -0
  242. package/src/agent/guide-spec.md +103 -0
  243. package/src/agent/guide-styles.md +191 -0
  244. package/src/agent/guide.md +979 -0
  245. package/src/agent/identity.md +106 -0
  246. package/src/agent/workflow.md +108 -0
  247. package/src/cli/cli.test.js +82 -0
  248. package/src/cli/dev.js +195 -0
  249. package/src/cli/discover.js +113 -0
  250. package/src/cli/index.js +361 -0
  251. package/src/cli/load-report.js +91 -0
  252. package/src/cli/load-runner.js +121 -0
  253. package/src/cli/report-server.js +723 -0
  254. package/src/cli/report.js +116 -0
  255. package/src/cli/scaffold.archive.js +1371 -0
  256. package/src/cli/scaffold.js +349 -0
  257. package/src/cli/start.js +74 -0
  258. package/src/html.js +19 -0
  259. package/src/mcp/server.js +884 -0
  260. package/src/mcp/validate-worker.js +110 -0
  261. package/src/runtime/image.js +74 -0
  262. package/src/runtime/image.test.js +111 -0
  263. package/src/runtime/index.js +621 -0
  264. package/src/runtime/navigate.js +146 -0
  265. package/src/runtime/runtime.test.js +773 -0
  266. package/src/runtime/ssr.js +464 -0
  267. package/src/runtime/ssr.test.js +421 -0
  268. package/src/runtime/store.js +92 -0
  269. package/src/runtime/toast.js +163 -0
  270. package/src/server/index.js +1386 -0
  271. package/src/server/server.test.js +1248 -0
  272. package/src/spec/schema.js +428 -0
  273. package/src/spec/schema.test.js +291 -0
  274. package/src/store/index.js +102 -0
  275. package/src/store/store.test.js +210 -0
  276. package/src/testing/html.js +283 -0
  277. package/src/testing/index.js +249 -0
  278. package/src/testing/testing.test.js +450 -0
  279. package/src/ui/accordion.js +28 -0
  280. package/src/ui/alert.js +43 -0
  281. package/src/ui/app-badge.js +48 -0
  282. package/src/ui/avatar.js +47 -0
  283. package/src/ui/badge.js +24 -0
  284. package/src/ui/banner.js +26 -0
  285. package/src/ui/breadcrumbs.js +38 -0
  286. package/src/ui/button.js +66 -0
  287. package/src/ui/card.js +34 -0
  288. package/src/ui/carousel.js +59 -0
  289. package/src/ui/charts.js +321 -0
  290. package/src/ui/checkbox.js +65 -0
  291. package/src/ui/cluster.js +44 -0
  292. package/src/ui/code-window.js +39 -0
  293. package/src/ui/container.js +24 -0
  294. package/src/ui/cta.js +37 -0
  295. package/src/ui/divider.js +29 -0
  296. package/src/ui/empty.js +33 -0
  297. package/src/ui/feature.js +33 -0
  298. package/src/ui/fieldset.js +37 -0
  299. package/src/ui/fileupload.js +89 -0
  300. package/src/ui/footer.js +38 -0
  301. package/src/ui/grid.js +36 -0
  302. package/src/ui/heading.js +45 -0
  303. package/src/ui/hero.js +37 -0
  304. package/src/ui/icons.js +161 -0
  305. package/src/ui/index.js +89 -0
  306. package/src/ui/input.js +74 -0
  307. package/src/ui/list.js +36 -0
  308. package/src/ui/media.js +44 -0
  309. package/src/ui/modal.js +80 -0
  310. package/src/ui/nav.js +61 -0
  311. package/src/ui/pricing.js +56 -0
  312. package/src/ui/progress.js +62 -0
  313. package/src/ui/prose.js +29 -0
  314. package/src/ui/pullquote.js +34 -0
  315. package/src/ui/radio.js +102 -0
  316. package/src/ui/rating.js +93 -0
  317. package/src/ui/search.js +77 -0
  318. package/src/ui/section.js +69 -0
  319. package/src/ui/segmented.js +50 -0
  320. package/src/ui/select.js +77 -0
  321. package/src/ui/slider.js +84 -0
  322. package/src/ui/spinner.js +34 -0
  323. package/src/ui/stack.js +36 -0
  324. package/src/ui/stat.js +52 -0
  325. package/src/ui/stepper.js +46 -0
  326. package/src/ui/switch.js +57 -0
  327. package/src/ui/table.js +45 -0
  328. package/src/ui/testimonial.js +48 -0
  329. package/src/ui/textarea.js +72 -0
  330. package/src/ui/timeline.js +72 -0
  331. package/src/ui/tooltip.js +28 -0
  332. package/src/ui/ui.test.js +1241 -0
  333. package/src/ui/uiimage.js +65 -0
  334. package/tsconfig.json +13 -0
  335. package/types/html.d.ts +17 -0
  336. package/types/image.d.ts +70 -0
  337. package/types/index.d.ts +7 -0
  338. package/types/navigate.d.ts +38 -0
  339. package/types/runtime.d.ts +63 -0
  340. package/types/schema.d.ts +243 -0
  341. package/types/server.d.ts +145 -0
  342. package/types/ssr.d.ts +110 -0
  343. package/types/testing.d.ts +154 -0
  344. package/types/ui.d.ts +704 -0
package/types/ui.d.ts ADDED
@@ -0,0 +1,704 @@
1
+ /**
2
+ * Pulse UI — Component library types
3
+ * @invisibleloop/pulse/ui
4
+ *
5
+ * All components are pure functions: (props?) => HTML string.
6
+ * Import only what you need — no side effects on import.
7
+ */
8
+
9
+ // ---------------------------------------------------------------------------
10
+ // Shared
11
+ // ---------------------------------------------------------------------------
12
+
13
+ type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'
14
+ type Size = 'sm' | 'md' | 'lg'
15
+ type AlertVariant = 'info' | 'success' | 'warning' | 'error'
16
+ type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info'
17
+ type ChartColor = 'accent' | 'success' | 'warning' | 'error' | 'blue' | 'muted'
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Form controls
21
+ // ---------------------------------------------------------------------------
22
+
23
+ export interface ButtonProps {
24
+ label?: string
25
+ variant?: ButtonVariant
26
+ size?: Size
27
+ /** Renders as <a> when set */
28
+ href?: string
29
+ disabled?: boolean
30
+ type?: 'button' | 'submit' | 'reset'
31
+ /** SVG HTML prepended inside the element */
32
+ icon?: string
33
+ /** SVG HTML appended inside the element */
34
+ iconAfter?: string
35
+ fullWidth?: boolean
36
+ class?: string
37
+ /** Extra HTML attributes added to <button> (not <a>) */
38
+ attrs?: Record<string, string | number | boolean>
39
+ }
40
+ export function button(props?: ButtonProps): string
41
+
42
+ export interface InputProps {
43
+ name?: string
44
+ label?: string
45
+ type?: string
46
+ placeholder?: string
47
+ value?: string
48
+ error?: string
49
+ hint?: string
50
+ required?: boolean
51
+ disabled?: boolean
52
+ id?: string
53
+ class?: string
54
+ attrs?: Record<string, string | number | boolean>
55
+ }
56
+ export function input(props?: InputProps): string
57
+
58
+ export interface SelectOption {
59
+ value: string
60
+ label: string
61
+ }
62
+
63
+ export interface SelectProps {
64
+ name?: string
65
+ label?: string
66
+ options?: Array<string | SelectOption>
67
+ value?: string
68
+ error?: string
69
+ hint?: string
70
+ required?: boolean
71
+ disabled?: boolean
72
+ id?: string
73
+ /** data-event value for mutation binding, e.g. 'change:setLang' */
74
+ event?: string
75
+ class?: string
76
+ }
77
+ export function select(props?: SelectProps): string
78
+
79
+ export interface TextareaProps {
80
+ name?: string
81
+ label?: string
82
+ placeholder?: string
83
+ value?: string
84
+ rows?: number
85
+ error?: string
86
+ hint?: string
87
+ required?: boolean
88
+ disabled?: boolean
89
+ id?: string
90
+ class?: string
91
+ attrs?: Record<string, string | number | boolean>
92
+ }
93
+ export function textarea(props?: TextareaProps): string
94
+
95
+ export interface ToggleProps {
96
+ name?: string
97
+ label?: string
98
+ checked?: boolean
99
+ disabled?: boolean
100
+ hint?: string
101
+ id?: string
102
+ /** data-event value for mutation binding */
103
+ event?: string
104
+ class?: string
105
+ }
106
+ export function toggle(props?: ToggleProps): string
107
+
108
+ // ---------------------------------------------------------------------------
109
+ // Feedback
110
+ // ---------------------------------------------------------------------------
111
+
112
+ export interface AlertProps {
113
+ variant?: AlertVariant
114
+ title?: string
115
+ content?: string
116
+ class?: string
117
+ }
118
+ export function alert(props?: AlertProps): string
119
+
120
+ export interface BadgeProps {
121
+ label?: string
122
+ variant?: BadgeVariant
123
+ class?: string
124
+ }
125
+ export function badge(props?: BadgeProps): string
126
+
127
+ export interface SpinnerProps {
128
+ size?: Size
129
+ color?: 'accent' | 'muted' | 'white'
130
+ label?: string
131
+ class?: string
132
+ }
133
+ export function spinner(props?: SpinnerProps): string
134
+
135
+ export interface ProgressProps {
136
+ /** Omit for indeterminate progress */
137
+ value?: number
138
+ max?: number
139
+ label?: string
140
+ showLabel?: boolean
141
+ showValue?: boolean
142
+ variant?: AlertVariant
143
+ size?: Size
144
+ class?: string
145
+ }
146
+ export function progress(props?: ProgressProps): string
147
+
148
+ // ---------------------------------------------------------------------------
149
+ // Layout & content
150
+ // ---------------------------------------------------------------------------
151
+
152
+ export interface CardProps {
153
+ title?: string
154
+ content?: string
155
+ footer?: string
156
+ /** Remove inner padding */
157
+ flush?: boolean
158
+ class?: string
159
+ }
160
+ export function card(props?: CardProps): string
161
+
162
+ export interface ContainerProps {
163
+ content?: string
164
+ class?: string
165
+ }
166
+ export function container(props?: ContainerProps): string
167
+
168
+ export interface SectionProps {
169
+ content?: string
170
+ class?: string
171
+ }
172
+ export function section(props?: SectionProps): string
173
+
174
+ export interface GridProps {
175
+ items?: string[]
176
+ cols?: number
177
+ gap?: string
178
+ class?: string
179
+ }
180
+ export function grid(props?: GridProps): string
181
+
182
+ export interface StackProps {
183
+ items?: string[]
184
+ gap?: string
185
+ class?: string
186
+ }
187
+ export function stack(props?: StackProps): string
188
+
189
+ export interface ClusterProps {
190
+ items?: string[]
191
+ gap?: string
192
+ class?: string
193
+ }
194
+ export function cluster(props?: ClusterProps): string
195
+
196
+ export interface DividerProps {
197
+ label?: string
198
+ class?: string
199
+ }
200
+ export function divider(props?: DividerProps): string
201
+
202
+ // ---------------------------------------------------------------------------
203
+ // Typography
204
+ // ---------------------------------------------------------------------------
205
+
206
+ export interface HeadingProps {
207
+ level?: 1 | 2 | 3 | 4 | 5 | 6
208
+ text?: string
209
+ class?: string
210
+ }
211
+ export function heading(props?: HeadingProps): string
212
+
213
+ export interface ProseProps {
214
+ content?: string
215
+ class?: string
216
+ }
217
+ export function prose(props?: ProseProps): string
218
+
219
+ export interface PullquoteProps {
220
+ quote?: string
221
+ cite?: string
222
+ class?: string
223
+ }
224
+ export function pullquote(props?: PullquoteProps): string
225
+
226
+ export interface ListItem {
227
+ text: string
228
+ href?: string
229
+ }
230
+ export interface ListProps {
231
+ items?: Array<string | ListItem>
232
+ ordered?: boolean
233
+ class?: string
234
+ }
235
+ export function list(props?: ListProps): string
236
+
237
+ // ---------------------------------------------------------------------------
238
+ // Navigation
239
+ // ---------------------------------------------------------------------------
240
+
241
+ export interface NavLink {
242
+ label: string
243
+ href: string
244
+ active?: boolean
245
+ }
246
+
247
+ export interface NavProps {
248
+ logo?: string
249
+ logoHref?: string
250
+ links?: NavLink[]
251
+ action?: string
252
+ sticky?: boolean
253
+ burgerAlign?: 'right' | 'left'
254
+ class?: string
255
+ }
256
+ export function nav(props?: NavProps): string
257
+
258
+ export interface BreadcrumbItem {
259
+ label: string
260
+ href?: string
261
+ }
262
+ export interface BreadcrumbsProps {
263
+ items?: BreadcrumbItem[]
264
+ separator?: string
265
+ class?: string
266
+ }
267
+ export function breadcrumbs(props?: BreadcrumbsProps): string
268
+
269
+ // ---------------------------------------------------------------------------
270
+ // Overlay
271
+ // ---------------------------------------------------------------------------
272
+
273
+ export interface ModalProps {
274
+ id?: string
275
+ title?: string
276
+ content?: string
277
+ footer?: string
278
+ size?: 'sm' | Size | 'xl'
279
+ class?: string
280
+ }
281
+ export function modal(props?: ModalProps): string
282
+
283
+ export interface ModalTriggerProps {
284
+ target?: string
285
+ label?: string
286
+ variant?: ButtonVariant
287
+ size?: Size
288
+ class?: string
289
+ }
290
+ export function modalTrigger(props?: ModalTriggerProps): string
291
+
292
+ export interface TooltipProps {
293
+ content?: string
294
+ trigger?: string
295
+ position?: 'top' | 'bottom' | 'left' | 'right'
296
+ class?: string
297
+ }
298
+ export function tooltip(props?: TooltipProps): string
299
+
300
+ // ---------------------------------------------------------------------------
301
+ // Data display
302
+ // ---------------------------------------------------------------------------
303
+
304
+ export interface TableProps {
305
+ headers?: string[]
306
+ rows?: Array<Array<string | number>>
307
+ caption?: string
308
+ class?: string
309
+ }
310
+ export function table(props?: TableProps): string
311
+
312
+ export interface StatProps {
313
+ label?: string
314
+ value?: string | number
315
+ delta?: string
316
+ trend?: 'up' | 'down' | 'flat'
317
+ class?: string
318
+ }
319
+ export function stat(props?: StatProps): string
320
+
321
+ export interface AvatarProps {
322
+ src?: string
323
+ alt?: string
324
+ initials?: string
325
+ size?: Size
326
+ class?: string
327
+ }
328
+ export function avatar(props?: AvatarProps): string
329
+
330
+ export interface EmptyProps {
331
+ title?: string
332
+ content?: string
333
+ action?: string
334
+ class?: string
335
+ }
336
+ export function empty(props?: EmptyProps): string
337
+
338
+ // ---------------------------------------------------------------------------
339
+ // Marketing / landing page
340
+ // ---------------------------------------------------------------------------
341
+
342
+ export interface HeroProps {
343
+ heading?: string
344
+ subheading?: string
345
+ actions?: string
346
+ media?: string
347
+ class?: string
348
+ }
349
+ export function hero(props?: HeroProps): string
350
+
351
+ export interface FeatureItem {
352
+ icon?: string
353
+ title?: string
354
+ content?: string
355
+ }
356
+ export interface FeatureProps {
357
+ items?: FeatureItem[]
358
+ cols?: number
359
+ class?: string
360
+ }
361
+ export function feature(props?: FeatureProps): string
362
+
363
+ export interface TestimonialProps {
364
+ quote?: string
365
+ name?: string
366
+ role?: string
367
+ avatar?: string
368
+ class?: string
369
+ }
370
+ export function testimonial(props?: TestimonialProps): string
371
+
372
+ export interface PricingTier {
373
+ name?: string
374
+ price?: string
375
+ period?: string
376
+ features?: string[]
377
+ action?: string
378
+ featured?: boolean
379
+ }
380
+ export interface PricingProps {
381
+ tiers?: PricingTier[]
382
+ class?: string
383
+ }
384
+ export function pricing(props?: PricingProps): string
385
+
386
+ export interface CtaProps {
387
+ heading?: string
388
+ content?: string
389
+ actions?: string
390
+ class?: string
391
+ }
392
+ export function cta(props?: CtaProps): string
393
+
394
+ export interface BannerProps {
395
+ content?: string
396
+ variant?: AlertVariant
397
+ class?: string
398
+ }
399
+ export function banner(props?: BannerProps): string
400
+
401
+ // ---------------------------------------------------------------------------
402
+ // Media
403
+ // ---------------------------------------------------------------------------
404
+
405
+ export interface MediaProps {
406
+ src?: string
407
+ alt?: string
408
+ width?: number
409
+ height?: number
410
+ class?: string
411
+ }
412
+ export function media(props?: MediaProps): string
413
+
414
+ export interface UiImageProps {
415
+ src?: string
416
+ alt?: string
417
+ width?: number
418
+ height?: number
419
+ priority?: boolean
420
+ class?: string
421
+ }
422
+ export function uiImage(props?: UiImageProps): string
423
+
424
+ export interface CarouselProps {
425
+ items?: string[]
426
+ class?: string
427
+ }
428
+ export function carousel(props?: CarouselProps): string
429
+
430
+ // ---------------------------------------------------------------------------
431
+ // Interactive UI
432
+ // ---------------------------------------------------------------------------
433
+
434
+ export interface AccordionItem {
435
+ title: string
436
+ content: string
437
+ open?: boolean
438
+ }
439
+ export interface AccordionProps {
440
+ items?: AccordionItem[]
441
+ class?: string
442
+ }
443
+ export function accordion(props?: AccordionProps): string
444
+
445
+ export interface SliderProps {
446
+ name?: string
447
+ label?: string
448
+ min?: number
449
+ max?: number
450
+ step?: number
451
+ value?: number
452
+ disabled?: boolean
453
+ event?: string
454
+ class?: string
455
+ }
456
+ export function slider(props?: SliderProps): string
457
+
458
+ export interface SegmentedOption {
459
+ label: string
460
+ value: string
461
+ }
462
+ export interface SegmentedProps {
463
+ name?: string
464
+ options?: Array<string | SegmentedOption>
465
+ value?: string
466
+ event?: string
467
+ class?: string
468
+ }
469
+ export function segmented(props?: SegmentedProps): string
470
+
471
+ export interface RadioOption {
472
+ label: string
473
+ value: string
474
+ hint?: string
475
+ }
476
+ export interface RadioProps {
477
+ name?: string
478
+ options?: Array<string | RadioOption>
479
+ value?: string
480
+ disabled?: boolean
481
+ event?: string
482
+ class?: string
483
+ }
484
+ export function radio(props?: RadioProps): string
485
+
486
+ export interface RadioGroupProps {
487
+ name?: string
488
+ label?: string
489
+ options?: Array<string | RadioOption>
490
+ value?: string
491
+ event?: string
492
+ class?: string
493
+ }
494
+ export function radioGroup(props?: RadioGroupProps): string
495
+
496
+ export interface RatingProps {
497
+ value?: number
498
+ max?: number
499
+ readonly?: boolean
500
+ name?: string
501
+ event?: string
502
+ class?: string
503
+ }
504
+ export function rating(props?: RatingProps): string
505
+
506
+ export interface FileUploadProps {
507
+ name?: string
508
+ label?: string
509
+ accept?: string
510
+ multiple?: boolean
511
+ hint?: string
512
+ class?: string
513
+ }
514
+ export function fileUpload(props?: FileUploadProps): string
515
+
516
+ // ---------------------------------------------------------------------------
517
+ // Timeline & stepper
518
+ // ---------------------------------------------------------------------------
519
+
520
+ export interface TimelineItemProps {
521
+ title?: string
522
+ content?: string
523
+ date?: string
524
+ icon?: string
525
+ active?: boolean
526
+ class?: string
527
+ }
528
+ export function timelineItem(props?: TimelineItemProps): string
529
+
530
+ export interface TimelineProps {
531
+ items?: string[]
532
+ class?: string
533
+ }
534
+ export function timeline(props?: TimelineProps): string
535
+
536
+ export interface StepperStep {
537
+ label: string
538
+ complete?: boolean
539
+ active?: boolean
540
+ }
541
+ export interface StepperProps {
542
+ steps?: StepperStep[]
543
+ current?: number
544
+ class?: string
545
+ }
546
+ export function stepper(props?: StepperProps): string
547
+
548
+ // ---------------------------------------------------------------------------
549
+ // Utilities
550
+ // ---------------------------------------------------------------------------
551
+
552
+ export interface AppBadgeProps {
553
+ store?: 'apple' | 'google'
554
+ href?: string
555
+ class?: string
556
+ }
557
+ export function appBadge(props?: AppBadgeProps): string
558
+
559
+ export interface FooterProps {
560
+ content?: string
561
+ class?: string
562
+ }
563
+ export function footer(props?: FooterProps): string
564
+
565
+ export interface CodeWindowProps {
566
+ code?: string
567
+ language?: string
568
+ filename?: string
569
+ class?: string
570
+ }
571
+ export function codeWindow(props?: CodeWindowProps): string
572
+
573
+ // ---------------------------------------------------------------------------
574
+ // Charts
575
+ // ---------------------------------------------------------------------------
576
+
577
+ export interface ChartDataPoint {
578
+ label: string
579
+ value: number
580
+ }
581
+ export interface DonutDataPoint {
582
+ label: string
583
+ value: number
584
+ color?: string
585
+ }
586
+
587
+ export interface BarChartProps {
588
+ data?: ChartDataPoint[]
589
+ height?: number
590
+ color?: ChartColor
591
+ showValues?: boolean
592
+ showGrid?: boolean
593
+ gap?: number
594
+ class?: string
595
+ }
596
+ export function barChart(props?: BarChartProps): string
597
+
598
+ export interface LineChartProps {
599
+ data?: ChartDataPoint[]
600
+ height?: number
601
+ color?: ChartColor
602
+ area?: boolean
603
+ showDots?: boolean
604
+ showGrid?: boolean
605
+ class?: string
606
+ }
607
+ export function lineChart(props?: LineChartProps): string
608
+
609
+ export interface DonutChartProps {
610
+ data?: DonutDataPoint[]
611
+ size?: number
612
+ thickness?: number
613
+ label?: string
614
+ sublabel?: string
615
+ class?: string
616
+ }
617
+ export function donutChart(props?: DonutChartProps): string
618
+
619
+ export interface SparklineProps {
620
+ data?: number[]
621
+ width?: number
622
+ height?: number
623
+ color?: ChartColor
624
+ area?: boolean
625
+ class?: string
626
+ }
627
+ export function sparkline(props?: SparklineProps): string
628
+
629
+ // ---------------------------------------------------------------------------
630
+ // Icons
631
+ // ---------------------------------------------------------------------------
632
+
633
+ /** Render an SVG icon as an HTML string. Accepts optional className. */
634
+ type IconFn = (className?: string) => string
635
+
636
+ export const iconArrowLeft: IconFn
637
+ export const iconArrowRight: IconFn
638
+ export const iconArrowUp: IconFn
639
+ export const iconArrowDown: IconFn
640
+ export const iconChevronLeft: IconFn
641
+ export const iconChevronRight: IconFn
642
+ export const iconChevronUp: IconFn
643
+ export const iconChevronDown: IconFn
644
+ export const iconExternalLink: IconFn
645
+ export const iconMenu: IconFn
646
+ export const iconX: IconFn
647
+ export const iconMoreHorizontal: IconFn
648
+ export const iconMoreVertical: IconFn
649
+ export const iconCheck: IconFn
650
+ export const iconCheckCircle: IconFn
651
+ export const iconXCircle: IconFn
652
+ export const iconAlertCircle: IconFn
653
+ export const iconAlertTriangle: IconFn
654
+ export const iconInfo: IconFn
655
+ export const iconPlus: IconFn
656
+ export const iconMinus: IconFn
657
+ export const iconEdit: IconFn
658
+ export const iconTrash: IconFn
659
+ export const iconCopy: IconFn
660
+ export const iconSearch: IconFn
661
+ export const iconFilter: IconFn
662
+ export const iconDownload: IconFn
663
+ export const iconUpload: IconFn
664
+ export const iconRefresh: IconFn
665
+ export const iconSend: IconFn
666
+ export const iconEye: IconFn
667
+ export const iconEyeOff: IconFn
668
+ export const iconLock: IconFn
669
+ export const iconUnlock: IconFn
670
+ export const iconSettings: IconFn
671
+ export const iconBell: IconFn
672
+ export const iconUser: IconFn
673
+ export const iconUsers: IconFn
674
+ export const iconMail: IconFn
675
+ export const iconMessageSquare: IconFn
676
+ export const iconHome: IconFn
677
+ export const iconLogOut: IconFn
678
+ export const iconLogIn: IconFn
679
+ export const iconFile: IconFn
680
+ export const iconImage: IconFn
681
+ export const iconLink: IconFn
682
+ export const iconCode: IconFn
683
+ export const iconCalendar: IconFn
684
+ export const iconClock: IconFn
685
+ export const iconBookmark: IconFn
686
+ export const iconTag: IconFn
687
+ export const iconPlay: IconFn
688
+ export const iconPause: IconFn
689
+ export const iconVolume: IconFn
690
+ export const iconStar: IconFn
691
+ export const iconHeart: IconFn
692
+ export const iconPhone: IconFn
693
+ export const iconGamepad: IconFn
694
+ export const iconHandPointUp: IconFn
695
+ export const iconHandPointDown: IconFn
696
+ export const iconHandPointLeft: IconFn
697
+ export const iconHandPointRight: IconFn
698
+ export const iconGlobe: IconFn
699
+ export const iconShield: IconFn
700
+ export const iconZap: IconFn
701
+ export const iconTrendingUp: IconFn
702
+ export const iconTrendingDown: IconFn
703
+ export const iconLoader: IconFn
704
+ export const iconGrid: IconFn