@forthtilliath/forth-ui 0.2.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 (412) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +279 -0
  3. package/dist/components/accordion/accordion-items.d.ts +3 -0
  4. package/dist/components/accordion/accordion-items.d.ts.map +1 -0
  5. package/dist/components/accordion/accordion-items.js +18 -0
  6. package/dist/components/accordion/accordion-multiple.d.ts +3 -0
  7. package/dist/components/accordion/accordion-multiple.d.ts.map +1 -0
  8. package/dist/components/accordion/accordion-multiple.js +8 -0
  9. package/dist/components/accordion/accordion-single.d.ts +3 -0
  10. package/dist/components/accordion/accordion-single.d.ts.map +1 -0
  11. package/dist/components/accordion/accordion-single.js +8 -0
  12. package/dist/components/accordion/accordion.d.ts +17 -0
  13. package/dist/components/accordion/accordion.d.ts.map +1 -0
  14. package/dist/components/accordion/accordion.js +23 -0
  15. package/dist/components/accordion/index.d.ts +2 -0
  16. package/dist/components/accordion/index.d.ts.map +1 -0
  17. package/dist/components/accordion/index.js +1 -0
  18. package/dist/components/accordion/types.d.ts +100 -0
  19. package/dist/components/accordion/types.d.ts.map +1 -0
  20. package/dist/components/accordion/types.js +1 -0
  21. package/dist/components/accordion/variants.d.ts +25 -0
  22. package/dist/components/accordion/variants.d.ts.map +1 -0
  23. package/dist/components/accordion/variants.js +96 -0
  24. package/dist/components/alert/alert.d.ts +38 -0
  25. package/dist/components/alert/alert.d.ts.map +1 -0
  26. package/dist/components/alert/alert.js +32 -0
  27. package/dist/components/alert/index.d.ts +5 -0
  28. package/dist/components/alert/index.d.ts.map +1 -0
  29. package/dist/components/alert/index.js +4 -0
  30. package/dist/components/alert/variants.d.ts +8 -0
  31. package/dist/components/alert/variants.d.ts.map +1 -0
  32. package/dist/components/alert/variants.js +110 -0
  33. package/dist/components/avatar/avatar-group.d.ts +26 -0
  34. package/dist/components/avatar/avatar-group.d.ts.map +1 -0
  35. package/dist/components/avatar/avatar-group.js +29 -0
  36. package/dist/components/avatar/avatar.d.ts +107 -0
  37. package/dist/components/avatar/avatar.d.ts.map +1 -0
  38. package/dist/components/avatar/avatar.js +26 -0
  39. package/dist/components/avatar/constants.d.ts +13 -0
  40. package/dist/components/avatar/constants.d.ts.map +1 -0
  41. package/dist/components/avatar/constants.js +8 -0
  42. package/dist/components/avatar/index.d.ts +5 -0
  43. package/dist/components/avatar/index.d.ts.map +1 -0
  44. package/dist/components/avatar/index.js +2 -0
  45. package/dist/components/avatar/variants.d.ts +31 -0
  46. package/dist/components/avatar/variants.d.ts.map +1 -0
  47. package/dist/components/avatar/variants.js +147 -0
  48. package/dist/components/badge/badge.d.ts +48 -0
  49. package/dist/components/badge/badge.d.ts.map +1 -0
  50. package/dist/components/badge/badge.js +33 -0
  51. package/dist/components/badge/index.d.ts +4 -0
  52. package/dist/components/badge/index.d.ts.map +1 -0
  53. package/dist/components/badge/index.js +1 -0
  54. package/dist/components/badge/variants.d.ts +12 -0
  55. package/dist/components/badge/variants.d.ts.map +1 -0
  56. package/dist/components/badge/variants.js +134 -0
  57. package/dist/components/banner/banner.d.ts +43 -0
  58. package/dist/components/banner/banner.d.ts.map +1 -0
  59. package/dist/components/banner/banner.js +44 -0
  60. package/dist/components/banner/index.d.ts +4 -0
  61. package/dist/components/banner/index.d.ts.map +1 -0
  62. package/dist/components/banner/index.js +1 -0
  63. package/dist/components/banner/variants.d.ts +9 -0
  64. package/dist/components/banner/variants.d.ts.map +1 -0
  65. package/dist/components/banner/variants.js +111 -0
  66. package/dist/components/bento-grid/bento-grid.d.ts +23 -0
  67. package/dist/components/bento-grid/bento-grid.d.ts.map +1 -0
  68. package/dist/components/bento-grid/bento-grid.js +30 -0
  69. package/dist/components/bento-grid/index.d.ts +3 -0
  70. package/dist/components/bento-grid/index.d.ts.map +1 -0
  71. package/dist/components/bento-grid/index.js +1 -0
  72. package/dist/components/breadcrumb/breadcrumb.d.ts +29 -0
  73. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  74. package/dist/components/breadcrumb/breadcrumb.js +28 -0
  75. package/dist/components/breadcrumb/index.d.ts +3 -0
  76. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  77. package/dist/components/breadcrumb/index.js +1 -0
  78. package/dist/components/button/button-group.d.ts +16 -0
  79. package/dist/components/button/button-group.d.ts.map +1 -0
  80. package/dist/components/button/button-group.js +13 -0
  81. package/dist/components/button/button.d.ts +28 -0
  82. package/dist/components/button/button.d.ts.map +1 -0
  83. package/dist/components/button/button.js +20 -0
  84. package/dist/components/button/index.d.ts +6 -0
  85. package/dist/components/button/index.d.ts.map +1 -0
  86. package/dist/components/button/index.js +2 -0
  87. package/dist/components/button/variants.d.ts +7 -0
  88. package/dist/components/button/variants.d.ts.map +1 -0
  89. package/dist/components/button/variants.js +27 -0
  90. package/dist/components/checkbox/checkbox-group.d.ts +30 -0
  91. package/dist/components/checkbox/checkbox-group.d.ts.map +1 -0
  92. package/dist/components/checkbox/checkbox-group.js +32 -0
  93. package/dist/components/checkbox/index.d.ts +3 -0
  94. package/dist/components/checkbox/index.d.ts.map +1 -0
  95. package/dist/components/checkbox/index.js +1 -0
  96. package/dist/components/chip/chip.d.ts +27 -0
  97. package/dist/components/chip/chip.d.ts.map +1 -0
  98. package/dist/components/chip/chip.js +18 -0
  99. package/dist/components/chip/index.d.ts +3 -0
  100. package/dist/components/chip/index.d.ts.map +1 -0
  101. package/dist/components/chip/index.js +1 -0
  102. package/dist/components/code-block/code-block.d.ts +31 -0
  103. package/dist/components/code-block/code-block.d.ts.map +1 -0
  104. package/dist/components/code-block/code-block.js +57 -0
  105. package/dist/components/code-block/index.d.ts +3 -0
  106. package/dist/components/code-block/index.d.ts.map +1 -0
  107. package/dist/components/code-block/index.js +1 -0
  108. package/dist/components/collapsible/collapsible.d.ts +41 -0
  109. package/dist/components/collapsible/collapsible.d.ts.map +1 -0
  110. package/dist/components/collapsible/collapsible.js +50 -0
  111. package/dist/components/collapsible/index.d.ts +7 -0
  112. package/dist/components/collapsible/index.d.ts.map +1 -0
  113. package/dist/components/collapsible/index.js +3 -0
  114. package/dist/components/color-picker/color-picker.d.ts +24 -0
  115. package/dist/components/color-picker/color-picker.d.ts.map +1 -0
  116. package/dist/components/color-picker/color-picker.js +40 -0
  117. package/dist/components/color-picker/index.d.ts +3 -0
  118. package/dist/components/color-picker/index.d.ts.map +1 -0
  119. package/dist/components/color-picker/index.js +1 -0
  120. package/dist/components/combobox/combobox.d.ts +31 -0
  121. package/dist/components/combobox/combobox.d.ts.map +1 -0
  122. package/dist/components/combobox/combobox.js +30 -0
  123. package/dist/components/combobox/index.d.ts +5 -0
  124. package/dist/components/combobox/index.d.ts.map +1 -0
  125. package/dist/components/combobox/index.js +2 -0
  126. package/dist/components/combobox/multi-select.d.ts +30 -0
  127. package/dist/components/combobox/multi-select.d.ts.map +1 -0
  128. package/dist/components/combobox/multi-select.js +53 -0
  129. package/dist/components/command-palette/command-palette.d.ts +37 -0
  130. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  131. package/dist/components/command-palette/command-palette.js +46 -0
  132. package/dist/components/command-palette/index.d.ts +3 -0
  133. package/dist/components/command-palette/index.d.ts.map +1 -0
  134. package/dist/components/command-palette/index.js +1 -0
  135. package/dist/components/confirm-dialog/confirm-context.d.ts +15 -0
  136. package/dist/components/confirm-dialog/confirm-context.d.ts.map +1 -0
  137. package/dist/components/confirm-dialog/confirm-context.js +2 -0
  138. package/dist/components/confirm-dialog/confirm-dialog.d.ts +18 -0
  139. package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  140. package/dist/components/confirm-dialog/confirm-dialog.js +40 -0
  141. package/dist/components/confirm-dialog/index.d.ts +4 -0
  142. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  143. package/dist/components/confirm-dialog/index.js +2 -0
  144. package/dist/components/confirm-dialog/use-confirm.d.ts +4 -0
  145. package/dist/components/confirm-dialog/use-confirm.d.ts.map +1 -0
  146. package/dist/components/confirm-dialog/use-confirm.js +10 -0
  147. package/dist/components/count-animation/count-animation.d.ts +20 -0
  148. package/dist/components/count-animation/count-animation.d.ts.map +1 -0
  149. package/dist/components/count-animation/count-animation.js +42 -0
  150. package/dist/components/count-animation/index.d.ts +3 -0
  151. package/dist/components/count-animation/index.d.ts.map +1 -0
  152. package/dist/components/count-animation/index.js +1 -0
  153. package/dist/components/date-picker/date-picker.d.ts +27 -0
  154. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  155. package/dist/components/date-picker/date-picker.js +37 -0
  156. package/dist/components/date-picker/index.d.ts +3 -0
  157. package/dist/components/date-picker/index.d.ts.map +1 -0
  158. package/dist/components/date-picker/index.js +1 -0
  159. package/dist/components/description-list/description-list.d.ts +16 -0
  160. package/dist/components/description-list/description-list.d.ts.map +1 -0
  161. package/dist/components/description-list/description-list.js +24 -0
  162. package/dist/components/description-list/index.d.ts +2 -0
  163. package/dist/components/description-list/index.d.ts.map +1 -0
  164. package/dist/components/description-list/index.js +1 -0
  165. package/dist/components/dropdrawer/dropdrawer.d.ts +27 -0
  166. package/dist/components/dropdrawer/dropdrawer.d.ts.map +1 -0
  167. package/dist/components/dropdrawer/dropdrawer.js +26 -0
  168. package/dist/components/dropdrawer/index.d.ts +3 -0
  169. package/dist/components/dropdrawer/index.d.ts.map +1 -0
  170. package/dist/components/dropdrawer/index.js +1 -0
  171. package/dist/components/dropzone/dropzone.d.ts +27 -0
  172. package/dist/components/dropzone/dropzone.d.ts.map +1 -0
  173. package/dist/components/dropzone/dropzone.js +83 -0
  174. package/dist/components/dropzone/index.d.ts +3 -0
  175. package/dist/components/dropzone/index.d.ts.map +1 -0
  176. package/dist/components/dropzone/index.js +1 -0
  177. package/dist/components/field/field.d.ts +41 -0
  178. package/dist/components/field/field.d.ts.map +1 -0
  179. package/dist/components/field/field.js +48 -0
  180. package/dist/components/field/index.d.ts +3 -0
  181. package/dist/components/field/index.d.ts.map +1 -0
  182. package/dist/components/field/index.js +1 -0
  183. package/dist/components/file-list/file-list.d.ts +29 -0
  184. package/dist/components/file-list/file-list.d.ts.map +1 -0
  185. package/dist/components/file-list/file-list.js +52 -0
  186. package/dist/components/file-list/index.d.ts +3 -0
  187. package/dist/components/file-list/index.d.ts.map +1 -0
  188. package/dist/components/file-list/index.js +1 -0
  189. package/dist/components/grid/context.d.ts +12 -0
  190. package/dist/components/grid/context.d.ts.map +1 -0
  191. package/dist/components/grid/context.js +5 -0
  192. package/dist/components/grid/grid-item.d.ts +14 -0
  193. package/dist/components/grid/grid-item.d.ts.map +1 -0
  194. package/dist/components/grid/grid-item.js +13 -0
  195. package/dist/components/grid/grid.d.ts +16 -0
  196. package/dist/components/grid/grid.d.ts.map +1 -0
  197. package/dist/components/grid/grid.js +19 -0
  198. package/dist/components/grid/index.d.ts +3 -0
  199. package/dist/components/grid/index.d.ts.map +1 -0
  200. package/dist/components/grid/index.js +2 -0
  201. package/dist/components/grid/variants.d.ts +16 -0
  202. package/dist/components/grid/variants.d.ts.map +1 -0
  203. package/dist/components/grid/variants.js +74 -0
  204. package/dist/components/image-input/image-input.d.ts +21 -0
  205. package/dist/components/image-input/image-input.d.ts.map +1 -0
  206. package/dist/components/image-input/image-input.js +45 -0
  207. package/dist/components/image-input/index.d.ts +3 -0
  208. package/dist/components/image-input/index.d.ts.map +1 -0
  209. package/dist/components/image-input/index.js +1 -0
  210. package/dist/components/infinite-scroll/index.d.ts +3 -0
  211. package/dist/components/infinite-scroll/index.d.ts.map +1 -0
  212. package/dist/components/infinite-scroll/index.js +1 -0
  213. package/dist/components/infinite-scroll/infinite-scroll.d.ts +20 -0
  214. package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -0
  215. package/dist/components/infinite-scroll/infinite-scroll.js +33 -0
  216. package/dist/components/kbd/index.d.ts +2 -0
  217. package/dist/components/kbd/index.d.ts.map +1 -0
  218. package/dist/components/kbd/index.js +1 -0
  219. package/dist/components/kbd/kbd.d.ts +15 -0
  220. package/dist/components/kbd/kbd.d.ts.map +1 -0
  221. package/dist/components/kbd/kbd.js +19 -0
  222. package/dist/components/link/index.d.ts +7 -0
  223. package/dist/components/link/index.d.ts.map +1 -0
  224. package/dist/components/link/index.js +3 -0
  225. package/dist/components/link/link-preview.d.ts +36 -0
  226. package/dist/components/link/link-preview.d.ts.map +1 -0
  227. package/dist/components/link/link-preview.js +27 -0
  228. package/dist/components/link/link.d.ts +27 -0
  229. package/dist/components/link/link.d.ts.map +1 -0
  230. package/dist/components/link/link.js +39 -0
  231. package/dist/components/link/variants.d.ts +8 -0
  232. package/dist/components/link/variants.d.ts.map +1 -0
  233. package/dist/components/link/variants.js +26 -0
  234. package/dist/components/marquee/index.d.ts +3 -0
  235. package/dist/components/marquee/index.d.ts.map +1 -0
  236. package/dist/components/marquee/index.js +1 -0
  237. package/dist/components/marquee/marquee.d.ts +22 -0
  238. package/dist/components/marquee/marquee.d.ts.map +1 -0
  239. package/dist/components/marquee/marquee.js +19 -0
  240. package/dist/components/multi-step-loader/index.d.ts +3 -0
  241. package/dist/components/multi-step-loader/index.d.ts.map +1 -0
  242. package/dist/components/multi-step-loader/index.js +1 -0
  243. package/dist/components/multi-step-loader/multi-step-loader.d.ts +41 -0
  244. package/dist/components/multi-step-loader/multi-step-loader.d.ts.map +1 -0
  245. package/dist/components/multi-step-loader/multi-step-loader.js +53 -0
  246. package/dist/components/navbar/index.d.ts +5 -0
  247. package/dist/components/navbar/index.d.ts.map +1 -0
  248. package/dist/components/navbar/index.js +2 -0
  249. package/dist/components/navbar/navbar-mobile-menu.d.ts +24 -0
  250. package/dist/components/navbar/navbar-mobile-menu.d.ts.map +1 -0
  251. package/dist/components/navbar/navbar-mobile-menu.js +18 -0
  252. package/dist/components/navbar/navbar.d.ts +24 -0
  253. package/dist/components/navbar/navbar.d.ts.map +1 -0
  254. package/dist/components/navbar/navbar.js +33 -0
  255. package/dist/components/notification-center/index.d.ts +3 -0
  256. package/dist/components/notification-center/index.d.ts.map +1 -0
  257. package/dist/components/notification-center/index.js +1 -0
  258. package/dist/components/notification-center/notification-center.d.ts +28 -0
  259. package/dist/components/notification-center/notification-center.d.ts.map +1 -0
  260. package/dist/components/notification-center/notification-center.js +24 -0
  261. package/dist/components/number-input/index.d.ts +3 -0
  262. package/dist/components/number-input/index.d.ts.map +1 -0
  263. package/dist/components/number-input/index.js +1 -0
  264. package/dist/components/number-input/number-input.d.ts +22 -0
  265. package/dist/components/number-input/number-input.d.ts.map +1 -0
  266. package/dist/components/number-input/number-input.js +37 -0
  267. package/dist/components/pagination/index.d.ts +5 -0
  268. package/dist/components/pagination/index.d.ts.map +1 -0
  269. package/dist/components/pagination/index.js +2 -0
  270. package/dist/components/pagination/pagination-range.d.ts +17 -0
  271. package/dist/components/pagination/pagination-range.d.ts.map +1 -0
  272. package/dist/components/pagination/pagination-range.js +30 -0
  273. package/dist/components/pagination/pagination.d.ts +26 -0
  274. package/dist/components/pagination/pagination.d.ts.map +1 -0
  275. package/dist/components/pagination/pagination.js +48 -0
  276. package/dist/components/password-input/index.d.ts +5 -0
  277. package/dist/components/password-input/index.d.ts.map +1 -0
  278. package/dist/components/password-input/index.js +2 -0
  279. package/dist/components/password-input/password-input.d.ts +15 -0
  280. package/dist/components/password-input/password-input.d.ts.map +1 -0
  281. package/dist/components/password-input/password-input.js +23 -0
  282. package/dist/components/password-input/password-strength-meter.d.ts +18 -0
  283. package/dist/components/password-input/password-strength-meter.d.ts.map +1 -0
  284. package/dist/components/password-input/password-strength-meter.js +40 -0
  285. package/dist/components/progress/index.d.ts +4 -0
  286. package/dist/components/progress/index.d.ts.map +1 -0
  287. package/dist/components/progress/index.js +1 -0
  288. package/dist/components/progress/progress.d.ts +25 -0
  289. package/dist/components/progress/progress.d.ts.map +1 -0
  290. package/dist/components/progress/progress.js +23 -0
  291. package/dist/components/progress/variants.d.ts +7 -0
  292. package/dist/components/progress/variants.d.ts.map +1 -0
  293. package/dist/components/progress/variants.js +25 -0
  294. package/dist/components/qr-code/index.d.ts +3 -0
  295. package/dist/components/qr-code/index.d.ts.map +1 -0
  296. package/dist/components/qr-code/index.js +1 -0
  297. package/dist/components/qr-code/qr-code.d.ts +28 -0
  298. package/dist/components/qr-code/qr-code.d.ts.map +1 -0
  299. package/dist/components/qr-code/qr-code.js +27 -0
  300. package/dist/components/radio/index.d.ts +3 -0
  301. package/dist/components/radio/index.d.ts.map +1 -0
  302. package/dist/components/radio/index.js +1 -0
  303. package/dist/components/radio/radio-card.d.ts +25 -0
  304. package/dist/components/radio/radio-card.d.ts.map +1 -0
  305. package/dist/components/radio/radio-card.js +24 -0
  306. package/dist/components/rating/index.d.ts +3 -0
  307. package/dist/components/rating/index.d.ts.map +1 -0
  308. package/dist/components/rating/index.js +1 -0
  309. package/dist/components/rating/rating.d.ts +23 -0
  310. package/dist/components/rating/rating.d.ts.map +1 -0
  311. package/dist/components/rating/rating.js +41 -0
  312. package/dist/components/relative-time/index.d.ts +3 -0
  313. package/dist/components/relative-time/index.d.ts.map +1 -0
  314. package/dist/components/relative-time/index.js +1 -0
  315. package/dist/components/relative-time/relative-time.d.ts +32 -0
  316. package/dist/components/relative-time/relative-time.d.ts.map +1 -0
  317. package/dist/components/relative-time/relative-time.js +62 -0
  318. package/dist/components/reparent/index.d.ts +3 -0
  319. package/dist/components/reparent/index.d.ts.map +1 -0
  320. package/dist/components/reparent/index.js +1 -0
  321. package/dist/components/reparent/reparent.d.ts +31 -0
  322. package/dist/components/reparent/reparent.d.ts.map +1 -0
  323. package/dist/components/reparent/reparent.js +51 -0
  324. package/dist/components/repeat/index.d.ts +2 -0
  325. package/dist/components/repeat/index.d.ts.map +1 -0
  326. package/dist/components/repeat/index.js +1 -0
  327. package/dist/components/repeat/repeat.d.ts +27 -0
  328. package/dist/components/repeat/repeat.d.ts.map +1 -0
  329. package/dist/components/repeat/repeat.js +15 -0
  330. package/dist/components/scroll-progress/index.d.ts +3 -0
  331. package/dist/components/scroll-progress/index.d.ts.map +1 -0
  332. package/dist/components/scroll-progress/index.js +1 -0
  333. package/dist/components/scroll-progress/scroll-progress.d.ts +19 -0
  334. package/dist/components/scroll-progress/scroll-progress.d.ts.map +1 -0
  335. package/dist/components/scroll-progress/scroll-progress.js +36 -0
  336. package/dist/components/scroll-shadow/index.d.ts +3 -0
  337. package/dist/components/scroll-shadow/index.d.ts.map +1 -0
  338. package/dist/components/scroll-shadow/index.js +1 -0
  339. package/dist/components/scroll-shadow/scroll-shadow.d.ts +20 -0
  340. package/dist/components/scroll-shadow/scroll-shadow.d.ts.map +1 -0
  341. package/dist/components/scroll-shadow/scroll-shadow.js +44 -0
  342. package/dist/components/scrollspy/index.d.ts +3 -0
  343. package/dist/components/scrollspy/index.d.ts.map +1 -0
  344. package/dist/components/scrollspy/index.js +1 -0
  345. package/dist/components/scrollspy/use-scrollspy.d.ts +30 -0
  346. package/dist/components/scrollspy/use-scrollspy.d.ts.map +1 -0
  347. package/dist/components/scrollspy/use-scrollspy.js +35 -0
  348. package/dist/components/separator/index.d.ts +3 -0
  349. package/dist/components/separator/index.d.ts.map +1 -0
  350. package/dist/components/separator/index.js +1 -0
  351. package/dist/components/separator/separator.d.ts +22 -0
  352. package/dist/components/separator/separator.d.ts.map +1 -0
  353. package/dist/components/separator/separator.js +21 -0
  354. package/dist/components/snippet/index.d.ts +3 -0
  355. package/dist/components/snippet/index.d.ts.map +1 -0
  356. package/dist/components/snippet/index.js +1 -0
  357. package/dist/components/snippet/snippet.d.ts +25 -0
  358. package/dist/components/snippet/snippet.d.ts.map +1 -0
  359. package/dist/components/snippet/snippet.js +33 -0
  360. package/dist/components/sortable/index.d.ts +3 -0
  361. package/dist/components/sortable/index.d.ts.map +1 -0
  362. package/dist/components/sortable/index.js +1 -0
  363. package/dist/components/sortable/sortable.d.ts +22 -0
  364. package/dist/components/sortable/sortable.d.ts.map +1 -0
  365. package/dist/components/sortable/sortable.js +47 -0
  366. package/dist/components/spacer/index.d.ts +3 -0
  367. package/dist/components/spacer/index.d.ts.map +1 -0
  368. package/dist/components/spacer/index.js +1 -0
  369. package/dist/components/spacer/spacer.d.ts +24 -0
  370. package/dist/components/spacer/spacer.d.ts.map +1 -0
  371. package/dist/components/spacer/spacer.js +23 -0
  372. package/dist/components/spinner/index.d.ts +4 -0
  373. package/dist/components/spinner/index.d.ts.map +1 -0
  374. package/dist/components/spinner/index.js +1 -0
  375. package/dist/components/spinner/spinner.d.ts +22 -0
  376. package/dist/components/spinner/spinner.d.ts.map +1 -0
  377. package/dist/components/spinner/spinner.js +19 -0
  378. package/dist/components/spinner/variants.d.ts +6 -0
  379. package/dist/components/spinner/variants.d.ts.map +1 -0
  380. package/dist/components/spinner/variants.js +13 -0
  381. package/dist/components/stepper/index.d.ts +3 -0
  382. package/dist/components/stepper/index.d.ts.map +1 -0
  383. package/dist/components/stepper/index.js +1 -0
  384. package/dist/components/stepper/stepper.d.ts +26 -0
  385. package/dist/components/stepper/stepper.d.ts.map +1 -0
  386. package/dist/components/stepper/stepper.js +27 -0
  387. package/dist/components/submit-button/index.d.ts +3 -0
  388. package/dist/components/submit-button/index.d.ts.map +1 -0
  389. package/dist/components/submit-button/index.js +1 -0
  390. package/dist/components/submit-button/submit-button.d.ts +19 -0
  391. package/dist/components/submit-button/submit-button.d.ts.map +1 -0
  392. package/dist/components/submit-button/submit-button.js +23 -0
  393. package/dist/components/tags-input/index.d.ts +3 -0
  394. package/dist/components/tags-input/index.d.ts.map +1 -0
  395. package/dist/components/tags-input/index.js +1 -0
  396. package/dist/components/tags-input/tags-input.d.ts +26 -0
  397. package/dist/components/tags-input/tags-input.d.ts.map +1 -0
  398. package/dist/components/tags-input/tags-input.js +61 -0
  399. package/dist/components/timeline/index.d.ts +3 -0
  400. package/dist/components/timeline/index.d.ts.map +1 -0
  401. package/dist/components/timeline/index.js +1 -0
  402. package/dist/components/timeline/timeline.d.ts +24 -0
  403. package/dist/components/timeline/timeline.d.ts.map +1 -0
  404. package/dist/components/timeline/timeline.js +21 -0
  405. package/dist/components/tree/index.d.ts +3 -0
  406. package/dist/components/tree/index.d.ts.map +1 -0
  407. package/dist/components/tree/index.js +1 -0
  408. package/dist/components/tree/tree.d.ts +26 -0
  409. package/dist/components/tree/tree.d.ts.map +1 -0
  410. package/dist/components/tree/tree.js +32 -0
  411. package/dist/globals.css +3004 -0
  412. package/package.json +63 -0
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ export function BentoGrid({ className, ...props }) {
4
+ return (_jsx("div", { "data-slot": "bento-grid", className: cn("grid auto-rows-[12rem] grid-cols-3 gap-4", className), ...props }));
5
+ }
6
+ const COL_SPAN_CLASSES = {
7
+ 1: "",
8
+ 2: "col-span-2",
9
+ 3: "col-span-3",
10
+ };
11
+ const ROW_SPAN_CLASSES = {
12
+ 1: "",
13
+ 2: "row-span-2",
14
+ };
15
+ /**
16
+ * A CSS-grid layout for unevenly-sized cards ("bento box" layouts) — a
17
+ * lightweight layout helper (`grid`+`col-span`/`row-span`), not a
18
+ * dependency-driven masonry/packing algorithm.
19
+ *
20
+ * _Inspired from multiple sources, to make a consistent and reusable component._
21
+ * @see https://ui.aceternity.com/components/bento-grid
22
+ * @see https://blocks.mvp-subha.me/docs/grids/bento
23
+ *
24
+ * @version 0.1.0
25
+ * @author Forth
26
+ * @copyright 2026 Forth
27
+ */
28
+ export function BentoGridItem({ colSpan = 1, rowSpan = 1, className, ...props }) {
29
+ return (_jsx("div", { "data-slot": "bento-grid-item", className: cn("border-border rounded-xl border p-4", COL_SPAN_CLASSES[colSpan], ROW_SPAN_CLASSES[rowSpan], className), ...props }));
30
+ }
@@ -0,0 +1,3 @@
1
+ export type { BentoGridItemProps } from "./bento-grid";
2
+ export { BentoGrid, BentoGridItem } from "./bento-grid";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bento-grid/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ export { BentoGrid, BentoGridItem } from "./bento-grid";
@@ -0,0 +1,29 @@
1
+ import type React from "react";
2
+ export interface BreadcrumbEntry {
3
+ label: React.ReactNode;
4
+ href?: string;
5
+ icon?: React.ReactNode;
6
+ }
7
+ export interface BreadcrumbProps {
8
+ items: BreadcrumbEntry[];
9
+ /**
10
+ * Collapses items between the first and last into a dropdown "…" once
11
+ * there are more than this many — shadcn-ui's own `BreadcrumbEllipsis` is
12
+ * purely decorative (no dropdown behavior), unlike ktui's.
13
+ */
14
+ maxItems?: number;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Displays the path to the current resource using a hierarchy of links.
19
+ *
20
+ * _Inspired from multiple sources, to make a consistent and reusable component._
21
+ * @see https://ui.shadcn.com/docs/components/breadcrumb
22
+ * @see https://ktui.io/docs/breadcrumb
23
+ *
24
+ * @version 0.1.0
25
+ * @author Forth
26
+ * @copyright 2026 Forth
27
+ */
28
+ export declare function Breadcrumb({ items, maxItems, className }: BreadcrumbProps): React.JSX.Element;
29
+ //# sourceMappingURL=breadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,qBAyFzE"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Breadcrumb as BreadcrumbPrimitive, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@forthtilliath/shadcn-ui/components/breadcrumb";
4
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@forthtilliath/shadcn-ui/components/dropdown-menu";
5
+ function EntryLink({ item }) {
6
+ return (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [item.icon, item.label] }));
7
+ }
8
+ /**
9
+ * Displays the path to the current resource using a hierarchy of links.
10
+ *
11
+ * _Inspired from multiple sources, to make a consistent and reusable component._
12
+ * @see https://ui.shadcn.com/docs/components/breadcrumb
13
+ * @see https://ktui.io/docs/breadcrumb
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function Breadcrumb({ items, maxItems, className }) {
20
+ const shouldCollapse = maxItems !== undefined && items.length > maxItems;
21
+ const firstItem = items[0];
22
+ const lastItem = items.at(-1);
23
+ const hiddenItems = shouldCollapse ? items.slice(1, -1) : [];
24
+ const visibleMiddleItems = shouldCollapse ? [] : items.slice(1, -1);
25
+ return (_jsx(BreadcrumbPrimitive, { className: className, children: _jsxs(BreadcrumbList, { children: [firstItem && (_jsx(BreadcrumbItem, { children: firstItem.href ? (_jsx(BreadcrumbLink, { href: firstItem.href, children: _jsx(EntryLink, { item: firstItem }) })) : (_jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: firstItem }) })) })), items.length > 1 && _jsx(BreadcrumbSeparator, {}), shouldCollapse && (_jsxs(_Fragment, { children: [_jsx(BreadcrumbItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { className: "hover:text-foreground flex items-center transition-colors", "aria-label": "Show hidden breadcrumb items", children: "\u2026" }), _jsx(DropdownMenuContent, { align: "start", children: hiddenItems.map((item, index) => (
26
+ // eslint-disable-next-line @eslint-react/no-array-index-key -- `label` is an arbitrary ReactNode and `href` is optional, so index is the only stable fallback
27
+ _jsx(DropdownMenuItem, { asChild: true, children: item.href ? (_jsx("a", { href: item.href, children: _jsx(EntryLink, { item: item }) })) : (_jsx("span", { children: _jsx(EntryLink, { item: item }) })) }, item.href ?? index))) })] }) }), _jsx(BreadcrumbSeparator, {})] })), visibleMiddleItems.map((item, index) => (_jsxs("span", { className: "inline-flex items-center gap-1.5 sm:gap-2.5", children: [_jsx(BreadcrumbItem, { children: item.href ? (_jsx(BreadcrumbLink, { href: item.href, children: _jsx(EntryLink, { item: item }) })) : (_jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: item }) })) }), _jsx(BreadcrumbSeparator, {})] }, item.href ?? index))), lastItem && items.length > 1 && (_jsx(BreadcrumbItem, { children: _jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: lastItem }) }) }))] }) }));
28
+ }
@@ -0,0 +1,3 @@
1
+ export type { BreadcrumbEntry, BreadcrumbProps } from "./breadcrumb";
2
+ export { Breadcrumb } from "./breadcrumb";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ export { Breadcrumb } from "./breadcrumb";
@@ -0,0 +1,16 @@
1
+ import type React from "react";
2
+ export type ButtonGroupProps = React.ComponentProps<"div"> & {
3
+ /**
4
+ * Stack the buttons vertically instead of horizontally.
5
+ * @default false
6
+ */
7
+ vertical?: boolean;
8
+ };
9
+ /**
10
+ * Groups buttons into a single, visually connected row (or column), joining
11
+ * their borders and radii — for segmented controls / toolbars.
12
+ *
13
+ * @see https://ui.shadcn.com/docs/components/button#button-group
14
+ */
15
+ export declare function ButtonGroup({ className, vertical, ...props }: ButtonGroupProps): React.JSX.Element;
16
+ //# sourceMappingURL=button-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-group.d.ts","sourceRoot":"","sources":["../../../src/components/button/button-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,gBAAgB,qBAgBlB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ /**
4
+ * Groups buttons into a single, visually connected row (or column), joining
5
+ * their borders and radii — for segmented controls / toolbars.
6
+ *
7
+ * @see https://ui.shadcn.com/docs/components/button#button-group
8
+ */
9
+ export function ButtonGroup({ className, vertical = false, ...props }) {
10
+ return (_jsx("div", { role: "group", "data-slot": "button-group", className: cn("flex w-fit", vertical
11
+ ? "flex-col [&>*:not(:first-child)]:-mt-px [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:rounded-b-none"
12
+ : "flex-row [&>*:not(:first-child)]:-ml-px [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:rounded-r-none", "[&>*]:relative [&>*]:focus-visible:z-10", className), ...props }));
13
+ }
@@ -0,0 +1,28 @@
1
+ import type * as React from "react";
2
+ import { Button as ButtonPrimitive } from "@forthtilliath/shadcn-ui/components/button";
3
+ import type { ButtonSizeVariants } from "./variants";
4
+ export type ButtonProps = Omit<React.ComponentProps<typeof ButtonPrimitive>, "size"> & ButtonSizeVariants & {
5
+ /**
6
+ * Shows a spinner before the content and disables the button.
7
+ *
8
+ * Controlled by the caller (pairs with your own mutation/submit state)
9
+ * rather than an internal idle/loading/success animation — the more
10
+ * flexible pattern when the loading source is already a promise your
11
+ * app is tracking (React Query, a form library, etc).
12
+ */
13
+ loading?: boolean;
14
+ };
15
+ /**
16
+ * Displays a button or a component that looks like a button.
17
+ *
18
+ * _Inspired from multiple sources, to make a consistent and reusable component._
19
+ * @see https://ui.shadcn.com/docs/components/button
20
+ * @see https://ktui.io/docs/button
21
+ * @see https://ui.aceternity.com/components/stateful-button
22
+ *
23
+ * @version 0.1.0
24
+ * @author Forth
25
+ * @copyright 2026 Forth
26
+ */
27
+ export declare function Button({ className, size, shape, loading, disabled, children, ...props }: ButtonProps): React.JSX.Element;
28
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,EAC5C,MAAM,CACP,GACC,kBAAkB,GAAG;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,IAAI,EACJ,KAAK,EACL,OAAe,EACf,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,qBAYb"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Loader2Icon } from "lucide-react";
3
+ import { Button as ButtonPrimitive } from "@forthtilliath/shadcn-ui/components/button";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ import { buttonSizeVariants } from "./variants";
6
+ /**
7
+ * Displays a button or a component that looks like a button.
8
+ *
9
+ * _Inspired from multiple sources, to make a consistent and reusable component._
10
+ * @see https://ui.shadcn.com/docs/components/button
11
+ * @see https://ktui.io/docs/button
12
+ * @see https://ui.aceternity.com/components/stateful-button
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export function Button({ className, size, shape, loading = false, disabled, children, ...props }) {
19
+ return (_jsxs(ButtonPrimitive, { className: cn(buttonSizeVariants({ size, shape }), className), disabled: disabled ?? loading, "aria-busy": loading, ...props, children: [loading && _jsx(Loader2Icon, { className: "animate-spin" }), children] }));
20
+ }
@@ -0,0 +1,6 @@
1
+ export type { ButtonProps } from "./button";
2
+ export { Button } from "./button";
3
+ export type { ButtonGroupProps } from "./button-group";
4
+ export { ButtonGroup } from "./button-group";
5
+ export type { ButtonSizeVariants } from "./variants";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/button/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Button } from "./button";
2
+ export { ButtonGroup } from "./button-group";
@@ -0,0 +1,7 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const buttonSizeVariants: (props?: ({
3
+ size?: "default" | "sm" | "lg" | "icon" | "xs" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
4
+ shape?: "default" | "pill" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export type ButtonSizeVariants = VariantProps<typeof buttonSizeVariants>;
7
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/button/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO7D,eAAO,MAAM,kBAAkB;;;8EAqB7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { cva } from "class-variance-authority";
2
+ // shadcn-ui's own Button only exposes size: default | sm | lg | icon.
3
+ // forth-ui owns the full size scale itself (applied via className on top
4
+ // of the underlying primitive) rather than trying to extend a cva that
5
+ // isn't ours to extend.
6
+ export const buttonSizeVariants = cva("", {
7
+ variants: {
8
+ size: {
9
+ xs: "h-7 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5",
10
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
11
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
12
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
13
+ icon: "size-9",
14
+ "icon-xs": "size-7",
15
+ "icon-sm": "size-8",
16
+ "icon-lg": "size-10",
17
+ },
18
+ shape: {
19
+ default: "",
20
+ pill: "rounded-full",
21
+ },
22
+ },
23
+ defaultVariants: {
24
+ size: "default",
25
+ shape: "default",
26
+ },
27
+ });
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ export interface CheckboxGroupOption {
3
+ label: React.ReactNode;
4
+ value: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface CheckboxGroupProps {
8
+ options: CheckboxGroupOption[];
9
+ value?: string[];
10
+ defaultValue?: string[];
11
+ onValueChange?: (value: string[]) => void;
12
+ disabled?: boolean;
13
+ orientation?: "vertical" | "horizontal";
14
+ className?: string;
15
+ }
16
+ /**
17
+ * A group of `Checkbox`es sharing a single array value — shadcn-ui's own
18
+ * `Checkbox` is a standalone control with no grouped-value management, the
19
+ * gap heroui's Checkbox Group fills.
20
+ *
21
+ * _Inspired from multiple sources, to make a consistent and reusable component._
22
+ * @see https://ui.shadcn.com/docs/components/checkbox
23
+ * @see https://www.heroui.com/docs/components/checkbox-group
24
+ *
25
+ * @version 0.1.0
26
+ * @author Forth
27
+ * @copyright 2026 Forth
28
+ */
29
+ export declare function CheckboxGroup({ options, value, defaultValue, onValueChange, disabled, orientation, className, }: CheckboxGroupProps): React.JSX.Element;
30
+ //# sourceMappingURL=checkbox-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-group.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,QAAgB,EAChB,WAAwB,EACxB,SAAS,GACV,EAAE,kBAAkB,qBA2CpB"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Checkbox } from "@forthtilliath/shadcn-ui/components/checkbox";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ /**
7
+ * A group of `Checkbox`es sharing a single array value — shadcn-ui's own
8
+ * `Checkbox` is a standalone control with no grouped-value management, the
9
+ * gap heroui's Checkbox Group fills.
10
+ *
11
+ * _Inspired from multiple sources, to make a consistent and reusable component._
12
+ * @see https://ui.shadcn.com/docs/components/checkbox
13
+ * @see https://www.heroui.com/docs/components/checkbox-group
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function CheckboxGroup({ options, value, defaultValue, onValueChange, disabled = false, orientation = "vertical", className, }) {
20
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? []);
21
+ const selected = value ?? uncontrolledValue;
22
+ function toggle(optionValue, checked) {
23
+ const next = checked
24
+ ? [...selected, optionValue]
25
+ : selected.filter((v) => v !== optionValue);
26
+ setUncontrolledValue(next);
27
+ onValueChange?.(next);
28
+ }
29
+ return (_jsx("div", { role: "group", "data-slot": "checkbox-group", className: cn(orientation === "horizontal" ? "flex flex-wrap gap-4" : "grid gap-3", className), children: options.map((option) => (_jsxs("label", { className: cn("flex items-center gap-2 text-sm", (disabled || option.disabled) && "cursor-not-allowed opacity-50"), children: [_jsx(Checkbox, { checked: selected.includes(option.value), disabled: disabled || option.disabled, onCheckedChange: (checked) => {
30
+ toggle(option.value, checked === true);
31
+ } }), option.label] }, option.value))) }));
32
+ }
@@ -0,0 +1,3 @@
1
+ export type { CheckboxGroupOption, CheckboxGroupProps } from "./checkbox-group";
2
+ export { CheckboxGroup } from "./checkbox-group";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ export { CheckboxGroup } from "./checkbox-group";
@@ -0,0 +1,27 @@
1
+ import type { AvatarProps } from "../avatar";
2
+ import type { BadgeProps } from "../badge";
3
+ export type ChipProps = BadgeProps & {
4
+ /**
5
+ * Renders a small `Avatar` before the content — for "person/entity chip"
6
+ * patterns (e.g. an assignee or a mentioned user).
7
+ */
8
+ avatar?: Pick<AvatarProps, "src" | "alt" | "fallback">;
9
+ /**
10
+ * Prevents interaction and dims the chip.
11
+ * @default false
12
+ */
13
+ isDisabled?: boolean;
14
+ };
15
+ /**
16
+ * A compact, interactive element for displaying status, categories, or
17
+ * filters — `Badge` with an optional avatar slot for tagging people/entities.
18
+ *
19
+ * _Inspired from multiple sources, to make a consistent and reusable component._
20
+ * @see https://v2.heroui.com/docs/components/chip
21
+ *
22
+ * @version 0.1.0
23
+ * @author Forth
24
+ * @copyright 2026 Forth
25
+ */
26
+ export declare function Chip({ avatar, isDisabled, className, children, ...props }: ChipProps): import("react").JSX.Element;
27
+ //# sourceMappingURL=chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../src/components/chip/chip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;IACvD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,EACnB,MAAM,EACN,UAAkB,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,+BAWX"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ import { Avatar } from "../avatar";
4
+ import { Badge } from "../badge";
5
+ /**
6
+ * A compact, interactive element for displaying status, categories, or
7
+ * filters — `Badge` with an optional avatar slot for tagging people/entities.
8
+ *
9
+ * _Inspired from multiple sources, to make a consistent and reusable component._
10
+ * @see https://v2.heroui.com/docs/components/chip
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function Chip({ avatar, isDisabled = false, className, children, ...props }) {
17
+ return (_jsxs(Badge, { className: cn(isDisabled && "pointer-events-none opacity-50", className), "aria-disabled": isDisabled, ...props, children: [avatar && _jsx(Avatar, { size: "xs", className: { root: "-ml-1" }, ...avatar }), children] }));
18
+ }
@@ -0,0 +1,3 @@
1
+ export type { ChipProps } from "./chip";
2
+ export { Chip } from "./chip";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chip/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1 @@
1
+ export { Chip } from "./chip";
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ import type { BundledLanguage, BundledTheme, SpecialLanguage } from "shiki";
3
+ export interface CodeBlockProps {
4
+ code: string;
5
+ language?: BundledLanguage | SpecialLanguage;
6
+ /** Shown in the header, before the language badge. */
7
+ filename?: string;
8
+ /**
9
+ * @default { light: "github-light", dark: "github-dark" }
10
+ */
11
+ theme?: {
12
+ light: BundledTheme;
13
+ dark: BundledTheme;
14
+ };
15
+ showLineNumbers?: boolean;
16
+ className?: string;
17
+ }
18
+ /**
19
+ * A syntax-highlighted code block with a copy-to-clipboard button, an
20
+ * optional filename/language header, and optional line numbers.
21
+ *
22
+ * _Inspired from multiple sources, to make a consistent and reusable component._
23
+ * @see https://www.kibo-ui.com/components/code-block
24
+ * @see https://ui.aceternity.com/components/code-block
25
+ *
26
+ * @version 0.1.0
27
+ * @author Forth
28
+ * @copyright 2026 Forth
29
+ */
30
+ export declare function CodeBlock({ code, language, filename, theme, showLineNumbers, className, }: CodeBlockProps): React.JSX.Element;
31
+ //# sourceMappingURL=code-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAO5E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,GAAG,eAAe,CAAC;IAC7C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,KAAqB,EACrB,eAAuB,EACvB,SAAS,GACV,EAAE,cAAc,qBAkFhB"}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CheckIcon, CopyIcon } from "lucide-react";
5
+ import { codeToHtml } from "shiki";
6
+ import { Badge } from "@forthtilliath/shadcn-ui/components/badge";
7
+ import { Button } from "@forthtilliath/shadcn-ui/components/button";
8
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
9
+ const DEFAULT_THEME = { light: "github-light", dark: "github-dark" };
10
+ const COPY_FEEDBACK_MS = 2000;
11
+ /**
12
+ * A syntax-highlighted code block with a copy-to-clipboard button, an
13
+ * optional filename/language header, and optional line numbers.
14
+ *
15
+ * _Inspired from multiple sources, to make a consistent and reusable component._
16
+ * @see https://www.kibo-ui.com/components/code-block
17
+ * @see https://ui.aceternity.com/components/code-block
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export function CodeBlock({ code, language = "text", filename, theme = DEFAULT_THEME, showLineNumbers = false, className, }) {
24
+ const [html, setHtml] = React.useState(null);
25
+ const [copied, setCopied] = React.useState(false);
26
+ React.useEffect(() => {
27
+ let cancelled = false;
28
+ void codeToHtml(code, {
29
+ lang: language,
30
+ themes: theme,
31
+ defaultColor: false,
32
+ }).then((result) => {
33
+ if (!cancelled) {
34
+ setHtml(result);
35
+ }
36
+ });
37
+ return () => {
38
+ cancelled = true;
39
+ };
40
+ }, [code, language, theme]);
41
+ function handleCopy() {
42
+ void navigator.clipboard.writeText(code).then(() => {
43
+ setCopied(true);
44
+ setTimeout(() => {
45
+ setCopied(false);
46
+ }, COPY_FEEDBACK_MS);
47
+ });
48
+ }
49
+ return (_jsxs("div", { className: cn("border-border bg-card overflow-hidden rounded-lg border text-sm", className), children: [(filename ?? language !== "text") && (_jsx("div", { className: "border-border bg-muted/40 flex items-center justify-between border-b px-3 py-1.5", children: _jsxs("div", { className: "flex items-center gap-2", children: [filename && (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: filename })), _jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: language })] }) })), _jsxs("div", { className: "group relative", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: handleCopy, "aria-label": copied ? "Copied" : "Copy code", className: "absolute top-2 right-2 size-7 opacity-0 transition-opacity group-hover:opacity-100", children: copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}) }), html ? (_jsx("div", { className: cn("[&_pre]:overflow-x-auto [&_pre]:p-4", showLineNumbers &&
50
+ "[&_code]:[counter-reset:line] [&_.line]:[counter-increment:line] [&_.line]:before:text-muted-foreground [&_.line]:before:mr-4 [&_.line]:before:inline-block [&_.line]:before:w-4 [&_.line]:before:text-right [&_.line]:before:content-[counter(line)]"),
51
+ // Shiki generates static markup from the given `code` string
52
+ // server-side-safe (no user input reaches this beyond the
53
+ // developer-supplied `code` prop), same trust boundary as
54
+ // ChartStyle's dangerouslySetInnerHTML elsewhere in this repo.
55
+ // eslint-disable-next-line @eslint-react/dom-no-dangerously-set-innerhtml
56
+ dangerouslySetInnerHTML: { __html: html } })) : (_jsx("pre", { className: "overflow-x-auto p-4", children: _jsx("code", { children: code }) }))] })] }));
57
+ }
@@ -0,0 +1,3 @@
1
+ export type { CodeBlockProps } from "./code-block";
2
+ export { CodeBlock } from "./code-block";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ export { CodeBlock } from "./code-block";
@@ -0,0 +1,41 @@
1
+ import * as React from "react";
2
+ import type { LucideProps } from "lucide-react";
3
+ import { Collapsible as CollapsiblePrimitive, CollapsibleContent as CollapsibleContentPrimitive, CollapsibleTrigger as CollapsibleTriggerPrimitive } from "@forthtilliath/shadcn-ui/components/collapsible";
4
+ export type CollapsibleProps = React.ComponentProps<typeof CollapsiblePrimitive>;
5
+ /**
6
+ * An interactive component which expands/collapses a single panel — the
7
+ * single-item primitive `Accordion` is built on top of. Reach for
8
+ * `Accordion` instead when you have several mutually-exclusive sections.
9
+ *
10
+ * _Inspired from multiple sources, to make a consistent and reusable component._
11
+ * @see https://ui.shadcn.com/docs/components/collapsible
12
+ * @see https://ktui.io/docs/collapse
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export declare function Collapsible(props: CollapsibleProps): React.JSX.Element;
19
+ export type CollapsibleTriggerProps = React.ComponentProps<typeof CollapsibleTriggerPrimitive> & {
20
+ /** Hides the chevron icon entirely. */
21
+ hideChevron?: boolean;
22
+ /** Renders this icon instead of the default chevron. */
23
+ customChevron?: React.ReactElement<LucideProps>;
24
+ };
25
+ /**
26
+ * A trigger with a chevron that rotates 180° when the panel is open —
27
+ * shadcn-ui's own `CollapsibleTrigger` renders no icon at all, matching
28
+ * `AccordionTrigger`'s `hideChevron`/`customChevron` API for consistency.
29
+ */
30
+ export declare function CollapsibleTrigger({ className, hideChevron, customChevron, children, ...props }: CollapsibleTriggerProps): React.JSX.Element;
31
+ export type CollapsibleContentProps = React.ComponentProps<typeof CollapsibleContentPrimitive>;
32
+ /**
33
+ * A height-animated content panel — shadcn-ui's own `CollapsibleContent`
34
+ * has no animation at all (an instant show/hide via Radix's `data-state`).
35
+ * Uses the `animate-collapsible-down`/`-up` keyframes `tw-animate-css`
36
+ * already ships (mirroring `accordion-down`/`-up`, keyed to Radix
37
+ * Collapsible's own `--radix-collapsible-content-height` variable) but
38
+ * that nothing in this repo used yet.
39
+ */
40
+ export declare function CollapsibleContent({ className, ...props }: CollapsibleContentProps): React.JSX.Element;
41
+ //# sourceMappingURL=collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/collapsible/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EACL,WAAW,IAAI,oBAAoB,EACnC,kBAAkB,IAAI,2BAA2B,EACjD,kBAAkB,IAAI,2BAA2B,EAClD,MAAM,iDAAiD,CAAC;AAGzD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CACjD,OAAO,oBAAoB,CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAElD;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,cAAc,CACxD,OAAO,2BAA2B,CACnC,GAAG;IACF,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;CACjD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,WAAmB,EACnB,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,uBAAuB,qBA6BzB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,cAAc,CACxD,OAAO,2BAA2B,CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,uBAAuB,qBAUzB"}
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ChevronDownIcon } from "lucide-react";
5
+ import { Collapsible as CollapsiblePrimitive, CollapsibleContent as CollapsibleContentPrimitive, CollapsibleTrigger as CollapsibleTriggerPrimitive, } from "@forthtilliath/shadcn-ui/components/collapsible";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ /**
8
+ * An interactive component which expands/collapses a single panel — the
9
+ * single-item primitive `Accordion` is built on top of. Reach for
10
+ * `Accordion` instead when you have several mutually-exclusive sections.
11
+ *
12
+ * _Inspired from multiple sources, to make a consistent and reusable component._
13
+ * @see https://ui.shadcn.com/docs/components/collapsible
14
+ * @see https://ktui.io/docs/collapse
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2026 Forth
19
+ */
20
+ export function Collapsible(props) {
21
+ return _jsx(CollapsiblePrimitive, { "data-slot": "collapsible", ...props });
22
+ }
23
+ /**
24
+ * A trigger with a chevron that rotates 180° when the panel is open —
25
+ * shadcn-ui's own `CollapsibleTrigger` renders no icon at all, matching
26
+ * `AccordionTrigger`'s `hideChevron`/`customChevron` API for consistency.
27
+ */
28
+ export function CollapsibleTrigger({ className, hideChevron = false, customChevron, children, ...props }) {
29
+ const chevronProps = {
30
+ ...customChevron?.props,
31
+ className: cn("text-muted-foreground pointer-events-none size-4 shrink-0 transition-transform duration-200", customChevron?.props.className),
32
+ };
33
+ return (_jsxs(CollapsibleTriggerPrimitive, { className: cn("flex flex-1 items-center justify-between gap-4 text-left text-sm font-medium [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, !hideChevron && React.isValidElement(customChevron) ? (
34
+ // cloneElement is required here (not the `Slot` pattern) so the merged
35
+ // className goes through `cn()`'s tailwind-merge dedup, and the icon
36
+ // stays the trigger's direct child for the `>svg` CSS selector above.
37
+ // eslint-disable-next-line @eslint-react/no-clone-element
38
+ React.cloneElement(customChevron, chevronProps)) : (_jsx(ChevronDownIcon, { ...chevronProps }))] }));
39
+ }
40
+ /**
41
+ * A height-animated content panel — shadcn-ui's own `CollapsibleContent`
42
+ * has no animation at all (an instant show/hide via Radix's `data-state`).
43
+ * Uses the `animate-collapsible-down`/`-up` keyframes `tw-animate-css`
44
+ * already ships (mirroring `accordion-down`/`-up`, keyed to Radix
45
+ * Collapsible's own `--radix-collapsible-content-height` variable) but
46
+ * that nothing in this repo used yet.
47
+ */
48
+ export function CollapsibleContent({ className, ...props }) {
49
+ return (_jsx(CollapsibleContentPrimitive, { className: cn("data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden text-sm", className), ...props }));
50
+ }