@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,41 @@
1
+ import * as React from "react";
2
+ export interface LoadingState {
3
+ text: string;
4
+ }
5
+ export interface MultiStepLoaderProps {
6
+ /** The sequence of messages to display, one at a time. */
7
+ loadingStates: LoadingState[];
8
+ /** Whether the overlay is shown at all. */
9
+ loading: boolean;
10
+ /**
11
+ * Milliseconds between each state transition.
12
+ * @default 2000
13
+ */
14
+ duration?: number;
15
+ /**
16
+ * Restarts from the first state after reaching the last one.
17
+ * @default true
18
+ */
19
+ loop?: boolean;
20
+ /**
21
+ * Controls which state is active by index, instead of advancing on a
22
+ * timer — pairs with real progress you're already tracking (e.g. one
23
+ * state per upload/step actually completing).
24
+ */
25
+ value?: number;
26
+ className?: string;
27
+ }
28
+ /**
29
+ * A full-screen overlay stepping through a sequence of loading messages —
30
+ * for operations that take long enough that a single spinner reads as
31
+ * stuck (multi-stage setup wizards, long uploads, batch processing).
32
+ *
33
+ * _Inspired from multiple sources, to make a consistent and reusable component._
34
+ * @see https://ui.aceternity.com/components/multi-step-loader
35
+ *
36
+ * @version 0.1.0
37
+ * @author Forth
38
+ * @copyright 2026 Forth
39
+ */
40
+ export declare function MultiStepLoader({ loadingStates, loading, duration, loop, value, className, }: MultiStepLoaderProps): React.JSX.Element | null;
41
+ //# sourceMappingURL=multi-step-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-step-loader.d.ts","sourceRoot":"","sources":["../../../src/components/multi-step-loader/multi-step-loader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,OAAO,EACP,QAAe,EACf,IAAW,EACX,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,4BAuEtB"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CheckIcon } from "lucide-react";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ import { Spinner } from "../spinner";
7
+ /**
8
+ * A full-screen overlay stepping through a sequence of loading messages —
9
+ * for operations that take long enough that a single spinner reads as
10
+ * stuck (multi-stage setup wizards, long uploads, batch processing).
11
+ *
12
+ * _Inspired from multiple sources, to make a consistent and reusable component._
13
+ * @see https://ui.aceternity.com/components/multi-step-loader
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function MultiStepLoader({ loadingStates, loading, duration = 2000, loop = true, value, className, }) {
20
+ const [currentState, setCurrentState] = React.useState(0);
21
+ const isControlled = value !== undefined;
22
+ // Reset to the first state whenever `loading` flips, adjusted during
23
+ // render (React's documented pattern for this) rather than in an effect,
24
+ // which would cause an extra cascading render.
25
+ const [prevLoading, setPrevLoading] = React.useState(loading);
26
+ if (loading !== prevLoading) {
27
+ setPrevLoading(loading);
28
+ if (loading) {
29
+ setCurrentState(0);
30
+ }
31
+ }
32
+ React.useEffect(() => {
33
+ if (!loading || isControlled) {
34
+ return;
35
+ }
36
+ const interval = setInterval(() => {
37
+ setCurrentState((previous) => {
38
+ if (previous === loadingStates.length - 1) {
39
+ return loop ? 0 : previous;
40
+ }
41
+ return previous + 1;
42
+ });
43
+ }, duration);
44
+ return () => {
45
+ clearInterval(interval);
46
+ };
47
+ }, [loading, isControlled, duration, loop, loadingStates.length]);
48
+ if (!loading) {
49
+ return null;
50
+ }
51
+ const activeIndex = value ?? currentState;
52
+ return (_jsx("div", { role: "status", "aria-live": "polite", className: cn("bg-background/80 fixed inset-0 z-50 flex items-center justify-center backdrop-blur-sm", className), children: _jsx("div", { className: "flex flex-col gap-3", children: loadingStates.map((state, index) => (_jsxs("div", { className: cn("flex items-center gap-2 text-sm", index < activeIndex && "text-muted-foreground line-through", index === activeIndex && "text-foreground font-medium", index > activeIndex && "text-muted-foreground/50"), children: [index < activeIndex ? (_jsx(CheckIcon, { className: "size-4 text-green-600" })) : index === activeIndex ? (_jsx(Spinner, { size: "sm" })) : (_jsx("span", { className: "size-4" })), state.text] }, state.text))) }) }));
53
+ }
@@ -0,0 +1,5 @@
1
+ export type { NavbarProps } from "./navbar";
2
+ export { Navbar } from "./navbar";
3
+ export type { NavbarMobileMenuItem, NavbarMobileMenuProps, } from "./navbar-mobile-menu";
4
+ export { NavbarMobileMenu } from "./navbar-mobile-menu";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Navbar } from "./navbar";
2
+ export { NavbarMobileMenu } from "./navbar-mobile-menu";
@@ -0,0 +1,24 @@
1
+ import type * as React from "react";
2
+ export interface NavbarMobileMenuItem {
3
+ label: React.ReactNode;
4
+ href: string;
5
+ }
6
+ export interface NavbarMobileMenuProps {
7
+ items: NavbarMobileMenuItem[];
8
+ /** Extra content rendered below the links (e.g. auth buttons). */
9
+ footer?: React.ReactNode;
10
+ className?: string;
11
+ /** Visible only below this breakpoint's prefix (Tailwind's `md` by default). @default "md" */
12
+ hideFrom?: "sm" | "md" | "lg";
13
+ }
14
+ /**
15
+ * A hamburger-triggered slide-down panel for a `Navbar`'s links on small
16
+ * screens — pairs with `Navbar`, consolidating aceternity's
17
+ * MobileNavToggle/MobileNavMenu pair into one component.
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export declare function NavbarMobileMenu({ items, footer, className, hideFrom, }: NavbarMobileMenuProps): React.JSX.Element;
24
+ //# sourceMappingURL=navbar-mobile-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar-mobile-menu.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/navbar-mobile-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAWpC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,kEAAkE;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAe,GAChB,EAAE,qBAAqB,qBAkCvB"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { MenuIcon } from "lucide-react";
4
+ import { Button } from "@forthtilliath/shadcn-ui/components/button";
5
+ import { Sheet, SheetContent, SheetTrigger, } from "@forthtilliath/shadcn-ui/components/sheet";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ /**
8
+ * A hamburger-triggered slide-down panel for a `Navbar`'s links on small
9
+ * screens — pairs with `Navbar`, consolidating aceternity's
10
+ * MobileNavToggle/MobileNavMenu pair into one component.
11
+ *
12
+ * @version 0.1.0
13
+ * @author Forth
14
+ * @copyright 2026 Forth
15
+ */
16
+ export function NavbarMobileMenu({ items, footer, className, hideFrom = "md", }) {
17
+ return (_jsxs(Sheet, { children: [_jsx(SheetTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", "aria-label": "Toggle menu", className: cn(hideFrom === "sm" && "sm:hidden", hideFrom === "md" && "md:hidden", hideFrom === "lg" && "lg:hidden", className), children: _jsx(MenuIcon, {}) }) }), _jsxs(SheetContent, { side: "top", children: [_jsx("nav", { className: "flex flex-col gap-1 pt-8", children: items.map((item) => (_jsx("a", { href: item.href, className: "hover:bg-accent hover:text-accent-foreground rounded-md px-3 py-2 text-sm", children: item.label }, item.href))) }), footer] })] }));
18
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ export type NavbarProps = React.ComponentProps<"header"> & {
3
+ /**
4
+ * Scroll distance (px) past which the "scrolled" styling (border,
5
+ * blurred background, shrunk width) kicks in.
6
+ * @default 20
7
+ */
8
+ shrinkOffset?: number;
9
+ };
10
+ /**
11
+ * A fixed, floating page header that visually shrinks and gains a
12
+ * background/border once the page scrolls — style the `data-scrolled`
13
+ * attribute to customize the transition (a default is provided).
14
+ *
15
+ * _Inspired from multiple sources, to make a consistent and reusable component._
16
+ * @see https://ui.shadcn.com/docs/components/navigation-menu
17
+ * @see https://ui.aceternity.com/components/resizable-navbar
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export declare function Navbar({ shrinkOffset, className, children, ...props }: NavbarProps): React.JSX.Element;
24
+ //# sourceMappingURL=navbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/navbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IACzD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EACrB,YAAoC,EACpC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,qBA6Bb"}
@@ -0,0 +1,33 @@
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
+ const DEFAULT_SHRINK_OFFSET = 20;
6
+ /**
7
+ * A fixed, floating page header that visually shrinks and gains a
8
+ * background/border once the page scrolls — style the `data-scrolled`
9
+ * attribute to customize the transition (a default is provided).
10
+ *
11
+ * _Inspired from multiple sources, to make a consistent and reusable component._
12
+ * @see https://ui.shadcn.com/docs/components/navigation-menu
13
+ * @see https://ui.aceternity.com/components/resizable-navbar
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function Navbar({ shrinkOffset = DEFAULT_SHRINK_OFFSET, className, children, ...props }) {
20
+ const [scrolled, setScrolled] = React.useState(false);
21
+ React.useEffect(() => {
22
+ function onScroll() {
23
+ // eslint-disable-next-line @eslint-react/set-state-in-effect -- initial synchronous read of the external scroll position, unavoidable for a subscription with no server-renderable equivalent
24
+ setScrolled(window.scrollY > shrinkOffset);
25
+ }
26
+ onScroll();
27
+ window.addEventListener("scroll", onScroll, { passive: true });
28
+ return () => {
29
+ window.removeEventListener("scroll", onScroll);
30
+ };
31
+ }, [shrinkOffset]);
32
+ return (_jsx("header", { "data-slot": "navbar", "data-scrolled": scrolled, className: cn("fixed inset-x-0 top-4 z-50 mx-auto flex w-[calc(100%-2rem)] max-w-5xl items-center justify-between rounded-full border border-transparent px-4 py-2 transition-all duration-300", "data-[scrolled=true]:bg-background/80 data-[scrolled=true]:border-border data-[scrolled=true]:max-w-3xl data-[scrolled=true]:shadow-md data-[scrolled=true]:backdrop-blur-md", className), ...props, children: children }));
33
+ }
@@ -0,0 +1,3 @@
1
+ export type { NotificationCenterProps, NotificationItem, } from "./notification-center";
2
+ export { NotificationCenter } from "./notification-center";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/notification-center/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ export { NotificationCenter } from "./notification-center";
@@ -0,0 +1,28 @@
1
+ import type React from "react";
2
+ export interface NotificationItem {
3
+ id: string;
4
+ title: React.ReactNode;
5
+ description?: React.ReactNode;
6
+ date?: React.ReactNode;
7
+ read?: boolean;
8
+ }
9
+ export interface NotificationCenterProps {
10
+ notifications: NotificationItem[];
11
+ onNotificationClick?: (id: string) => void;
12
+ onMarkAllRead?: () => void;
13
+ emptyMessage?: string;
14
+ className?: string;
15
+ }
16
+ /**
17
+ * A bell-icon trigger with an unread-count badge, opening a popover list
18
+ * of notifications — a presentational shell only (no push/realtime
19
+ * transport), since that's inherently app-specific.
20
+ *
21
+ * @see https://www.rigidui.com/docs/components/notification-center
22
+ *
23
+ * @version 0.1.0
24
+ * @author Forth
25
+ * @copyright 2026 Forth
26
+ */
27
+ export declare function NotificationCenter({ notifications, onNotificationClick, onMarkAllRead, emptyMessage, className, }: NotificationCenterProps): React.JSX.Element;
28
+ //# sourceMappingURL=notification-center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../../../src/components/notification-center/notification-center.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAiC,EACjC,SAAS,GACV,EAAE,uBAAuB,qBA2EzB"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { BellIcon } from "lucide-react";
4
+ import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ import { Badge } from "../badge";
7
+ import { Button } from "../button";
8
+ /**
9
+ * A bell-icon trigger with an unread-count badge, opening a popover list
10
+ * of notifications — a presentational shell only (no push/realtime
11
+ * transport), since that's inherently app-specific.
12
+ *
13
+ * @see https://www.rigidui.com/docs/components/notification-center
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function NotificationCenter({ notifications, onNotificationClick, onMarkAllRead, emptyMessage = "No notifications", className, }) {
20
+ const unreadCount = notifications.filter((notification) => notification.read !== true).length;
21
+ return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "icon", className: "relative", "aria-label": "Notifications", children: [_jsx(BellIcon, {}), unreadCount > 0 && (_jsx(Badge, { variant: "destructive", size: "sm", className: "absolute -top-1 -right-1 size-4 justify-center rounded-full p-0", children: unreadCount > 9 ? "9+" : unreadCount }))] }) }), _jsxs(PopoverContent, { className: cn("w-80 p-0", className), align: "end", children: [_jsxs("div", { className: "flex items-center justify-between border-b p-3", children: [_jsx("p", { className: "text-sm font-medium", children: "Notifications" }), unreadCount > 0 && onMarkAllRead !== undefined && (_jsx("button", { type: "button", onClick: onMarkAllRead, className: "text-muted-foreground hover:text-foreground text-xs", children: "Mark all as read" }))] }), _jsx("div", { className: "max-h-80 overflow-y-auto", children: notifications.length === 0 ? (_jsx("p", { className: "text-muted-foreground p-6 text-center text-sm", children: emptyMessage })) : (notifications.map((notification) => (_jsxs("button", { type: "button", onClick: () => {
22
+ onNotificationClick?.(notification.id);
23
+ }, className: cn("hover:bg-accent flex w-full flex-col gap-0.5 border-b p-3 text-left last:border-0", notification.read !== true && "bg-accent/40"), children: [_jsx("p", { className: "text-sm font-medium", children: notification.title }), notification.description !== undefined && (_jsx("p", { className: "text-muted-foreground text-xs", children: notification.description })), notification.date !== undefined && (_jsx("p", { className: "text-muted-foreground text-xs", children: notification.date }))] }, notification.id)))) })] })] }));
24
+ }
@@ -0,0 +1,3 @@
1
+ export type { NumberInputProps } from "./number-input";
2
+ export { NumberInput } from "./number-input";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/number-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { NumberInput } from "./number-input";
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ export type NumberInputProps = Omit<React.ComponentProps<"input">, "type" | "value" | "defaultValue" | "onChange"> & {
3
+ value?: number;
4
+ defaultValue?: number;
5
+ onValueChange?: (value: number) => void;
6
+ min?: number;
7
+ max?: number;
8
+ step?: number;
9
+ };
10
+ /**
11
+ * A numeric input with increment/decrement stepper buttons, clamped to
12
+ * `min`/`max`.
13
+ *
14
+ * _Inspired from multiple sources, to make a consistent and reusable component._
15
+ * @see https://www.heroui.com/docs/components/number-input
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export declare function NumberInput({ className, value, defaultValue, onValueChange, min, max, step, disabled, ...props }: NumberInputProps): React.JSX.Element;
22
+ //# sourceMappingURL=number-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-input.d.ts","sourceRoot":"","sources":["../../../src/components/number-input/number-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAC7B,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAC/C,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,YAAgB,EAChB,aAAa,EACb,GAAe,EACf,GAAc,EACd,IAAQ,EACR,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,gBAAgB,qBA6DlB"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { MinusIcon, PlusIcon } from "lucide-react";
5
+ import { Input } from "@forthtilliath/shadcn-ui/components/input";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ import { Button } from "../button";
8
+ /**
9
+ * A numeric input with increment/decrement stepper buttons, clamped to
10
+ * `min`/`max`.
11
+ *
12
+ * _Inspired from multiple sources, to make a consistent and reusable component._
13
+ * @see https://www.heroui.com/docs/components/number-input
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function NumberInput({ className, value, defaultValue = 0, onValueChange, min = -Infinity, max = Infinity, step = 1, disabled = false, ...props }) {
20
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
21
+ const current = value ?? uncontrolledValue;
22
+ function commit(next) {
23
+ const clamped = Math.min(max, Math.max(min, next));
24
+ setUncontrolledValue(clamped);
25
+ onValueChange?.(clamped);
26
+ }
27
+ return (_jsxs("div", { "data-slot": "number-input", className: cn("flex w-fit items-stretch", className), children: [_jsx(Button, { type: "button", variant: "outline", size: "icon", disabled: disabled || current <= min, onClick: () => {
28
+ commit(current - step);
29
+ }, "aria-label": "Decrement", className: "rounded-r-none", children: _jsx(MinusIcon, {}) }), _jsx(Input, { type: "number", inputMode: "numeric", value: current, min: min === -Infinity ? undefined : min, max: max === Infinity ? undefined : max, step: step, disabled: disabled, onChange: (e) => {
30
+ const parsed = Number(e.target.value);
31
+ if (!Number.isNaN(parsed)) {
32
+ commit(parsed);
33
+ }
34
+ }, className: "w-16 rounded-none text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", ...props }), _jsx(Button, { type: "button", variant: "outline", size: "icon", disabled: disabled || current >= max, onClick: () => {
35
+ commit(current + step);
36
+ }, "aria-label": "Increment", className: "rounded-l-none", children: _jsx(PlusIcon, {}) })] }));
37
+ }
@@ -0,0 +1,5 @@
1
+ export type { PaginationProps } from "./pagination";
2
+ export { Pagination } from "./pagination";
3
+ export type { PaginationRangeItem, PaginationRangeOptions, } from "./pagination-range";
4
+ export { getPaginationRange } from "./pagination-range";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Pagination } from "./pagination";
2
+ export { getPaginationRange } from "./pagination-range";
@@ -0,0 +1,17 @@
1
+ export interface PaginationRangeOptions {
2
+ page: number;
3
+ totalPages: number;
4
+ /** Pages shown on each side of the current page. @default 1 */
5
+ siblingCount?: number;
6
+ /** Pages always shown at the start and end. @default 1 */
7
+ boundaryCount?: number;
8
+ }
9
+ export type PaginationRangeItem = number | "ellipsis-start" | "ellipsis-end";
10
+ /**
11
+ * Computes which page numbers (and where ellipses go) to render for a
12
+ * given current page / total page count — the piece every shadcn-ui
13
+ * Pagination consumer ends up re-implementing by hand, since the
14
+ * vendored primitives are unopinionated markup only.
15
+ */
16
+ export declare function getPaginationRange({ page, totalPages, siblingCount, boundaryCount, }: PaginationRangeOptions): PaginationRangeItem[];
17
+ //# sourceMappingURL=pagination-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-range.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/pagination-range.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAM7E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,UAAU,EACV,YAAgB,EAChB,aAAiB,GAClB,EAAE,sBAAsB,GAAG,mBAAmB,EAAE,CAgChD"}
@@ -0,0 +1,30 @@
1
+ function range(start, end) {
2
+ return Array.from({ length: end - start + 1 }, (_, i) => start + i);
3
+ }
4
+ /**
5
+ * Computes which page numbers (and where ellipses go) to render for a
6
+ * given current page / total page count — the piece every shadcn-ui
7
+ * Pagination consumer ends up re-implementing by hand, since the
8
+ * vendored primitives are unopinionated markup only.
9
+ */
10
+ export function getPaginationRange({ page, totalPages, siblingCount = 1, boundaryCount = 1, }) {
11
+ const totalVisible = boundaryCount * 2 + siblingCount * 2 + 3;
12
+ if (totalPages <= totalVisible) {
13
+ return range(1, totalPages);
14
+ }
15
+ const leftSibling = Math.max(page - siblingCount, boundaryCount + 2);
16
+ const rightSibling = Math.min(page + siblingCount, totalPages - boundaryCount - 1);
17
+ const items = range(1, boundaryCount);
18
+ items.push(leftSibling > boundaryCount + 2 ? "ellipsis-start" : boundaryCount + 1);
19
+ items.push(...range(leftSibling, rightSibling));
20
+ items.push(rightSibling < totalPages - boundaryCount - 1
21
+ ? "ellipsis-end"
22
+ : totalPages - boundaryCount);
23
+ items.push(...range(totalPages - boundaryCount + 1, totalPages));
24
+ return [...new Set(items)].filter((item) => {
25
+ if (item === "ellipsis-start" || item === "ellipsis-end") {
26
+ return true;
27
+ }
28
+ return item >= 1 && item <= totalPages;
29
+ });
30
+ }
@@ -0,0 +1,26 @@
1
+ import type { PaginationRangeOptions } from "./pagination-range";
2
+ export type PaginationProps = Omit<PaginationRangeOptions, "page"> & {
3
+ /** The current page, 1-indexed. */
4
+ page: number;
5
+ onPageChange: (page: number) => void;
6
+ /** Adds buttons that jump straight to the first/last page. @default false */
7
+ showFirstLast?: boolean;
8
+ disabled?: boolean;
9
+ className?: string;
10
+ };
11
+ /**
12
+ * Navigates between pages of a paginated set, computing the visible page
13
+ * numbers and ellipses itself from `page`/`totalPages` — shadcn-ui's own
14
+ * Pagination is unopinionated markup only and leaves that range
15
+ * computation to every consumer, so this wraps it with the missing piece.
16
+ *
17
+ * _Inspired from multiple sources, to make a consistent and reusable component._
18
+ * @see https://ui.shadcn.com/docs/components/pagination
19
+ * @see https://ktui.io/docs/pagination
20
+ *
21
+ * @version 0.1.0
22
+ * @author Forth
23
+ * @copyright 2026 Forth
24
+ */
25
+ export declare function Pagination({ page, totalPages, siblingCount, boundaryCount, onPageChange, showFirstLast, disabled, className, }: PaginationProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/pagination.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG;IACnE,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAqB,EACrB,QAAgB,EAChB,SAAS,GACV,EAAE,eAAe,+BAyGjB"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronsLeftIcon, ChevronsRightIcon } from "lucide-react";
3
+ import { Pagination as PaginationPrimitive, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@forthtilliath/shadcn-ui/components/pagination";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ import { getPaginationRange } from "./pagination-range";
6
+ /**
7
+ * Navigates between pages of a paginated set, computing the visible page
8
+ * numbers and ellipses itself from `page`/`totalPages` — shadcn-ui's own
9
+ * Pagination is unopinionated markup only and leaves that range
10
+ * computation to every consumer, so this wraps it with the missing piece.
11
+ *
12
+ * _Inspired from multiple sources, to make a consistent and reusable component._
13
+ * @see https://ui.shadcn.com/docs/components/pagination
14
+ * @see https://ktui.io/docs/pagination
15
+ *
16
+ * @version 0.1.0
17
+ * @author Forth
18
+ * @copyright 2026 Forth
19
+ */
20
+ export function Pagination({ page, totalPages, siblingCount, boundaryCount, onPageChange, showFirstLast = false, disabled = false, className, }) {
21
+ const items = getPaginationRange({
22
+ page,
23
+ totalPages,
24
+ siblingCount,
25
+ boundaryCount,
26
+ });
27
+ function goTo(target) {
28
+ if (!disabled && target >= 1 && target <= totalPages && target !== page) {
29
+ onPageChange(target);
30
+ }
31
+ }
32
+ return (_jsx(PaginationPrimitive, { "data-slot": "pagination-root", className: cn(disabled && "pointer-events-none opacity-50", className), children: _jsxs(PaginationContent, { children: [showFirstLast && (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", "aria-label": "Go to first page", size: "icon", "aria-disabled": page <= 1, className: cn(page <= 1 && "pointer-events-none opacity-50"), onClick: (e) => {
33
+ e.preventDefault();
34
+ goTo(1);
35
+ }, children: _jsx(ChevronsLeftIcon, {}) }) })), _jsx(PaginationItem, { children: _jsx(PaginationPrevious, { href: "#", "aria-disabled": page <= 1, className: cn(page <= 1 && "pointer-events-none opacity-50"), onClick: (e) => {
36
+ e.preventDefault();
37
+ goTo(page - 1);
38
+ } }) }), items.map((item) => item === "ellipsis-start" || item === "ellipsis-end" ? (_jsx(PaginationItem, { children: _jsx(PaginationEllipsis, {}) }, item)) : (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", isActive: item === page, onClick: (e) => {
39
+ e.preventDefault();
40
+ goTo(item);
41
+ }, children: item }) }, item))), _jsx(PaginationItem, { children: _jsx(PaginationNext, { href: "#", "aria-disabled": page >= totalPages, className: cn(page >= totalPages && "pointer-events-none opacity-50"), onClick: (e) => {
42
+ e.preventDefault();
43
+ goTo(page + 1);
44
+ } }) }), showFirstLast && (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", "aria-label": "Go to last page", size: "icon", "aria-disabled": page >= totalPages, className: cn(page >= totalPages && "pointer-events-none opacity-50"), onClick: (e) => {
45
+ e.preventDefault();
46
+ goTo(totalPages);
47
+ }, children: _jsx(ChevronsRightIcon, {}) }) }))] }) }));
48
+ }
@@ -0,0 +1,5 @@
1
+ export type { PasswordInputProps } from "./password-input";
2
+ export { PasswordInput } from "./password-input";
3
+ export type { PasswordStrengthMeterProps } from "./password-strength-meter";
4
+ export { PasswordStrengthMeter } from "./password-strength-meter";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PasswordInput } from "./password-input";
2
+ export { PasswordStrengthMeter } from "./password-strength-meter";
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export type PasswordInputProps = Omit<React.ComponentProps<"input">, "type">;
3
+ /**
4
+ * A password `Input` with a show/hide visibility toggle.
5
+ *
6
+ * _Inspired from multiple sources, to make a consistent and reusable component._
7
+ * @see https://ui-x.junwen-k.dev/docs/components/password-input
8
+ * @see https://ktui.io/docs/toggle-password
9
+ *
10
+ * @version 0.1.0
11
+ * @author Forth
12
+ * @copyright 2026 Forth
13
+ */
14
+ export declare function PasswordInput({ className, ...props }: PasswordInputProps): React.JSX.Element;
15
+ //# sourceMappingURL=password-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-input.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/password-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAE7E;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,qBA0BxE"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { EyeIcon, EyeOffIcon } from "lucide-react";
5
+ import { Input } from "@forthtilliath/shadcn-ui/components/input";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ /**
8
+ * A password `Input` with a show/hide visibility toggle.
9
+ *
10
+ * _Inspired from multiple sources, to make a consistent and reusable component._
11
+ * @see https://ui-x.junwen-k.dev/docs/components/password-input
12
+ * @see https://ktui.io/docs/toggle-password
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export function PasswordInput({ className, ...props }) {
19
+ const [visible, setVisible] = React.useState(false);
20
+ return (_jsxs("div", { className: cn("relative", className), children: [_jsx(Input, { type: visible ? "text" : "password", className: "w-full pr-9", ...props }), _jsx("button", { type: "button", onClick: () => {
21
+ setVisible((prev) => !prev);
22
+ }, "aria-label": visible ? "Hide password" : "Show password", className: "text-muted-foreground hover:text-foreground absolute inset-y-0 right-0 flex items-center px-3", children: visible ? (_jsx(EyeOffIcon, { className: "size-4" })) : (_jsx(EyeIcon, { className: "size-4" })) })] }));
23
+ }
@@ -0,0 +1,18 @@
1
+ export interface PasswordStrengthMeterProps {
2
+ password: string;
3
+ className?: string;
4
+ }
5
+ /**
6
+ * A visual strength meter for a password, pairs with `PasswordInput` —
7
+ * scores against four common heuristics (length, case mix, digit, symbol)
8
+ * rather than a full password-strength library, since those checks are
9
+ * what every reference source actually surfaces to the user anyway.
10
+ *
11
+ * @see https://www.rigidui.com/docs/components/strength-meter
12
+ *
13
+ * @version 0.1.0
14
+ * @author Forth
15
+ * @copyright 2026 Forth
16
+ */
17
+ export declare function PasswordStrengthMeter({ password, className, }: PasswordStrengthMeterProps): import("react").JSX.Element;
18
+ //# sourceMappingURL=password-strength-meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-strength-meter.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/password-strength-meter.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAS,GACV,EAAE,0BAA0B,+BA6B5B"}