@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,3 @@
1
+ export * from "./grid";
2
+ export * from "./grid-item";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./grid";
2
+ export * from "./grid-item";
@@ -0,0 +1,16 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const gridVariants: (props?: ({
3
+ cols?: 1 | 2 | 3 | 7 | 12 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | null | undefined;
4
+ spacing?: "sm" | "lg" | "none" | "xs" | "md" | "xl" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export type GridVariants = VariantProps<typeof gridVariants>;
7
+ export declare const gridItemVariants: (props?: ({
8
+ cols?: "default" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "full" | null | undefined;
9
+ debug?: boolean | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ export type GridItemVariants = VariantProps<typeof gridItemVariants>;
12
+ export declare const gridItemDebugVariants: (props?: ({
13
+ active?: boolean | null | undefined;
14
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
+ export type GridItemDebugVariants = VariantProps<typeof gridItemDebugVariants>;
16
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/grid/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,eAAO,MAAM,YAAY;;;8EA6BvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAE7D,eAAO,MAAM,gBAAgB;;;8EA0B3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAErE,eAAO,MAAM,qBAAqB;;8EAkBjC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { cva } from "class-variance-authority";
2
+ export const gridVariants = cva("grid", {
3
+ variants: {
4
+ cols: {
5
+ 1: "grid-cols-1",
6
+ 2: "grid-cols-2",
7
+ 3: "grid-cols-3",
8
+ 4: "grid-cols-4",
9
+ 5: "grid-cols-5",
10
+ 6: "grid-cols-6",
11
+ 7: "grid-cols-7",
12
+ 8: "grid-cols-8",
13
+ 9: "grid-cols-9",
14
+ 10: "grid-cols-10",
15
+ 11: "grid-cols-11",
16
+ 12: "grid-cols-12",
17
+ },
18
+ spacing: {
19
+ none: "gap-0",
20
+ xs: "gap-1",
21
+ sm: "gap-2",
22
+ md: "gap-4",
23
+ lg: "gap-8",
24
+ xl: "gap-12",
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ cols: 12,
29
+ spacing: "md",
30
+ },
31
+ });
32
+ export const gridItemVariants = cva("flex justify-center items-center", {
33
+ variants: {
34
+ cols: {
35
+ default: "col-span-1",
36
+ "2": "col-span-2",
37
+ "3": "col-span-3",
38
+ "4": "col-span-4",
39
+ "5": "col-span-5",
40
+ "6": "col-span-6",
41
+ "7": "col-span-7",
42
+ "8": "col-span-8",
43
+ "9": "col-span-9",
44
+ "10": "col-span-10",
45
+ "11": "col-span-11",
46
+ "12": "col-span-12",
47
+ full: "col-span-full",
48
+ },
49
+ debug: {
50
+ false: "",
51
+ true: "relative",
52
+ },
53
+ },
54
+ defaultVariants: {
55
+ cols: "default",
56
+ debug: false,
57
+ },
58
+ });
59
+ export const gridItemDebugVariants = cva([
60
+ "absolute inset-0 z-[999] pointer-events-none",
61
+ "w-full h-full bg-red-500/10",
62
+ "transition-transform duration-500 ease-in-out origin-top",
63
+ "border-dashed border-red-500/30 border",
64
+ ], {
65
+ variants: {
66
+ active: {
67
+ true: "scale-y-100",
68
+ false: "scale-y-0",
69
+ },
70
+ },
71
+ defaultVariants: {
72
+ active: true,
73
+ },
74
+ });
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ export interface ImageInputProps {
3
+ /** An existing image URL to preview (e.g. editing something that already has one). */
4
+ value?: string | null;
5
+ onFileChange?: (file: File | null) => void;
6
+ disabled?: boolean;
7
+ className?: string;
8
+ /** @default "16/9" */
9
+ aspectRatio?: string;
10
+ }
11
+ /**
12
+ * A click-to-upload image picker with a live preview.
13
+ *
14
+ * @see https://ktui.io/docs/image-input
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2026 Forth
19
+ */
20
+ export declare function ImageInput({ value, onFileChange, disabled, className, aspectRatio, }: ImageInputProps): React.JSX.Element;
21
+ //# sourceMappingURL=image-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-input.d.ts","sourceRoot":"","sources":["../../../src/components/image-input/image-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,QAAgB,EAChB,SAAS,EACT,WAAoB,GACrB,EAAE,eAAe,qBA4EjB"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ImageIcon, XIcon } from "lucide-react";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ /**
7
+ * A click-to-upload image picker with a live preview.
8
+ *
9
+ * @see https://ktui.io/docs/image-input
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export function ImageInput({ value, onFileChange, disabled = false, className, aspectRatio = "16/9", }) {
16
+ const [file, setFile] = React.useState(null);
17
+ const [objectUrl, setObjectUrl] = React.useState(null);
18
+ const inputRef = React.useRef(null);
19
+ React.useEffect(() => {
20
+ if (file === null) {
21
+ // eslint-disable-next-line @eslint-react/set-state-in-effect, react-hooks/set-state-in-effect -- syncs the object URL lifecycle (create/revoke) with the selected File, an external browser resource that can't be derived during render
22
+ setObjectUrl(null);
23
+ return;
24
+ }
25
+ const url = URL.createObjectURL(file);
26
+ // eslint-disable-next-line @eslint-react/set-state-in-effect -- see above
27
+ setObjectUrl(url);
28
+ return () => {
29
+ URL.revokeObjectURL(url);
30
+ };
31
+ }, [file]);
32
+ const preview = objectUrl ?? value ?? null;
33
+ function handleFile(next) {
34
+ setFile(next);
35
+ onFileChange?.(next);
36
+ }
37
+ return (_jsxs("div", { "data-slot": "image-input", className: cn("border-input relative flex items-center justify-center overflow-hidden rounded-lg border border-dashed", disabled && "pointer-events-none opacity-50", className), style: { aspectRatio }, children: [preview !== null ? (_jsxs(_Fragment, { children: [_jsx("img", { src: preview, alt: "", className: "size-full object-cover" }), _jsx("button", { type: "button", onClick: () => {
38
+ handleFile(null);
39
+ }, "aria-label": "Remove image", className: "bg-background/80 text-foreground hover:bg-background absolute top-2 right-2 rounded-full p-1 shadow-xs", children: _jsx(XIcon, { className: "size-4" }) })] })) : (_jsxs("button", { type: "button", onClick: () => {
40
+ inputRef.current?.click();
41
+ }, disabled: disabled, className: "text-muted-foreground hover:text-foreground flex flex-col items-center gap-2 p-8 text-sm", children: [_jsx(ImageIcon, { className: "size-8" }), "Click to upload an image"] })), _jsx("input", { ref: inputRef, type: "file", accept: "image/*", disabled: disabled, className: "hidden", onChange: (e) => {
42
+ handleFile(e.target.files?.[0] ?? null);
43
+ e.target.value = "";
44
+ } })] }));
45
+ }
@@ -0,0 +1,3 @@
1
+ export type { ImageInputProps } from "./image-input";
2
+ export { ImageInput } from "./image-input";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/image-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export { ImageInput } from "./image-input";
@@ -0,0 +1,3 @@
1
+ export type { InfiniteScrollProps } from "./infinite-scroll";
2
+ export { InfiniteScroll } from "./infinite-scroll";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/infinite-scroll/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { InfiniteScroll } from "./infinite-scroll";
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export interface InfiniteScrollProps {
3
+ onLoadMore: () => void;
4
+ hasMore: boolean;
5
+ loading?: boolean;
6
+ children: React.ReactNode;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * Calls `onLoadMore` once a sentinel at the bottom of `children` scrolls
11
+ * into view, via `IntersectionObserver` — no scroll-event polling.
12
+ *
13
+ * @see https://www.rigidui.com/docs/components/infinite-scroll
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export declare function InfiniteScroll({ onLoadMore, hasMore, loading, children, className, }: InfiniteScrollProps): React.JSX.Element;
20
+ //# sourceMappingURL=infinite-scroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infinite-scroll.d.ts","sourceRoot":"","sources":["../../../src/components/infinite-scroll/infinite-scroll.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,OAAO,EACP,OAAe,EACf,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,qBAgCrB"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Loader2Icon } from "lucide-react";
5
+ /**
6
+ * Calls `onLoadMore` once a sentinel at the bottom of `children` scrolls
7
+ * into view, via `IntersectionObserver` — no scroll-event polling.
8
+ *
9
+ * @see https://www.rigidui.com/docs/components/infinite-scroll
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export function InfiniteScroll({ onLoadMore, hasMore, loading = false, children, className, }) {
16
+ const sentinelRef = React.useRef(null);
17
+ React.useEffect(() => {
18
+ const sentinel = sentinelRef.current;
19
+ if (sentinel === null || !hasMore) {
20
+ return;
21
+ }
22
+ const observer = new IntersectionObserver((entries) => {
23
+ if (entries[0]?.isIntersecting === true) {
24
+ onLoadMore();
25
+ }
26
+ });
27
+ observer.observe(sentinel);
28
+ return () => {
29
+ observer.disconnect();
30
+ };
31
+ }, [hasMore, onLoadMore]);
32
+ return (_jsxs("div", { "data-slot": "infinite-scroll", className: className, children: [children, hasMore && (_jsx("div", { ref: sentinelRef, className: "flex justify-center py-4", children: loading && (_jsx(Loader2Icon, { className: "text-muted-foreground size-5 animate-spin" })) }))] }));
33
+ }
@@ -0,0 +1,2 @@
1
+ export { Kbd, KbdGroup } from "./kbd";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/kbd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1 @@
1
+ export { Kbd, KbdGroup } from "./kbd";
@@ -0,0 +1,15 @@
1
+ import type React from "react";
2
+ /**
3
+ * Displays which key or combination of keys performs a given action.
4
+ *
5
+ * _Inspired from multiple sources, to make a consistent and reusable component._
6
+ * @see https://ui.shadcn.com/docs/components/kbd
7
+ *
8
+ * @version 0.1.0
9
+ * @author Forth
10
+ * @copyright 2026 Forth
11
+ */
12
+ export declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): React.JSX.Element;
13
+ /** Groups several `Kbd`s together, e.g. for a "Ctrl + Shift + P" sequence. */
14
+ export declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
15
+ //# sourceMappingURL=kbd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../../src/components/kbd/kbd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYvE;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ /**
4
+ * Displays which key or combination of keys performs a given action.
5
+ *
6
+ * _Inspired from multiple sources, to make a consistent and reusable component._
7
+ * @see https://ui.shadcn.com/docs/components/kbd
8
+ *
9
+ * @version 0.1.0
10
+ * @author Forth
11
+ * @copyright 2026 Forth
12
+ */
13
+ export function Kbd({ className, ...props }) {
14
+ return (_jsx("kbd", { "data-slot": "kbd", className: cn("bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none", "[&_svg:not([class*='size-'])]:size-3", className), ...props }));
15
+ }
16
+ /** Groups several `Kbd`s together, e.g. for a "Ctrl + Shift + P" sequence. */
17
+ export function KbdGroup({ className, ...props }) {
18
+ return (_jsx("div", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props }));
19
+ }
@@ -0,0 +1,7 @@
1
+ export type { LinkProps } from "./link";
2
+ export { Link } from "./link";
3
+ export type { LinkPreviewMetadata, LinkPreviewProps } from "./link-preview";
4
+ export { LinkPreview } from "./link-preview";
5
+ export type { LinkVariants } from "./variants";
6
+ export { linkVariants } from "./variants";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/link/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Link } from "./link";
2
+ export { LinkPreview } from "./link-preview";
3
+ export { linkVariants } from "./variants";
@@ -0,0 +1,36 @@
1
+ import type * as React from "react";
2
+ export interface LinkPreviewMetadata {
3
+ title: React.ReactNode;
4
+ description?: React.ReactNode;
5
+ image?: string;
6
+ favicon?: string;
7
+ url?: string;
8
+ }
9
+ export interface LinkPreviewProps {
10
+ metadata: LinkPreviewMetadata;
11
+ children: React.ReactNode;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * Reveals a metadata card (title/description/image) on hover over its
16
+ * trigger — the "unfurl" pattern used for link previews.
17
+ *
18
+ * Metadata is supplied by the caller rather than fetched live: both
19
+ * reference sources (kibo-ui's Glimpse, aceternity's Link Preview) depend
20
+ * on a live external fetch (an Open Graph scrape via an RSC / server
21
+ * action, or a screenshot from the Microlink API respectively) — a
22
+ * network/backend dependency out of scope for a UI-only package. Wire this
23
+ * to your own metadata source (a server action, a cached lookup, etc.) and
24
+ * pass the result in as `metadata`.
25
+ *
26
+ * _Inspired from multiple sources, to make a consistent and reusable component._
27
+ * @see https://ui.shadcn.com/docs/components/hover-card
28
+ * @see https://www.kibo-ui.com/components/glimpse
29
+ * @see https://ui.aceternity.com/components/link-preview
30
+ *
31
+ * @version 0.1.0
32
+ * @author Forth
33
+ * @copyright 2026 Forth
34
+ */
35
+ export declare function LinkPreview({ metadata, children, className, }: LinkPreviewProps): React.JSX.Element;
36
+ //# sourceMappingURL=link-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-preview.d.ts","sourceRoot":"","sources":["../../../src/components/link/link-preview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AASpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,qBAiClB"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@forthtilliath/shadcn-ui/components/hover-card";
3
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
4
+ /**
5
+ * Reveals a metadata card (title/description/image) on hover over its
6
+ * trigger — the "unfurl" pattern used for link previews.
7
+ *
8
+ * Metadata is supplied by the caller rather than fetched live: both
9
+ * reference sources (kibo-ui's Glimpse, aceternity's Link Preview) depend
10
+ * on a live external fetch (an Open Graph scrape via an RSC / server
11
+ * action, or a screenshot from the Microlink API respectively) — a
12
+ * network/backend dependency out of scope for a UI-only package. Wire this
13
+ * to your own metadata source (a server action, a cached lookup, etc.) and
14
+ * pass the result in as `metadata`.
15
+ *
16
+ * _Inspired from multiple sources, to make a consistent and reusable component._
17
+ * @see https://ui.shadcn.com/docs/components/hover-card
18
+ * @see https://www.kibo-ui.com/components/glimpse
19
+ * @see https://ui.aceternity.com/components/link-preview
20
+ *
21
+ * @version 0.1.0
22
+ * @author Forth
23
+ * @copyright 2026 Forth
24
+ */
25
+ export function LinkPreview({ metadata, children, className, }) {
26
+ return (_jsxs(HoverCard, { openDelay: 150, children: [_jsx(HoverCardTrigger, { asChild: true, children: children }), _jsxs(HoverCardContent, { className: cn("w-80 overflow-hidden p-0", className), children: [metadata.image !== undefined && (_jsx("img", { src: metadata.image, alt: "", className: "aspect-video w-full object-cover" })), _jsxs("div", { className: "space-y-1 p-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [metadata.favicon !== undefined && (_jsx("img", { src: metadata.favicon, alt: "", className: "size-3.5" })), metadata.url !== undefined && (_jsx("span", { className: "text-muted-foreground truncate text-xs", children: metadata.url }))] }), _jsx("p", { className: "text-sm leading-none font-medium", children: metadata.title }), metadata.description !== undefined && (_jsx("p", { className: "text-muted-foreground line-clamp-2 text-xs", children: metadata.description }))] })] })] }));
27
+ }
@@ -0,0 +1,27 @@
1
+ import type * as React from "react";
2
+ import type { LinkVariants } from "./variants";
3
+ export type LinkProps = React.ComponentProps<"a"> & LinkVariants & {
4
+ /**
5
+ * Renders the passed child instead of an `<a>` (e.g. a framework's own
6
+ * `Link`), keeping this component's styling and `isExternal` behavior.
7
+ */
8
+ asChild?: boolean;
9
+ /**
10
+ * Adds `target="_blank"` + `rel="noopener noreferrer"` and a trailing
11
+ * arrow icon. Auto-detected from `href` when omitted.
12
+ */
13
+ isExternal?: boolean;
14
+ disabled?: boolean;
15
+ };
16
+ /**
17
+ * A styled hyperlink, or a component that looks like one.
18
+ *
19
+ * _Inspired from multiple sources, to make a consistent and reusable component._
20
+ * @see https://ktui.io/docs/link
21
+ *
22
+ * @version 0.1.0
23
+ * @author Forth
24
+ * @copyright 2026 Forth
25
+ */
26
+ export declare function Link({ className, variant, underline, size, asChild, isExternal, disabled, href, children, ...props }: LinkProps): React.JSX.Element;
27
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/components/link/link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAMpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAC/C,YAAY,GAAG;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAMJ;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,OAAO,EACP,SAAS,EACT,IAAI,EACJ,OAAe,EACf,UAAU,EACV,QAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,qBAgCX"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import { ArrowUpRightIcon } from "lucide-react";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ import { linkVariants } from "./variants";
6
+ function isExternalHref(href) {
7
+ return href !== undefined && /^https?:\/\//.test(href);
8
+ }
9
+ /**
10
+ * A styled hyperlink, or a component that looks like one.
11
+ *
12
+ * _Inspired from multiple sources, to make a consistent and reusable component._
13
+ * @see https://ktui.io/docs/link
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function Link({ className, variant, underline, size, asChild = false, isExternal, disabled = false, href, children, ...props }) {
20
+ const external = isExternal ?? isExternalHref(href);
21
+ const sharedProps = {
22
+ "data-slot": "link",
23
+ "data-disabled": disabled,
24
+ href,
25
+ "aria-disabled": disabled,
26
+ target: external ? "_blank" : undefined,
27
+ rel: external ? "noopener noreferrer" : undefined,
28
+ className: cn(linkVariants({ variant, underline, size }), disabled && "pointer-events-none opacity-50", className),
29
+ ...props,
30
+ };
31
+ // `Slot` requires a single child to clone props onto, so the
32
+ // auto-appended external-link icon (which would make it two children)
33
+ // is only added for the plain `<a>` case — `asChild` callers own their
34
+ // entire subtree already.
35
+ if (asChild) {
36
+ return _jsx(Slot, { ...sharedProps, children: children });
37
+ }
38
+ return (_jsxs("a", { ...sharedProps, children: [children, external && _jsx(ArrowUpRightIcon, { className: "size-[0.9em]" })] }));
39
+ }
@@ -0,0 +1,8 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const linkVariants: (props?: ({
3
+ variant?: "default" | "primary" | "destructive" | "muted" | null | undefined;
4
+ underline?: "none" | "always" | "hover" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type LinkVariants = VariantProps<typeof linkVariants>;
8
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/link/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,eAAO,MAAM,YAAY;;;;8EA2BxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { cva } from "class-variance-authority";
2
+ export const linkVariants = cva("focus-visible:ring-ring/50 inline-flex items-center gap-1 rounded-xs outline-none transition-colors focus-visible:ring-2", {
3
+ variants: {
4
+ variant: {
5
+ default: "text-foreground hover:text-primary",
6
+ primary: "text-primary hover:text-primary/80",
7
+ muted: "text-muted-foreground hover:text-foreground",
8
+ destructive: "text-destructive hover:text-destructive/80",
9
+ },
10
+ underline: {
11
+ none: "no-underline",
12
+ hover: "no-underline hover:underline",
13
+ always: "underline",
14
+ },
15
+ size: {
16
+ sm: "text-sm",
17
+ default: "text-base",
18
+ lg: "text-lg",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: "default",
23
+ underline: "hover",
24
+ size: "default",
25
+ },
26
+ });
@@ -0,0 +1,3 @@
1
+ export type { MarqueeProps } from "./marquee";
2
+ export { Marquee } from "./marquee";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/marquee/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export { Marquee } from "./marquee";
@@ -0,0 +1,22 @@
1
+ import type React from "react";
2
+ export type MarqueeProps = React.ComponentProps<"div"> & {
3
+ /** Duration for one full loop, in seconds. @default 20 */
4
+ duration?: number;
5
+ reverse?: boolean;
6
+ pauseOnHover?: boolean;
7
+ vertical?: boolean;
8
+ };
9
+ /**
10
+ * Infinitely scrolls its children (a logo wall, a ticker) — two duplicated
11
+ * tracks looped via a pure CSS keyframe, no animation library.
12
+ *
13
+ * _Inspired from multiple sources, to make a consistent and reusable component._
14
+ * @see https://www.hextaui.com/docs/ui/components/marquee
15
+ * @see https://www.kibo-ui.com/components/marquee
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export declare function Marquee({ duration, reverse, pauseOnHover, vertical, className, children, ...props }: MarqueeProps): React.JSX.Element;
22
+ //# sourceMappingURL=marquee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee.d.ts","sourceRoot":"","sources":["../../../src/components/marquee/marquee.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IACvD,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAa,EACb,OAAe,EACf,YAAoB,EACpB,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,YAAY,qBA8Bd"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ /**
4
+ * Infinitely scrolls its children (a logo wall, a ticker) — two duplicated
5
+ * tracks looped via a pure CSS keyframe, no animation library.
6
+ *
7
+ * _Inspired from multiple sources, to make a consistent and reusable component._
8
+ * @see https://www.hextaui.com/docs/ui/components/marquee
9
+ * @see https://www.kibo-ui.com/components/marquee
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export function Marquee({ duration = 20, reverse = false, pauseOnHover = false, vertical = false, className, children, ...props }) {
16
+ return (_jsx("div", { "data-slot": "marquee", className: cn("group flex overflow-hidden", vertical ? "flex-col" : "flex-row", className), ...props, children: [0, 1].map((track) => (_jsx("div", { "aria-hidden": track === 1, style: { animationDuration: `${duration.toString()}s` }, className: cn("flex shrink-0 justify-around gap-4", vertical
17
+ ? "animate-marquee-vertical flex-col"
18
+ : "animate-marquee flex-row", pauseOnHover && "group-hover:[animation-play-state:paused]", reverse && "[animation-direction:reverse]"), children: children }, track))) }));
19
+ }
@@ -0,0 +1,3 @@
1
+ export type { LoadingState, MultiStepLoaderProps } from "./multi-step-loader";
2
+ export { MultiStepLoader } from "./multi-step-loader";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/multi-step-loader/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1 @@
1
+ export { MultiStepLoader } from "./multi-step-loader";