@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,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ /**
4
+ * Repeat a component a specified number of times.
5
+ *
6
+ * @param {RepeatProps} props - The props for the Repeat component.
7
+ * @param {number} props.count - The number of times to repeat the component.
8
+ * @param {(index: number) => React.Key} [props.keyItem] - A function to generate a unique key for each item.
9
+ * @param {(index: number) => React.ReactNode} props.renderItem - A function to render each item.
10
+ *
11
+ * @returns {React.ReactNode[]} An array of React components, each rendered with the renderItem function.
12
+ */
13
+ export function Repeat({ count, keyItem = (i) => i, renderItem, }) {
14
+ return Array.from({ length: count }).map((_, i) => (_jsx(React.Fragment, { children: renderItem(i) }, keyItem(i))));
15
+ }
@@ -0,0 +1,3 @@
1
+ export type { ScrollProgressProps } from "./scroll-progress";
2
+ export { ScrollProgress } from "./scroll-progress";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-progress/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 { ScrollProgress } from "./scroll-progress";
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ export interface ScrollProgressProps {
3
+ className?: string;
4
+ /** Tracks this element's own scroll instead of the window's. */
5
+ target?: React.RefObject<HTMLElement | null>;
6
+ }
7
+ /**
8
+ * A fixed bar at the top of the page (or a scrollable container) that
9
+ * fills as the user scrolls through it.
10
+ *
11
+ * @see https://bundui.io/components/scroll-progress-bar
12
+ * @see https://motion-primitives.com/docs/scroll-progress
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export declare function ScrollProgress({ className, target }: ScrollProgressProps): React.JSX.Element;
19
+ //# sourceMappingURL=scroll-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-progress.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-progress/scroll-progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,mBAAmB,qBAiCxE"}
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ /**
6
+ * A fixed bar at the top of the page (or a scrollable container) that
7
+ * fills as the user scrolls through it.
8
+ *
9
+ * @see https://bundui.io/components/scroll-progress-bar
10
+ * @see https://motion-primitives.com/docs/scroll-progress
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function ScrollProgress({ className, target }) {
17
+ const [progress, setProgress] = React.useState(0);
18
+ React.useEffect(() => {
19
+ const el = target?.current;
20
+ function onScroll() {
21
+ const scrollTop = el ? el.scrollTop : window.scrollY;
22
+ const scrollHeight = el
23
+ ? el.scrollHeight - el.clientHeight
24
+ : document.documentElement.scrollHeight - window.innerHeight;
25
+ // eslint-disable-next-line @eslint-react/set-state-in-effect -- also called from a real scroll event listener, not just the effect below; this disable only covers the mount-time initial read of the current scroll position
26
+ setProgress(scrollHeight > 0 ? (scrollTop / scrollHeight) * 100 : 0);
27
+ }
28
+ const node = el ?? window;
29
+ node.addEventListener("scroll", onScroll, { passive: true });
30
+ onScroll();
31
+ return () => {
32
+ node.removeEventListener("scroll", onScroll);
33
+ };
34
+ }, [target]);
35
+ return (_jsx("div", { "data-slot": "scroll-progress", className: cn("bg-primary fixed inset-x-0 top-0 z-50 h-1 origin-left", className), style: { transform: `scaleX(${(progress / 100).toString()})` } }));
36
+ }
@@ -0,0 +1,3 @@
1
+ export type { ScrollShadowProps } from "./scroll-shadow";
2
+ export { ScrollShadow } from "./scroll-shadow";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-shadow/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ export { ScrollShadow } from "./scroll-shadow";
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export type ScrollShadowProps = React.ComponentProps<"div"> & {
3
+ /** Size of the fade gradient, in pixels. @default 40 */
4
+ shadowSize?: number;
5
+ };
6
+ /**
7
+ * A vertically-scrollable container with fade-out gradient shadows at the
8
+ * top/bottom edges, hidden once scrolled all the way to that edge — built
9
+ * as a plain native-scroll `<div>` rather than wrapping shadcn-ui's
10
+ * `ScrollArea`, since that component doesn't forward a ref to its inner
11
+ * viewport (needed here to track scroll position for the fade toggling).
12
+ *
13
+ * @see https://www.heroui.com/docs/components/scroll-shadow
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export declare function ScrollShadow({ className, shadowSize, onScroll, ...props }: ScrollShadowProps): React.JSX.Element;
20
+ //# sourceMappingURL=scroll-shadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-shadow.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-shadow/scroll-shadow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC5D,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,UAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,iBAAiB,qBAyCnB"}
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ /**
6
+ * A vertically-scrollable container with fade-out gradient shadows at the
7
+ * top/bottom edges, hidden once scrolled all the way to that edge — built
8
+ * as a plain native-scroll `<div>` rather than wrapping shadcn-ui's
9
+ * `ScrollArea`, since that component doesn't forward a ref to its inner
10
+ * viewport (needed here to track scroll position for the fade toggling).
11
+ *
12
+ * @see https://www.heroui.com/docs/components/scroll-shadow
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export function ScrollShadow({ className, shadowSize = 40, onScroll, ...props }) {
19
+ const ref = React.useRef(null);
20
+ const [atTop, setAtTop] = React.useState(true);
21
+ const [atBottom, setAtBottom] = React.useState(false);
22
+ function updateEdges(el) {
23
+ // Also called from the onScroll handler below (a normal event, not an
24
+ // effect) — these two disables only cover the mount-time effect call,
25
+ // reading the element's scroll geometry that isn't known until after
26
+ // the first paint.
27
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
28
+ setAtTop(el.scrollTop <= 0);
29
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
30
+ setAtBottom(el.scrollTop + el.clientHeight >= el.scrollHeight - 1);
31
+ }
32
+ React.useEffect(() => {
33
+ if (ref.current !== null) {
34
+ updateEdges(ref.current);
35
+ }
36
+ }, []);
37
+ const maskFrom = atTop ? "black" : "transparent";
38
+ const maskTo = atBottom ? "black" : "transparent";
39
+ const mask = `linear-gradient(to bottom, ${maskFrom}, black ${shadowSize.toString()}px, black calc(100% - ${shadowSize.toString()}px), ${maskTo})`;
40
+ return (_jsx("div", { ref: ref, "data-slot": "scroll-shadow", "data-at-top": atTop, "data-at-bottom": atBottom, onScroll: (e) => {
41
+ updateEdges(e.currentTarget);
42
+ onScroll?.(e);
43
+ }, style: { maskImage: mask, WebkitMaskImage: mask }, className: cn("overflow-y-auto", className), ...props }));
44
+ }
@@ -0,0 +1,3 @@
1
+ export type { UseScrollspyOptions } from "./use-scrollspy";
2
+ export { useScrollspy } from "./use-scrollspy";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/scrollspy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ export { useScrollspy } from "./use-scrollspy";
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ export interface UseScrollspyOptions {
3
+ /** Element `id`s to track, in document order. */
4
+ ids: string[];
5
+ /**
6
+ * Passed to `IntersectionObserver`. The default treats a section as
7
+ * active once it's within the top 20% of the viewport.
8
+ * @default "0px 0px -80% 0px"
9
+ */
10
+ rootMargin?: string;
11
+ /**
12
+ * Tracks scroll position within this element instead of the whole page
13
+ * (e.g. a scrollable docs pane) — passed through as the observer's
14
+ * `root`.
15
+ */
16
+ root?: React.RefObject<HTMLElement | null>;
17
+ }
18
+ /**
19
+ * Tracks which of the given element `id`s is currently scrolled into
20
+ * view, via `IntersectionObserver` — for highlighting the active link in
21
+ * a table-of-contents/side nav as the page scrolls.
22
+ *
23
+ * @see https://ktui.io/docs/scrollspy
24
+ *
25
+ * @version 0.1.0
26
+ * @author Forth
27
+ * @copyright 2026 Forth
28
+ */
29
+ export declare function useScrollspy({ ids, rootMargin, root, }: UseScrollspyOptions): string | null;
30
+ //# sourceMappingURL=use-scrollspy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scrollspy.d.ts","sourceRoot":"","sources":["../../../src/components/scrollspy/use-scrollspy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC5C;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,UAAgC,EAChC,IAAI,GACL,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CA2BrC"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ const DEFAULT_ROOT_MARGIN = "0px 0px -80% 0px";
4
+ /**
5
+ * Tracks which of the given element `id`s is currently scrolled into
6
+ * view, via `IntersectionObserver` — for highlighting the active link in
7
+ * a table-of-contents/side nav as the page scrolls.
8
+ *
9
+ * @see https://ktui.io/docs/scrollspy
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export function useScrollspy({ ids, rootMargin = DEFAULT_ROOT_MARGIN, root, }) {
16
+ const [activeId, setActiveId] = React.useState(null);
17
+ React.useEffect(() => {
18
+ const elements = ids
19
+ .map((id) => document.getElementById(id))
20
+ .filter((el) => el !== null);
21
+ const observer = new IntersectionObserver((entries) => {
22
+ const visible = entries.find((entry) => entry.isIntersecting);
23
+ if (visible !== undefined) {
24
+ setActiveId(visible.target.id);
25
+ }
26
+ }, { root: root?.current, rootMargin });
27
+ for (const el of elements) {
28
+ observer.observe(el);
29
+ }
30
+ return () => {
31
+ observer.disconnect();
32
+ };
33
+ }, [ids, rootMargin, root]);
34
+ return activeId;
35
+ }
@@ -0,0 +1,3 @@
1
+ export type { SeparatorProps } from "./separator";
2
+ export { Separator } from "./separator";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/separator/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export { Separator } from "./separator";
@@ -0,0 +1,22 @@
1
+ import type React from "react";
2
+ import { Separator as SeparatorPrimitive } from "@forthtilliath/shadcn-ui/components/separator";
3
+ export type SeparatorProps = React.ComponentProps<typeof SeparatorPrimitive> & {
4
+ /**
5
+ * Centered text between two line segments (e.g. `"OR"`) — only applies
6
+ * when `orientation` is `"horizontal"` (the default).
7
+ */
8
+ label?: React.ReactNode;
9
+ };
10
+ /**
11
+ * Visually or semantically separates content.
12
+ *
13
+ * _Inspired from multiple sources, to make a consistent and reusable component._
14
+ * @see https://ui.shadcn.com/docs/components/separator
15
+ * @see https://ktui.io/docs/separator
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export declare function Separator({ label, className, orientation, ...props }: SeparatorProps): React.JSX.Element;
22
+ //# sourceMappingURL=separator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../src/components/separator/separator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAGhG,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC7E;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,WAA0B,EAC1B,GAAG,KAAK,EACT,EAAE,cAAc,qBA0BhB"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Separator as SeparatorPrimitive } from "@forthtilliath/shadcn-ui/components/separator";
3
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
4
+ /**
5
+ * Visually or semantically separates content.
6
+ *
7
+ * _Inspired from multiple sources, to make a consistent and reusable component._
8
+ * @see https://ui.shadcn.com/docs/components/separator
9
+ * @see https://ktui.io/docs/separator
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export function Separator({ label, className, orientation = "horizontal", ...props }) {
16
+ const hasLabel = label !== undefined && label !== null;
17
+ if (hasLabel && orientation === "horizontal") {
18
+ return (_jsxs("div", { role: "separator", "aria-orientation": "horizontal", className: cn("flex items-center gap-3", className), children: [_jsx("span", { className: "bg-border h-px flex-1" }), _jsx("span", { className: "text-muted-foreground text-xs whitespace-nowrap", children: label }), _jsx("span", { className: "bg-border h-px flex-1" })] }));
19
+ }
20
+ return (_jsx(SeparatorPrimitive, { orientation: orientation, className: className, ...props }));
21
+ }
@@ -0,0 +1,3 @@
1
+ export type { SnippetItem, SnippetProps } from "./snippet";
2
+ export { Snippet } from "./snippet";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/snippet/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export { Snippet } from "./snippet";
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ export interface SnippetItem {
3
+ value: string;
4
+ label: React.ReactNode;
5
+ code: string;
6
+ }
7
+ export interface SnippetProps {
8
+ items: SnippetItem[];
9
+ /** @default items[0]?.value */
10
+ defaultValue?: string;
11
+ className?: string;
12
+ }
13
+ /**
14
+ * Displays and copies code in a tabbed interface — the "npm install /
15
+ * yarn add / pnpm add" pattern.
16
+ *
17
+ * _Inspired from multiple sources, to make a consistent and reusable component._
18
+ * @see https://www.kibo-ui.com/components/snippet
19
+ *
20
+ * @version 0.1.0
21
+ * @author Forth
22
+ * @copyright 2026 Forth
23
+ */
24
+ export declare function Snippet({ items, defaultValue, className }: SnippetProps): React.JSX.Element;
25
+ //# sourceMappingURL=snippet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../../src/components/snippet/snippet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,YAAY,qBAuDvE"}
@@ -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 { CheckIcon, CopyIcon } from "lucide-react";
5
+ import { Button } from "@forthtilliath/shadcn-ui/components/button";
6
+ import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@forthtilliath/shadcn-ui/components/tabs";
7
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
8
+ const COPY_FEEDBACK_MS = 2000;
9
+ /**
10
+ * Displays and copies code in a tabbed interface — the "npm install /
11
+ * yarn add / pnpm add" pattern.
12
+ *
13
+ * _Inspired from multiple sources, to make a consistent and reusable component._
14
+ * @see https://www.kibo-ui.com/components/snippet
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2026 Forth
19
+ */
20
+ export function Snippet({ items, defaultValue, className }) {
21
+ const [copiedValue, setCopiedValue] = React.useState(null);
22
+ function handleCopy(item) {
23
+ void navigator.clipboard.writeText(item.code).then(() => {
24
+ setCopiedValue(item.value);
25
+ setTimeout(() => {
26
+ setCopiedValue(null);
27
+ }, COPY_FEEDBACK_MS);
28
+ });
29
+ }
30
+ return (_jsxs(Tabs, { defaultValue: defaultValue ?? items[0]?.value, className: cn("border-border overflow-hidden rounded-lg border", className), children: [_jsx(TabsList, { className: "bg-muted/40 h-auto w-full justify-start rounded-none border-b p-0", children: items.map((item) => (_jsx(TabsTrigger, { value: item.value, className: "data-[state=active]:bg-background rounded-none font-mono text-xs", children: item.label }, item.value))) }), items.map((item) => (_jsxs(TabsContent, { value: item.value, className: "relative m-0", children: [_jsx("pre", { className: "overflow-x-auto p-4 pr-12 font-mono text-sm", children: _jsx("code", { children: item.code }) }), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => {
31
+ handleCopy(item);
32
+ }, "aria-label": copiedValue === item.value ? "Copied" : "Copy", className: "absolute top-2 right-2 size-7", children: copiedValue === item.value ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}) })] }, item.value)))] }));
33
+ }
@@ -0,0 +1,3 @@
1
+ export type { SortableProps } from "./sortable";
2
+ export { Sortable } from "./sortable";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sortable/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { Sortable } from "./sortable";
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ export interface SortableProps<T> {
3
+ items: T[];
4
+ onReorder: (items: T[]) => void;
5
+ getKey: (item: T) => string;
6
+ renderItem: (item: T, index: number) => React.ReactNode;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * A drag-to-reorder list — built on the browser's native HTML5 drag
12
+ * events rather than a drag-and-drop library, since reordering a flat
13
+ * list (no cross-container drops, no sortable grids) doesn't need one.
14
+ *
15
+ * @see https://ui-x.junwen-k.dev/docs/utilities/sortable
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export declare function Sortable<T>({ items, onReorder, getKey, renderItem, disabled, className, }: SortableProps<T>): React.JSX.Element;
22
+ //# sourceMappingURL=sortable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../../../src/components/sortable/sortable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAC1B,KAAK,EACL,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAgB,EAChB,SAAS,GACV,EAAE,aAAa,CAAC,CAAC,CAAC,qBAsDlB"}
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ /**
6
+ * A drag-to-reorder list — built on the browser's native HTML5 drag
7
+ * events rather than a drag-and-drop library, since reordering a flat
8
+ * list (no cross-container drops, no sortable grids) doesn't need one.
9
+ *
10
+ * @see https://ui-x.junwen-k.dev/docs/utilities/sortable
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function Sortable({ items, onReorder, getKey, renderItem, disabled = false, className, }) {
17
+ const dragIndexRef = React.useRef(null);
18
+ const [overIndex, setOverIndex] = React.useState(null);
19
+ function handleDrop(targetIndex) {
20
+ const from = dragIndexRef.current;
21
+ if (from === null || from === targetIndex) {
22
+ return;
23
+ }
24
+ const next = [...items];
25
+ const [moved] = next.splice(from, 1);
26
+ if (moved !== undefined) {
27
+ next.splice(targetIndex, 0, moved);
28
+ onReorder(next);
29
+ }
30
+ dragIndexRef.current = null;
31
+ setOverIndex(null);
32
+ }
33
+ return (_jsx("ul", { "data-slot": "sortable", className: cn("grid gap-2", className), children: items.map((item, index) => (_jsx("li", { draggable: !disabled, "data-dragging-over": overIndex === index, onDragStart: () => {
34
+ dragIndexRef.current = index;
35
+ }, onDragOver: (e) => {
36
+ e.preventDefault();
37
+ setOverIndex(index);
38
+ }, onDragLeave: () => {
39
+ setOverIndex((prev) => (prev === index ? null : prev));
40
+ }, onDrop: (e) => {
41
+ e.preventDefault();
42
+ handleDrop(index);
43
+ }, onDragEnd: () => {
44
+ dragIndexRef.current = null;
45
+ setOverIndex(null);
46
+ }, className: cn("data-[dragging-over=true]:ring-primary rounded-md data-[dragging-over=true]:ring-2", !disabled && "cursor-grab active:cursor-grabbing"), children: renderItem(item, index) }, getKey(item)))) }));
47
+ }
@@ -0,0 +1,3 @@
1
+ export type { SpacerProps } from "./spacer";
2
+ export { Spacer } from "./spacer";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/spacer/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ export { Spacer } from "./spacer";
@@ -0,0 +1,24 @@
1
+ import type React from "react";
2
+ export type SpacerProps = React.ComponentProps<"div"> & {
3
+ /**
4
+ * A fixed gap, in Tailwind's spacing scale (e.g. `4` = 1rem). Omit for a
5
+ * flexible spacer that grows to fill the remaining space in a flex
6
+ * container instead (the more common use in a flex row/column).
7
+ */
8
+ size?: number;
9
+ };
10
+ /**
11
+ * Adds space between components — a flexible filler by default (`flex-1`),
12
+ * or a fixed gap via `size`.
13
+ *
14
+ * The single reference source for this component (heroui.com/docs/
15
+ * components/spacer) 404'd — this keeps to the minimal, well-established
16
+ * shape of this pattern across UI kits rather than guessing at a richer
17
+ * API that couldn't be verified.
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export declare function Spacer({ size, className, ...props }: SpacerProps): React.JSX.Element;
24
+ //# sourceMappingURL=spacer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../src/components/spacer/spacer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IACtD;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,qBAiBhE"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
3
+ /**
4
+ * Adds space between components — a flexible filler by default (`flex-1`),
5
+ * or a fixed gap via `size`.
6
+ *
7
+ * The single reference source for this component (heroui.com/docs/
8
+ * components/spacer) 404'd — this keeps to the minimal, well-established
9
+ * shape of this pattern across UI kits rather than guessing at a richer
10
+ * API that couldn't be verified.
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function Spacer({ size, className, ...props }) {
17
+ return (_jsx("div", { "aria-hidden": "true", "data-slot": "spacer", className: cn(size === undefined ? "flex-1" : "shrink-0", className), style: size === undefined
18
+ ? undefined
19
+ : {
20
+ width: `calc(var(--spacing) * ${size.toString()})`,
21
+ height: `calc(var(--spacing) * ${size.toString()})`,
22
+ }, ...props }));
23
+ }
@@ -0,0 +1,4 @@
1
+ export type { SpinnerProps, SpinnerVariant } from "./spinner";
2
+ export { Spinner } from "./spinner";
3
+ export type { SpinnerSizeVariants } from "./variants";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/spinner/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { Spinner } from "./spinner";
@@ -0,0 +1,22 @@
1
+ import type React from "react";
2
+ import type { SpinnerSizeVariants } from "./variants";
3
+ export type SpinnerVariant = "default" | "ring" | "bars" | "ellipsis";
4
+ export type SpinnerProps = React.ComponentProps<"span"> & SpinnerSizeVariants & {
5
+ /**
6
+ * @default "default"
7
+ */
8
+ variant?: SpinnerVariant;
9
+ };
10
+ /**
11
+ * An accessible loading indicator, in one of a few visual styles.
12
+ *
13
+ * _Inspired from multiple sources, to make a consistent and reusable component._
14
+ * @see https://www.kibo-ui.com/components/spinner
15
+ * @see https://www.shadcnui-blocks.com/components/spinner
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export declare function Spinner({ variant, size, className, ...props }: SpinnerProps): React.JSX.Element;
22
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/components/spinner/spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACrD,mBAAmB,GAAG;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAmB,EACnB,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,qBAyCd"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Loader2Icon } from "lucide-react";
3
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
4
+ import { spinnerSizeVariants } from "./variants";
5
+ /**
6
+ * An accessible loading indicator, in one of a few visual styles.
7
+ *
8
+ * _Inspired from multiple sources, to make a consistent and reusable component._
9
+ * @see https://www.kibo-ui.com/components/spinner
10
+ * @see https://www.shadcnui-blocks.com/components/spinner
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function Spinner({ variant = "default", size, className, ...props }) {
17
+ const sizeClass = spinnerSizeVariants({ size });
18
+ return (_jsxs("span", { role: "status", "aria-label": "Loading", ...props, children: [variant === "ring" && (_jsx("span", { className: cn(sizeClass, "block animate-spin rounded-full border-2 border-current border-t-transparent", className) })), variant === "bars" && (_jsx("span", { className: cn(sizeClass, "flex items-center gap-0.5", className), children: [0, 150, 300].map((delay) => (_jsx("span", { className: "h-full w-1 animate-pulse rounded-full bg-current", style: { animationDelay: `${delay.toString()}ms` } }, delay))) })), variant === "ellipsis" && (_jsx("span", { className: cn(sizeClass, "flex items-center gap-1", className), children: [0, 150, 300].map((delay) => (_jsx("span", { className: "size-1/4 animate-bounce rounded-full bg-current", style: { animationDelay: `${delay.toString()}ms` } }, delay))) })), variant === "default" && (_jsx(Loader2Icon, { className: cn(sizeClass, "animate-spin", className) }))] }));
19
+ }
@@ -0,0 +1,6 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ export declare const spinnerSizeVariants: (props?: ({
3
+ size?: "default" | "sm" | "lg" | null | undefined;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ export type SpinnerSizeVariants = VariantProps<typeof spinnerSizeVariants>;
6
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/spinner/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,eAAO,MAAM,mBAAmB;;8EAW9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,mBAAmB,CAAC,CAAC"}