@repraze/kernelkit 0.0.0-stage → 0.1.0-alpha.1

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 (584) hide show
  1. package/README.md +41 -2
  2. package/dist/components/accordion.d.ts +13 -0
  3. package/dist/components/accordion.d.ts.map +1 -0
  4. package/dist/components/accordion.js +33 -0
  5. package/dist/components/accordion.js.map +1 -0
  6. package/dist/components/alert-dialog.d.ts +24 -0
  7. package/dist/components/alert-dialog.d.ts.map +1 -0
  8. package/dist/components/alert-dialog.js +49 -0
  9. package/dist/components/alert-dialog.js.map +1 -0
  10. package/dist/components/alert.d.ts +22 -0
  11. package/dist/components/alert.d.ts.map +1 -0
  12. package/dist/components/alert.js +61 -0
  13. package/dist/components/alert.js.map +1 -0
  14. package/dist/components/aspect-ratio.d.ts +10 -0
  15. package/dist/components/aspect-ratio.d.ts.map +1 -0
  16. package/dist/components/aspect-ratio.js +18 -0
  17. package/dist/components/aspect-ratio.js.map +1 -0
  18. package/dist/components/attachment.d.ts +27 -0
  19. package/dist/components/attachment.d.ts.map +1 -0
  20. package/dist/components/attachment.js +76 -0
  21. package/dist/components/attachment.js.map +1 -0
  22. package/dist/components/avatar.d.ts +18 -0
  23. package/dist/components/avatar.d.ts.map +1 -0
  24. package/dist/components/avatar.js +38 -0
  25. package/dist/components/avatar.js.map +1 -0
  26. package/dist/components/badge.d.ts +18 -0
  27. package/dist/components/badge.d.ts.map +1 -0
  28. package/dist/components/badge.js +49 -0
  29. package/dist/components/badge.js.map +1 -0
  30. package/dist/components/breadcrumb.d.ts +11 -0
  31. package/dist/components/breadcrumb.d.ts.map +1 -0
  32. package/dist/components/breadcrumb.js +40 -0
  33. package/dist/components/breadcrumb.js.map +1 -0
  34. package/dist/components/bubble.d.ts +22 -0
  35. package/dist/components/bubble.d.ts.map +1 -0
  36. package/dist/components/bubble.js +72 -0
  37. package/dist/components/bubble.js.map +1 -0
  38. package/dist/components/button-group.d.ts +11 -0
  39. package/dist/components/button-group.d.ts.map +1 -0
  40. package/dist/components/button-group.js +38 -0
  41. package/dist/components/button-group.js.map +1 -0
  42. package/dist/components/button.d.ts +26 -0
  43. package/dist/components/button.d.ts.map +1 -0
  44. package/dist/components/button.js +78 -0
  45. package/dist/components/button.js.map +1 -0
  46. package/dist/components/calendar.d.ts +11 -0
  47. package/dist/components/calendar.d.ts.map +1 -0
  48. package/dist/components/calendar.js +89 -0
  49. package/dist/components/calendar.js.map +1 -0
  50. package/dist/components/callout.d.ts +25 -0
  51. package/dist/components/callout.d.ts.map +1 -0
  52. package/dist/components/callout.js +40 -0
  53. package/dist/components/callout.js.map +1 -0
  54. package/dist/components/card.d.ts +43 -0
  55. package/dist/components/card.d.ts.map +1 -0
  56. package/dist/components/card.js +80 -0
  57. package/dist/components/card.js.map +1 -0
  58. package/dist/components/carousel.d.ts +36 -0
  59. package/dist/components/carousel.d.ts.map +1 -0
  60. package/dist/components/carousel.js +148 -0
  61. package/dist/components/carousel.js.map +1 -0
  62. package/dist/components/chart.d.ts +45 -0
  63. package/dist/components/chart.d.ts.map +1 -0
  64. package/dist/components/chart.js +137 -0
  65. package/dist/components/chart.js.map +1 -0
  66. package/dist/components/checkbox-group.d.ts +9 -0
  67. package/dist/components/checkbox-group.d.ts.map +1 -0
  68. package/dist/components/checkbox-group.js +14 -0
  69. package/dist/components/checkbox-group.js.map +1 -0
  70. package/dist/components/checkbox.d.ts +6 -0
  71. package/dist/components/checkbox.d.ts.map +1 -0
  72. package/dist/components/checkbox.js +27 -0
  73. package/dist/components/checkbox.js.map +1 -0
  74. package/dist/components/code-block.d.ts +29 -0
  75. package/dist/components/code-block.d.ts.map +1 -0
  76. package/dist/components/code-block.js +87 -0
  77. package/dist/components/code-block.js.map +1 -0
  78. package/dist/components/collapsible.d.ts +11 -0
  79. package/dist/components/collapsible.d.ts.map +1 -0
  80. package/dist/components/collapsible.js +21 -0
  81. package/dist/components/collapsible.js.map +1 -0
  82. package/dist/components/combobox.d.ts +26 -0
  83. package/dist/components/combobox.d.ts.map +1 -0
  84. package/dist/components/combobox.js +66 -0
  85. package/dist/components/combobox.js.map +1 -0
  86. package/dist/components/command.d.ts +25 -0
  87. package/dist/components/command.d.ts.map +1 -0
  88. package/dist/components/command.js +48 -0
  89. package/dist/components/command.js.map +1 -0
  90. package/dist/components/context-menu.d.ts +32 -0
  91. package/dist/components/context-menu.d.ts.map +1 -0
  92. package/dist/components/context-menu.js +58 -0
  93. package/dist/components/context-menu.js.map +1 -0
  94. package/dist/components/copy-button.d.ts +21 -0
  95. package/dist/components/copy-button.d.ts.map +1 -0
  96. package/dist/components/copy-button.js +34 -0
  97. package/dist/components/copy-button.js.map +1 -0
  98. package/dist/components/data-table/data-table-utils.d.ts +18 -0
  99. package/dist/components/data-table/data-table-utils.d.ts.map +1 -0
  100. package/dist/components/data-table/data-table-utils.js +92 -0
  101. package/dist/components/data-table/data-table-utils.js.map +1 -0
  102. package/dist/components/data-table/elements/data-table-base.d.ts +24 -0
  103. package/dist/components/data-table/elements/data-table-base.d.ts.map +1 -0
  104. package/dist/components/data-table/elements/data-table-base.js +28 -0
  105. package/dist/components/data-table/elements/data-table-base.js.map +1 -0
  106. package/dist/components/data-table/elements/data-table-body.d.ts +8 -0
  107. package/dist/components/data-table/elements/data-table-body.d.ts.map +1 -0
  108. package/dist/components/data-table/elements/data-table-body.js +16 -0
  109. package/dist/components/data-table/elements/data-table-body.js.map +1 -0
  110. package/dist/components/data-table/elements/data-table-cell.d.ts +12 -0
  111. package/dist/components/data-table/elements/data-table-cell.d.ts.map +1 -0
  112. package/dist/components/data-table/elements/data-table-cell.js +23 -0
  113. package/dist/components/data-table/elements/data-table-cell.js.map +1 -0
  114. package/dist/components/data-table/elements/data-table-filter-row.d.ts +40 -0
  115. package/dist/components/data-table/elements/data-table-filter-row.d.ts.map +1 -0
  116. package/dist/components/data-table/elements/data-table-filter-row.js +117 -0
  117. package/dist/components/data-table/elements/data-table-filter-row.js.map +1 -0
  118. package/dist/components/data-table/elements/data-table-foot.d.ts +9 -0
  119. package/dist/components/data-table/elements/data-table-foot.d.ts.map +1 -0
  120. package/dist/components/data-table/elements/data-table-foot.js +11 -0
  121. package/dist/components/data-table/elements/data-table-foot.js.map +1 -0
  122. package/dist/components/data-table/elements/data-table-head.d.ts +9 -0
  123. package/dist/components/data-table/elements/data-table-head.d.ts.map +1 -0
  124. package/dist/components/data-table/elements/data-table-head.js +11 -0
  125. package/dist/components/data-table/elements/data-table-head.js.map +1 -0
  126. package/dist/components/data-table/elements/data-table-info-row.d.ts +7 -0
  127. package/dist/components/data-table/elements/data-table-info-row.d.ts.map +1 -0
  128. package/dist/components/data-table/elements/data-table-info-row.js +19 -0
  129. package/dist/components/data-table/elements/data-table-info-row.js.map +1 -0
  130. package/dist/components/data-table/elements/data-table-row.d.ts +13 -0
  131. package/dist/components/data-table/elements/data-table-row.d.ts.map +1 -0
  132. package/dist/components/data-table/elements/data-table-row.js +19 -0
  133. package/dist/components/data-table/elements/data-table-row.js.map +1 -0
  134. package/dist/components/data-table/elements/data-table-scroll.d.ts +11 -0
  135. package/dist/components/data-table/elements/data-table-scroll.d.ts.map +1 -0
  136. package/dist/components/data-table/elements/data-table-scroll.js +10 -0
  137. package/dist/components/data-table/elements/data-table-scroll.js.map +1 -0
  138. package/dist/components/data-table/elements/data-table-sort-row.d.ts +28 -0
  139. package/dist/components/data-table/elements/data-table-sort-row.d.ts.map +1 -0
  140. package/dist/components/data-table/elements/data-table-sort-row.js +114 -0
  141. package/dist/components/data-table/elements/data-table-sort-row.js.map +1 -0
  142. package/dist/components/data-table/elements/data-table-title-row.d.ts +11 -0
  143. package/dist/components/data-table/elements/data-table-title-row.d.ts.map +1 -0
  144. package/dist/components/data-table/elements/data-table-title-row.js +16 -0
  145. package/dist/components/data-table/elements/data-table-title-row.js.map +1 -0
  146. package/dist/components/data-table/elements/data-table-virtualized-body.d.ts +10 -0
  147. package/dist/components/data-table/elements/data-table-virtualized-body.d.ts.map +1 -0
  148. package/dist/components/data-table/elements/data-table-virtualized-body.js +38 -0
  149. package/dist/components/data-table/elements/data-table-virtualized-body.js.map +1 -0
  150. package/dist/components/data-table/set-utils.d.ts +41 -0
  151. package/dist/components/data-table/set-utils.d.ts.map +1 -0
  152. package/dist/components/data-table/set-utils.js +97 -0
  153. package/dist/components/data-table/set-utils.js.map +1 -0
  154. package/dist/components/data-table/views/data-table-filter-view.d.ts +18 -0
  155. package/dist/components/data-table/views/data-table-filter-view.d.ts.map +1 -0
  156. package/dist/components/data-table/views/data-table-filter-view.js +63 -0
  157. package/dist/components/data-table/views/data-table-filter-view.js.map +1 -0
  158. package/dist/components/data-table/views/data-table-prop-view.d.ts +297 -0
  159. package/dist/components/data-table/views/data-table-prop-view.d.ts.map +1 -0
  160. package/dist/components/data-table/views/data-table-prop-view.js +44 -0
  161. package/dist/components/data-table/views/data-table-prop-view.js.map +1 -0
  162. package/dist/components/data-table/views/data-table-root-view.d.ts +8 -0
  163. package/dist/components/data-table/views/data-table-root-view.d.ts.map +1 -0
  164. package/dist/components/data-table/views/data-table-root-view.js +18 -0
  165. package/dist/components/data-table/views/data-table-root-view.js.map +1 -0
  166. package/dist/components/data-table/views/data-table-sort-view.d.ts +18 -0
  167. package/dist/components/data-table/views/data-table-sort-view.d.ts.map +1 -0
  168. package/dist/components/data-table/views/data-table-sort-view.js +70 -0
  169. package/dist/components/data-table/views/data-table-sort-view.js.map +1 -0
  170. package/dist/components/data-table/views/data-table-view.d.ts +44 -0
  171. package/dist/components/data-table/views/data-table-view.d.ts.map +1 -0
  172. package/dist/components/data-table/views/data-table-view.js +86 -0
  173. package/dist/components/data-table/views/data-table-view.js.map +1 -0
  174. package/dist/components/data-table.d.ts +20 -0
  175. package/dist/components/data-table.d.ts.map +1 -0
  176. package/dist/components/data-table.js +26 -0
  177. package/dist/components/data-table.js.map +1 -0
  178. package/dist/components/date-picker.d.ts +43 -0
  179. package/dist/components/date-picker.d.ts.map +1 -0
  180. package/dist/components/date-picker.js +45 -0
  181. package/dist/components/date-picker.js.map +1 -0
  182. package/dist/components/dialog.d.ts +24 -0
  183. package/dist/components/dialog.d.ts.map +1 -0
  184. package/dist/components/dialog.js +57 -0
  185. package/dist/components/dialog.js.map +1 -0
  186. package/dist/components/direction.d.ts +2 -0
  187. package/dist/components/direction.d.ts.map +1 -0
  188. package/dist/components/direction.js +3 -0
  189. package/dist/components/direction.js.map +1 -0
  190. package/dist/components/drawer.d.ts +18 -0
  191. package/dist/components/drawer.d.ts.map +1 -0
  192. package/dist/components/drawer.js +84 -0
  193. package/dist/components/drawer.js.map +1 -0
  194. package/dist/components/dropdown-menu.d.ts +45 -0
  195. package/dist/components/dropdown-menu.d.ts.map +1 -0
  196. package/dist/components/dropdown-menu.js +77 -0
  197. package/dist/components/dropdown-menu.js.map +1 -0
  198. package/dist/components/empty.d.ts +15 -0
  199. package/dist/components/empty.d.ts.map +1 -0
  200. package/dist/components/empty.js +44 -0
  201. package/dist/components/empty.js.map +1 -0
  202. package/dist/components/field.d.ts +25 -0
  203. package/dist/components/field.d.ts.map +1 -0
  204. package/dist/components/field.js +72 -0
  205. package/dist/components/field.js.map +1 -0
  206. package/dist/components/file-upload.d.ts +24 -0
  207. package/dist/components/file-upload.d.ts.map +1 -0
  208. package/dist/components/file-upload.js +78 -0
  209. package/dist/components/file-upload.js.map +1 -0
  210. package/dist/components/hero.d.ts +51 -0
  211. package/dist/components/hero.d.ts.map +1 -0
  212. package/dist/components/hero.js +104 -0
  213. package/dist/components/hero.js.map +1 -0
  214. package/dist/components/hover-card.d.ts +6 -0
  215. package/dist/components/hover-card.d.ts.map +1 -0
  216. package/dist/components/hover-card.js +17 -0
  217. package/dist/components/hover-card.js.map +1 -0
  218. package/dist/components/input-group.d.ts +23 -0
  219. package/dist/components/input-group.d.ts.map +1 -0
  220. package/dist/components/input-group.js +86 -0
  221. package/dist/components/input-group.js.map +1 -0
  222. package/dist/components/input-otp.d.ts +13 -0
  223. package/dist/components/input-otp.d.ts.map +1 -0
  224. package/dist/components/input-otp.js +25 -0
  225. package/dist/components/input-otp.js.map +1 -0
  226. package/dist/components/input.d.ts +13 -0
  227. package/dist/components/input.d.ts.map +1 -0
  228. package/dist/components/input.js +29 -0
  229. package/dist/components/input.js.map +1 -0
  230. package/dist/components/item.d.ts +23 -0
  231. package/dist/components/item.d.ts.map +1 -0
  232. package/dist/components/item.js +89 -0
  233. package/dist/components/item.js.map +1 -0
  234. package/dist/components/kbd.d.ts +11 -0
  235. package/dist/components/kbd.d.ts.map +1 -0
  236. package/dist/components/kbd.js +26 -0
  237. package/dist/components/kbd.js.map +1 -0
  238. package/dist/components/label.d.ts +4 -0
  239. package/dist/components/label.d.ts.map +1 -0
  240. package/dist/components/label.js +9 -0
  241. package/dist/components/label.js.map +1 -0
  242. package/dist/components/marker.d.ts +11 -0
  243. package/dist/components/marker.d.ts.map +1 -0
  244. package/dist/components/marker.js +37 -0
  245. package/dist/components/marker.js.map +1 -0
  246. package/dist/components/menubar.d.ts +23 -0
  247. package/dist/components/menubar.d.ts.map +1 -0
  248. package/dist/components/menubar.js +60 -0
  249. package/dist/components/menubar.js.map +1 -0
  250. package/dist/components/message-scroller.d.ts +11 -0
  251. package/dist/components/message-scroller.d.ts.map +1 -0
  252. package/dist/components/message-scroller.js +27 -0
  253. package/dist/components/message-scroller.js.map +1 -0
  254. package/dist/components/message.d.ts +17 -0
  255. package/dist/components/message.d.ts.map +1 -0
  256. package/dist/components/message.js +24 -0
  257. package/dist/components/message.js.map +1 -0
  258. package/dist/components/meter.d.ts +18 -0
  259. package/dist/components/meter.d.ts.map +1 -0
  260. package/dist/components/meter.js +25 -0
  261. package/dist/components/meter.js.map +1 -0
  262. package/dist/components/native-select.d.ts +14 -0
  263. package/dist/components/native-select.d.ts.map +1 -0
  264. package/dist/components/native-select.js +34 -0
  265. package/dist/components/native-select.js.map +1 -0
  266. package/dist/components/navbar.d.ts +11 -0
  267. package/dist/components/navbar.d.ts.map +1 -0
  268. package/dist/components/navbar.js +44 -0
  269. package/dist/components/navbar.js.map +1 -0
  270. package/dist/components/navigation-menu.d.ts +23 -0
  271. package/dist/components/navigation-menu.d.ts.map +1 -0
  272. package/dist/components/navigation-menu.js +51 -0
  273. package/dist/components/navigation-menu.js.map +1 -0
  274. package/dist/components/number-field.d.ts +16 -0
  275. package/dist/components/number-field.d.ts.map +1 -0
  276. package/dist/components/number-field.js +49 -0
  277. package/dist/components/number-field.js.map +1 -0
  278. package/dist/components/page-header.d.ts +13 -0
  279. package/dist/components/page-header.d.ts.map +1 -0
  280. package/dist/components/page-header.js +51 -0
  281. package/dist/components/page-header.js.map +1 -0
  282. package/dist/components/pager.d.ts +14 -0
  283. package/dist/components/pager.d.ts.map +1 -0
  284. package/dist/components/pager.js +36 -0
  285. package/dist/components/pager.js.map +1 -0
  286. package/dist/components/pagination.d.ts +21 -0
  287. package/dist/components/pagination.d.ts.map +1 -0
  288. package/dist/components/pagination.js +29 -0
  289. package/dist/components/pagination.js.map +1 -0
  290. package/dist/components/password-input.d.ts +18 -0
  291. package/dist/components/password-input.d.ts.map +1 -0
  292. package/dist/components/password-input.js +17 -0
  293. package/dist/components/password-input.js.map +1 -0
  294. package/dist/components/password-strength.d.ts +21 -0
  295. package/dist/components/password-strength.d.ts.map +1 -0
  296. package/dist/components/password-strength.js +52 -0
  297. package/dist/components/password-strength.js.map +1 -0
  298. package/dist/components/popover.d.ts +10 -0
  299. package/dist/components/popover.d.ts.map +1 -0
  300. package/dist/components/popover.js +27 -0
  301. package/dist/components/popover.js.map +1 -0
  302. package/dist/components/progress.d.ts +26 -0
  303. package/dist/components/progress.d.ts.map +1 -0
  304. package/dist/components/progress.js +39 -0
  305. package/dist/components/progress.js.map +1 -0
  306. package/dist/components/questionnaire.d.ts +20 -0
  307. package/dist/components/questionnaire.d.ts.map +1 -0
  308. package/dist/components/questionnaire.js +57 -0
  309. package/dist/components/questionnaire.js.map +1 -0
  310. package/dist/components/radio-group.d.ts +8 -0
  311. package/dist/components/radio-group.d.ts.map +1 -0
  312. package/dist/components/radio-group.js +27 -0
  313. package/dist/components/radio-group.js.map +1 -0
  314. package/dist/components/resizable.d.ts +13 -0
  315. package/dist/components/resizable.d.ts.map +1 -0
  316. package/dist/components/resizable.js +24 -0
  317. package/dist/components/resizable.js.map +1 -0
  318. package/dist/components/scroll-area.d.ts +17 -0
  319. package/dist/components/scroll-area.d.ts.map +1 -0
  320. package/dist/components/scroll-area.js +12 -0
  321. package/dist/components/scroll-area.js.map +1 -0
  322. package/dist/components/search-dialog.d.ts +38 -0
  323. package/dist/components/search-dialog.d.ts.map +1 -0
  324. package/dist/components/search-dialog.js +39 -0
  325. package/dist/components/search-dialog.js.map +1 -0
  326. package/dist/components/search-trigger.d.ts +20 -0
  327. package/dist/components/search-trigger.d.ts.map +1 -0
  328. package/dist/components/search-trigger.js +52 -0
  329. package/dist/components/search-trigger.js.map +1 -0
  330. package/dist/components/section.d.ts +30 -0
  331. package/dist/components/section.d.ts.map +1 -0
  332. package/dist/components/section.js +79 -0
  333. package/dist/components/section.js.map +1 -0
  334. package/dist/components/select.d.ts +16 -0
  335. package/dist/components/select.d.ts.map +1 -0
  336. package/dist/components/select.js +38 -0
  337. package/dist/components/select.js.map +1 -0
  338. package/dist/components/separator.d.ts +4 -0
  339. package/dist/components/separator.d.ts.map +1 -0
  340. package/dist/components/separator.js +9 -0
  341. package/dist/components/separator.js.map +1 -0
  342. package/dist/components/sheet.d.ts +16 -0
  343. package/dist/components/sheet.d.ts.map +1 -0
  344. package/dist/components/sheet.js +44 -0
  345. package/dist/components/sheet.js.map +1 -0
  346. package/dist/components/sidebar.d.ts +76 -0
  347. package/dist/components/sidebar.d.ts.map +1 -0
  348. package/dist/components/sidebar.js +289 -0
  349. package/dist/components/sidebar.js.map +1 -0
  350. package/dist/components/site-footer.d.ts +22 -0
  351. package/dist/components/site-footer.d.ts.map +1 -0
  352. package/dist/components/site-footer.js +42 -0
  353. package/dist/components/site-footer.js.map +1 -0
  354. package/dist/components/site-header.d.ts +48 -0
  355. package/dist/components/site-header.d.ts.map +1 -0
  356. package/dist/components/site-header.js +104 -0
  357. package/dist/components/site-header.js.map +1 -0
  358. package/dist/components/site-layout.d.ts +35 -0
  359. package/dist/components/site-layout.d.ts.map +1 -0
  360. package/dist/components/site-layout.js +99 -0
  361. package/dist/components/site-layout.js.map +1 -0
  362. package/dist/components/skeleton.d.ts +6 -0
  363. package/dist/components/skeleton.d.ts.map +1 -0
  364. package/dist/components/skeleton.js +16 -0
  365. package/dist/components/skeleton.js.map +1 -0
  366. package/dist/components/slider.d.ts +4 -0
  367. package/dist/components/slider.d.ts.map +1 -0
  368. package/dist/components/slider.js +11 -0
  369. package/dist/components/slider.js.map +1 -0
  370. package/dist/components/spinner.d.ts +12 -0
  371. package/dist/components/spinner.d.ts.map +1 -0
  372. package/dist/components/spinner.js +26 -0
  373. package/dist/components/spinner.js.map +1 -0
  374. package/dist/components/stat.d.ts +31 -0
  375. package/dist/components/stat.d.ts.map +1 -0
  376. package/dist/components/stat.js +66 -0
  377. package/dist/components/stat.js.map +1 -0
  378. package/dist/components/status-dot.d.ts +25 -0
  379. package/dist/components/status-dot.d.ts.map +1 -0
  380. package/dist/components/status-dot.js +45 -0
  381. package/dist/components/status-dot.js.map +1 -0
  382. package/dist/components/switch.d.ts +17 -0
  383. package/dist/components/switch.d.ts.map +1 -0
  384. package/dist/components/switch.js +49 -0
  385. package/dist/components/switch.js.map +1 -0
  386. package/dist/components/table.d.ts +25 -0
  387. package/dist/components/table.d.ts.map +1 -0
  388. package/dist/components/table.js +45 -0
  389. package/dist/components/table.js.map +1 -0
  390. package/dist/components/tabs.d.ts +18 -0
  391. package/dist/components/tabs.d.ts.map +1 -0
  392. package/dist/components/tabs.js +51 -0
  393. package/dist/components/tabs.js.map +1 -0
  394. package/dist/components/textarea.d.ts +4 -0
  395. package/dist/components/textarea.d.ts.map +1 -0
  396. package/dist/components/textarea.js +10 -0
  397. package/dist/components/textarea.js.map +1 -0
  398. package/dist/components/toast.d.ts +27 -0
  399. package/dist/components/toast.d.ts.map +1 -0
  400. package/dist/components/toast.js +68 -0
  401. package/dist/components/toast.js.map +1 -0
  402. package/dist/components/toc.d.ts +35 -0
  403. package/dist/components/toc.d.ts.map +1 -0
  404. package/dist/components/toc.js +94 -0
  405. package/dist/components/toc.js.map +1 -0
  406. package/dist/components/toggle-group.d.ts +19 -0
  407. package/dist/components/toggle-group.d.ts.map +1 -0
  408. package/dist/components/toggle-group.js +33 -0
  409. package/dist/components/toggle-group.js.map +1 -0
  410. package/dist/components/toggle.d.ts +15 -0
  411. package/dist/components/toggle.d.ts.map +1 -0
  412. package/dist/components/toggle.js +42 -0
  413. package/dist/components/toggle.js.map +1 -0
  414. package/dist/components/toolbar.d.ts +14 -0
  415. package/dist/components/toolbar.d.ts.map +1 -0
  416. package/dist/components/toolbar.js +37 -0
  417. package/dist/components/toolbar.js.map +1 -0
  418. package/dist/components/tooltip.d.ts +7 -0
  419. package/dist/components/tooltip.d.ts.map +1 -0
  420. package/dist/components/tooltip.js +22 -0
  421. package/dist/components/tooltip.js.map +1 -0
  422. package/dist/components/trace.d.ts +20 -0
  423. package/dist/components/trace.d.ts.map +1 -0
  424. package/dist/components/trace.js +32 -0
  425. package/dist/components/trace.js.map +1 -0
  426. package/dist/components/typography.d.ts +37 -0
  427. package/dist/components/typography.d.ts.map +1 -0
  428. package/dist/components/typography.js +140 -0
  429. package/dist/components/typography.js.map +1 -0
  430. package/dist/hooks/use-highlighted-code.d.ts +3 -0
  431. package/dist/hooks/use-highlighted-code.d.ts.map +1 -0
  432. package/dist/hooks/use-highlighted-code.js +50 -0
  433. package/dist/hooks/use-highlighted-code.js.map +1 -0
  434. package/dist/hooks/use-mobile.d.ts +2 -0
  435. package/dist/hooks/use-mobile.d.ts.map +1 -0
  436. package/dist/hooks/use-mobile.js +16 -0
  437. package/dist/hooks/use-mobile.js.map +1 -0
  438. package/dist/lib/color.d.ts +30 -0
  439. package/dist/lib/color.d.ts.map +1 -0
  440. package/dist/lib/color.js +56 -0
  441. package/dist/lib/color.js.map +1 -0
  442. package/dist/lib/highlighter.d.ts +10 -0
  443. package/dist/lib/highlighter.d.ts.map +1 -0
  444. package/dist/lib/highlighter.js +94 -0
  445. package/dist/lib/highlighter.js.map +1 -0
  446. package/dist/lib/recipes.d.ts +30 -0
  447. package/dist/lib/recipes.d.ts.map +1 -0
  448. package/dist/lib/recipes.js +30 -0
  449. package/dist/lib/recipes.js.map +1 -0
  450. package/dist/lib/utils.d.ts +2 -0
  451. package/dist/lib/utils.d.ts.map +1 -0
  452. package/dist/lib/utils.js +2 -0
  453. package/dist/lib/utils.js.map +1 -0
  454. package/dist/provider/index.d.ts +3 -0
  455. package/dist/provider/index.d.ts.map +1 -0
  456. package/dist/provider/index.js +3 -0
  457. package/dist/provider/index.js.map +1 -0
  458. package/dist/provider/theme-provider.d.ts +47 -0
  459. package/dist/provider/theme-provider.d.ts.map +1 -0
  460. package/dist/provider/theme-provider.js +118 -0
  461. package/dist/provider/theme-provider.js.map +1 -0
  462. package/dist/provider/theme.d.ts +42 -0
  463. package/dist/provider/theme.d.ts.map +1 -0
  464. package/dist/provider/theme.js +58 -0
  465. package/dist/provider/theme.js.map +1 -0
  466. package/package.json +145 -5
  467. package/src/components/accordion.tsx +92 -0
  468. package/src/components/alert-dialog.tsx +167 -0
  469. package/src/components/alert.tsx +110 -0
  470. package/src/components/aspect-ratio.tsx +29 -0
  471. package/src/components/attachment.tsx +198 -0
  472. package/src/components/avatar.tsx +115 -0
  473. package/src/components/badge.tsx +75 -0
  474. package/src/components/breadcrumb.tsx +104 -0
  475. package/src/components/bubble.tsx +125 -0
  476. package/src/components/button-group.tsx +75 -0
  477. package/src/components/button.tsx +124 -0
  478. package/src/components/calendar.tsx +204 -0
  479. package/src/components/callout.tsx +131 -0
  480. package/src/components/card.tsx +178 -0
  481. package/src/components/carousel.tsx +329 -0
  482. package/src/components/chart.tsx +332 -0
  483. package/src/components/checkbox-group.tsx +21 -0
  484. package/src/components/checkbox.tsx +39 -0
  485. package/src/components/code-block.tsx +246 -0
  486. package/src/components/collapsible.tsx +47 -0
  487. package/src/components/combobox.tsx +295 -0
  488. package/src/components/command.tsx +174 -0
  489. package/src/components/context-menu.tsx +238 -0
  490. package/src/components/copy-button.tsx +80 -0
  491. package/src/components/data-table/data-table-utils.tsx +125 -0
  492. package/src/components/data-table/elements/data-table-base.tsx +78 -0
  493. package/src/components/data-table/elements/data-table-body.tsx +50 -0
  494. package/src/components/data-table/elements/data-table-cell.tsx +42 -0
  495. package/src/components/data-table/elements/data-table-filter-row.tsx +222 -0
  496. package/src/components/data-table/elements/data-table-foot.tsx +36 -0
  497. package/src/components/data-table/elements/data-table-head.tsx +36 -0
  498. package/src/components/data-table/elements/data-table-info-row.tsx +38 -0
  499. package/src/components/data-table/elements/data-table-row.tsx +58 -0
  500. package/src/components/data-table/elements/data-table-scroll.tsx +33 -0
  501. package/src/components/data-table/elements/data-table-sort-row.tsx +180 -0
  502. package/src/components/data-table/elements/data-table-title-row.tsx +33 -0
  503. package/src/components/data-table/elements/data-table-virtualized-body.tsx +87 -0
  504. package/src/components/data-table/set-utils.ts +103 -0
  505. package/src/components/data-table/views/data-table-filter-view.tsx +75 -0
  506. package/src/components/data-table/views/data-table-prop-view.tsx +55 -0
  507. package/src/components/data-table/views/data-table-root-view.tsx +20 -0
  508. package/src/components/data-table/views/data-table-sort-view.tsx +81 -0
  509. package/src/components/data-table/views/data-table-view.tsx +147 -0
  510. package/src/components/data-table.tsx +30 -0
  511. package/src/components/date-picker.tsx +166 -0
  512. package/src/components/dialog.tsx +158 -0
  513. package/src/components/direction.tsx +3 -0
  514. package/src/components/drawer.tsx +222 -0
  515. package/src/components/dropdown-menu.tsx +267 -0
  516. package/src/components/empty.tsx +97 -0
  517. package/src/components/field.tsx +229 -0
  518. package/src/components/file-upload.tsx +180 -0
  519. package/src/components/hero.tsx +207 -0
  520. package/src/components/hover-card.tsx +44 -0
  521. package/src/components/input-group.tsx +186 -0
  522. package/src/components/input-otp.tsx +82 -0
  523. package/src/components/input.tsx +50 -0
  524. package/src/components/item.tsx +191 -0
  525. package/src/components/kbd.tsx +39 -0
  526. package/src/components/label.tsx +19 -0
  527. package/src/components/marker.tsx +69 -0
  528. package/src/components/menubar.tsx +146 -0
  529. package/src/components/message-scroller.tsx +113 -0
  530. package/src/components/message.tsx +90 -0
  531. package/src/components/meter.tsx +69 -0
  532. package/src/components/native-select.tsx +76 -0
  533. package/src/components/navbar.tsx +55 -0
  534. package/src/components/navigation-menu.tsx +193 -0
  535. package/src/components/number-field.tsx +133 -0
  536. package/src/components/page-header.tsx +63 -0
  537. package/src/components/pager.tsx +70 -0
  538. package/src/components/pagination.tsx +106 -0
  539. package/src/components/password-input.tsx +71 -0
  540. package/src/components/password-strength.tsx +99 -0
  541. package/src/components/popover.tsx +68 -0
  542. package/src/components/progress.tsx +105 -0
  543. package/src/components/questionnaire.tsx +299 -0
  544. package/src/components/radio-group.tsx +43 -0
  545. package/src/components/resizable.tsx +62 -0
  546. package/src/components/scroll-area.tsx +68 -0
  547. package/src/components/search-dialog.tsx +87 -0
  548. package/src/components/search-trigger.tsx +74 -0
  549. package/src/components/section.tsx +110 -0
  550. package/src/components/select.tsx +184 -0
  551. package/src/components/separator.tsx +20 -0
  552. package/src/components/sheet.tsx +116 -0
  553. package/src/components/sidebar.tsx +722 -0
  554. package/src/components/site-footer.tsx +55 -0
  555. package/src/components/site-header.tsx +169 -0
  556. package/src/components/site-layout.tsx +147 -0
  557. package/src/components/skeleton.tsx +19 -0
  558. package/src/components/slider.tsx +46 -0
  559. package/src/components/spinner.tsx +42 -0
  560. package/src/components/stat.tsx +155 -0
  561. package/src/components/status-dot.tsx +94 -0
  562. package/src/components/switch.tsx +70 -0
  563. package/src/components/table.tsx +133 -0
  564. package/src/components/tabs.tsx +99 -0
  565. package/src/components/textarea.tsx +23 -0
  566. package/src/components/toast.tsx +221 -0
  567. package/src/components/toc.tsx +122 -0
  568. package/src/components/toggle-group.tsx +95 -0
  569. package/src/components/toggle.tsx +59 -0
  570. package/src/components/toolbar.tsx +97 -0
  571. package/src/components/tooltip.tsx +57 -0
  572. package/src/components/trace.tsx +143 -0
  573. package/src/components/typography.tsx +205 -0
  574. package/src/hooks/use-highlighted-code.ts +71 -0
  575. package/src/hooks/use-mobile.ts +19 -0
  576. package/src/lib/color.ts +76 -0
  577. package/src/lib/highlighter.tsx +121 -0
  578. package/src/lib/recipes.ts +47 -0
  579. package/src/lib/utils.ts +1 -0
  580. package/src/provider/index.ts +2 -0
  581. package/src/provider/theme-provider.tsx +210 -0
  582. package/src/provider/theme.ts +83 -0
  583. package/src/styles/kernelkit.css +301 -0
  584. package/src/styles/shadcn.css +555 -0
@@ -0,0 +1,99 @@
1
+ "use client";
2
+
3
+ import {cn} from "cn";
4
+
5
+ type PasswordScore = 0 | 1 | 2 | 3 | 4;
6
+
7
+ const LABELS: Record<PasswordScore, string> = {0: "Too weak", 1: "Weak", 2: "Fair", 3: "Good", 4: "Strong"};
8
+
9
+ /** Segment / label color per score: danger → warning → success. Literal strings for Tailwind. */
10
+ const TONE: Record<PasswordScore, string> = {
11
+ 0: "[--c:var(--danger)] [--c-fill:var(--tc-red-fill)]",
12
+ 1: "[--c:var(--danger)] [--c-fill:var(--tc-red-fill)]",
13
+ 2: "[--c:var(--warning)] [--c-fill:var(--tc-yellow-fill)]",
14
+ 3: "[--c:var(--success)] [--c-fill:var(--tc-green-fill)]",
15
+ 4: "[--c:var(--success)] [--c-fill:var(--tc-green-fill)]",
16
+ };
17
+
18
+ const COMMON = new Set(["password", "123456", "12345678", "qwerty", "letmein", "admin", "welcome", "iloveyou"]);
19
+
20
+ /**
21
+ * Tiny, dependency-free strength heuristic (length + character classes + a handful of common passwords).
22
+ * UX guidance only: enforce your real policy on the server.
23
+ */
24
+ function estimateStrength(password: string): PasswordScore {
25
+ if (!password || password.length < 6 || COMMON.has(password.toLowerCase())) {
26
+ return 0;
27
+ }
28
+ const classes = [/[a-z]/, /[A-Z]/, /\d/, /[^a-zA-Z0-9]/].filter((re) => re.test(password)).length;
29
+ let points = 0;
30
+ if (password.length >= 8) {
31
+ points++;
32
+ }
33
+ if (password.length >= 12) {
34
+ points++;
35
+ }
36
+ if (password.length >= 16) {
37
+ points++;
38
+ }
39
+ if (classes >= 2) {
40
+ points++;
41
+ }
42
+ if (classes >= 3) {
43
+ points++;
44
+ }
45
+ if (/(.)\1{2,}/.test(password)) {
46
+ points--;
47
+ }
48
+ return Math.max(1, Math.min(4, points - 1)) as PasswordScore;
49
+ }
50
+
51
+ interface PasswordStrengthProps extends Omit<React.ComponentProps<"div">, "children"> {
52
+ /** 0 (too weak) … 4 (strong). Compute it with `estimateStrength` or a real estimator (zxcvbn). */
53
+ score: number;
54
+ /** Text after "Strength:". Defaults to Too weak / Weak / Fair / Good / Strong. */
55
+ label?: React.ReactNode;
56
+ /** Hide the text row (keep the bar). */
57
+ hideLabel?: boolean;
58
+ /** Render the empty state (no password typed yet): grey segments, no label color. */
59
+ empty?: boolean;
60
+ }
61
+
62
+ /** Segmented 4-step strength bar + label. Presentational: you pass the score. */
63
+ function PasswordStrength({className, score, label, hideLabel, empty, ...props}: PasswordStrengthProps) {
64
+ const s = Math.max(0, Math.min(4, Math.round(score))) as PasswordScore;
65
+ // score 0 still lights the first segment in danger so "too weak" is visible
66
+ const lit = empty ? 0 : Math.max(1, s);
67
+ return (
68
+ <div
69
+ data-slot="password-strength"
70
+ data-score={empty ? undefined : s}
71
+ className={cn("flex flex-col gap-1.5", !empty && TONE[s], className)}
72
+ {...props}
73
+ >
74
+ <div data-slot="password-strength-bar" className="grid grid-cols-4 gap-1" aria-hidden>
75
+ {[1, 2, 3, 4].map((i) => (
76
+ <div
77
+ key={i}
78
+ data-slot="password-strength-segment"
79
+ data-active={i <= lit ? "" : undefined}
80
+ className="h-1 rounded-pill bg-foreground/10 transition-colors duration-150 hc:bg-transparent hc:inset-ring hc:inset-ring-border data-active:bg-(--c-fill) hc:data-active:bg-(--c-fill) hc:data-active:inset-ring-0"
81
+ />
82
+ ))}
83
+ </div>
84
+ {hideLabel ? null : (
85
+ <p data-slot="password-strength-label" aria-live="polite" className="text-xs text-muted-foreground">
86
+ <span>
87
+ Strength:{" "}
88
+ <span className={cn("font-medium", empty ? "text-muted-foreground" : "text-(--c)")}>
89
+ {empty ? "-" : (label ?? LABELS[s])}
90
+ </span>
91
+ </span>
92
+ </p>
93
+ )}
94
+ </div>
95
+ );
96
+ }
97
+
98
+ export {estimateStrength, PasswordStrength};
99
+ export type {PasswordScore, PasswordStrengthProps};
@@ -0,0 +1,68 @@
1
+ "use client";
2
+
3
+ import {Popover as PopoverPrimitive} from "@base-ui/react/popover";
4
+ import {heading, popupMotion, popupSurface} from "@repraze/kernelkit/lib/recipes";
5
+ import {usePortalContainer} from "@repraze/kernelkit/provider";
6
+ import {cn} from "cn";
7
+ import * as React from "react";
8
+
9
+ function Popover({...props}: PopoverPrimitive.Root.Props) {
10
+ return <PopoverPrimitive.Root data-slot="popover" {...props} />;
11
+ }
12
+
13
+ function PopoverTrigger({...props}: PopoverPrimitive.Trigger.Props) {
14
+ return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
15
+ }
16
+
17
+ function PopoverContent({
18
+ className,
19
+ align = "center",
20
+ alignOffset = 0,
21
+ side = "bottom",
22
+ sideOffset = 4,
23
+ ...props
24
+ }: PopoverPrimitive.Popup.Props &
25
+ Pick<PopoverPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
26
+ return (
27
+ <PopoverPrimitive.Portal container={usePortalContainer()}>
28
+ <PopoverPrimitive.Positioner
29
+ align={align}
30
+ alignOffset={alignOffset}
31
+ side={side}
32
+ sideOffset={sideOffset}
33
+ className="isolate z-50"
34
+ >
35
+ <PopoverPrimitive.Popup
36
+ data-slot="popover-content"
37
+ className={cn(
38
+ popupSurface,
39
+ popupMotion,
40
+ "z-50 flex w-72 flex-col gap-3 p-3 text-sm outline-hidden",
41
+ className,
42
+ )}
43
+ {...props}
44
+ />
45
+ </PopoverPrimitive.Positioner>
46
+ </PopoverPrimitive.Portal>
47
+ );
48
+ }
49
+
50
+ function PopoverHeader({className, ...props}: React.ComponentProps<"div">) {
51
+ return <div data-slot="popover-header" className={cn("flex flex-col gap-1 text-sm", className)} {...props} />;
52
+ }
53
+
54
+ function PopoverTitle({className, ...props}: PopoverPrimitive.Title.Props) {
55
+ return <PopoverPrimitive.Title data-slot="popover-title" className={cn(heading, className)} {...props} />;
56
+ }
57
+
58
+ function PopoverDescription({className, ...props}: PopoverPrimitive.Description.Props) {
59
+ return (
60
+ <PopoverPrimitive.Description
61
+ data-slot="popover-description"
62
+ className={cn("text-muted-foreground", className)}
63
+ {...props}
64
+ />
65
+ );
66
+ }
67
+
68
+ export {Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger};
@@ -0,0 +1,105 @@
1
+ "use client";
2
+
3
+ import {Progress as ProgressPrimitive} from "@base-ui/react/progress";
4
+ import {type Color, colorVariants} from "@repraze/kernelkit/lib/color";
5
+ import {cva} from "class-variance-authority";
6
+ import {cn} from "cn";
7
+
8
+ /** Root of a progress or meter: label + value on one row, track below. Sets the color vars. */
9
+ const progressVariants = cva("group/progress flex w-full flex-wrap items-center gap-x-3 gap-y-1.5", {
10
+ variants: {
11
+ color: colorVariants,
12
+ size: {sm: "", default: "", lg: ""},
13
+ },
14
+ defaultVariants: {color: "primary", size: "default"},
15
+ });
16
+
17
+ /** Pill track: a faint wash of the color (reads on card and background); an inset outline in high contrast. */
18
+ const progressTrackClass =
19
+ "relative flex h-1.5 w-full items-center overflow-hidden rounded-pill bg-(--c)/15 group-data-[size=lg]/progress:h-2 group-data-[size=sm]/progress:h-1 hc:bg-transparent hc:inset-ring hc:inset-ring-border";
20
+
21
+ /** Filled part, solid fill tier of the color (§2). */
22
+ const progressIndicatorClass =
23
+ "h-full rounded-pill bg-(--c-fill) transition-[width,background-color] duration-300 ease-out motion-reduce:transition-none";
24
+
25
+ type ProgressSize = "sm" | "default" | "lg";
26
+
27
+ interface ProgressProps extends Omit<ProgressPrimitive.Root.Props, "color"> {
28
+ /** Indicator color. Defaults to primary. */
29
+ color?: Color | null;
30
+ /** Track height: sm `h-1`, default `h-1.5`, lg `h-2`. */
31
+ size?: ProgressSize | null;
32
+ }
33
+
34
+ function Progress({className, children, value, color, size, ...props}: ProgressProps) {
35
+ const resolvedColor = color ?? "primary";
36
+ const resolvedSize = size ?? "default";
37
+ return (
38
+ <ProgressPrimitive.Root
39
+ value={value}
40
+ data-slot="progress"
41
+ data-color={resolvedColor}
42
+ data-size={resolvedSize}
43
+ className={cn(progressVariants({color: resolvedColor, size: resolvedSize}), className)}
44
+ {...props}
45
+ >
46
+ {children}
47
+ <ProgressTrack>
48
+ <ProgressIndicator />
49
+ </ProgressTrack>
50
+ </ProgressPrimitive.Root>
51
+ );
52
+ }
53
+
54
+ function ProgressTrack({className, ...props}: ProgressPrimitive.Track.Props) {
55
+ return (
56
+ <ProgressPrimitive.Track data-slot="progress-track" className={cn(progressTrackClass, className)} {...props} />
57
+ );
58
+ }
59
+
60
+ function ProgressIndicator({className, ...props}: ProgressPrimitive.Indicator.Props) {
61
+ return (
62
+ <ProgressPrimitive.Indicator
63
+ data-slot="progress-indicator"
64
+ className={cn(
65
+ progressIndicatorClass,
66
+ // indeterminate (value null): a third of the track sweeping left to right
67
+ "data-indeterminate:w-2/5 data-indeterminate:animate-indeterminate motion-reduce:data-indeterminate:animate-pulse",
68
+ className,
69
+ )}
70
+ {...props}
71
+ />
72
+ );
73
+ }
74
+
75
+ function ProgressLabel({className, ...props}: ProgressPrimitive.Label.Props) {
76
+ return (
77
+ <ProgressPrimitive.Label
78
+ data-slot="progress-label"
79
+ className={cn("text-sm font-medium", className)}
80
+ {...props}
81
+ />
82
+ );
83
+ }
84
+
85
+ function ProgressValue({className, ...props}: ProgressPrimitive.Value.Props) {
86
+ return (
87
+ <ProgressPrimitive.Value
88
+ data-slot="progress-value"
89
+ className={cn("ms-auto font-mono text-xs text-muted-foreground tabular-nums", className)}
90
+ {...props}
91
+ />
92
+ );
93
+ }
94
+
95
+ export {
96
+ Progress,
97
+ ProgressIndicator,
98
+ progressIndicatorClass,
99
+ ProgressLabel,
100
+ ProgressTrack,
101
+ progressTrackClass,
102
+ ProgressValue,
103
+ progressVariants,
104
+ };
105
+ export type {ProgressProps, ProgressSize};
@@ -0,0 +1,299 @@
1
+ "use client";
2
+
3
+ import {type Button, buttonVariants} from "@repraze/kernelkit/components/button";
4
+ import {fieldSurface, focusRing, heading, invalidRing} from "@repraze/kernelkit/lib/recipes";
5
+ import {Questionnaire as QuestionnairePrimitive} from "@shadcn/react/questionnaire";
6
+ import {cn} from "cn";
7
+ import {CheckIcon} from "lucide-react";
8
+ import * as React from "react";
9
+
10
+ function Questionnaire({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Root>) {
11
+ return (
12
+ <QuestionnairePrimitive.Root
13
+ data-slot="questionnaire"
14
+ className={cn("flex w-full min-w-0 flex-col gap-4", className)}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+
20
+ function QuestionnaireProgress({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Progress>) {
21
+ return (
22
+ <QuestionnairePrimitive.Progress
23
+ data-slot="questionnaire-progress"
24
+ className={cn(
25
+ "min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums",
26
+ className,
27
+ )}
28
+ {...props}
29
+ />
30
+ );
31
+ }
32
+
33
+ function QuestionnaireItem({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Item>) {
34
+ return (
35
+ <QuestionnairePrimitive.Item
36
+ data-slot="questionnaire-item"
37
+ className={cn("flex min-w-0 flex-col gap-4 border-0 p-0 outline-none", className)}
38
+ {...props}
39
+ />
40
+ );
41
+ }
42
+
43
+ function QuestionnaireTitle({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Title>) {
44
+ return (
45
+ <QuestionnairePrimitive.Title
46
+ data-slot="questionnaire-title"
47
+ className={cn(
48
+ heading,
49
+ "text-base leading-snug text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4",
50
+ className,
51
+ )}
52
+ {...props}
53
+ />
54
+ );
55
+ }
56
+
57
+ function QuestionnaireDescription({
58
+ className,
59
+ ...props
60
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Description>) {
61
+ return (
62
+ <QuestionnairePrimitive.Description
63
+ data-slot="questionnaire-description"
64
+ className={cn("text-sm text-pretty text-muted-foreground", className)}
65
+ {...props}
66
+ />
67
+ );
68
+ }
69
+
70
+ function QuestionnaireChoices({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Choices>) {
71
+ return (
72
+ <QuestionnairePrimitive.Choices
73
+ data-slot="questionnaire-choices"
74
+ className={cn("group/questionnaire-choices grid min-w-0 gap-2", className)}
75
+ {...props}
76
+ />
77
+ );
78
+ }
79
+
80
+ function QuestionnaireChoice({
81
+ children,
82
+ className,
83
+ ...props
84
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Choice>) {
85
+ return (
86
+ <QuestionnairePrimitive.Choice
87
+ data-slot="questionnaire-choice"
88
+ className={cn(
89
+ "group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-[color,background-color,border-color,box-shadow] duration-100 outline-none select-none hover:bg-hover",
90
+ "has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50",
91
+ // selected = primary border + indicator, the wash is only a hint (§6)
92
+ "data-checked:border-primary-text data-checked:bg-primary/10",
93
+ "data-invalid:border-danger data-invalid:ring-3 data-invalid:ring-danger/20 dark:data-invalid:ring-danger/40",
94
+ "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50",
95
+ className,
96
+ )}
97
+ {...props}
98
+ >
99
+ <QuestionnairePrimitive.ChoiceInput
100
+ data-slot="questionnaire-choice-input"
101
+ className="absolute inset-0 z-10 size-full cursor-pointer opacity-0"
102
+ />
103
+ <span
104
+ aria-hidden="true"
105
+ data-slot="questionnaire-choice-indicator"
106
+ className="pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-sm border border-input bg-background transition-[background-color,border-color] duration-100 group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-pill group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground bg-field dark:group-data-checked/questionnaire-choice:bg-primary"
107
+ >
108
+ <span
109
+ data-slot="questionnaire-choice-indicator-dot"
110
+ className="hidden size-2 rounded-pill bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
111
+ />
112
+ <CheckIcon
113
+ data-slot="questionnaire-choice-indicator-check"
114
+ className="hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
115
+ />
116
+ </span>
117
+ <QuestionnairePrimitive.ChoiceLabel
118
+ data-slot="questionnaire-choice-label"
119
+ className="flex min-w-0 flex-1 flex-col gap-0.5 leading-snug font-medium"
120
+ >
121
+ {children}
122
+ </QuestionnairePrimitive.ChoiceLabel>
123
+ <QuestionnairePrimitive.ChoiceShortcut
124
+ data-slot="questionnaire-choice-shortcut"
125
+ className="pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-sm border border-border bg-muted font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex"
126
+ />
127
+ </QuestionnairePrimitive.Choice>
128
+ );
129
+ }
130
+
131
+ function QuestionnaireChoiceDescription({className, ...props}: React.ComponentProps<"span">) {
132
+ return (
133
+ <span
134
+ data-slot="questionnaire-choice-description"
135
+ className={cn("font-normal text-muted-foreground", className)}
136
+ {...props}
137
+ />
138
+ );
139
+ }
140
+
141
+ function QuestionnaireInput({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Input>) {
142
+ return (
143
+ <div data-slot="questionnaire-input-wrapper" className="group/questionnaire-input relative w-full min-w-0">
144
+ <QuestionnairePrimitive.Input
145
+ data-slot="questionnaire-input"
146
+ className={cn(
147
+ fieldSurface,
148
+ focusRing,
149
+ invalidRing,
150
+ "h-8 min-h-11 w-full min-w-0 px-2.5 py-1 text-base sm:min-h-0 md:text-sm",
151
+ "selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground",
152
+ className,
153
+ )}
154
+ {...props}
155
+ />
156
+ </div>
157
+ );
158
+ }
159
+
160
+ function QuestionnaireError({className, ...props}: React.ComponentProps<typeof QuestionnairePrimitive.Error>) {
161
+ return (
162
+ <QuestionnairePrimitive.Error
163
+ data-slot="questionnaire-error"
164
+ className={cn("-mt-2 text-sm text-danger", className)}
165
+ {...props}
166
+ />
167
+ );
168
+ }
169
+
170
+ function QuestionnaireActions({className, ...props}: React.ComponentProps<"div">) {
171
+ return (
172
+ <div
173
+ data-slot="questionnaire-actions"
174
+ className={cn(
175
+ "grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8",
176
+ className,
177
+ )}
178
+ {...props}
179
+ />
180
+ );
181
+ }
182
+
183
+ function QuestionnairePrevious({
184
+ children,
185
+ className,
186
+ size = "default",
187
+ variant = "outline",
188
+ ...props
189
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Previous> &
190
+ Pick<React.ComponentProps<typeof Button>, "size" | "variant">) {
191
+ return (
192
+ <QuestionnairePrimitive.Previous
193
+ data-slot="questionnaire-previous"
194
+ data-size={size}
195
+ data-variant={variant}
196
+ className={cn(
197
+ buttonVariants({size, variant}),
198
+ "col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0",
199
+ className,
200
+ )}
201
+ {...props}
202
+ >
203
+ {children ?? "Previous"}
204
+ </QuestionnairePrimitive.Previous>
205
+ );
206
+ }
207
+
208
+ function QuestionnaireSkip({
209
+ children,
210
+ className,
211
+ size = "default",
212
+ variant = "outline",
213
+ ...props
214
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Skip> &
215
+ Pick<React.ComponentProps<typeof Button>, "size" | "variant">) {
216
+ return (
217
+ <QuestionnairePrimitive.Skip
218
+ data-slot="questionnaire-skip"
219
+ data-size={size}
220
+ data-variant={variant}
221
+ className={cn(
222
+ buttonVariants({size, variant}),
223
+ "col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0",
224
+ className,
225
+ )}
226
+ {...props}
227
+ >
228
+ {children ?? "Skip"}
229
+ </QuestionnairePrimitive.Skip>
230
+ );
231
+ }
232
+
233
+ function QuestionnaireNext({
234
+ children,
235
+ className,
236
+ size = "default",
237
+ variant = "default",
238
+ ...props
239
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Next> &
240
+ Pick<React.ComponentProps<typeof Button>, "size" | "variant">) {
241
+ return (
242
+ <QuestionnairePrimitive.Next
243
+ data-slot="questionnaire-next"
244
+ data-size={size}
245
+ data-variant={variant}
246
+ className={cn(
247
+ buttonVariants({size, variant}),
248
+ "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0",
249
+ className,
250
+ )}
251
+ {...props}
252
+ >
253
+ {children ?? "Next"}
254
+ </QuestionnairePrimitive.Next>
255
+ );
256
+ }
257
+
258
+ function QuestionnaireSubmit({
259
+ children,
260
+ className,
261
+ size = "default",
262
+ variant = "default",
263
+ ...props
264
+ }: React.ComponentProps<typeof QuestionnairePrimitive.Submit> &
265
+ Pick<React.ComponentProps<typeof Button>, "size" | "variant">) {
266
+ return (
267
+ <QuestionnairePrimitive.Submit
268
+ data-slot="questionnaire-submit"
269
+ data-size={size}
270
+ data-variant={variant}
271
+ className={cn(
272
+ buttonVariants({size, variant}),
273
+ "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0",
274
+ className,
275
+ )}
276
+ {...props}
277
+ >
278
+ {children ?? "Submit"}
279
+ </QuestionnairePrimitive.Submit>
280
+ );
281
+ }
282
+
283
+ export {
284
+ Questionnaire,
285
+ QuestionnaireActions,
286
+ QuestionnaireChoice,
287
+ QuestionnaireChoiceDescription,
288
+ QuestionnaireChoices,
289
+ QuestionnaireDescription,
290
+ QuestionnaireError,
291
+ QuestionnaireInput,
292
+ QuestionnaireItem,
293
+ QuestionnaireNext,
294
+ QuestionnairePrevious,
295
+ QuestionnaireProgress,
296
+ QuestionnaireSkip,
297
+ QuestionnaireSubmit,
298
+ QuestionnaireTitle,
299
+ };
@@ -0,0 +1,43 @@
1
+ "use client";
2
+
3
+ import {Radio as RadioPrimitive} from "@base-ui/react/radio";
4
+ import {RadioGroup as RadioGroupPrimitive} from "@base-ui/react/radio-group";
5
+ import {focusRing} from "@repraze/kernelkit/lib/recipes";
6
+ import {cva} from "class-variance-authority";
7
+ import {cn} from "cn";
8
+
9
+ /** Radio classes, exported so a custom element can look like a radio. */
10
+ const radioGroupItemVariants = cva([
11
+ "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 cursor-pointer items-center justify-center rounded-pill border border-input bg-transparent",
12
+ "transition-[color,background-color,border-color,box-shadow] duration-100 motion-reduce:transition-none bg-field",
13
+ "after:absolute after:-inset-x-3 after:-inset-y-2",
14
+ focusRing,
15
+ "hover:bg-field-hover",
16
+ "data-checked:border-primary data-checked:bg-primary data-checked:hover:bg-primary/85",
17
+ "aria-invalid:border-danger aria-invalid:ring-3 aria-invalid:ring-danger/20 dark:aria-invalid:ring-danger/40",
18
+ "data-disabled:cursor-not-allowed data-disabled:opacity-50 data-disabled:hover:bg-field group-has-disabled/field:opacity-50",
19
+ "group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input group-has-[:focus-visible]/field-label:data-checked:border-primary",
20
+ ]);
21
+
22
+ function RadioGroup({className, ...props}: RadioGroupPrimitive.Props) {
23
+ return <RadioGroupPrimitive data-slot="radio-group" className={cn("grid w-full gap-2", className)} {...props} />;
24
+ }
25
+
26
+ function RadioGroupItem({className, ...props}: RadioPrimitive.Root.Props) {
27
+ return (
28
+ <RadioPrimitive.Root
29
+ data-slot="radio-group-item"
30
+ className={cn(radioGroupItemVariants(), className)}
31
+ {...props}
32
+ >
33
+ <RadioPrimitive.Indicator
34
+ data-slot="radio-group-indicator"
35
+ className="flex items-center justify-center data-unchecked:hidden"
36
+ >
37
+ <span className="size-1.5 rounded-pill bg-primary-foreground" />
38
+ </RadioPrimitive.Indicator>
39
+ </RadioPrimitive.Root>
40
+ );
41
+ }
42
+
43
+ export {RadioGroup, RadioGroupItem, radioGroupItemVariants};
@@ -0,0 +1,62 @@
1
+ "use client";
2
+
3
+ import {cn} from "cn";
4
+ import {GripVerticalIcon} from "lucide-react";
5
+ import * as ResizablePrimitive from "react-resizable-panels";
6
+
7
+ function ResizablePanelGroup({className, ...props}: ResizablePrimitive.GroupProps) {
8
+ return (
9
+ <ResizablePrimitive.Group
10
+ data-slot="resizable-panel-group"
11
+ className={cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className)}
12
+ {...props}
13
+ />
14
+ );
15
+ }
16
+
17
+ function ResizablePanel({...props}: ResizablePrimitive.PanelProps) {
18
+ return <ResizablePrimitive.Panel data-slot="resizable-panel" {...props} />;
19
+ }
20
+
21
+ /**
22
+ * 1px line between panels with a wider invisible hit area. `data-separator` (set by the library) drives
23
+ * the states: hover washes the hit area, dragging turns the line primary, keyboard focus rings it.
24
+ */
25
+ function ResizableHandle({
26
+ withHandle,
27
+ className,
28
+ ...props
29
+ }: ResizablePrimitive.SeparatorProps & {
30
+ /** Show a grip in the middle of the line. */
31
+ withHandle?: boolean;
32
+ }) {
33
+ return (
34
+ <ResizablePrimitive.Separator
35
+ data-slot="resizable-handle"
36
+ className={cn(
37
+ "group/handle relative flex w-px shrink-0 items-center justify-center bg-border outline-none",
38
+ "transition-[background-color,box-shadow] duration-100 motion-reduce:transition-none",
39
+ // hit area
40
+ "after:absolute after:inset-y-0 after:left-1/2 after:w-2 after:-translate-x-1/2 after:transition-colors",
41
+ "hover:after:bg-hover data-[separator=hover]:after:bg-hover data-[separator=active]:bg-primary-text data-[separator=active]:after:bg-primary/15",
42
+ "focus-visible:bg-ring focus-visible:ring-3 focus-visible:ring-ring/50",
43
+ "data-[separator=disabled]:opacity-50",
44
+ // horizontal line (vertical group)
45
+ "aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:inset-x-0 aria-[orientation=horizontal]:after:top-1/2 aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-2 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90",
46
+ className,
47
+ )}
48
+ {...props}
49
+ >
50
+ {withHandle && (
51
+ <div
52
+ data-slot="resizable-grip"
53
+ className="z-10 flex h-6 w-3 shrink-0 items-center justify-center rounded-sm border border-border bg-background text-muted-foreground transition-colors group-hover/handle:text-foreground group-data-[separator=active]/handle:border-primary-text group-data-[separator=active]/handle:text-primary-text"
54
+ >
55
+ <GripVerticalIcon className="size-2.5" />
56
+ </div>
57
+ )}
58
+ </ResizablePrimitive.Separator>
59
+ );
60
+ }
61
+
62
+ export {ResizableHandle, ResizablePanel, ResizablePanelGroup};