@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,7 @@
1
+ export type { CollapsibleProps } from "./collapsible";
2
+ export type { CollapsibleContentProps } from "./collapsible";
3
+ export type { CollapsibleTriggerProps } from "./collapsible";
4
+ export { Collapsible } from "./collapsible";
5
+ export { CollapsibleContent } from "./collapsible";
6
+ export { CollapsibleTrigger } from "./collapsible";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/collapsible/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Collapsible } from "./collapsible";
2
+ export { CollapsibleContent } from "./collapsible";
3
+ export { CollapsibleTrigger } from "./collapsible";
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ export interface ColorPickerProps {
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onValueChange?: (value: string) => void;
6
+ disabled?: boolean;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * A color swatch + hex text input, kept in sync — built on the browser's
11
+ * own native `<input type="color">` (a full saturation/hue picker in every
12
+ * modern browser) rather than adding a color-picker library, since the
13
+ * reference sources (hextaui, kibo-ui) don't offer anything the native
14
+ * picker doesn't already provide for a single hex value.
15
+ *
16
+ * @see https://www.hextaui.com/docs/ui/components/color-picker
17
+ * @see https://www.kibo-ui.com/components/color-picker
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export declare function ColorPicker({ value, defaultValue, onValueChange, disabled, className, }: ColorPickerProps): React.JSX.Element;
24
+ //# sourceMappingURL=color-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/color-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAwB,EACxB,aAAa,EACb,QAAgB,EAChB,SAAS,GACV,EAAE,gBAAgB,qBAmDlB"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Input } from "@forthtilliath/shadcn-ui/components/input";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ const HEX_PATTERN = /^#[0-9a-f]{6}$/i;
7
+ /**
8
+ * A color swatch + hex text input, kept in sync — built on the browser's
9
+ * own native `<input type="color">` (a full saturation/hue picker in every
10
+ * modern browser) rather than adding a color-picker library, since the
11
+ * reference sources (hextaui, kibo-ui) don't offer anything the native
12
+ * picker doesn't already provide for a single hex value.
13
+ *
14
+ * @see https://www.hextaui.com/docs/ui/components/color-picker
15
+ * @see https://www.kibo-ui.com/components/color-picker
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export function ColorPicker({ value, defaultValue = "#000000", onValueChange, disabled = false, className, }) {
22
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
23
+ const [textValue, setTextValue] = React.useState(defaultValue);
24
+ const color = value ?? uncontrolledValue;
25
+ function commit(next) {
26
+ setUncontrolledValue(next);
27
+ setTextValue(next);
28
+ onValueChange?.(next);
29
+ }
30
+ return (_jsxs("div", { "data-slot": "color-picker", className: cn("flex items-center gap-2", className), children: [_jsx("label", { className: cn("border-input size-9 shrink-0 overflow-hidden rounded-md border shadow-xs", disabled && "pointer-events-none opacity-50"), style: { backgroundColor: color }, children: _jsx("input", { type: "color", value: color, disabled: disabled, onChange: (e) => {
31
+ commit(e.target.value);
32
+ }, className: "size-full cursor-pointer opacity-0" }) }), _jsx(Input, { value: textValue, disabled: disabled, onChange: (e) => {
33
+ setTextValue(e.target.value);
34
+ if (HEX_PATTERN.test(e.target.value)) {
35
+ commit(e.target.value);
36
+ }
37
+ }, onBlur: () => {
38
+ setTextValue(color);
39
+ }, className: "w-28 font-mono uppercase", maxLength: 7 })] }));
40
+ }
@@ -0,0 +1,3 @@
1
+ export type { ColorPickerProps } from "./color-picker";
2
+ export { ColorPicker } from "./color-picker";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/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 { ColorPicker } from "./color-picker";
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ export interface ComboboxOption {
3
+ label: string;
4
+ value: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface ComboboxProps {
8
+ options: ComboboxOption[];
9
+ value?: string;
10
+ onValueChange?: (value: string) => void;
11
+ placeholder?: string;
12
+ emptyMessage?: string;
13
+ disabled?: boolean;
14
+ className?: string;
15
+ }
16
+ /**
17
+ * An autocomplete/searchable select — shadcn-ui doesn't ship a standalone
18
+ * Combobox primitive, only a docs recipe combining `Popover` + `Command`
19
+ * that every consumer re-assembles by hand. This wraps that recipe into a
20
+ * `options`/`value`/`onValueChange`-driven component.
21
+ *
22
+ * _Inspired from multiple sources, to make a consistent and reusable component._
23
+ * @see https://ui.shadcn.com/docs/components/combobox
24
+ * @see https://www.kibo-ui.com/components/combobox
25
+ *
26
+ * @version 0.1.0
27
+ * @author Forth
28
+ * @copyright 2026 Forth
29
+ */
30
+ export declare function Combobox({ options, value, onValueChange, placeholder, emptyMessage, disabled, className, }: ComboboxProps): React.JSX.Element;
31
+ //# sourceMappingURL=combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAoB/B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAuB,EACvB,YAAkC,EAClC,QAAgB,EAChB,SAAS,GACV,EAAE,aAAa,qBAkDf"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CheckIcon, ChevronsUpDownIcon } from "lucide-react";
5
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@forthtilliath/shadcn-ui/components/command";
6
+ import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
7
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
8
+ import { Button } from "../button";
9
+ /**
10
+ * An autocomplete/searchable select — shadcn-ui doesn't ship a standalone
11
+ * Combobox primitive, only a docs recipe combining `Popover` + `Command`
12
+ * that every consumer re-assembles by hand. This wraps that recipe into a
13
+ * `options`/`value`/`onValueChange`-driven component.
14
+ *
15
+ * _Inspired from multiple sources, to make a consistent and reusable component._
16
+ * @see https://ui.shadcn.com/docs/components/combobox
17
+ * @see https://www.kibo-ui.com/components/combobox
18
+ *
19
+ * @version 0.1.0
20
+ * @author Forth
21
+ * @copyright 2026 Forth
22
+ */
23
+ export function Combobox({ options, value, onValueChange, placeholder = "Select…", emptyMessage = "No results found.", disabled = false, className, }) {
24
+ const [open, setOpen] = React.useState(false);
25
+ const selected = options.find((option) => option.value === value);
26
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: cn("w-full justify-between font-normal", className), children: [selected?.label ?? placeholder, _jsx(ChevronsUpDownIcon, { className: "opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) p-0", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: placeholder }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), _jsx(CommandGroup, { children: options.map((option) => (_jsxs(CommandItem, { value: option.label, disabled: option.disabled, onSelect: () => {
27
+ onValueChange?.(option.value === value ? "" : option.value);
28
+ setOpen(false);
29
+ }, children: [_jsx(CheckIcon, { className: cn("size-4", option.value === value ? "opacity-100" : "opacity-0") }), option.label] }, option.value))) })] })] }) })] }));
30
+ }
@@ -0,0 +1,5 @@
1
+ export type { ComboboxOption, ComboboxProps } from "./combobox";
2
+ export { Combobox } from "./combobox";
3
+ export type { MultiSelectOption, MultiSelectProps } from "./multi-select";
4
+ export { MultiSelect } from "./multi-select";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Combobox } from "./combobox";
2
+ export { MultiSelect } from "./multi-select";
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ import type { ComboboxOption } from "./combobox";
3
+ export type MultiSelectOption = ComboboxOption;
4
+ export interface MultiSelectProps {
5
+ options: MultiSelectOption[];
6
+ value?: string[];
7
+ defaultValue?: string[];
8
+ onValueChange?: (value: string[]) => void;
9
+ placeholder?: string;
10
+ emptyMessage?: string;
11
+ disabled?: boolean;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * `Combobox`'s multi-value sibling — selected options render as removable
16
+ * `Badge` chips in the trigger. Fills the same shadcn-ui gap as `Combobox`
17
+ * (no standalone primitive, just the `Popover`+`Command` recipe), and the
18
+ * gap shadcn-extension's Multi Select fills specifically for multi-value
19
+ * selection.
20
+ *
21
+ * _Inspired from multiple sources, to make a consistent and reusable component._
22
+ * @see https://ui.shadcn.com/docs/components/combobox
23
+ * @see https://shadcn-extension.vercel.app/docs/multi-select
24
+ *
25
+ * @version 0.1.0
26
+ * @author Forth
27
+ * @copyright 2026 Forth
28
+ */
29
+ export declare function MultiSelect({ options, value, defaultValue, onValueChange, placeholder, emptyMessage, disabled, className, }: MultiSelectProps): React.JSX.Element;
30
+ //# sourceMappingURL=multi-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAuB,EACvB,YAAkC,EAClC,QAAgB,EAChB,SAAS,GACV,EAAE,gBAAgB,qBA+GlB"}
@@ -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, ChevronsUpDownIcon } from "lucide-react";
5
+ import { buttonVariants } from "@forthtilliath/shadcn-ui/components/button";
6
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@forthtilliath/shadcn-ui/components/command";
7
+ import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
8
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
9
+ import { Badge } from "../badge";
10
+ /**
11
+ * `Combobox`'s multi-value sibling — selected options render as removable
12
+ * `Badge` chips in the trigger. Fills the same shadcn-ui gap as `Combobox`
13
+ * (no standalone primitive, just the `Popover`+`Command` recipe), and the
14
+ * gap shadcn-extension's Multi Select fills specifically for multi-value
15
+ * selection.
16
+ *
17
+ * _Inspired from multiple sources, to make a consistent and reusable component._
18
+ * @see https://ui.shadcn.com/docs/components/combobox
19
+ * @see https://shadcn-extension.vercel.app/docs/multi-select
20
+ *
21
+ * @version 0.1.0
22
+ * @author Forth
23
+ * @copyright 2026 Forth
24
+ */
25
+ export function MultiSelect({ options, value, defaultValue, onValueChange, placeholder = "Select…", emptyMessage = "No results found.", disabled = false, className, }) {
26
+ const [open, setOpen] = React.useState(false);
27
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? []);
28
+ const selected = value ?? uncontrolledValue;
29
+ function update(next) {
30
+ setUncontrolledValue(next);
31
+ onValueChange?.(next);
32
+ }
33
+ function toggle(optionValue) {
34
+ update(selected.includes(optionValue)
35
+ ? selected.filter((v) => v !== optionValue)
36
+ : [...selected, optionValue]);
37
+ }
38
+ const selectedOptions = options.filter((option) => selected.includes(option.value));
39
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("div", { role: "combobox", tabIndex: disabled ? -1 : 0, "aria-expanded": open, "aria-disabled": disabled, "data-disabled": disabled, onKeyDown: (e) => {
40
+ if (!disabled && (e.key === "Enter" || e.key === " ")) {
41
+ e.preventDefault();
42
+ setOpen((prev) => !prev);
43
+ }
44
+ }, className: cn(buttonVariants({ variant: "outline" }), "h-auto min-h-9 w-full cursor-pointer justify-between font-normal data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50", className), children: [_jsx("span", { className: "flex flex-1 flex-wrap gap-1", children: selectedOptions.length > 0 ? (selectedOptions.map((option) => (_jsx(Badge, { variant: "secondary", dismissible: true, open: true, onClick: (e) => {
45
+ e.stopPropagation();
46
+ }, onOpenChange: () => {
47
+ toggle(option.value);
48
+ }, children: option.label }, option.value)))) : (_jsx("span", { className: "text-muted-foreground font-normal", children: placeholder })) }), _jsx(ChevronsUpDownIcon, { className: "shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) p-0", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: placeholder }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), _jsx(CommandGroup, { children: options.map((option) => (_jsxs(CommandItem, { value: option.label, disabled: option.disabled, onSelect: () => {
49
+ toggle(option.value);
50
+ }, children: [_jsx(CheckIcon, { className: cn("size-4", selected.includes(option.value)
51
+ ? "opacity-100"
52
+ : "opacity-0") }), option.label] }, option.value))) })] })] }) })] }));
53
+ }
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ export interface CommandPaletteItem {
3
+ label: React.ReactNode;
4
+ value: string;
5
+ icon?: React.ReactNode;
6
+ shortcut?: string;
7
+ onSelect: () => void;
8
+ }
9
+ export interface CommandPaletteGroup {
10
+ heading?: string;
11
+ items: CommandPaletteItem[];
12
+ }
13
+ export interface CommandPaletteProps {
14
+ groups: CommandPaletteGroup[];
15
+ open?: boolean;
16
+ onOpenChange?: (open: boolean) => void;
17
+ placeholder?: string;
18
+ emptyMessage?: string;
19
+ /** Key that toggles the palette alongside Cmd/Ctrl. @default "k" */
20
+ shortcutKey?: string;
21
+ }
22
+ /**
23
+ * A global command menu (`Cmd/Ctrl+<key>` to open) — wraps shadcn-ui's own
24
+ * `CommandDialog` (which has no keyboard-shortcut wiring of its own) with
25
+ * that listener plus a flat `groups`/`items` API instead of hand-composing
26
+ * `CommandGroup`/`CommandItem` every time.
27
+ *
28
+ * _Inspired from multiple sources, to make a consistent and reusable component._
29
+ * @see https://ui.shadcn.com/docs/components/command
30
+ * @see https://www.hextaui.com/docs/ui/components/command-menu
31
+ *
32
+ * @version 0.1.0
33
+ * @author Forth
34
+ * @copyright 2026 Forth
35
+ */
36
+ export declare function CommandPalette({ groups, open, onOpenChange, placeholder, emptyMessage, shortcutKey, }: CommandPaletteProps): React.JSX.Element;
37
+ //# sourceMappingURL=command-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/command-palette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,WAAyC,EACzC,YAAkC,EAClC,WAAiB,GAClB,EAAE,mBAAmB,qBA4DrB"}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandShortcut, } from "@forthtilliath/shadcn-ui/components/command";
5
+ /**
6
+ * A global command menu (`Cmd/Ctrl+<key>` to open) — wraps shadcn-ui's own
7
+ * `CommandDialog` (which has no keyboard-shortcut wiring of its own) with
8
+ * that listener plus a flat `groups`/`items` API instead of hand-composing
9
+ * `CommandGroup`/`CommandItem` every time.
10
+ *
11
+ * _Inspired from multiple sources, to make a consistent and reusable component._
12
+ * @see https://ui.shadcn.com/docs/components/command
13
+ * @see https://www.hextaui.com/docs/ui/components/command-menu
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export function CommandPalette({ groups, open, onOpenChange, placeholder = "Type a command or search…", emptyMessage = "No results found.", shortcutKey = "k", }) {
20
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
21
+ const isOpen = open ?? uncontrolledOpen;
22
+ function setOpen(next) {
23
+ setUncontrolledOpen(next);
24
+ onOpenChange?.(next);
25
+ }
26
+ React.useEffect(() => {
27
+ function onKeyDown(e) {
28
+ if (e.key.toLowerCase() === shortcutKey.toLowerCase() &&
29
+ (e.metaKey || e.ctrlKey)) {
30
+ e.preventDefault();
31
+ setOpen(!isOpen);
32
+ }
33
+ }
34
+ document.addEventListener("keydown", onKeyDown);
35
+ return () => {
36
+ document.removeEventListener("keydown", onKeyDown);
37
+ };
38
+ // eslint-disable-next-line @eslint-react/exhaustive-deps, react-hooks/exhaustive-deps -- `setOpen` is a plain function redefined every render; including it would re-register this listener every render instead of only when `isOpen`/`shortcutKey` actually change, which is what its own re-closure over `isOpen` depends on
39
+ }, [isOpen, shortcutKey]);
40
+ return (_jsxs(CommandDialog, { open: isOpen, onOpenChange: setOpen, title: "Command Palette", description: placeholder, children: [_jsx(CommandInput, { placeholder: placeholder }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), groups.map((group, index) => (
41
+ // eslint-disable-next-line @eslint-react/no-array-index-key -- `heading` is optional and not guaranteed unique
42
+ _jsx(CommandGroup, { heading: group.heading, children: group.items.map((item) => (_jsxs(CommandItem, { value: item.value, onSelect: () => {
43
+ item.onSelect();
44
+ setOpen(false);
45
+ }, children: [item.icon, item.label, item.shortcut !== undefined && (_jsx(CommandShortcut, { children: item.shortcut }))] }, item.value))) }, group.heading ?? index)))] })] }));
46
+ }
@@ -0,0 +1,3 @@
1
+ export type { CommandPaletteGroup, CommandPaletteItem, CommandPaletteProps, } from "./command-palette";
2
+ export { CommandPalette } from "./command-palette";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { CommandPalette } from "./command-palette";
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export interface ConfirmOptions {
3
+ title: React.ReactNode;
4
+ description?: React.ReactNode;
5
+ confirmLabel?: string;
6
+ cancelLabel?: string;
7
+ /** Styles the confirm button destructively for irreversible actions. */
8
+ variant?: "default" | "destructive";
9
+ }
10
+ export type ConfirmFn = (options: ConfirmOptions) => Promise<boolean>;
11
+ export interface ConfirmState extends ConfirmOptions {
12
+ resolve: (confirmed: boolean) => void;
13
+ }
14
+ export declare const ConfirmContext: React.Context<ConfirmFn | null>;
15
+ //# sourceMappingURL=confirm-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-context.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/confirm-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACrC;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtE,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,iCAA8C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ export const ConfirmContext = React.createContext(null);
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Provides `useConfirm`, an imperative `await confirm({...})` alternative
4
+ * to hand-wiring an `AlertDialog`'s open state for every yes/no
5
+ * confirmation in an app — mount once near the root.
6
+ *
7
+ * _Inspired from multiple sources, to make a consistent and reusable component._
8
+ * @see https://ui-x.junwen-k.dev/docs/components/confirmer
9
+ * @see https://shuip.xyz/components/confirmation-dialog
10
+ *
11
+ * @version 0.1.0
12
+ * @author Forth
13
+ * @copyright 2026 Forth
14
+ */
15
+ export declare function ConfirmDialogProvider({ children, }: {
16
+ children: React.ReactNode;
17
+ }): React.JSX.Element;
18
+ //# sourceMappingURL=confirm-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/confirm-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAsDA"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@forthtilliath/shadcn-ui/components/alert-dialog";
5
+ import { buttonVariants } from "@forthtilliath/shadcn-ui/components/button";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ import { ConfirmContext } from "./confirm-context";
8
+ /**
9
+ * Provides `useConfirm`, an imperative `await confirm({...})` alternative
10
+ * to hand-wiring an `AlertDialog`'s open state for every yes/no
11
+ * confirmation in an app — mount once near the root.
12
+ *
13
+ * _Inspired from multiple sources, to make a consistent and reusable component._
14
+ * @see https://ui-x.junwen-k.dev/docs/components/confirmer
15
+ * @see https://shuip.xyz/components/confirmation-dialog
16
+ *
17
+ * @version 0.1.0
18
+ * @author Forth
19
+ * @copyright 2026 Forth
20
+ */
21
+ export function ConfirmDialogProvider({ children, }) {
22
+ const [state, setState] = React.useState(null);
23
+ const confirm = React.useCallback((options) => {
24
+ return new Promise((resolve) => {
25
+ setState({ ...options, resolve });
26
+ });
27
+ }, []);
28
+ function settle(confirmed) {
29
+ state?.resolve(confirmed);
30
+ setState(null);
31
+ }
32
+ return (_jsxs(ConfirmContext, { value: confirm, children: [children, _jsx(AlertDialog, { open: state !== null, onOpenChange: (open) => {
33
+ if (!open) {
34
+ settle(false);
35
+ }
36
+ }, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: state?.title }), state?.description !== undefined && (_jsx(AlertDialogDescription, { children: state.description }))] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: state?.cancelLabel ?? "Cancel" }), _jsx(AlertDialogAction, { onClick: () => {
37
+ settle(true);
38
+ }, className: cn(state?.variant === "destructive" &&
39
+ buttonVariants({ variant: "destructive" })), children: state?.confirmLabel ?? "Continue" })] })] }) })] }));
40
+ }
@@ -0,0 +1,4 @@
1
+ export type { ConfirmOptions } from "./confirm-context";
2
+ export { ConfirmDialogProvider } from "./confirm-dialog";
3
+ export { useConfirm } from "./use-confirm";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ConfirmDialogProvider } from "./confirm-dialog";
2
+ export { useConfirm } from "./use-confirm";
@@ -0,0 +1,4 @@
1
+ import type { ConfirmFn } from "./confirm-context";
2
+ /** Must be called from a descendant of `ConfirmDialogProvider`. */
3
+ export declare function useConfirm(): ConfirmFn;
4
+ //# sourceMappingURL=use-confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-confirm.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/use-confirm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,mEAAmE;AACnE,wBAAgB,UAAU,IAAI,SAAS,CAMtC"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { ConfirmContext } from "./confirm-context";
3
+ /** Must be called from a descendant of `ConfirmDialogProvider`. */
4
+ export function useConfirm() {
5
+ const confirm = React.use(ConfirmContext);
6
+ if (confirm === null) {
7
+ throw new Error("useConfirm must be used within a ConfirmDialogProvider");
8
+ }
9
+ return confirm;
10
+ }
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export interface CountAnimationProps {
3
+ value: number;
4
+ /** Animation duration, in ms. @default 1000 */
5
+ duration?: number;
6
+ formatOptions?: Intl.NumberFormatOptions;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * Animates a number counting up (or down) to `value` whenever it changes,
11
+ * via `requestAnimationFrame` — no animation library.
12
+ *
13
+ * @see https://bundui.io/components/count-animation
14
+ *
15
+ * @version 0.1.0
16
+ * @author Forth
17
+ * @copyright 2026 Forth
18
+ */
19
+ export declare function CountAnimation({ value, duration, formatOptions, className, }: CountAnimationProps): React.JSX.Element;
20
+ //# sourceMappingURL=count-animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count-animation.d.ts","sourceRoot":"","sources":["../../../src/components/count-animation/count-animation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAA2B,EAC3B,aAAa,EACb,SAAS,GACV,EAAE,mBAAmB,qBA+BrB"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ const DEFAULT_DURATION = 1000;
5
+ function easeOutCubic(t) {
6
+ return 1 - (1 - t) ** 3;
7
+ }
8
+ /**
9
+ * Animates a number counting up (or down) to `value` whenever it changes,
10
+ * via `requestAnimationFrame` — no animation library.
11
+ *
12
+ * @see https://bundui.io/components/count-animation
13
+ *
14
+ * @version 0.1.0
15
+ * @author Forth
16
+ * @copyright 2026 Forth
17
+ */
18
+ export function CountAnimation({ value, duration = DEFAULT_DURATION, formatOptions, className, }) {
19
+ const [display, setDisplay] = React.useState(value);
20
+ const fromRef = React.useRef(value);
21
+ React.useEffect(() => {
22
+ const from = fromRef.current;
23
+ const start = performance.now();
24
+ let frame;
25
+ function tick(now) {
26
+ const progress = Math.min((now - start) / duration, 1);
27
+ setDisplay(from + (value - from) * easeOutCubic(progress));
28
+ if (progress < 1) {
29
+ frame = requestAnimationFrame(tick);
30
+ }
31
+ else {
32
+ fromRef.current = value;
33
+ }
34
+ }
35
+ frame = requestAnimationFrame(tick);
36
+ return () => {
37
+ cancelAnimationFrame(frame);
38
+ };
39
+ }, [value, duration]);
40
+ const formatted = React.useMemo(() => new Intl.NumberFormat(undefined, formatOptions).format(display), [display, formatOptions]);
41
+ return _jsx("span", { className: className, children: formatted });
42
+ }
@@ -0,0 +1,3 @@
1
+ export type { CountAnimationProps } from "./count-animation";
2
+ export { CountAnimation } from "./count-animation";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/count-animation/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 { CountAnimation } from "./count-animation";
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ export interface DatePickerProps {
3
+ value?: Date;
4
+ defaultValue?: Date;
5
+ onValueChange?: (date: Date | undefined) => void;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ /** Passed through to `Date.prototype.toLocaleDateString`. */
10
+ formatOptions?: Intl.DateTimeFormatOptions;
11
+ }
12
+ /**
13
+ * A single-date picker — shadcn-ui's own docs describe this as a recipe
14
+ * (`Popover` + `Calendar`) rather than shipping a standalone primitive,
15
+ * one every consumer reassembles by hand. Wraps that recipe into a
16
+ * `value`/`onValueChange` component.
17
+ *
18
+ * _Inspired from multiple sources, to make a consistent and reusable component._
19
+ * @see https://ui.shadcn.com/docs/components/date-picker
20
+ * @see https://www.hextaui.com/docs/ui/components/date-picker
21
+ *
22
+ * @version 0.1.0
23
+ * @author Forth
24
+ * @copyright 2026 Forth
25
+ */
26
+ export declare function DatePicker({ value, defaultValue, onValueChange, placeholder, disabled, className, formatOptions, }: DatePickerProps): React.JSX.Element;
27
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker/date-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC;CAC5C;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAA2B,EAC3B,QAAgB,EAChB,SAAS,EACT,aAAsC,GACvC,EAAE,eAAe,qBAuCjB"}