@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,96 @@
1
+ import { cva } from "class-variance-authority";
2
+ export const accordionRootVariants = cva("max-w-lg my-4 w-full text-foreground", {
3
+ variants: {
4
+ variant: {
5
+ default: "space-y-2",
6
+ outline: "space-y-2",
7
+ box: "",
8
+ contained: "space-y-2",
9
+ "box-contained": "",
10
+ tabs: "space-y-2",
11
+ "highlight-active": "space-y-2",
12
+ },
13
+ size: {
14
+ sm: "text-sm",
15
+ default: "text-[15px]",
16
+ lg: "text-lg",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: "default",
21
+ size: "default",
22
+ },
23
+ });
24
+ export const accordionItemVariants = cva("", {
25
+ variants: {
26
+ variant: {
27
+ default: "",
28
+ outline: "px-4 border rounded-md last:border-b",
29
+ box: "px-4 border border-b-0 last:border-b first:rounded-t-md last:rounded-b-md",
30
+ contained: "px-4 border-none rounded-md bg-secondary text-secondary-foreground",
31
+ "box-contained": "px-4 last:border-none first:rounded-t-md last:rounded-b-md bg-muted",
32
+ tabs: "px-4 border-none rounded-md data-[state=open]:bg-secondary",
33
+ "highlight-active": "px-4 data-[state=open]:border-b-2 data-[state=open]:border-indigo-600 dark:data-[state=open]:border-indigo-500",
34
+ },
35
+ size: {
36
+ sm: "px-2",
37
+ default: "",
38
+ lg: "px-6",
39
+ },
40
+ },
41
+ defaultVariants: {
42
+ variant: "default",
43
+ size: "default",
44
+ },
45
+ });
46
+ export const accordionTriggerVariants = cva("hover:no-underline group items-center", {
47
+ variants: {
48
+ variant: {
49
+ default: "",
50
+ outline: "",
51
+ box: "",
52
+ contained: "",
53
+ "box-contained": "",
54
+ tabs: "data-[state=closed]:py-2",
55
+ "highlight-active": "data-[state=open]:text-indigo-600 dark:data-[state=open]:text-indigo-500",
56
+ },
57
+ size: {
58
+ sm: "py-3 text-sm [&_[data-slot=subtitle]]:text-xs",
59
+ default: "py-4 text-[15px] [&_[data-slot=subtitle]]:text-sm",
60
+ lg: "py-5 text-lg [&_[data-slot=subtitle]]:text-base",
61
+ },
62
+ disabled: {
63
+ false: "",
64
+ true: "opacity-50",
65
+ },
66
+ chevronAlignment: {
67
+ right: "",
68
+ left: "flex-row-reverse",
69
+ },
70
+ },
71
+ defaultVariants: {
72
+ variant: "default",
73
+ size: "default",
74
+ disabled: false,
75
+ chevronAlignment: "right",
76
+ },
77
+ });
78
+ export const accordionContentVariants = cva("", {
79
+ variants: {
80
+ variant: {
81
+ default: "",
82
+ outline: "",
83
+ box: "",
84
+ contained: "",
85
+ "box-contained": "",
86
+ tabs: "",
87
+ "highlight-active": "",
88
+ },
89
+ size: {
90
+ sm: "pb-3 text-sm",
91
+ default: "pb-4 text-[15px]",
92
+ lg: "pb-5 text-lg",
93
+ },
94
+ },
95
+ defaultVariants: { variant: "default", size: "default" },
96
+ });
@@ -0,0 +1,38 @@
1
+ import * as React from "react";
2
+ import type { AlertVariants } from "./variants";
3
+ export type AlertProps = React.ComponentProps<"div"> & AlertVariants & {
4
+ /**
5
+ * Shows a close button. Uncontrolled by default (the alert hides itself
6
+ * once dismissed) — pass `open`/`onOpenChange` to control it instead.
7
+ */
8
+ dismissible?: boolean;
9
+ /**
10
+ * Controlled visibility. Omit for uncontrolled (self-managed via
11
+ * `dismissible`'s internal state).
12
+ */
13
+ open?: boolean;
14
+ /**
15
+ * Called when the alert is dismissed, whether controlled or not.
16
+ */
17
+ onOpenChange?: (open: boolean) => void;
18
+ /**
19
+ * Extra action content (e.g. a button) rendered top-right, before the
20
+ * close button when `dismissible` is also set.
21
+ */
22
+ action?: React.ReactNode;
23
+ };
24
+ /**
25
+ * Displays a callout for user attention.
26
+ *
27
+ * _Inspired from multiple sources, to make a consistent and reusable component._
28
+ * @see https://ui.shadcn.com/docs/components/alert
29
+ * @see https://ktui.io/docs/alert
30
+ * @see https://ktui.io/docs/dismiss
31
+ * @see https://www.shadcnui-blocks.com/components/alert
32
+ *
33
+ * @version 0.1.0
34
+ * @author Forth
35
+ * @copyright 2026 Forth
36
+ */
37
+ export declare function Alert({ className, variant, look, size, dismissible, open, onOpenChange, action, children, ...props }: AlertProps): React.JSX.Element | null;
38
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAClD,aAAa,GAAG;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,WAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,4BA8CZ"}
@@ -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 { X } from "lucide-react";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ import { alertVariants } from "./variants";
7
+ /**
8
+ * Displays a callout for user attention.
9
+ *
10
+ * _Inspired from multiple sources, to make a consistent and reusable component._
11
+ * @see https://ui.shadcn.com/docs/components/alert
12
+ * @see https://ktui.io/docs/alert
13
+ * @see https://ktui.io/docs/dismiss
14
+ * @see https://www.shadcnui-blocks.com/components/alert
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2026 Forth
19
+ */
20
+ export function Alert({ className, variant, look, size, dismissible = false, open, onOpenChange, action, children, ...props }) {
21
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(true);
22
+ const isOpen = open ?? uncontrolledOpen;
23
+ const hasActions = Boolean(action) || dismissible;
24
+ function handleDismiss() {
25
+ setUncontrolledOpen(false);
26
+ onOpenChange?.(false);
27
+ }
28
+ if (!isOpen) {
29
+ return null;
30
+ }
31
+ return (_jsxs("div", { "data-slot": "alert", role: "alert", className: cn(alertVariants({ variant, look, size }), hasActions && "pr-10", className), ...props, children: [children, hasActions && (_jsxs("div", { "data-slot": "alert-actions", className: "absolute top-2.5 right-2.5 flex items-center gap-1.5", children: [action, dismissible && (_jsx("button", { type: "button", onClick: handleDismiss, "aria-label": "Dismiss", className: "rounded-sm opacity-70 transition-opacity outline-none hover:opacity-100 focus-visible:ring-2 focus-visible:ring-current", children: _jsx(X, { className: "size-3.5" }) }))] }))] }));
32
+ }
@@ -0,0 +1,5 @@
1
+ export type { AlertProps } from "./alert";
2
+ export { Alert } from "./alert";
3
+ export type { AlertVariants } from "./variants";
4
+ export { AlertDescription, AlertTitle, } from "@forthtilliath/shadcn-ui/components/alert";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/alert/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EACL,gBAAgB,EAChB,UAAU,GACX,MAAM,2CAA2C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { Alert } from "./alert";
2
+ // Title/description need no forth-ui-specific behavior on top of shadcn-ui's
3
+ // — re-exported here so consumers only need one import path.
4
+ export { AlertDescription, AlertTitle, } from "@forthtilliath/shadcn-ui/components/alert";
@@ -0,0 +1,8 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const alertVariants: (props?: ({
3
+ variant?: "default" | "primary" | "success" | "warning" | "info" | "destructive" | null | undefined;
4
+ look?: "outline" | "solid" | "soft" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type AlertVariants = VariantProps<typeof alertVariants>;
8
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/alert/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK7D,eAAO,MAAM,aAAa;;;;8EAsHzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { cva } from "class-variance-authority";
2
+ // Tailwind's scanner needs literal class strings in source — no
3
+ // runtime-templated `bg-${color}-600` here, it wouldn't be picked up.
4
+ export const alertVariants = cva("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm transition-colors has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
5
+ variants: {
6
+ variant: {
7
+ default: "bg-card text-card-foreground",
8
+ primary: "",
9
+ success: "",
10
+ warning: "",
11
+ info: "",
12
+ destructive: "",
13
+ },
14
+ look: {
15
+ solid: "",
16
+ soft: "",
17
+ outline: "bg-transparent",
18
+ },
19
+ size: {
20
+ sm: "gap-x-2 px-3 py-2 text-xs [&>svg]:size-3.5",
21
+ default: "",
22
+ lg: "gap-x-4 px-5 py-4 text-base [&>svg]:size-5",
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ variant: "default",
27
+ look: "soft",
28
+ size: "default",
29
+ },
30
+ compoundVariants: [
31
+ // default (neutral) ignores `look` — none of the reference sources
32
+ // show a "solid neutral" or "outline neutral" alert, only colored
33
+ // ones vary by look.
34
+ {
35
+ variant: "primary",
36
+ look: "solid",
37
+ className: "bg-primary text-primary-foreground border-transparent",
38
+ },
39
+ {
40
+ variant: "primary",
41
+ look: "soft",
42
+ className: "bg-primary/10 text-primary border-primary/20 [&>svg]:text-primary",
43
+ },
44
+ {
45
+ variant: "primary",
46
+ look: "outline",
47
+ className: "text-primary border-primary/50 [&>svg]:text-primary",
48
+ },
49
+ {
50
+ variant: "success",
51
+ look: "solid",
52
+ className: "bg-green-600 text-white border-transparent",
53
+ },
54
+ {
55
+ variant: "success",
56
+ look: "soft",
57
+ className: "bg-green-50 text-green-700 border-green-200 [&>svg]:text-green-600 dark:bg-green-950 dark:text-green-300 dark:border-green-900 dark:[&>svg]:text-green-400",
58
+ },
59
+ {
60
+ variant: "success",
61
+ look: "outline",
62
+ className: "text-green-700 border-green-300 [&>svg]:text-green-600 dark:text-green-300 dark:border-green-800 dark:[&>svg]:text-green-400",
63
+ },
64
+ {
65
+ variant: "warning",
66
+ look: "solid",
67
+ className: "bg-amber-500 text-white border-transparent",
68
+ },
69
+ {
70
+ variant: "warning",
71
+ look: "soft",
72
+ className: "bg-amber-50 text-amber-700 border-amber-200 [&>svg]:text-amber-600 dark:bg-amber-950 dark:text-amber-300 dark:border-amber-900 dark:[&>svg]:text-amber-400",
73
+ },
74
+ {
75
+ variant: "warning",
76
+ look: "outline",
77
+ className: "text-amber-700 border-amber-300 [&>svg]:text-amber-600 dark:text-amber-300 dark:border-amber-800 dark:[&>svg]:text-amber-400",
78
+ },
79
+ {
80
+ variant: "info",
81
+ look: "solid",
82
+ className: "bg-sky-600 text-white border-transparent",
83
+ },
84
+ {
85
+ variant: "info",
86
+ look: "soft",
87
+ className: "bg-sky-50 text-sky-700 border-sky-200 [&>svg]:text-sky-600 dark:bg-sky-950 dark:text-sky-300 dark:border-sky-900 dark:[&>svg]:text-sky-400",
88
+ },
89
+ {
90
+ variant: "info",
91
+ look: "outline",
92
+ className: "text-sky-700 border-sky-300 [&>svg]:text-sky-600 dark:text-sky-300 dark:border-sky-800 dark:[&>svg]:text-sky-400",
93
+ },
94
+ {
95
+ variant: "destructive",
96
+ look: "solid",
97
+ className: "bg-destructive text-white border-transparent",
98
+ },
99
+ {
100
+ variant: "destructive",
101
+ look: "soft",
102
+ className: "bg-destructive/10 text-destructive border-destructive/20 [&>svg]:text-destructive",
103
+ },
104
+ {
105
+ variant: "destructive",
106
+ look: "outline",
107
+ className: "text-destructive border-destructive/50 [&>svg]:text-destructive",
108
+ },
109
+ ],
110
+ });
@@ -0,0 +1,26 @@
1
+ import type { JSX } from "react";
2
+ import type { AvatarProps } from "./avatar";
3
+ export type AvatarGroupProps = React.ComponentProps<"div"> & {
4
+ avatars: AvatarProps[];
5
+ /**
6
+ * Maximum number of avatars to display before collapsing the rest into a
7
+ * "+N" indicator, matching the `avatars` array's order.
8
+ */
9
+ max?: number;
10
+ };
11
+ /**
12
+ * A component to group multiple avatars together.
13
+ *
14
+ * _Inspired from multiple sources, to make a consistent and reusable component._
15
+ * @see https://ui.shadcn.com/docs/components/avatar
16
+ * @see https://www.kibo-ui.com/components/avatar-stack
17
+ * @see https://www.shadcnui-blocks.com/components/avatar
18
+ *
19
+ * @param {AvatarGroupProps} props The props for the component.
20
+ * @param {AvatarProps[]} props.avatars The avatars to be grouped together.
21
+ * @param {number} [props.max] Collapse avatars beyond this count into a "+N" bubble.
22
+ * @param {React.ComponentProps<'div'>} props The props for the outer div element.
23
+ * @returns {JSX.Element} The component.
24
+ */
25
+ export declare function AvatarGroup({ className, avatars, max, ...props }: AvatarGroupProps): JSX.Element;
26
+ //# sourceMappingURL=avatar-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-group.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAIF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA6BhC"}
@@ -0,0 +1,29 @@
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
+ const RING_CLASS = "ring-2 ring-background hover:z-10";
5
+ /**
6
+ * A component to group multiple avatars together.
7
+ *
8
+ * _Inspired from multiple sources, to make a consistent and reusable component._
9
+ * @see https://ui.shadcn.com/docs/components/avatar
10
+ * @see https://www.kibo-ui.com/components/avatar-stack
11
+ * @see https://www.shadcnui-blocks.com/components/avatar
12
+ *
13
+ * @param {AvatarGroupProps} props The props for the component.
14
+ * @param {AvatarProps[]} props.avatars The avatars to be grouped together.
15
+ * @param {number} [props.max] Collapse avatars beyond this count into a "+N" bubble.
16
+ * @param {React.ComponentProps<'div'>} props The props for the outer div element.
17
+ * @returns {JSX.Element} The component.
18
+ */
19
+ export function AvatarGroup({ className, avatars, max, ...props }) {
20
+ const visibleAvatars = max ? avatars.slice(0, max) : avatars;
21
+ const overflowCount = max ? Math.max(avatars.length - max, 0) : 0;
22
+ return (_jsxs("div", { className: cn("flex -space-x-2", className), ...props, children: [visibleAvatars.map((avatar, index) => (_jsx(Avatar, { ...avatar, className: {
23
+ ...avatar.className,
24
+ root: cn(RING_CLASS, avatar.className?.root),
25
+ } }, `avatar-${index.toString()}`))), overflowCount > 0 && (_jsx(Avatar, { fallback: `+${overflowCount.toString()}`, size: visibleAvatars.at(-1)?.size, shape: visibleAvatars.at(-1)?.shape, className: {
26
+ root: cn(RING_CLASS),
27
+ fallback: "bg-muted text-muted-foreground",
28
+ } }))] }));
29
+ }
@@ -0,0 +1,107 @@
1
+ import type React from "react";
2
+ import { Avatar as AvatarPrimitive } from "@forthtilliath/shadcn-ui/components/avatar";
3
+ import type { Shape, Size } from "./constants";
4
+ import type { BadgeVariants, FallbackVariants, StatusVariants } from "./variants";
5
+ export type AvatarProps = Omit<React.ComponentProps<typeof AvatarPrimitive>, "className" | "size"> & {
6
+ /**
7
+ * The source URL of the image.
8
+ */
9
+ src?: string;
10
+ /**
11
+ * The alt text for the image.
12
+ */
13
+ alt?: string;
14
+ /**
15
+ * The fallback text for the image (3 letters max if possible).
16
+ */
17
+ fallback: string;
18
+ /**
19
+ * The variant of the fallback box.
20
+ *
21
+ * You can also use ``className.fallback`` to change the color of the fallback box.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <Avatar fallback="CN" fallbackVariant="emerald" />
26
+ * <Avatar fallback="CN" className={{ fallback: "bg-emerald-500" }} />
27
+ * ```
28
+ */
29
+ fallbackVariant?: FallbackVariants["fallbackVariant"];
30
+ /**
31
+ * The size of the avatar.
32
+ */
33
+ size?: Size;
34
+ /**
35
+ * The shape of the avatar.
36
+ */
37
+ shape?: Shape;
38
+ /**
39
+ * Use the `ring` prop to add a ring to the avatar.
40
+ * @default false
41
+ */
42
+ ring?: boolean;
43
+ /**
44
+ * The status of the user.
45
+ */
46
+ status?: StatusVariants["status"];
47
+ /**
48
+ * Position of the status indicator.
49
+ */
50
+ position?: StatusVariants["position"];
51
+ /**
52
+ * Arbitrary content (notification count, icon) shown in a badge overlay.
53
+ *
54
+ * Distinct from `status`: `status` is a plain color dot for
55
+ * online/offline/away/busy, `badge` holds real content and its own color
56
+ * variant. Both can be shown at once, since they default to opposite
57
+ * corners (`status` bottom-right, `badge` top-right) and accept
58
+ * independent `position`/`badgePosition` overrides.
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * <Avatar fallback="CN" badge={5} />
63
+ * <Avatar fallback="CN" badge={<Check className="size-3" />} badgeVariant="default" />
64
+ * ```
65
+ */
66
+ badge?: React.ReactNode;
67
+ /**
68
+ * The color variant of the `badge`.
69
+ */
70
+ badgeVariant?: BadgeVariants["badgeVariant"];
71
+ /**
72
+ * Position of the `badge`.
73
+ * @default "top-right"
74
+ */
75
+ badgePosition?: BadgeVariants["position"];
76
+ /**
77
+ * Render a tooltip for the avatar.
78
+ */
79
+ renderTooltip?: () => React.ReactNode;
80
+ /**
81
+ * Custom classes for each part of the component.
82
+ *
83
+ * - `root` is the root element of the component.
84
+ * - `image` is the image element.
85
+ * - `fallback` is the fallback element.
86
+ * - `status` is the status element.
87
+ * - `badge` is the badge element.
88
+ * - `tooltipTrigger` is the tooltip trigger element.
89
+ * - `tooltipContent` is the tooltip content element.
90
+ */
91
+ className?: Partial<Record<"root" | "image" | "fallback" | "status" | "badge" | "tooltipTrigger" | "tooltipContent", string>>;
92
+ };
93
+ /**
94
+ * An image element with a fallback for representing the user.
95
+ *
96
+ * _Inspired from multiple sources, to make a consistent and reusable component._
97
+ * @see https://ui.shadcn.com/docs/components/avatar
98
+ * @see https://bundui.io/components/avatar
99
+ * @see https://www.shadcnui-blocks.com/components/avatar
100
+ * @see https://ktui.io/docs/avatar
101
+ *
102
+ * @version 0.1.0
103
+ * @author Forth
104
+ * @copyright 2025 Forth
105
+ */
106
+ export declare function Avatar({ src, alt, fallback, fallbackVariant, shape, size, ring, status, position, badge, badgeVariant, badgePosition, className, renderTooltip, ...props }: AvatarProps): React.JSX.Element;
107
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,MAAM,IAAI,eAAe,EAG1B,MAAM,4CAA4C,CAAC;AAQpD,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AASpB,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,EAC5C,WAAW,GAAG,MAAM,CACrB,GAAG;IACF;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACtD;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAEtC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CACjB,MAAM,CACF,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,gBAAgB,EAClB,MAAM,CACP,CACF,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,GAAG,EACH,QAAQ,EACR,eAAe,EACf,KAAK,EACL,IAAI,EACJ,IAAY,EACZ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,aAAsC,EACtC,SAAS,EACT,aAAa,EACb,GAAG,KAAK,EACT,EAAE,WAAW,qBAgEb"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Avatar as AvatarPrimitive, AvatarFallback, AvatarImage, } from "@forthtilliath/shadcn-ui/components/avatar";
3
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "@forthtilliath/shadcn-ui/components/tooltip";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ import { DEFAULT_BADGE_POSITION, STATUS_LABEL } from "./constants";
6
+ import { avatarVariants, badgeVariants, fallbackVariants, statusVariants, tooltipTriggerVariants, } from "./variants";
7
+ /**
8
+ * An image element with a fallback for representing the user.
9
+ *
10
+ * _Inspired from multiple sources, to make a consistent and reusable component._
11
+ * @see https://ui.shadcn.com/docs/components/avatar
12
+ * @see https://bundui.io/components/avatar
13
+ * @see https://www.shadcnui-blocks.com/components/avatar
14
+ * @see https://ktui.io/docs/avatar
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2025 Forth
19
+ */
20
+ export function Avatar({ src, alt, fallback, fallbackVariant, shape, size, ring = false, status, position, badge, badgeVariant, badgePosition = DEFAULT_BADGE_POSITION, className, renderTooltip, ...props }) {
21
+ const avatar = (_jsxs("div", { className: "relative", children: [_jsxs(AvatarPrimitive, { className: cn("block", avatarVariants({ shape, ring, size }), className?.root), ...props, children: [_jsx(AvatarImage, { src: src, alt: alt, className: className?.image }), _jsx(AvatarFallback, { className: cn(fallbackVariants({ fallbackVariant, shape }), className?.fallback), children: fallback })] }), status && (_jsx("div", { className: cn(statusVariants({ status, position }), className?.status), children: _jsx("span", { className: "sr-only", children: STATUS_LABEL[status] }) })), badge !== undefined && (_jsx("div", { className: cn(badgeVariants({ badgeVariant, position: badgePosition }), className?.badge), children: badge }))] }));
22
+ if (typeof renderTooltip === "function") {
23
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: cn(tooltipTriggerVariants({ shape }), className?.tooltipTrigger), asChild: true, children: avatar }), _jsx(TooltipContent, { className: cn(className?.tooltipContent), children: renderTooltip() })] }));
24
+ }
25
+ return avatar;
26
+ }
@@ -0,0 +1,13 @@
1
+ export declare const STATUS_LABEL: Readonly<{
2
+ online: "Online";
3
+ offline: "Offline";
4
+ away: "Away";
5
+ busy: "Busy";
6
+ }>;
7
+ export type StatusLabel = keyof typeof STATUS_LABEL;
8
+ export type Shape = "square" | "rounded" | "circle";
9
+ export type Size = "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
10
+ export type IndicatorPosition = "top-right" | "bottom-right" | "top-left" | "bottom-left";
11
+ export declare const DEFAULT_SHAPE: Shape;
12
+ export declare const DEFAULT_BADGE_POSITION: IndicatorPosition;
13
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;EAKvB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,YAAY,CAAC;AAEpD,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAC3B,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,KAAgB,CAAC;AAC7C,eAAO,MAAM,sBAAsB,EAAE,iBAA+B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const STATUS_LABEL = Object.freeze({
2
+ online: "Online",
3
+ offline: "Offline",
4
+ away: "Away",
5
+ busy: "Busy",
6
+ });
7
+ export const DEFAULT_SHAPE = "circle";
8
+ export const DEFAULT_BADGE_POSITION = "top-right";
@@ -0,0 +1,5 @@
1
+ export type { AvatarProps } from "./avatar";
2
+ export { Avatar } from "./avatar";
3
+ export type { AvatarGroupProps } from "./avatar-group";
4
+ export { AvatarGroup } from "./avatar-group";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/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"}
@@ -0,0 +1,2 @@
1
+ export { Avatar } from "./avatar";
2
+ export { AvatarGroup } from "./avatar-group";
@@ -0,0 +1,31 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const avatarVariants: (props?: ({
3
+ ring?: boolean | null | undefined;
4
+ shape?: "circle" | "square" | "rounded" | null | undefined;
5
+ size?: "sm" | "lg" | "xs" | "md" | "xl" | "2xl" | "3xl" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export declare const statusVariants: (props?: ({
8
+ status?: "online" | "offline" | "away" | "busy" | null | undefined;
9
+ position?: "top-right" | "bottom-right" | "top-left" | "bottom-left" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ export type StatusVariants = VariantProps<typeof statusVariants>;
12
+ /**
13
+ * A badge overlay for arbitrary content (notification count, icon), distinct
14
+ * from `statusVariants`' plain color dot — positioned independently so both
15
+ * can be shown on the same avatar at once (e.g. status bottom-right, badge
16
+ * top-right).
17
+ */
18
+ export declare const badgeVariants: (props?: ({
19
+ badgeVariant?: "default" | "outline" | "destructive" | "secondary" | null | undefined;
20
+ position?: "top-right" | "bottom-right" | "top-left" | "bottom-left" | null | undefined;
21
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
+ export type BadgeVariants = VariantProps<typeof badgeVariants>;
23
+ export declare const fallbackVariants: (props?: ({
24
+ fallbackVariant?: "default" | "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "orange" | "pink" | "purple" | "red" | "rose" | "slate" | "sky" | "teal" | "violet" | "yellow" | "amber-full" | "blue-full" | "cyan-full" | "emerald-full" | "fuchsia-full" | "gray-full" | "green-full" | "indigo-full" | "lime-full" | "orange-full" | "pink-full" | "purple-full" | "red-full" | "rose-full" | "slate-full" | "sky-full" | "teal-full" | "violet-full" | "yellow-full" | null | undefined;
25
+ shape?: "circle" | "square" | "rounded" | null | undefined;
26
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
+ export type FallbackVariants = VariantProps<typeof fallbackVariants>;
28
+ export declare const tooltipTriggerVariants: (props?: ({
29
+ shape?: "circle" | "square" | "rounded" | null | undefined;
30
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
31
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAM7D,eAAO,MAAM,cAAc;;;;8EA2BzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;8EAwBzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;8EAsBzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAE/D,eAAO,MAAM,gBAAgB;;;8EAsD3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAErE,eAAO,MAAM,sBAAsB;;8EAWjC,CAAC"}